Согласно BetaNews, из 30 лучших приложений с более чем 500 000 установок 94% содержат по меньшей мере три уязвимости среднего риска, а 77% содержат хотя бы две уязвимости с высоким уровнем риска. Из 30 приложений 17% были уязвимы для атак MITM, подвергая все данные перехвату злоумышленниками.
Кроме того, 44% приложений содержат конфиденциальные данные с жесткими требованиями к шифрованию, включая пароли или ключи API, а 66% используют функциональные возможности, которые могут поставить под угрозу конфиденциальность пользователей.
Именно поэтому мобильные устройства являются предметом многих дискуссий по вопросам безопасности. Принимая все это во внимание, мы в Hacken решили рассмотреть методологию OWASP Mobile TOP10 с целью продемонстрировать процесс проведения анализа мобильных приложений на уязвимости.
OWASP Mobile TOP 10 — одна из основных методологий тестирования приложений на уязвимости. В таблице 1 описаны 10 уязвимостей, которые применяются для характеристики уровня безопасности приложения [2,7,11].
Таблица 1: Уязвимости и их описание
№ | Уязвимость | Описание |
М1 | Обход архитектурных ограничений (Improper Platform Usage) |
Эта уязвимость охватывает злоупотребление особенностями платформы, обхода ограничений или неиспользования систем контроля управления безопасности платформы. Характерно как для платформы Android, для iOS (обход ограничений Touch ID и Keychain) и других мобильных ОС. Затрагивает системы контроля безопасности, которые являются частью мобильной операционной системы. |
М2 | Небезопасное хранение данных (Insecure Data Storage) | Эта уязвимость представляет собой комбинацию M2 + M4 Mobile Top Ten 2014. К ней относятся небезопасное хранение и непреднамеренные утечки данных. |
М3 |
Небезопасная передача данных (Insecure Communication) |
Недостаточное подтверждение достоверности источников связи, неверные версии SSL, недостаточная проверка согласования, передача конфиденциальных данных в открытом виде (cleartext) и т.д. |
М4 | Небезопасная аутентификация (Insecure Authentication) |
Эта уязвимость относится к аутентификации конечного пользователя или неверное управление сеансами. Включает следующие пункты:
|
М5 | Слабая криптостойкость (Insufficient Cryptography) | Применение криптостойких алгоритмов для передачи sensitive информации. Использование криптоалгоритмов может быть недостаточным в частных случаях. Эта категория описывает варианты ненадлежащего использования криптографических элементов, слабой или недостаточной криптостойкости. Всё, что связано с TLS или SSL относится к категории M3. Если приложение не использует криптографические средства при необходимости, это относится к категории М2. |
М6 | Небезопасная авторизация (Insecure Authorization) | Эта уязвимость описывает недостатки авторизации (проверка (валидация) на стороне клиента, принудительный просмотр и т.д.). Такие события отличаются от проблем аутентификации (например, устройства регистрации, идентификации пользователей и т.д.). Если приложение не проходит проверку подлинности пользователей при необходимости (например, предоставление анонимного доступа к некоторым ресурсам или службам, при отсутстви проверки подлинности и запрета несанкционированного доступа), это является ошибкой проверки подлинности, а не сбоем авторизации. |
М7 | Контроль содержимого клиентских приложений (Client Code Quality) | Эта категория рассматривает контроль за входными данными. Проблемы реализации технологий кода в клиент-сайд приложениях, отличающиеся от написания кода и реализации в сервер-сайд приложениях. К этому относится: переполнение буфера, format string уязвимости, а также другие ошибки на уровне кода, где решением является необходимость переписать код, который работает на мобильном устройстве. |
М8 | Модификация данных (Code Tampering) | Эта категория описывает изменение исполняемых файлов, локальных ресурсов, перехват вызовов сторонних процессов, подмена runtime методов и динамическую модификацию памяти. После установки приложения, его код остается резидентнымв памяти устройства. Это позволяет зловредному приложению изменять код, содержимое памяти, изменять или заменять системные методы API, изменять данные и ресурсы приложения. Это может обеспечить злоумышленнику возможность манипулирования сторонними приложениями для совершения нелегитимных действий, кражи данных или извлечения иной финансовой выгоды. |
М9 | Анализ исходного кода (Reverse Engineering) | Эта уязвимость включает в себя анализ бинарных файлов для определения исходного кода, библиотек, алгоритмов и т.д. Программное обеспечение, такое как IDA Pro, Hopper, otool и другие инструменты реверс-инжиниринга могут дать представление о внутренней работе приложения. Это может быть использовано для поиска уязвимостей приложения, извлечения критичной информации, такой как бэкенд-сервера, ключей шифрования или интеллектуальной собственности. |
М10 | Скрытый функционал (Extraneous Functionality) | Часто разработчики включают в код приложений скрытые функциональные возможности, бэкдоры или другие механизмы, функциональность которых предназначена для общего использования. Под эту категорию подходит известное определение security through obscurity. Разработчик может случайно оставить пароль в качестве комментария в гибридном приложении. Либо это может быть отключение двухфакторной аутентификации во время тестирования. |
Для тестирования приложения «PasswordManager-1.3-release.apk», в соответствии с OWASP Mobile TOP 10, мы не применяли онлайновые и файлообменные ресурсы, а только использовали набор программ, описание которых приведено в Таблице 2 [6 — 10].
Таблица 2: Используемые программы
№ | Название | Описание |
1 | Apktool | Программа для распаковки apk-файлов. Используется для локализации программного обеспечения, анализа структуры приложения и др. |
2 | adb | Это инструмент, который устанавливается вместе с Android-SDK и позволяет управлять устройствами под управлением ОS Android. Работает по принципу клиент-сервер. Использует 5037 порт. |
3 | dex2jar | Это инструмент, который используется для преобразования измененного APK-файла в jar-файл. |
4 | Drozer | Это фреймворк, который содержит инструменты, позволяющие искать уязвимости мобильных устройств и программ. Он функционирует как приложение и взаимодействует с виртуальной машиной Dalvik, другими приложениями и операционной системой. |
5 | VCG scanner | Это инструмент для статического анализа исходного кода и может анализировать следующие языки программирования: С/С++, Java, C #, VB и PL/SQL. |
6 | JD-GUI | Это инструмент, который используется вместе с dex2jar. Он обеспечивает открытие декомпелированного исходного кода. |
7 | Genymotion | Программное обеспечение, которое предназначено для создания тестовых виртуальных машин под управлением OS Android. |
8 | Pidcat | Программа для отображения логов работы программы и операционной системы. |
Сначала производим декомпиляцию программы «PasswordManager-1.3-release.apk» с помощью инструмента Apktool (см. Рис.1). Декомпиляция программой Apktool не позволяет получить исходный код в понятной форме, но позволяет получить доступ к другим ресурсам программы, которые расскажут об архитектуре, библиотеках, которые использует программа и др.
Рис. 1. Декомпиляция «PasswordManager-1.3-release.apk»
Рис. 2. Структура «PasswordManager-1.3-release.apk»
На рис. 2. показана структура apk-файла программы, а именно:
- файл AndroidManifest.xml — описывает разрешения, компоненты, версию SDK, которую рекомендуется использовать и другие настройки приложения;
- файл apktool.yml — содержит служебную информацию, необходимую Аpktool, для повторной компиляции;
- директория lib – сохраняются библиотеки, которые дополнительно загружены в программное приложение разработчиком. В данном случае, используется библиотека с расширением .so;
- директория original — сохраняются служебные файлы программного приложения;
- директория res — содержит файловые, графические и другие ресурсы программного приложения;
- smali — сохраняются файлы исходного кода в виде байт-кода;
Для просмотра исходного кода программы используем инструмент dex2jar (см. Рис. 3). Это дало возможность проанализировать исходный код программы статическим анализатором кода VCG-scanner и вручную (см. Рис. 4).
Рис. 3. Получение исходного кода «PasswordManager-1.3-release.apk» при помощи dex2jar
Рис. 4. Структура пакетов и классов «PasswordManager-1.3-release.apk», показанная с помощью dex2jar
M1. Обход архитектурных ограничений (Improper Platform Usage)
Рис. 5. Файл AndroidManifest.xml
Доступ к файлу AndroidManifest.xml даёт следующую информацию о программе:
- минимально допустимая версия Android — uses-sdk minSdkVersion = "23" (Android 6.0). Эта информация позволяет сразу понять необходимые требования для устройства (или виртуальной машины) на которой будет работать (или тестироваться) программа, а отсюда, с помощью открытых источников, узнать уязвимости целевых операционных систем;
- перечень активностей: WelcomeActivity (общая), ContentActivity, FormActivity. Эта информация дает представление о компонентах программного приложения, которые обеспечивают взаимодействие пользователя и backend-а программы;
- сервис: PasswordGeneratorService. Наличие этого сервиса позволяет быстро найти класс, который работает с криптографическими функциями;
- контент провайдер: UsersProvider (экспортований). Наличие контент провайдера позволяет найти класс, который взаимодействует с внешними ресурсами и базами данных.
M2. Небезопасное хранение данных (Insecure Data Storage)
В программе часть отладочной информации может отображаться в логах системы (см. Рис. 6 и 7). В этом случае сторонняя программа, которая имеет права READ_LOGS (например, logcat или pidcat), может получить доступ к чувствительной информации, тем самым нарушая ее конфиденциальность.
Во время тестирования использовалась программа pidcat (см. Рис. 7). Уязвимость была обнаружена в программном коде (см. Рис. 8) — разработчик оставил функцию Log.d(), которая используется для отладки исходного кода. [6 — 8]
Рис. 6. Пароль в зашифрованном виде |
Рис. 7. В процессе работы программы, пароль, который сохраняется, отображается в логах. |
Рис. 8. Место в программном коде, которое приводит к утечке данных
Рекомендации по закрытию уязвимости — удалить или закомментировать строку исходного кода, которая отражает отладочную информацию в логах.
При анализе программы фреймворком Drozer, были найдены экспортируемые компоненты – ContentProvider (см. Рис. 9), это позволяет просмотреть URI программы и получить доступ к локальной базе данных, которую использует программа [9].
С помощью модуля app.provider.query получаем доступ к локальной базе данных программного приложения.
Рис. 9. Экспортируемые URI-ContentProvider и примеры реализации уязвимости
Анализируя исходный код была найдена вставка в локальную базу данных программы (см. Рис. 10). Найденные данные дают возможность получить несанкционированный доступ к системе.
Рис. 10. Хранение данных в открытом виде в исходном коде.
Рекомендации по исправлению найденной уязвимости:
- файле в AndroidManifest.xml для данного ContentProvider установить следующие флаги: android: exported = false и android: protectionLevel = "signature».
- доступ к ContentProvider необходимо осуществлять с помощью параметризованных запросов: query(), update() и delete().
M3. Небезопасная передача данных (Insecure Communication)
Минимальная версия OS Android, которая определена в программе, не разрешает использовать Proxy. Эта особенность операционной системы позволяет обеспечить защиту от дешифрации трафика на Proxy путем подмены сертификата.
Но в программе реализовано автоматическое переключение с протокола HTTPS на НТТР, если последний не поддерживает шифрование, что может привести к передаче информации открытым каналом передачи.
M4. Небезопасная аутентификация (Insecure Authentication)
В исходном коде нет функционала, который должен обеспечивать аутентификацию на удаленном сервере, который проводит проверку по следующим пунктам:
- отсутствие требований относительно проверки идентификации пользователя;
- отсутствие проверки контроля сессий;
- недостатки управления сеансами.
M5. Слабая криптостойкость (Insufficient Cryptography)
С помощью ручного анализа исходного кода приложения был проанализирован класс FastCrypto.java, который осуществляет преобразование массива байт в хэш-сумму алгоритмом MD5 (см. Рис. 11). Алгоритм MD5 на время тестирования уже был признан ненадежным. Его хэш-сумму можно подобрать, как с помощью онлайн-ресурсов, так и с помощью программных инструментов. [13]
Пароли в локальной базе данных в программы хранятся в хэш-значении «без соли» (см. Рис. 12). С помощью Drozer, было получено доступ к базе данных и найдены пароли. После этого, используя онлайн сервис MD5 Decrypter было подобрано пароль (см. Рис. 13).
Рис. 11. Подключение библиотеки и определения алгоритма хеширования
Рис. 12. Пароль, хеш-сумма которого генерируется алгоритмом MD5
Рис. 13. Результат подбора хеш-суммы
Исходный код просканировали программой VCG scanner и нашли, что программа подключает уязвимую библиотеку (см. Рис. 14 и 15), которая используется для генерации блоков ключа. На момент написания статьи, при использовании библиотеки java.util.Random есть возможность найти следующее случайное значение и рекомендуется использовать библиотеку java.security.SecureRandom [12].
Рис. 14. Найдена уязвимость после сканирования VCG scanner
Рис. 15. Уязвимая библиотека java.util.Random
M6. Небезопасная авторизация (Insecure Authorization)
В программе отсутствует функционал авторизации, но он должен быть предусмотрен, исходя их цели программы.
M7. Контроль содержимого клиентских приложений (Client Code Quality)
Следующие уязвимости были найдены с помощью VCG scanner (см. Рис. 16). Красным цветом выделены уязвимости контроля за вводом имени файла и использования блоков try/catch. Это может привести к ошибкам при работе программы, загрузке и запуску исполняемого файла. Зеленым цветом выделены уязвимости, связанные с в использование объекта Intent. Согласно OWASP, принятия объекта Intent с другого компонента, без проверки считается уязвимостью.
Рекомендации:
- использование блоков контроля за исключением try/catch;
- контроль за входящими параметрами и именами файлов;
- проверка объектов Intent при их получении.
Рис. 16. Результат сканирования
M8. Модификация данных (Code Tampering)
С помощью фреймворка Drozer была найдена потенциальная уязвимость SQL-injection (см рис.17). Эта уязвимость может предоставить возможность модифицировать данные, сохраненные в локальной базе данных. Для верификации была предпринята попытка модифицировать данные в базе данных (см. Рис. 18), но на запрос изменения информации был получен ответ — «Not yet implemented» (см. Рис. 18). Это означает, что запрос на модификацию данных не реализовано в программе (см. Рис. 19), поэтому с помощью фреймворка Drozer, на время проведения тестирования, не имеет возможности модифицировать данные. [9]
Рис. 17. Проверка уязвимости базы данных
Рис. 18. Верификация найденной уязвимости
Рис. 19. Уязвимое место модификации данных
M9. Анализ исходного кода (Reverse Engineering)
Исходный код программы не обфуcцирован, что дает возможность анализировать исходный код. Для анализа программного кода использовали программы apktool и dex2jar. После этого были проанализированы архитектура и фукционал, а также проведено статическое сканирования кода (см. Рис. 1 — 5, 8, 10 — 11, 14 — 16, 18) и выявились потенциальные уязвимости, которые описывались выше.
Для защиты исходного кода необходимо провести его обфускацию. Также необходимо предусмотреть не только его шифрования, а также добавить средства детектирования подделки кода.
M10. Скрытый функционал (Extraneous Functionality)
Скрытый функционал не был найден на время тестирования.
Выводы
Проанализировав возможность применения методологии OWASP Mobile TOP 10 для тестирования на уязвимости мобильных приложения, можем сделать вывод, что оно позволяет наглядно и в цифрах проанализировать количество потенциальных уязвимостей, которые могут привести к нарушению конфиденциальности, целостности и доступности информации, которую программа получает, хранит и обрабатывает. Но в то же время были отмечены некоторые недостатки, а именно некоторые уязвимости можно одновременно отнести к разным категориям, что затрудняет возможность оценки риска найденной уязвимости и способа ее закрытия. Таким образом было проведена наглядная демонстрация использования методологии OWASP Mobile TOP 10 и сделан вывод, что программу нельзя выставлять в релиз. Количество уязвимостей приведено в Таблице 3.
Таблица 3:
№ | Категория | Количество уязвимостей |
М1 | Обход архитектурных ограничений | 1 |
М2 | Небезопасное хранение данных | 2 |
М3 | Небезапасная передача данных | 1 |
М4 | Небезапасная аутентификация |
0 |
М5 | Слабая криптостойкость | 2 |
М6 | Небезапасная авторизация | 0 |
М7 | Контроль содержания клиентских приложений | 2 |
М8 | Модификация данных | 1 |
М9 | Анализ исходного кода | 1 |
М10 | Скрытый функционал | 0 |
Комментариев нет:
Отправить комментарий