Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
toothpicker — Покрытие-направленный внутрипроцессный фаззер для демона Bluetooth iOS (bluetoothd) с использованием FRIDA, с фаззингом по воздуху для протокола MagicPairing и возможностями воспроизведения сбоев. | Kitploit
Инструменты/GitHubGitHub/seemoo-lab/toothpicker
Безопасность BluetoothДинамический анализ (песочница)Безопасность iOSФаззингБезопасность беспроводных сетейМобильная безопасность
GitHubseemoo-lab/toothpicker

toothpicker

Покрытие-направленный внутрипроцессный фаззер для демона Bluetooth iOS (bluetoothd) с использованием FRIDA, с фаззингом по воздуху для протокола MagicPairing и возможностями воспроизведения сбоев.

Репозиторий
245364 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Логотип ToothPicker

ToothPicker

ToothPicker — это внутрипроцессный, управляемый покрытием фаззер для iOS. Он был разработан для целенаправленного анализа демона Bluetooth bluetoothd на iOS и для анализа различных протоколов Bluetooth на iOS. Поскольку он построен с использованием FRIDA, его можно адаптировать для любой платформы, поддерживающей FRIDA.

Этот репозиторий также включает эфирный фаззер с примером реализации для фаззинга протокола MagicPairing от Apple с помощью InternalBlue. Кроме того, он содержит скрипт ReplayCrashFile.py, который можно использовать для проверки сбоев, найденных внутрипроцессным фаззером.

Новинка: Фаззер на месте (ToothFlipper)

Это очень простой фаззер, который только переворачивает биты и байты в активных соединениях. Никакого управления покрытием, никакой инжекции, но он хорош как демонстрация и поддерживает состояние. Работает только с Python + Frida, никаких модулей или установки не требуется. Протестировано на iOS 13.5–14.3. См. inplace-fuzzer.

Внутрипроцессный фаззер

Внутрипроцессный фаззер работает «из коробки» на различных версиях iOS (протестировано 13.3–13.7), но необходимо указать символы. Другие версии iOS требуют адаптации адресов функций. Кроме того, похоже, что stalker FRIDA имеет некоторые проблемы с iPhone 8. На более новых iPhone, поддерживающих PAC, производительность значительно страдает из-за подписывания указателей. Таким образом, рекомендуется запускать это на iPhone 7.

ToothPicker построен на кодовой базе frizzer. Однако он был адаптирован для этого конкретного применения и поэтому больше не совместим с оригинальной версией. Существуют планы заменить его в будущем на более специализированный компонент.

Предварительные требования:

На iPhone:

  • https://frida.re/docs/ios/

На Linux:

  • usbmuxd
  • libimobiledevice
  • Опционально, но рекомендуется: virtualenv
  • radamsa (требуется для frizzer)

Для Arch-based Linux:

root@kitploit:~
# usbmuxd обычно поставляется с libimobiledevice
# но на всякий случай мы устанавливаем его вручную
sudo pacman -S usbmuxd libimobiledevice python-virtualenv radamsa

# Подключите iPhone к компьютеру
# Разблокируйте его.
# Если появится всплывающее сообщение о сопряжении, нажмите «Доверять»
# Если всплывающее сообщение не появляется:
idevicepair pair
# Теперь должно появиться всплывающее окно, примите его, а затем снова:
idevicepair pair

# В случае ошибок подключения:
sudo systemctl restart usbmuxd
# или повторно выполните сопряжение телефона и компьютера


# Другие полезные команды

# Для SSH-подключения к iPhone:
# Checkra1n поставляется с SSH-сервером, слушающим порт 44
# Перенаправьте SSH-порт телефона на локальный порт 4444:
iproxy 4444 44
# Подключитесь:
ssh root@localhost -p 4444
# Пароль по умолчанию: alpine

# Для получения информации об устройстве:
ideviceinfo

Для Debian Linux:

Почти то же самое, что и выше. Исключения:

  • radamsa необходимо устанавливать из git-репозитория, так как он не упакован.
  • Команда iproxy требует дополнительного пакета libusbmuxd-tools.

Для macOS:

Команды немного отличаются от настройки Arch Linux...

root@kitploit:~
brew install libimobiledevice usbmuxd radamsa npm
idevicepair pair
npm install frida-compile
pip3 install frida-tools

На macOS PacketLogger, который является частью Additional Tools for Xcode, может декодировать различные пакеты после установки Bluetooth Debug Profile. Кроме того, если открыть журналы сбоев iOS с помощью Xcode, он добавит некоторые символы.

Настройка и фаззинг

Настройка:

  • Рекомендуется настроить виртуальное окружение Python для frizzer.
  • Установите необходимые пакеты, запустив команду в каталоге frizzer.
  • Каталог projects содержит пример проекта для фаззинга протокола MagicPairing.
  • Для сборки harness скомпилируйте общий harness и специализированный harness MagicPairing в один файл.
  • Перейдите в каталог harness и установите frida-compile. Обратите внимание, что это нужно выполнять в этой папке, и его можно установить напрямую от пользователя, выполнив npm install frida-compile.
  • Теперь выполните frida-compile ../projects/YOUR_PROJECT/YOUR_SPECIALIZED_HARNESS.JS -o ../projects/YOUR_PROJECT/harness.js. Поскольку он был установлен в контексте npm, возможно, потребуется выполнить npx frida-compile вместо этого. Каждый раз, когда изменяется harness, необходимо повторно запускать frida-compile.

Фаззинг:

  • Подключите устройство iOS к компьютеру.
  • Желательно перевести телефон в авиарежим и включить функцию «Не беспокоить», чтобы ограничить любую другую активность на телефоне.
  • Выполните killall -9 bluetoothd, чтобы запустить bluetoothd заново.
  • Убедитесь, что телефон не подключается к другим устройствам Bluetooth.
  • Теперь вернитесь в каталог вашего проекта, создайте каталог для журналов сбоев (mkdir crashes) и выполните ../../frizzer/fuzzer.py fuzz -p .
  • Ура! Теперь собирайте zero-day и получайте большие суммы денег от Apple! (Или соберите огромный список бесполезных разыменований NULL-указателей...)

Кратко: для запуска нового проекта выполните:

root@kitploit:~
cd harness
npx frida-compile ../projects/YOUR_PROJECT/YOUR_SPECIALIZED_HARNESS.JS -o ../projects/YOUR_PROJECT/harness.js
cd ../projects/YOUR_PROJECT/
mkdir crashes
../../frizzer/fuzzer.py fuzz -p .

Вы можете начать с другого сида, используя frizzer/fuzzer.py fuzz --seed 1234 -p ..

Добавление новых версий iOS:

В настоящее время различные версии iOS определены в bluetoothd.js. Вы можете найти их с помощью инструмента версионирования Ghidra, имея начальную версию со всеми требуемыми символами. Обратите внимание, что некоторые из них не названы в оригинальном бинарном файле iOS, поэтому в идеале начинайте с той, которая уже была аннотирована ранее. Каждый раз, когда изменяется bluetoothd.js, необходимо повторно запускать frida-compile.

Увеличение ресурсов bluetoothd:

Журналы сбоев iOS хранятся в Settings -> Privacy -> Analytics & Improvements -> Analytics Data. Если они содержат сбои bluetoothd с шаблоном bluetoothd.cpu_resource-*.ips, это указывает на то, что сбой был вызван превышением ресурсов. Их можно увеличить следующим образом.

На iPhone 7 выполните:

root@kitploit:~
cd /System/Library/LaunchDaemons/
plistutil -i com.apple.jetsamproperties.D10.plist -o com.apple.jetsamproperties.D10.plist.txt
plistutil -i com.apple.jetsamproperties.D101.plist -o com.apple.jetsamproperties.D101.plist.txt

На iPhone SE2 они находятся в com.apple.jetsamproperties.D79.plist:

root@kitploit:~
cd /System/Library/LaunchDaemons/
plistutil -i com.apple.jetsamproperties.D79.plist -o com.apple.jetsamproperties.D79.plist.txt

Найдите bluetoothd, измените приоритет на 19 (самый высокий допустимый приоритет) и установите ограничение памяти на очень большое значение. Примените те же изменения к обоим файлам.

root@kitploit:~
<dict>
       <key>ActiveSoftMemoryLimit</key>
       <integer>24000</integer>
       <key>InactiveHardMemoryLimit</key>
       <integer>24000</integer>
       <key>EnablePressuredExit</key>
       <false/>
       <key>JetsamPriority</key>
       <integer>19</integer>
</dict>

Запишите изменения обратно и перезапустите bluetoothd.

root@kitploit:~
plistutil -i com.apple.jetsamproperties.D10.plist.txt -o com.apple.jetsamproperties.D10.plist
plistutil -i com.apple.jetsamproperties.D101.plist.txt -o com.apple.jetsamproperties.D101.plist
killall -9 bluetoothd

Соответственно на iPhone SE2:

root@kitploit:~
plistutil -i com.apple.jetsamproperties.D79.plist.txt -o com.apple.jetsamproperties.D79.plist
killall -9 bluetoothd

Удаление старых журналов:

iOS перестает сохранять журналы сбоев для одной программы после достижения лимита в 25. Если загрузить журнал сбоев с помощью Xcode (через Simulators&Devices), в стек вызовов добавляются некоторые символы. После достижения лимита журналы можно удалить либо через Xcode, либо непосредственно на устройстве iOS, удалив их в папке /var/mobile/Library/Logs/CrashReporter/.

A12+:

Начиная с iPhone XR/Xs, был введен PAC. Это требует вызова sign() для NativeFunction в FRIDA. Хотя на более старых процессорах это пустая операция, это значительно снижает скорость на новых устройствах, но необходимо для их работы. Мы заметили, что ToothPicker работает вдвое медленнее при использовании iPhone SE2 по сравнению с iPhone 7.

Эфирный фаззер и воспроизведение сбоев

Реализация MagicPairing для эфирного фаззера требует установки InternalBlue и может быть запущена выполнением python MagicPairingFuzzer.py TARGET_BD_ADDR.

Если вы хотите воспроизвести сбои, используйте скрипт ReplayCrashFile.py, который может принять файл сбоя и инициировать эфирное соединение с полезной нагрузкой на основе сбоя.

Скачать инструмент