Согласно BetaNews, из 30 лучших приложений с более чем 500 000 установок 94% содержат по меньшей мере три уязвимости среднего риска, а 77% содержат хотя бы две уязвимости с высоким уровнем риска. Из 30 приложений 17% были уязвимы для атак MITM, подвергая все данные перехвату злоумышленниками. Кроме того, 44% приложений содержат конфиденциальные данные с жесткими требованиями к шифрованию, включая пароли или ключи API, а 66% используют функциональные возможности, которые могут поставить под угрозу конфиденциальность пользователей. Именно поэтому мобильные устройства являются предметом многих дискуссий по вопросам безопасности. Принимая все это во внимание, мы в ByteCodeрешили рассмотреть методологию OWASP Mobile TOP10 с целью продемонстрировать процесс проведения анализа мобильных приложений на уязвимости. OWASP Mobile TOP 10 — одна из основных методологий тестирования приложений на уязвимости. В таблице 1 описаны 10 уязвимостей, которые применяются для характеристики уровня безопасности приложения. [2,7,11] Таблица 1:  Уязвимости и их описание Для тестирования приложения «PasswordManager-1.3-release.apk», в соответствии с OWASP Mobile TOP 10, мы не применяли онлайновые и файлообменные ресурсы, а только использовали набор программ, описание которых приведено в Таблице 2. [6 — 10] Таблица 2: Используемые программы Сначала производим декомпиляцию программы «PasswordManager-1.3-release.apk» с помощью инструмента Apktool (см. Рис.1). Декомпиляция программой Apktool не позволяет получить исходный код в понятной форме, но позволяет получить доступ к другим ресурсам программы, которые расскажут об архитектуре, библиотеках, которые использует программа и др. Рис. 1. Декомпиляция «PasswordManager-1.3-release.apk». Рис. 2. Структура «PasswordManager-1.3-release.apk». На рис. 2. показана структура apk-файла программы, а именно: Для просмотра исходного кода программы используем инструмент 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 даёт следующую информацию о программе: M2. Небезопасное хранение данных (Insecure Data Storage) В программе часть отладочной информации может отображаться в логах системы (см. Рис. 6 и 7). В этом случае сторонняя программа, которая имеет права READ_LOGS (например, logcat или pidcat), может получить доступ к чувствительной информации, тем самым нарушая ее конфиденциальность. Во время тестирования использовалась программа pidcat (см. Рис. 7). Уязвимость была обнаружена в программном коде (см. Рис. 8) — разработчик оставил функцию Log.d(), которая используется для отладки исходного кода. [6 — 8] Рис. 8. Место в программном коде, которое приводит к утечке данных. Рекомендации по закрытию уязвимости — удалить или закомментировать строку исходного кода, которая отражает отладочную информацию в логах. При анализе программы фреймворком Drozer, были найдены экспортируемые компоненты – ContentProvider (см. Рис. 9), это позволяет просмотреть URI программы и получить доступ к локальной базе данных, которую использует программа [9]. С помощью модуля app.provider.query получаем доступ к локальной базе данных программного приложения. Рис. 9. Экспортируемые URI-ContentProvider и примеры реализации уязвимости. Анализируя исходный код была найдена вставка в локальную базу данных программы (см. Рис. 10). Найденные данные дают возможность получить несанкционированный доступ к системе. Рис. 10. Хранение данных в открытом виде в исходном коде. Рекомендации по исправлению найденной уязвимости: 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 с другого компонента, без проверки считается уязвимостью.
Рекомендации: Рис. 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: