Сегодня в выпуске: восемь способов обнаружить внедрение Frida в приложение, три совета, как защитить нативные библиотеки от реверса, отключение проверки на root в подопытном приложении, защита от метарефлексии в Android 11, принцип работы Huawei Quick Apps, а также подборка инструментов пентестера и библиотек для разработчиков.
 

Почитать

 

Как обнаружить Frida

Detect Frida for Android — статья о том, как обнаружить, что приложение работает под управлением Frida (известный инструмент, позволяющий перехватить управление приложением и внедрить код). Автор приводит пять известных техник и три собственные:

  1. Поиск библиотек frida-agent и frida-gadget в файле /proc/<pid>/maps. Может закончиться неудачей, если взломщик изменит имена библиотек.
  2. Поиск в памяти нативных библиотек особых строк (как рассказано в этой статье). Взломщик может перекомпилировать Frida с измененными строками.
  3. Пройти по всем открытым TCP-портам, отправить в них dbus-сообщение AUTH и дождаться ответа Frida. Метод хорошо работает при использовании frida-server (на рутованном устройстве), но бесполезен, если приложение было перепаковано с включением в него frida-gadget (способ обычно применяется, когда невозможно получить root на устройстве).
  4. Проверить наличие специфических для Frida файлов в каталоге /data/local/tmp. Опять же взломщик может переименовать эти файлы.
  5. Проверить, открыты ли для записи исполняемые секции нативных библиотек. В нормальной ситуации это почти невозможно.
  6. Поиск потоков frida-server и frida-gadget, которые Frida запускает в рамках процесса подопытного приложения.
  7. Поиск специфичных для Frida именованных пайпов в каталоге /proc/<pid>/fd.
  8. Сравнение кода нативных библиотек на диске и в памяти. При внедрении Frida изменяет секцию text нативных библиотек.

Примеры использования последних трех техник опубликованы в репозитории на GitHub.

 

Обход детекта root с помощью Frida

Android Root Detection Bypass Using Objection and Frida Scripts — рассказ о способах отключить проверку на права root в подопытном приложении с помощью Frida или тулкита Objection на базе Frida.

В большинстве случаев будет достаточно либо скачать уже готовый скрипт из репозитория Frida, либо воспользоваться тулкитом Objection для отключения проверки на root:

android root disable

Однако эти способы могут не сработать, и тогда придется писать свой собственный скрипт. Для этого необходимо декомпилировать/дизассемблировать подопытное приложение и найти в нем функцию, ответственную за проверку наличия прав root на устройстве. Обычно она выглядит примерно так:

private static boolean detectmethods() {
    String[] arrayOfString = new String[10];
    arrayOfString[0] = "/system/app/Superuser.apk";
    arrayOfString[1] = "/sbin/su";
    arrayOfString[2] = "/system/bin/su";
    arrayOfString[3] = "/system/xbin/su";
    arrayOfString[4] = "/data/local/xbin/su";
    arrayOfString[5] = "/data/local/bin/su";
    arrayOfString[6] = "/system/sd/xbin/su";
    arrayOfString[7] = "/system/bin/failsafe/su";
    arrayOfString[8] = "/data/local/su";
    arrayOfString[9] = "/su/bin/su";
    int a = arrayOfString.length;
    int b = 0;
    while (a < b) {
        if (new File(arrayOfString[a]).exists()) {
            return true;
        }
        a += 1;
    }
    return false;
}

Допустим, она находится внутри класса roottest в Java-пакете com.test.test. Все, что нам нужно сделать, — подменить эту функцию на заглушку, которая всегда возвращает false. Для этого понадобится такой скрипт:

Java.perform(function () {
    var MainActivity = Java.use('com.test.test.roottest');
        MainActivity.root.implementation = function (detectmethods) {
            console.log('Done: bypassed');
            return false;
        };
}

Далее скармливаем наш скрипт Frida и запускаем под ее управлением приложение:

$ frida -l rootbypass.js -f имя.пакета.приложения
 

Как защитить нативную библиотеку

Security hardening of Android native code — статья, рассказывающая, как защитить от реверса нативные библиотеки в приложениях для Android.

Обычно разработчики выносят сенситивный код в нативные, написанные на языках C/C++ библиотеки, чтобы повысить производительность и затруднить реверс приложения (читать дизассемблерные листинги нативного кода гораздо сложнее, чем код smali, и тем более сложнее, чем декомпилированный с помощью того же jadx код на Java). Однако не стоит забывать, что одно лишь наличие нативного кода не остановит опытного и мотивированного взломщика, поэтому стоит использовать дополнительные средства, чтобы его запутать. Есть несколько несложных способов это сделать.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    2 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии