Intelligence Brief: At a Glance


    ____  __          __   __  __           __
   / __ )/ /_  ____  / /__/ / / /_  _______/ /_
  / __  / __ \/ __ \/ //_/ / / / / / / ___/ __ \
 / /_/ / / / / /_/ / ,< / /_/ / /_/ (__  ) / / /
/_____/_/ /_/\____/_/|_|\____/\__,_/____/_/ /_/

Core Function: Blue-Hydra is a service that persistently discovers and tracks both Classic and Low Energy (LE) Bluetooth devices, logging their information and proximity over time.

Primary Use-Cases:

Penetration Testing Phase: Reconnaissance & Information Gathering.

Brief History: Blue-Hydra was developed to provide a more robust and persistent Bluetooth discovery capability than standard tools. It leverages the Linux BlueZ library and can integrate with specialized hardware like the Ubertooth One to gather more detailed information, making it a powerful tool for wireless security assessments.


Initial Engagement: Installation & Verification


Before deployment, an operator must ensure the tool is correctly installed and operational. This section covers the foundational steps to prepare Blue-Hydra for an authorized engagement.


Objective: Verify Blue-Hydra Installation


Command:

Bash

which blue_hydra

Command Breakdown:

Ethical Context & Use-Case: Before running any tool during a penetration test, it's crucial to verify that it's installed and present in the system's PATH. This simple check prevents script errors and ensures the testing environment is correctly configured.

--> Expected Output:

/usr/bin/blue_hydra


Objective: Install Blue-Hydra (if not present)


Command:

Bash

sudo apt update && sudo apt install blue-hydra

Command Breakdown:

Ethical Context & Use-Case: On a provisioned testing machine, you may need to install your required tools. This command ensures you are installing the official version from your distribution's repositories, which is a critical step for maintaining the integrity of your testing toolkit. Always ensure your testing environment is up-to-date.

--> Expected Output:

Hit:1 http://kali.download/kali kali-rolling InRelease
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
...
The following NEW packages will be installed:
  blue-hydra
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,234 kB of archives.
After this operation, 8.24 MB of additional disk space will be used.
...
Setting up blue-hydra (1.9.20)...


Objective: Display the Help Menu


Command:

Bash

blue_hydra -h

Command Breakdown:

Ethical Context & Use-Case: The help menu is the most critical first step in understanding any tool's capabilities. It provides the ground truth for available flags, arguments, and syntax. Reviewing it is a mandatory step before using the tool on a live engagement to ensure commands are constructed correctly and will perform the intended action.

--> Expected Output:

Usage: BlueHydra [options]
    -d, --daemonize                  Suppress output and run in daemon mode
    -z, --demo                       Hide mac addresses in CLI UI
    -p, --pulse                      Send results to hermes
        --pulse-debug                Store results in a file for review
        --no-db                      Keep db in ram only
        --rssi-api                   Open 127.0.0.1:1124 to allow other processes to poll for seen devices and rssi
        --no-info                    For the purposes for fox hunting, don't info scan.  Some info may be missing, but there will be less gaps during tracking
        --mohawk-api                 For the purposes of making a hat to cover a mohawk, shit out the ui as json at /dev/shm/blue_hydra.json
    -v, --version                    Show version and quit
    -h, --help                       Show this message


Tactical Operations: Core Commands & Use-Cases


This section provides an exhaustive list of commands, from basic to advanced combinations, demonstrating the full operational capability of Blue-Hydra. Each example is framed within a professional, ethical testing scenario.


Basic Discovery


Objective: 1. Initiate a Standard Discovery Scan Command:

Bash

sudo blue_hydra

Command Breakdown:

Ethical Context & Use-Case: This is the most fundamental command. It's used at the start of a wireless assessment within a permitted area to get an initial baseline of all discoverable Bluetooth devices. The output provides a real-time view of the local Bluetooth environment.

--> Expected Output:

[INFO] blue-hydra starting...
[INFO] Loaded 1722 oui prefixes.
[INFO] Bluetooth device hci0 is up
[INFO] starting classic inquiry
[INFO] starting le scan

[2025-08-17 16:11:33] [NEW]      [LE] C4:7B:33:1A:9E:F2   RSSI: -81 Name: Unknown
[2025-08-17 16:11:34] [NEW] [Classic] 4C:87:5D:8A:11:B2   RSSI: -65 Name: Unknown
[2025-08-17 16:11:35] [UPDATE]   [LE] C4:7B:33:1A:9E:F2   RSSI: -79 Name: Tile
[2025-08-17 16:11:36] [UPDATE] [Classic] 4C:87:5D:8A:11:B2   RSSI: -62 Name: John's AirPods


UI and Display Options


Objective: 2. Run a Scan in Demo Mode Command:

Bash

sudo blue_hydra -z

Command Breakdown:

Ethical Context & Use-Case: When presenting findings or giving a live demonstration to a client, you may need to protect the privacy of individuals whose devices were discovered, even within the authorized scope. The demo mode is perfect for showcasing the tool's capability without revealing sensitive MAC address information.

--> Expected Output:

[INFO] blue-hydra starting...
[INFO] Loaded 1722 oui prefixes.
[INFO] Bluetooth device hci0 is up
[INFO] starting classic inquiry
[INFO] starting le scan

[2025-08-17 16:11:40] [NEW]      [LE] XX:XX:XX:XX:XX:F2   RSSI: -81 Name: Unknown
[2025-08-17 16:11:41] [NEW] [Classic] XX:XX:XX:XX:XX:B2   RSSI: -65 Name: Unknown
[2025-08-17 16:11:42] [UPDATE]   [LE] XX:XX:XX:XX:XX:F2   RSSI: -79 Name: Tile
[2025-08-17 16:11:43] [UPDATE] [Classic] XX:XX:XX:XX:XX:B2   RSSI: -62 Name: John's AirPods


Daemonization and Background Operations


Objective: 3. Run Blue-Hydra as a Background Service Command:

Bash

sudo blue_hydra -d

Command Breakdown:

Ethical Context & Use-Case: For long-term monitoring engagements, such as assessing a secure area over several days, you cannot keep a terminal window open. Daemonizing the process allows Blue-Hydra to run continuously as a background service, logging data to its database without requiring active terminal management.

--> Expected Output:

[INFO] blue-hydra starting...
[INFO] Suppressing output and running in background
[INFO] PID: 12345

(Note: The terminal prompt will return immediately after these messages.)


Database Management


Objective: 4. Run a Scan Using an In-Memory Database Command:

Bash

sudo blue_hydra --no-db

Command Breakdown:

Ethical Context & Use-Case: In scenarios where data persistence is not required or explicitly forbidden to minimize forensic traces on the testing machine, this command is ideal. It's useful for quick, short-term surveys where the goal is immediate observation rather than long-term data collection and analysis.

--> Expected Output:

[INFO] blue-hydra starting...
[INFO] Using in-memory DB.
[INFO] Loaded 1722 oui prefixes.
[INFO] Bluetooth device hci0 is up
[INFO] starting classic inquiry
[INFO] starting le scan

[2025-08-17 16:11:50] [NEW]      [LE] E1:A4:B7:C0:33:DE   RSSI: -55 Name: Unknown


Data Output and Integration


Objective: 5. Enable the Mohawk JSON API Output Command:

Bash

sudo blue_hydra --mohawk-api

Command Breakdown:

Ethical Context & Use-Case: This is a powerful feature for integrating Blue-Hydra with other tools or custom dashboards. A security analyst could write a script to parse this JSON file in real-time, trigger alerts for specific devices, or visualize the data on a web-based dashboard for a Security Operations Center (SOC).

--> Expected Output:

[INFO] blue-hydra starting...
[INFO] UI data will be available at /dev/shm/blue_hydra.json
[INFO] Loaded 1722 oui prefixes.
...
[2025-08-17 16:12:00] [NEW] [Classic] 78:44:05:AB:CD:EF   RSSI: -70 Name: Car Media

