Skip to content
Security
Skill

/detecting-bluetooth-low-energy-attacks

Detects and analyzes Bluetooth Low Energy (BLE) security attacks including sniffing, replay attacks, GATT enumeration

From plugin
sectinel
12200 skills

Claude Code

$ npx -y skills add Mikaru0Mystic/sectinel --skill detecting-bluetooth-low-energy-attacks --agent claude-code

SKILL.md

detecting-bluetooth-low-energy-attacks.SKILL.md
name: detecting-bluetooth-low-energy-attacks
description: 'Detects and analyzes Bluetooth Low Energy (BLE) security attacks including sniffing, replay attacks, GATT enumeration
  abuse, and Man-in-the-Middle interception. Uses Ubertooth One and nRF52840 sniffers for packet capture, the bleak Python
  library for GATT service enumeration, and crackle for BLE encryption cracking. Use when assessing IoT device BLE security,
  monitoring for BLE-based attacks on wireless infrastructure, or performing authorized BLE penetration testing. Activates
  for requests involving BLE security assessment, Ubertooth sniffing, GATT enumeration, or BLE replay detection.

  '
domain: cybersecurity
subdomain: wireless-security
author: mukul975
tags:
- ble
- bluetooth
- ubertooth
- nrf-sniffer
- gatt
- wireless-security
- iot-security
- replay-attack
version: 1.0.0
license: Apache-2.0
nist_csf:
- PR.IR-01
- DE.CM-01
- ID.AM-03

Detecting Bluetooth Low Energy Attacks

Disclaimer

This skill is intended for authorized security testing, penetration testing engagements, CTF competitions, and educational purposes only. Sniffing, intercepting, or manipulating Bluetooth communications without authorization may violate federal wiretapping laws and local regulations. Always obtain explicit written permission before conducting any wireless security assessment.

When to Use

Use this skill when:

  • Performing authorized BLE security assessments of IoT devices, medical devices, or smart locks
  • Monitoring a wireless environment for BLE-based replay attacks, spoofing, or unauthorized enumeration
  • Analyzing BLE packet captures to detect Man-in-the-Middle attacks or pairing exploitation
  • Enumerating GATT services and characteristics to identify insecure read/write permissions on BLE peripherals
  • Assessing BLE encryption strength and testing for crackable pairing exchanges
  • Building BLE intrusion detection capabilities for wireless security monitoring

**Do not use** for intercepting BLE communications without explicit authorization. Do not deploy BLE scanning tools in environments where wireless monitoring is prohibited.

Prerequisites

  • Ubertooth One hardware for passive BLE sniffing, or Nordic nRF52840 USB Dongle with nRF Sniffer firmware
  • Python 3.10+ with pip
  • bleak library: `pip install bleak` (cross-platform BLE GATT client)
  • Wireshark with BLE dissector plugins for packet analysis
  • crackle tool for BLE encryption analysis: built from source at github.com/mikeryan/crackle
  • ubertooth-btle CLI tools: `apt install ubertooth` (Linux) or build from source
  • Bluetooth 4.0+ adapter on the host system for bleak-based scanning
  • Linux recommended for full Ubertooth/nRF sniffer support

Workflow

Step 1: BLE Environment Discovery and Device Scanning

Scan the environment to identify BLE devices and their advertising data:

# Scan for BLE devices using bleak (cross-platform)
python -c "
import asyncio
from bleak import BleakScanner

async def scan():
    devices = await BleakScanner.discover(timeout=10.0)
    for d in devices:
        print(f'{d.address} | RSSI: {d.rssi} | Name: {d.name or \"Unknown\"}')
        for uuid in d.metadata.get('uuids', []):
            print(f'  Service: {uuid}')

asyncio.run(scan())
"

# Passive BLE sniffing with Ubertooth One (promiscuous mode)
ubertooth-btle -p -r capture.pcapng

# Follow a specific BLE connection
ubertooth-btle -f -t AA:BB:CC:DD:EE:FF -r connection.pcapng

# Use nRF Sniffer with Wireshark (via extcap interface)
wireshark -i nRF_Sniffer -k

Step 2: GATT Service and Characteristic Enumeration

Connect to target BLE peripherals and enumerate their GATT profile:

# Enumerate all services, characteristics, and descriptors
python -c "
import asyncio
from bleak import BleakClient

async def enum_gatt(address):
    async with BleakClient(address) as client:
        print(f'Connected: {client.is_connected}')
        for service in client.services:
            print(f'Service: {service.uuid} - {service.description}')
            for char in service.characteristics:
                props = ','.join(char.properties)
                print(f'  Char: {char.uuid} | Props: {props}')
                for desc in char.descriptors:
                    val = await client.read_gatt_descriptor(desc.handle)
                    print(f'    Desc: {desc.uuid} = {val}')

asyncio.run(enum_gatt('AA:BB:CC:DD:EE:FF'))
"

Security-relevant findings during GATT enumeration:

  • Characteristics with `write-without-response` or `write` without authentication
  • Readable characteristics exposing device configuration, credentials, or firmware versions
  • Missing Client Characteristic Configuration Descriptor (CCCD) protection on notification characteristics

Step 3: BLE Packet Capture and Analysis

Capture BLE traffic for offline analysis:

# Capture with Ubertooth in PcapNG format (recommended)
ubertooth-btle -f -r capture.pcapng

# Capture in PCAP/PPI format for crackle compatibility
ubertooth-btle -f -c capture_ppi.pcap

# Analyze capture in Wireshark
wireshark capture.pcapng
# Apply display filter: btle
# Filter connection requests: btle.advertising_header.pdu_type == 0x05
# Filter data packets: btle.data_header

# Extract pairing information with tshark
tshark -r capture.pcapng -Y "btle.control_opcode == 0x01" -T fields \
  -e btle.master_bd_addr -e btle.slave_bd_addr

Step 4: BLE Encryption Analysis with Crackle

Analyze captured pairing exchanges to test encryption strength:

# Crack BLE Legacy Pairing (Just Works / passkey)
crackle -i capture_ppi.pcap -o decrypted.pcap

# Crack with known Temporary Key (TK)
crackle -i capture_ppi.pcap -o decrypted.pcap -l 000000

# Analyze decrypted traffic
wireshark decrypted.pcap

BLE Legacy Pairing with Just Works mode uses a TK of all zeros, making it trivially crackable. Passkey entry uses a 6-digit PIN (000000-999999) that can be brute-forced in under a second. Only BLE Secure Conn

Read more
@mikaru0mystic
Ships withsectinel

Open-source security arsenal for AI coding agents: 784 cybersecurity skills, scanner integrations, and a security MCP for Claude Code, Cursor, opencode, Gemini CLI, Cline, and any agentskills.io agent. Mapped to OWASP, MITRE ATT&CK, NIST CSF, D3FEND, ATLAS.

Stars on GitHub

Momentum

stars in total
12
Star history of Mikaru0Mystic/sectinel on GitHub, a chart by star-history.com

Other skills on sectinel.

More skills from other plugins.

api-security

api-security

Use for authorized security assessment of REST, GraphQL, WebSocket, or SOAP APIs, including discovery, authentication,…

@zhaoxuya520@zhaoxuya520Install Skill
nemoclaw-user-guide

nemoclaw-user-guide

Find official NemoClaw documentation for installation, configuration, operation, or troubleshooting. Also handles requested docs…

@nvidia@nvidiaInstall Skill

Questions about detecting-bluetooth-low-energy-attacks.

Which coding agents can use detecting-bluetooth-low-energy-attacks?
detecting-bluetooth-low-energy-attacks installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.