Пентестинг Android: Анализ проблем с небезопасным протоколированием и жестким кодированием DIVA для Parrot OS

Если вы читали мои предыдущие руководства (или статьи), вы знаете, что я начал погружаться в мир хакинга, и мои последние статьи посвящены в основном тестированию Android. Я показал вам, как установить Genymotion & Virtualbox, JADX-GUI & ADB, и Android Studio на Parrot OS — но сегодня мы не ограничимся только установкой инструментов. Сегодня мы начнем взлом, в некотором роде.

Прежде всего, я должен убедиться, что мы находимся на одной и той же странице. Что такое Android Pentesting? Проще говоря, это имитация кибератаки на мобильное приложение, в ходе которой мы пытаемся выявить и найти любые уязвимости или проблемы безопасности, присутствующие в приложении. В последующие дни мы будем тестировать APK DIVA, который я объясню и продемонстрирую, как установить и настроить на эмулируемом устройстве в этом руководстве.

Прежде чем мы начнем, убедитесь, что у вас есть следующее:

  • Установлена Android Studio.
  • Установлены Genymotion и Virtualbox, настроено и запущено эмулируемое устройство.
  • Установлен ADB и установлен DIVA APK на устройство.
  • JADX-GUI установлен и открыт.

Итак, приступим к взлому! Открыв приложение DIVA на нашем устройстве, мы видим, что оно состоит из меню или навигации, в котором перечислено множество разделов для тестирования.

В этом разделе мы будем тестировать разделы «Небезопасная регистрация» и «Проблемы жесткого кодирования» (часть 1 и 2) этого приложения.

Небезопасное ведение журнала

Когда мы открываем раздел Insecure Logging, перед нами стоит следующая задача: выяснить, что и где записывается в журнал, а также найти уязвимый код. Итак, мы должны найти, что регистрируется, как это регистрируется и уязвимый код.

Давайте попробуем ответить на эти задачи по очереди. По первому впечатлению, просто взглянув на макет активности (это страница, открытая на нашем экране), мы можем увидеть, что он запрашивает у нас номера наших кредитных карт. Таким образом, номер нашей кредитной карты, вероятно, является данными, которые регистрируются (что). Давайте проверим это, введя номер!

При вводе номера мы получаем всплывающее окно с ошибкой. Давайте посмотрим, можем ли мы увидеть, как это регистрируется, т.е. куда делись наши данные? Первый виновник, на которого мы можем обратить внимание, это LogCat в Android Studio. Откройте Android Studio и перейдите к выводу LogCat. Мы видим, что он записывает все в журнал, что плохо, потому что, скажем, у нас есть пользователь, который загружает вредоносный APK, который тайно отслеживает его журнал, когда он использует приложение — злоумышленник может использовать этот отслеживаемый журнал для чтения конфиденциальных данных и использовать его таким образом.

Когда мы прокручиваем страницу вниз, мы видим, что номер нашей кредитной карты был записан в журнал. ПЛОХОЙ ЛОГКАТ! Теперь мы знаем, как он регистрируется — через LogCat Output в Android Studio под журналом с надписью diva-log.

Наконец, нам нужно найти уязвимый код. Это легко, просто загрузите DIVA APK в JADX-GUI и откройте активность LogActivity.

Когда мы посмотрим на код, мы сможем определить раздел, где он выполняет фактическое протоколирование, таким образом подтверждая, что он протоколирует номер нашей кредитной карты. Возможно, регистрация конфиденциальной информации — не лучший способ ее получения?

Итак, в итоге нам удалось обнаружить следующее:

  • Что: номер кредитной карты
  • Где: LogCat > diva-log
  • Как: Log.e()

Проблемы жесткого кодирования Часть первая

Когда программист жестко кодирует значение, это означает, что он вводит его в приложение, делая его статичным. Например:

var password = "iamnotsecure";
Войти в полноэкранный режим Выход из полноэкранного режима

Это плохо не только с точки зрения программирования, поскольку разработчику придется вручную менять это значение каждый раз, когда он захочет его обновить, но и с точки зрения безопасности, поскольку это позволяет злоумышленникам легко использовать или взламывать прошивки, устройства, системы и программное обеспечение.