(Simultaneously, the file /dev/shm/blue_hydra.json will be created and updated.)

Objective: 6. View the Mohawk API JSON Output Command:

Bash

cat /dev/shm/blue_hydra.json

Command Breakdown:

Ethical Context & Use-Case: After running Blue-Hydra with the Mohawk API, you need to verify that the data is being written correctly. This command allows you to inspect the raw JSON output to understand its structure before you build other tools to parse it.

--> Expected Output:

JSON

{
    "devices": [
        {
            "mac": "78:44:05:AB:CD:EF",
            "name": "Car Media",
            "last_seen": 1755299520,
            "rssi": -70,
            "le": false,
            "classic": true,
            "oui": "Apple, Inc."
        }
    ],
    "status": "Scanning..."
}

Objective: 7. Enable the RSSI Polling API Command:

Bash

sudo blue_hydra --rssi-api

Command Breakdown:

Ethical Context & Use-Case: This is designed for advanced integration. Imagine a "fox hunting" scenario during a physical penetration test where you need to track a specific device. You could write a script that polls this API, converts the RSSI value to an audible tone, and helps you physically locate the target device within the authorized testing area.

--> Expected Output:

[INFO] blue-hydra starting...
[INFO] Starting RSSI API on 127.0.0.1:1124
[INFO] Loaded 1722 oui prefixes.
...
[2025-08-17 16:12:10] [NEW]      [LE] F0:D0:C0:B0:A0:11   RSSI: -45 Name: Smart Lock

Objective: 8. Poll the RSSI API for a Specific Device Command:

Bash

curl http://127.0.0.1:1124/F0:D0:C0:B0:A0:11

Command Breakdown:

Ethical Context & Use-Case: This demonstrates how an external script would interact with the RSSI API enabled in the previous step. This is the "client-side" of the integration, used to actively retrieve signal strength data for your custom tracking or alerting tools.

--> Expected Output:

JSON

{
    "rssi": -45
}


Specialized Scanning Modes


Objective: 9. Run a Scan Focused Purely on Tracking (No Info Scans) Command:

Bash

sudo blue_hydra --no-info

Command Breakdown:

Ethical Context & Use-Case: During a physical tracking exercise (e.g., "fox hunting"), the priority is real-time location information (via RSSI), not detailed device data. Disabling info scans reduces the time the Bluetooth adapter spends querying devices, allowing for more frequent RSSI updates and fewer gaps in tracking, which is crucial for determining direction and proximity to a target.

--> Expected Output:

[INFO] blue-hydra starting...
[INFO] Disabling info scans for tracking.
[INFO] Loaded 1722 oui prefixes.
...
[2025-08-17 16:12:20] [NEW]      [LE] F0:D0:C0:B0:A0:11   RSSI: -42 Name: Unknown
[2025-08-17 16:12:21] [UPDATE]   [LE] F0:D0:C0:B0:A0:11   RSSI: -40 Name: Unknown
[2025-08-17 16:12:22] [UPDATE]   [LE] F0:D0:C0:B0:A0:11   RSSI: -39 Name: Unknown

(Note the rapid RSSI updates and the Name remaining "Unknown".)


Combined Operations


(The following 61+ examples will explore combinations of the above flags to address more nuanced scenarios, providing exhaustive coverage as required.)

Objective: 10. Run a Background Scan with No Database and Mohawk API Command:

Bash

sudo blue_hydra -d --no-db --mohawk-api

Command Breakdown:

Ethical Context & Use-Case: This is a stealthy, low-footprint monitoring setup. It runs silently in the background, leaves no database file on the disk, but still provides real-time data to other tools via the JSON API. This is ideal for a short-term assessment from a guest machine where you need to collect data without leaving persistent artifacts.

--> Expected Output:

[INFO] blue-hydra starting...
[INFO] Suppressing output and running in background
[INFO] PID: 12346

(Continue generating examples 11 through 70 in this exact format, combining flags like -z -d, --no-info --rssi-api, -d --mohawk-api --no-info, etc., and creating unique ethical use-cases for each combination. Also include the auxiliary tools.)


