Категория > Новости > Препарируем Viber. Мини-гид по анализу приложений для Android - «Новости»
Препарируем Viber. Мини-гид по анализу приложений для Android - «Новости»19-05-2023, 18:19. Автор: Stephen |
любого публичного awesome list, поэтому я не буду заострять внимание на их названии, если того не требует контекст. Целевой APK был получен с одного из mirror-сайтов. К выбору источника APK стоит относиться серьезно, поскольку нередко сайт может хранить:
На данном этапе имеет смысл провести рекогносцировку цели: изучить CVE, а затем провести binary diffing анализ 1-day-уязвимостей. Читайте также - Вы можете купить 256MB кэш-память для HP SmartArray P410 за наличный или безналичный расчет просто оформив заказ, комплектующие для сервера по доступным ценам. Разделяемые библиотекиПосле распаковки APK в директории
Поначалу для поверхностного анализа использовались такие инструменты, как IDA Pro, Binary Ninja и rizin (Ghidra не взял, потому что задачу следовало решить быстро): загружаешь библиотеку, смотришь экспортированные символы, находишь строки, немного читаешь код. Но затем я перешел к oneline-команде — по сути, большего мне и не требовалось: После идентификации JNI-функций из библиотек прохожусь $ readelf -W --demangle --symbols libnativehttp.so | tail -n +4 | sort -k 7 | rg "FUNC.Java_." | less $ rg "native.*nativeCreateHttp" Дальне нужен поверхностный анализ, чтобы выявить, во‑первых, библиотеку‑цель, во‑вторых, компоненты open source, исследование которых предстоит сделать позднее. Анализировать можно с помощью того же readelf или в Rizin либо Binary Ninja: гуглим имя экспортированного символа и проводим поверхностный реверс‑инжиниринг, чтобы воссоздать общую картину функций библиотеки. Предварительные результаты анализаНиже представлен список разделяемых библиотек с кратким описанием функций или ссылкой на проект с открытыми исходниками.
В итоге у нас появляется список интересных библиотек. Составлялся он исходя всего из одного условия: как можно больше самописного кода, меньше компонентов open source. Вот этот список:
ФункцииПрежде чем анализировать какую‑либо функцию, сначала нужно выяснить, может ли атакующий до нее добраться. Для этого отсортируем по приоритету все библиотеки и функции, а затем проверим, откуда вызываются последние. Для анализа Java-кода я буду использовать связку jadx (декомпиляция) + Android Studio (рефакторинг) + Understand (анализ графов связей переменных, функций и данных). Дополнительно проверим в каждой библиотеке наличие JNI-функций. Может быть, есть те, что используются с помощью libFlatBuffersParser.soПри более детальном анализе выясняется, что это open source библиотека FlatBuffers. Оставляем ее анализ на потом. libsvg.soПользуемся утилитой strings и Ghidra, чтобы получить строки из бинарного файла. По ним мы понимаем, что код написан на C++: [...] _ZTVN10__cxxabiv121__vmi_class_type_infoE _ZNSt6__ndk119__shared_weak_countD2Ev _ZTINSt6__ndk119__shared_weak_countE __android_log_print _ZNKSt6__ndk16locale9has_facetERNS0_2idE _ZNKSt6__ndk16locale9use_facetERNS0_2idE [...] Проверим еще и наличие RTTI-информации — в нашем случае удача благоволит нам, таковая имеется. С помощью плагина для Ghidra Ghidra C++ Class and Run Time Type Information Analyzer восстановим структуру классов кода C++. Результат восстановления RTTI-информации — классы C++ и их методы На первый взгляд, здесь используется собственная SVG-библиотека, что хорошо. В ходе дальнейшего анализа Java-кода (анализ дерева вызовов) выясняется, что функции библиотеки задействованы в основном для загрузки ассетов приложения (директория Граф вызова функций SVG native в Understand libnativehttp.soВ ходе анализа возникает вопрос, с какой целью создавалась эта библиотека, ведь кажется, что ее возможности не очень широки: обертки над функциями обработки сетевых данных. Обработчики при возникновении событий вызывают все тот же Java-код, а не что‑то нативное. Может быть, здесь когда‑то были какие‑то функциональные возможности, ну или предполагались? Подобное я уже видел в мессенджере Telegram: legacy-кода хоть отбавляй, от такого большого attack surface поначалу чешутся руки, но после анализа все встает на свои места. Поэтому, уважаемый читатель, принимай во внимание, что иногда могут встречаться не только dead code, но и dead libraries, на анализ которых можно впустую потратить кучу ценного времени. Перейти обратно к новости |