Когда мы открываем раздел «Проблемы жесткого кодирования, часть первая», перед нами встает следующая задача: выяснить, что и где закодировано. Итак, мы должны выяснить, что и где закодировано. С самого начала мы можем сразу определить, что будет закодировано: ключ поставщика.

Переходим к вопросу «где». Давайте перейдем в JADX-GUI и откроем активность HardcodeActivity, чтобы посмотреть, сможем ли мы найти что-нибудь в исходном коде.

Сразу же мы видим, что ключ поставщика жестко закодирован, поэтому мы можем скопировать значение «vendorsecretkey» и вставить его в наше приложение.

Вуаля, мы получили доступ к системе! 🥳

Итак, подводя итоги, мы смогли найти следующее:

  • Что: Секретный ключ поставщика > vendorsecretkey
  • Где: HardcodeActivity

Проблемы жесткого кодирования Часть вторая

Когда мы открываем раздел Hardcoding Issues Part Two, перед нами стоит следующая задача: выяснить, что и где закодировано. Итак, нам предстоит выяснить, что и где закодировано. Как и ранее, мы можем сразу определить, что, вероятно, закодировано, просто взглянув на схему деятельности: ключ поставщика.

Теперь перейдем к тому, где. Давайте перейдем к нашей Hardcode2Activity в JADX-GUI и откроем ее. Мы можем сразу определить класс DivaJni, на который идет ссылка, так как остальная часть кода зависит от этого класса для проверки ключа доступа.

Не теряя времени, давайте откроем класс DivaJni. Когда я впервые открыл его, не оценив код должным образом, я увидел строку soName = «divajni», и сначала я подумал, что это жестко закодированное значение. К моему ужасу, это было не так. Глупый я, может в следующий раз мне стоит полностью прочитать исходный код! 😂

При дальнейшем рассмотрении мы видим, что статическая функция загружает родную библиотеку soName, которая является библиотекой с именем divajni. Поскольку мы можем предположить, что она обращается к общей библиотеке, мы можем поискать файл с именем «divajni.so». Расширение .so идентифицирует библиотеку Shared Object, которая может быть динамически загружена во время выполнения Android.

Итак, мы ищем библиотеку с именем «divajni.so» в папке lib в нашем APK-файле. Перейдите туда, где вы установили APK DIVA, и извлеките файл (чтобы сделать это легко, просто замените .apk на .zip и извлеките как обычно). После извлечения откройте его и перейдите lib > в любую из папок > libdivajni.so.


ВАЖНОЕ ПРИМЕЧАНИЕ: Вы также можете получить доступ к этому файлу библиотеки через терминал без необходимости извлекать файл и переходить к нему таким образом:


Вы можете скопировать этот файл библиотеки на рабочий стол или в любое другое место с легким доступом. Откройте терминал с помощью CTRL + ALT + T и зайдите в Destkop. Убедитесь, что ваш файл libdivajni.so находится там, введя команду ls.

Чтобы иметь возможность просматривать текст внутри двоичного файла или файла данных, такого как наш библиотечный файл, нам нужно использовать команду strings. Введите ее так: strings libdivajni.so. Мы видим, как появляется список слов, в основном это пакеты и расширенные библиотеки. Если присмотреться, большинство из них имеют похожий формат: .x, _x, __x, x.so и т.д. Есть одна строка, которая привлекла мое внимание, потому что почему в ней стоит точка с запятой? Почему? Ни в одной из других строк нет точки с запятой!

Давайте попробуем ввести ее в качестве ключа поставщика. Обратите внимание, что это процесс проб и ошибок. Иногда нам может не повезти, и мы не сможем определить явный выброс в списке строк, как в этом сценарии. Если мы введем его в наше приложение, то получим всплывающее окно с сообщением о том, что мы получили доступ, и успех!

Итак, в итоге нам удалось найти следующее:

  • Что: секретный ключ поставщика
  • Где: libdivajni.so > olsdfgad;lh

Заключение

Поздравляем, мы закончили первые два раздела DIVA APK! Я надеюсь, что это было достаточно легко для понимания. Увидимся в следующий раз с разделом 3: Небезопасное хранение данных.😊

Если у вас есть рекомендации по каким-либо крутым инструментам, техникам или учебникам, которые я тоже могу использовать, не стесняйтесь, оставьте их ниже, и я посмотрю!

(Запишите это на мой GitHub для дальнейшего использования)

Оцените статью
Procodings.ru
Добавить комментарий