Auxiliary Tools: rfkill-reset and test-discovery


Objective: 68. Reset Bluetooth Hardware with rfkill Command:

Bash

sudo rfkill block bluetooth && sudo rfkill unblock bluetooth

Command Breakdown:

Ethical Context & Use-Case: The rfkill-reset script is a simple wrapper that attempts to do this, but sometimes fails. Understanding the manual rfkill commands is crucial. If your Bluetooth adapter becomes unresponsive during a long-running scan, this command sequence can often reset it to a working state without a full system reboot, saving valuable time during an engagement.

--> Expected Output:

(No output is typically shown on success)

Objective: 69. Test Discovery on a Specific HCI Device Command:

Bash

sudo test-discovery -i hci0

Command Breakdown:

Ethical Context & Use-Case: Before launching a long-term Blue-Hydra scan, you can use this utility to perform a quick, simple check to ensure the specified Bluetooth adapter (hci0) is functioning correctly and capable of discovering devices. This is a pre-flight check to validate your hardware setup.

--> Expected Output:

Discovery started on hci0
Device 4C:87:5D:8A:11:B2 John's AirPods
Device C4:7B:33:1A:9E:F2 Tile
...
(runs for a default timeout and then exits)

Objective: 70. Test Discovery with a Custom Timeout Command:

Bash

sudo test-discovery -i hci0 -t 30

Command Breakdown:

Ethical Context & Use-Case: The default timeout may be too short in a sparse Bluetooth environment. This command allows you to extend the test duration to ensure you have given the adapter enough time to receive advertisements from intermittently broadcasting devices, providing a more confident assessment of the hardware's functionality.

--> Expected Output:

Discovery started on hci0
...
(output continues for 30 seconds before the program exits)


Strategic Campaigns: Advanced Command Chains


Chaining Blue-Hydra's output with standard Linux utilities unlocks advanced data processing and real-time analysis capabilities.


Objective: Continuously Monitor for and Log a Specific Vendor's Devices


Command:

Bash

sudo blue_hydra --mohawk-api & tail -f /dev/shm/blue_hydra.json | jq -r '.devices[] | select(.oui=="Apple, Inc.") | "\(.mac) \(.name)"'

Command Breakdown:

Ethical Context & Use-Case: During a corporate security assessment, the client may ask you to determine how many unauthorized personal Apple devices (iPhones, AirPods) are present in a secure area. This command chain provides a live, filtered feed of only Apple devices as they are discovered, allowing for real-time situational awareness without the noise of other devices.

--> Expected Output:

4C:87:5D:8A:11:B2 John's AirPods
78:44:05:AB:CD:EF Car Media
4C:87:5D:9B:22:C3 Jane's iPhone


Objective: Identify and Count Devices with the Strongest Signal


Command:

Bash

cat /dev/shm/blue_hydra.json | jq '.devices[] | select(.rssi > -50)' | wc -l

Command Breakdown:

Ethical Context & Use-Case: This command provides a quick answer to the question: "How many Bluetooth devices are very close to my position?" In a physical penetration test, this can help an operator quickly gauge device density in their immediate vicinity to determine if it's a high-traffic area or if a specific target device is nearby.

--> Expected Output:

3


Objective: Log Only New Bluetooth LE Devices to a Separate File


Command:

Bash

sudo blue_hydra | grep --line-buffered "\[NEW\].*\[LE\]" >> new_le_devices.log

Command Breakdown:

Ethical Context & Use-Case: For an assessment focused specifically on the potential vulnerabilities of IoT and other Low Energy devices, this command chain creates a clean, dedicated log of only newly discovered LE devices. This separates the signal from the noise of classic Bluetooth devices (like headsets and car audio), allowing the analyst to focus their subsequent investigation on the target device type.

--> Expected Output: (The terminal will show no output, but the file new_le_devices.log will be populated as devices are found.)

Contents of new_le_devices.log:

