TGViewer
Codeby Codeby @codeby_sec · 37K subscribers
Post #10167 2.92K
Почему ядро Android не понимает, что делают приложения — и как eBPF решает это без патчей

Представьте: приложение отправляет SMS с вашего телефона. Ядро Linux в этот момент видит только ioctl(fd, BINDER_WRITE_READ, &bwr). Тот же самый вызов, что и при запросе версии ОС. Или при чтении контактов. Или при получении GPS-координат. Для ядра всё это — одинаковые байты в Binder-транзакции.

Это и есть семантический разрыв — фундаментальная проблема аудита Android, над которой бьются больше десяти лет. В отличие от десктопного Linux, где sendto() прямо говорит аудитору «тут отправка данных», на Android всё проходит через цепочку: приложение → libbinder.so → ioctl → Binder-драйвер → system_server. И на уровне системных вызовов любое действие выглядит одинаково.

🔍 Существующие решения делятся на два лагеря, и оба проигрывают:

• Модификация ОС (ClearScope и аналоги) — хуки внедряются прямо в Binder-драйвер и framework. Устойчиво к обходу, но каждое обновление Android требует ручного переноса патчей. Архитектурный тупик для реальных деплоев.
• User-space инструментация (BPFroid, Frida) — не трогает ядро, но обходится. Приложение с native-кодом может дёрнуть ioctl() на /dev/binder напрямую, минуя все хуки. Малварь так и делает.

Исследователи из TU Darmstadt и Athens University разорвали эту дихотомию проектом WOOTdroid. Идея: eBPF-программы загружаются в ядро без его пересборки, цепляются к стабильным tracepoints и перехватывают Binder-транзакции на уровне драйвера. Но в отличие от сырой трассировки, WOOTdroid ещё и декодирует содержимое — имена методов, типизированные аргументы, целевые сервисы.

📊 Цифры с Pixel 9 на Android 16 впечатляют: eBPF-трассировщик перехватил на 33% больше системных вызовов, чем штатный ftrace. При этом overhead по Geekbench — не выше 3.6%. Никаких патчей к ядру, никакой пересборки AOSP, никаких инъекций в процесс приложения.

Почему это важно на практике? Потому что малварь всё чаще использует native-код для обхода user-space мониторинга. Формирует Parcel вручную, вызывает ioctl() напрямую — и Frida, и BPFroid пропускают транзакцию полностью. WOOTdroid сидит в ядре и видит всё, независимо от того, как именно приложение сформировало вызов.

⚡ Отдельно интересен контринтуитивный момент: eBPF-программы работают в sandbox внутри ядра, проходят верификацию перед загрузкой и не могут уронить систему. По сути — kernel-level аудит с user-space безопасностью деплоя.

Полный разбор архитектуры, механики Binder-декодирования и результатов бенчмарков — в развёрнутой статье на форуме.

https://codeby.net/threads/wootdroid-audit-android-binder-ipc-bez-semanticheskogo-razryva.93727/
  • 🔥 10
  • 👍 6
  • ❤ 4
  • 🤯 1
More from @codeby_sec
  1. Sep 26, 2026🚩 Новые задания на платформе HackerLab! 👩‍💻 Категория Pentest Machines (Active Director…
  2. Sep 25, 2026Post #10469
  3. Sep 25, 2026Tookie-OSINT: Инструмент разведки по имени пользователя Tookie-OSINT — инструмент с открыт…
  4. Sep 24, 202614 резюме за три дня. Где вакансии? За месяц работодатели не разместили на форуме ни одной…
  5. Sep 24, 2026UDP-сканирование: ты доверяешь zenmap или запускаешь nmap руками? Дефолтный профиль zenmap…
  6. Sep 24, 2026🌐HExHTTP Инструмент для тестирования HTTP-заголовков и анализа результатов с целью выявле…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →