Seraph

Wireless & RF v0.1.0.dev0 · 20.05.2026 активный

Фреймворк для фаззинга Bluetooth-протоколов.

v0.1.0.dev0
20.05.2026 current

Установка
python3 -m venv .venv
source .venv/bin/activate
pip install boofuzz
показать оригинал переведено ИИ

Seraph

Божественный огонь для баговичных стеков.

Проверенный в бою фаззер Bluetooth + IoT протоколов, построенный на boofuzz. Запуск из одного файла, без церемонии с pip install. Запускается так:

sudo python3 seraph.py <subcommand> [options]

Что он делает

  • Фаззинг L2CAP signaling покрывающий каждый код команды сигнализации Core 5.4 Vol 3 Part A (отклонение команды, запрос соединения, запрос конфигурации с полной мутацией TLV опций MTU/Flush/RFC/FCS, запрос информации, эхо, создание/перемещение канала, LE credit-based + enhanced credit-based соединение, переконфигурация).
  • Фаззинг ATT/GATT покрывающий каждый ATT opcode в Core 5.4 Vol 3 Part F (включая 5.3+ Read Multiple Variable, Signed Write).
  • Фаззинг SDP с правильным кодированием data-element (UUID16/32, последовательности, состояние продолжения).
  • Фаззинг HCI команд через HCI_CHANNEL_USER для фаззинга пути контроллера/ядра HCI напрямую.
  • Статистика в реальном времени на одной строке TTY: кейсов/сек, краши (уникальные vs всего), таймауты, переданных байт.
  • Дедупликация крашей по хешу вершины стека KASAN — каждый уникальный splat фиксируется один раз.
  • Захват btmon на каждый кейс — каждый сбой поставляется с HCI трафиком, который его породил.
  • Монитор KCOV для видимости роста покрытия ядра (не влияет на мутацию; boofuzz generation-based).
  • Минимизатор крашей, который ddmin-редуцирует захваченную последовательность кадров до минимального набора, всё ещё триггерящего баг.
  • Воспроизведение pcap любого захвата btmon — репродюсеры не требуют Seraph или boofuzz для запуска.
  • Pre-flight проверка root, состояния адаптера, rfkill, конфигурации отладки ядра и доступности цели перед стартом кампании.

Подкоманды

sudo python3 seraph.py preflight --hci 0 --bdaddr AA:BB:CC:DD:EE:FF
sudo python3 seraph.py l2cap     --bdaddr AA:BB:CC:DD:EE:FF
sudo python3 seraph.py att       --bdaddr AA:BB:CC:DD:EE:FF --addr-type public
sudo python3 seraph.py sdp       --bdaddr AA:BB:CC:DD:EE:FF
sudo python3 seraph.py hci       --hci 0
sudo python3 seraph.py replay    capture.pcap --bdaddr AA:BB:CC:DD:EE:FF --cid 0x0001
sudo python3 seraph.py minimize  repro/repro_abc123.py --bdaddr AA:BB:CC:DD:EE:FF

Запустите python3 seraph.py <subcommand> --help для полного списка опций.

Установка

Требуется только boofuzz извне:

python3 -m venv .venv
source .venv/bin/activate
pip install boofuzz

Затем просто запускайте python3 seraph.py .... Никакой editable-установки, никаких entry points.

Структура

seraph.py              # entry point - argparse, no third-party CLI dep
seraph/
  ui.py                # banner, ANSI logging, live stats counter
  preflight.py         # pre-flight checks
  replay.py            # pcap replay
  minimizer.py         # ddmin crash minimizer
  transports/
    l2cap.py           # AF_BLUETOOTH/L2CAP w/ reconnect, BR/EDR + LE
    hci.py             # HCI_CHANNEL_USER raw transport
  monitors/
    dmesg.py           # KASAN/UBSAN/oops detector with dedup ledger
    btmon.py           # per-case pcap capture
    daemon.py          # bluetoothd liveness ping
    kcov.py            # /sys/kernel/debug/kcov coverage reader
  protocols/
    l2cap_signaling.py # full Core 5.4 signaling coverage
    att.py             # full ATT opcode coverage
    sdp.py             # SDP PDUs with data-element encoding
    hci_cmd_fuzz.py    # HCI command opcode space
  utils/
    repro.py           # standalone reproducer emitter
    pcap.py            # libpcap reader
    dedup.py           # JSON-backed crash signature ledger
corpus/                # seed pcaps
repro/                 # auto-generated reproducers
tests/                 # pytest smoke suite (12 tests, hardware-free)
docs/                  # ROADMAP.md, SETUP.md

Жёсткие правила

  • Никогда не форкать boofuzz; только наследовать и импортировать.
  • Каждый краш получает отдельный репродюсер, не зависящий от boofuzz для воспроизведения.
  • Один протокол работающий end-to-end лучше пяти наполовину готовых.
  • Используйте внутри disposable VM. Фаззинг крашит цель по дизайну.

Статус

Фаза 1 + 2 + 3 (по docs/ROADMAP.md): реальные транспорты, реальные мониторы, четыре реальных протокольных модуля, UI в реальном времени, минимизатор, реплей, pre-flight, KCOV. Готов к первой кампании.

Войдите, чтобы оставить комментарий