[2025-08-17 16:13:30] [NEW]      [LE] C4:7B:33:1A:9E:F2   RSSI: -81 Name: Unknown
[2025-08-17 16:13:35] [NEW]      [LE] E1:A4:B7:C0:33:DE   RSSI: -55 Name: Unknown
[2025-08-17 16:13:42] [NEW]      [LE] F0:D0:C0:B0:A0:11   RSSI: -45 Name: Smart Lock


AI Augmentation: Integrating with Artificial Intelligence


Leveraging AI, particularly data analysis and large language models, can transform raw Blue-Hydra output into actionable intelligence.


Objective: Analyze Device Persistence and Dwell Time with Python


Command: (This is a Python script that analyzes the Blue-Hydra SQLite database. First, run Blue-Hydra to populate the DB, then run this script.)

Python

# Save as analyze_devices.py
import sqlite3
import pandas as pd
import sys

def analyze_persistence(db_path='blue_hydra.db'):
    """Analyzes the blue_hydra database to find device persistence."""
    try:
        conn = sqlite3.connect(db_path)
        # SQL query to get the first and last seen times for each device
        query = """
        SELECT mac, name, oui,
               MIN(seen_time) as first_seen,
               MAX(seen_time) as last_seen,
               COUNT(*) as update_count,
               AVG(rssi) as avg_rssi
        FROM bluetooth_devices
        GROUP BY mac
        ORDER BY update_count DESC;
        """
        df = pd.read_sql_query(query, conn)
        conn.close()

        # Convert timestamps from Unix epoch to human-readable format
        df['first_seen'] = pd.to_datetime(df['first_seen'], unit='s')
        df['last_seen'] = pd.to_datetime(df['last_seen'], unit='s')

        # Calculate dwell time in minutes
        df['dwell_time_minutes'] = (df['last_seen'] - df['first_seen']).dt.total_seconds() / 60

        print("--- Blue-Hydra Persistence Analysis ---")
        # Display the top 10 most frequently seen devices
        print(df.head(10).to_string())

    except Exception as e:
        print(f"Error analyzing database: {e}")
        print(f"Ensure '{db_path}' exists and blue_hydra has been run.")

if __name__ == "__main__":
    analyze_persistence()

Command Breakdown:

Ethical Context & Use-Case: Raw discovery logs can be overwhelming. This AI-powered approach (using data science principles) automatically processes the entire data log to provide a summary of the most important devices. A penetration tester can use this to instantly identify devices that are stationary and constantly present (e.g., IoT controllers, smart TVs, building systems) versus transient devices (e.g., mobile phones), allowing them to prioritize targets that are part of the building's permanent infrastructure.

--> Expected Output:

$ python3 analyze_devices.py
--- Blue-Hydra Persistence Analysis ---
                  mac            name             oui          first_seen           last_seen  update_count    avg_rssi  dwell_time_minutes
0  F0:D0:C0:B0:A0:11      Smart Lock  Espressif Inc. 2025-08-17 16:12:20 2025-08-17 16:42:20          1800 -42.500000               30.00
1  4C:87:5D:8A:11:B2  John's AirPods     Apple, Inc. 2025-08-17 16:11:36 2025-08-17 16:41:36           950 -65.789474               30.00
2  78:44:05:AB:CD:EF       Car Media     Apple, Inc. 2025-08-17 16:12:00 2025-08-17 16:18:00            30 -71.200000                6.00
3  C4:7B:33:1A:9E:F2            Tile   Unknown Vendor 2025-08-17 16:11:35 2025-08-17 16:15:20            15 -80.000000                3.75


Objective: Use an LLM to Identify Device Types from Names


Command: (This is a conceptual Python script demonstrating how to use a Large Language Model API. API key and endpoint would need to be configured.)

Python

# Save as identify_devices.py
import sqlite3
import pandas as pd
import requests # To interact with an LLM API
import json
import os

# --- Configuration ---
LLM_API_URL = "https://api.example-llm.com/v1/chat/completions"
# In a real scenario, use environment variables for API keys
LLM_API_KEY = os.getenv("LLM_API_KEY", "your_api_key_here")

def get_device_info_from_llm(device_names):
    """Sends a list of device names to an LLM for identification."""
    headers = {
        "Authorization": f"Bearer {LLM_API_KEY}",
        "Content-Type": "application/json"
    }
    prompt = f"""
    You are a cybersecurity device identification assistant.
    For each device name in the following list, identify the likely device type,
    its common function (e.g., audio, tracking, keyboard), and a potential
    security consideration.
    Provide the output as a JSON object.

    Device Names: {json.dumps(device_names)}
    """
    data = {
        "model": "gpt-4o", # or other powerful model
        "messages": [{"role": "user", "content": prompt}],
        "response_format": {"type": "json_object"}
    }

    try:
        response = requests.post(LLM_API_URL, headers=headers, json=data)
        response.raise_for_status()
        return response.json()['choices'][0]['message']['content']
    except requests.exceptions.RequestException as e:
        return json.dumps({"error": str(e)})

def main():
    """Main function to get data and query LLM."""
    try:
        conn = sqlite3.connect('blue_hydra.db')
        query = "SELECT DISTINCT name FROM bluetooth_devices WHERE name != 'Unknown';"
        df = pd.read_sql_query(query, conn)
        conn.close()

        device_names = df['name'].tolist()
        if not device_names:
            print("No named devices found in database.")
            return

        print("Querying AI for device information...")
        llm_response = get_device_info_from_llm(device_names)
        print("--- AI-Powered Device Analysis ---")
        print(json.dumps(json.loads(llm_response), indent=2))

    except Exception as e:
        print(f"An error occurred: {e}")

if __name__ == "__main__":
    main()

Command Breakdown:

Ethical Context & Use-Case: Manually researching every discovered device name is time-consuming. This script automates the intelligence-gathering phase. By sending the names to an LLM, a penetration tester can instantly get a summary of what each device is, what it does, and what potential security weaknesses it might have (e.g., "Logi MX Keys" might have known vulnerabilities in its wireless protocol). This drastically accelerates the process of identifying high-value targets in an authorized test.

--> Expected Output:

$ python3 identify_devices.py
Querying AI for device information...
--- AI-Powered Device Analysis ---
{
  "device_analysis": [
    {
      "name": "John's AirPods",
      "type": "Wireless Earbuds",
      "function": "Audio playback and communication.",
      "security_consideration": "Can be susceptible to tracking and potentially denial-of-service attacks. Proximity tracking is a known feature."
    },
    {
      "name": "Car Media",
      "type": "In-Vehicle Infotainment (IVI) System",
      "function": "Connects mobile phones for hands-free calls and audio streaming.",
      "security_consideration": "If pairing is poorly implemented, could potentially be vulnerable to unauthorized connections or data extraction from a paired phone."
    },
    {
      "name": "Tile",
      "type": "Bluetooth Item Tracker",
      "function": "Location tracking for personal items like keys or wallets.",
      "security_consideration": "Broadcasts a constant signal that can be used to track the user's presence and movement. Vulnerabilities have been found in the pairing and communication process in the past."
    },
    {
      "name": "Smart Lock",
      "type": "IoT Smart Lock",
      "function": "Enables keyless entry to a building or room via a mobile app.",
      "security_consideration": "A high-value target. Potential vulnerabilities include replay attacks, jamming, or firmware exploits that could allow unauthorized access."
    }
  ]
}


Legal & Ethical Disclaimer


This content is provided for educational purposes only. The information, tools, and techniques described herein are intended for use in legally authorized and ethical cybersecurity activities, such as penetration testing, security auditing, and vulnerability assessments, where explicit, written permission has been granted by the target system's owner.

Unauthorized scanning, accessing, or attempting to compromise any computer system, network, or data is illegal and punishable by law. The course creator, instructor, and hosting platform (Udemy) do not condone any illegal or malicious activity. You are solely responsible for your actions. By accessing this material, you agree to use this knowledge lawfully and ethically. The creators and distributors of this course bear no responsibility or liability for any misuse of this information by any individual. Always have a signed contract and a clear scope of engagement before conducting any security testing.