В рамках проводимых работ производился анализ защищенности приложения com.android.InsecureBankv2 (далее - Приложение) и его компонентов.
Целью данных работ являлось поиск уязвимостей Приложения.
Задачи:
в рамках проводимых работ предополагалось проведение следующих этапов:
Серверная часть приложения была развернута на локальном компьютере также как и виртуальных эмулятор (далее - Устройство), на котором было установлено Приложение из apk файла. Каких либо дополнительных методов защиты включено не было.
В качестве исходных данных для проводимых работ использовалась база данных SQLLite, в которой присутствовали 2 тестовые записи пользователей: jack, dinesh.
В результате выполнения работ были обнаружены следующие уязвимости:
CWE-532: Inclusion of Sensitive Information in Log Files
Уровень опасности по CVSS 3.0: Средний (4.6)
Описание:
Данная уязвимость является следствием ведения лога действий пользователя при вводе конфиденциальных данных. В результате чего указанные данные сохраняются в лог-файлах устройства.
Демонстрация наличия уязвимости:
Было установлено, что Приложение пишет в лог устройства конфиденциальные данные.
Так в коде Приложения прописано отправлять данные в журнал событий:
о смене пароля:
об авторизации с указанием имени пользователя и пароля:
Указанные данные были обнаружены в лог файлах Logcat:
о переводе средств:
об авторизации с указаниме логина и пароля:
Рекомендации по повышению уровня защищенности:
удалить в коде программы логирование конфиденциальных данных.
CWE-319: Cleartext Transmission of Sensitive Information
Уровень опасности по CVSS 3.0:средний 5.7
Описание:
Данная уязвимость является следствием использования разработчиками приложений небезопасного протокола http, при использовании которого данные передаются в открытом, незащищенном виде. В рузультате чего все данные, которыми обменивается Приложение и сервер могут быть перехвачены злоумышленником.
Демонстрация наличия уязвимости:
В коде Приложения прописана отправка конфиденциальных данных через небезопасный протокол http:
В связи с этим у злоумышленника существует возможность перехватить данные пользователя при:
авторизации:
смене пароля:
переводе денежных средств:
Рекомендации по повышению уровня защищенности:
в коде программы использовать только безопасный протокол https. В логике сервера запретить использование протокола http.
CWE CATEGORY: SFP Secondary Cluster: Insecure Authentication Policy
Уровень опасности по CVSS 3.0:средний 5.3
Описание:
Данная уязвимость прослеживается в случае если сервер приложения ни как не отслеживает количество запросов с одного ip адреса, а так же дает ответ о неправильном имени пользователя без получения пароля. В результате чего сильно упрощается механизм перебора имени пользователя.
Демонстрация наличия уязвимости:
В Приложении возможно перебрать имена пользователей, таким образом установить все логины учетных записей зарегестрированные на сервере:
Рекомендации по повышению уровня защищенности:
настроить логику сервера таким образом, чтобы он отвечал только на валидные запросы, содержащие как имя пользователя так и пароль.
CWE CATEGORY: OWASP Top Ten 2004 Category A8 - Insecure Storage
Уровень опасности по CVSS 3.0:низкий 2.4
Описание:
Небезопасное хранение конфиденциальных данных на SDCard в открытом виде.
Демонстрация наличия уязвимости:
В коде Приложения прописано отправлять лог переводов по счетам на sdcard:
Где они хранятся в незашифрованном виде:
Рекомендации по повышению уровня защищенности:
отключить логирование конфиденциальных данных для предотвращения их утечек.
CWE-912: Hidden Functionality (Backdoor)
Уровень опасности по CVSS 3.0:низкий 2.4
Описание:
Зачастую, разработчики приложений создают backdoor для возможности входа при его отладки. Однако после выхода приложения в релиз данный backdoor просто забывают удалить. В результате чего злоумышленик может зайти в приложение не имея учетной записи на сервере.
Демонстрация наличия уязвимости:
В коде программы указан логин суперпользователя:
При вводе которого возможно зайти в Приложение без указания пароля:
Рекомендации по повышению уровня защищенности:
удалить из кода Приложения возможность зайти на него без регистрации на сервере.
CWE-530: Exposure of Backup File to an Unauthorized Control Sphere
Уровень опасности по CVSS 3.0:средний 4.6
Описание:
Устройства Android имеют функцию бэкапирования установленных приложений. При этом данные хранящиеся в приложении сохраняются в бэкапах. Таким образом, злоумышленник может, получив доступ к бэкап файлу, извлеч из него данные приложения.
Демонстрация наличия уязвимости:
В манифесте Приложения разрешено копирование данных приложения в бэкап устройства:
Таким образом при создании бэкапа Устройство существует возможность получить доступ к сохраненным в Приложении конфиденциальным данным. К примеру к зашифрованным логинам и паролям:
Рекомендации по повышению уровня защищенности:
запретить в манифесте Приложения копировать данные в бэкап файл.
CWE-215: Information Exposure Through Debug Information
Уровень опасности по CVSS 3.0:средний 4.6
Описание:
Android устройства возможно запустить в режиме отладки. При этом все приложения, которые в манифесте разрешено запускать в данном режиме, также возможно отлаживать. В результате, в процессе отладки появляется возможность получить доступ к расшифрованным данным приложения.
Демонстрация наличия уязвимости:
В манифесте Приложения присутствует строка android:debuggable="true", позволяющая производить отладку:
Таким образом, запустив отладку Приложения при автозаполнении логина и пароля можно перехватить указанные данные:
Рекомендации по повышению уровня защищенности:
отладку Приложения необходимо отключать при его выпуске.
CWE-321: Use of Hard-coded Cryptographic Key
Уровень опасности по CVSS 3.0:средний 4,6
Описание:
Логин и пароль пользователя хранятся на устройстве в зашифрованном виде. Однако шифрование и расшифровка указанных данных производится Приложением с использованием ключей, которые хранятся в коде программы.
Демонстрация наличия уязвимости:
Использовав код Приложения, возможно написать скрипт, который декодирует зашифрованные логин и пароль, хранящиеся в share_preferense:
Рекомендации по повышению уровня защищенности:
хранить ключи шифрования на серверной части Приложения.
CWE-316: Cleartext Storage of Sensitive Information in Memory
Уровень опасности по CVSS 3.0:средний 4.6
Описание:
При работе любых приложений используются переменные в оперативной памяти, которые могут хранить конфиденциальные данные.Так, Приложением используются переменные, хранящие в незащищенном виде логин и пароль. При этом срок хранения данных переменные не ограничен:
Демонстрация наличия уязвимости:
Таким образом в памяти устройства продолжительное время после аудонтификации возможно найти и прочитать данные пользователя.
Рекомендации по повышению уровня защищенности:
в коде Приложения необходимо указать минимальный срок хранения переменных, хранящих логин и пароль пользователя.
CWE-926: Improper Export of Android Application Components
Уровень опасности по CVSS 3.0:средний 5.7
Описание:
При использовании content provider разработчики не ограничивают обращение к нему из сторонних приложений.
Демонстрация наличия уязвимости:
В коде программы и в манифесте указано информацию об успешной авторизации писать в базу данных посредством content provider:
Однако данный content provider доступен из других приложений Устройства. Таким образом возможно, используя сторонние механизмы получить доступ к информации о том, под какими логинами заходили в Приложение:
Рекомендации по повышению уровня защищенности:
не использовать content provider для работы с конфиденциальными данными
CWE-926: Improper Export of Android Application Components
Уровень опасности по CVSS 3.0:низкий 2.4
Описание:
В некоторых случаях разработчики приложений используют intent функции в классах. При этом к данным функциям могут обращаться другие классы.
Демонстрация наличия уязвимости:
Приложение использует intent для определения имени пользователя под которым он вошел в приложение:
Однако, данный intent доступен из сторонних приложений Устройства. Таким образом возможно, не заходя в приложение, определить валидное имя пользователя:
Рекомендации по повышению уровня защищенности:
не использовать элементы intent для конфиденциальных данных пользователя.
CWE-926: Improper Export of Android Application Components
Уровень опасности по CVSS 3.0:низкий 2.4
Описание:
В некоторых случаях разработчики приложений используют intent функции в классах. При этом к данным функциям могут обращаться другие классы.
Демонстрация наличия уязвимости:
Приложение использует intent для отправки смс об изменении пароля на Устройство:
Данный intent возомжно использовать из стороннего приложения. Таким образом пользователя можно ввести в заблуждение о том, что его пароль был изменен:
Рекомендации по повышению уровня защищенности: при использовании intent не следует открывать доступ к ним из сторонних приложений
CWE-693: Protection Mechanism Failure
Уровень опасности по CVSS 3.0:средний 4.6
Описание:
Для защиты приложений от действий злоумышленников разработчики проверяют устройство на наличие расширенных прав. В случае обнаружения указанных прав ряд функционала Приложения следует отключить.
Демонстрация наличия уязвимости:
Приложение использует 2 функции для проверки Устройства на наличии прав root.
При запуске Приложения через специализированные программные средства возможно подменить вывод функций таким образом, что бы логика программы была нарушена.
Рекомендации по повышению уровня защищенности:
при написании кода Приложения использовать переменные и ссылки для усложнения прочтения данного кода злоумышленником.
CWE-524: Information Exposure Through Caching
Уровень опасности по CVSS 3.0:низкий 2.4
Описание:
В Android устройствах присутсвуют функции автокоррекции вводимого пользователем текста. Для заполнения полей используются встроенные словари. Таким образом существует опасность того, что информация о логине, вводимом пользователем может быть автоматически или вручную самим пользователем добавлена в "пользовательский словарь"
Демонстрация наличия уязвимости:
Указанная функция реализована при введении логина при входе в Приложение:
Содержимое "пользовательского словаря":
Таким образом злоумышленник может похитить указанные конфиденциальные данные пользователя.
Рекомендации по повышению уровня защищенности:
поля для ввода любых конфиденциальных данных должны иметь тип, к которому запрещено применение авторедактирования.
CWE-749: Exposed Dangerous Method or Function
Уровень опасности по CVSS 3.0:средний 6.4
Описание:
При использовании метода webview разработчики не учитывают риск того, что файл, на который ссылается указанный метод может быть подменен злоумышленником на файл с кодом. При этом, при обращении метода webview к данному файлу код будет выполнен.
Демонстрация наличия уязвимости:
В приложении существует возможность просмотра последних переводов средств между счетами. Однако для этих целей используется небезопасный метод webview:
Пример выполнения кода, написанного в файле, к которому обращается метод webview Приложения:
Рекомендации по повышению уровня защищенности:
по возможности не использовать webview, либо обращаться не к локально размещенному на Устройстве файлу, а к базе даных сервера.
CWE-620: Unverified Password Change
Уровень опасности по CVSS 3.0:средний 4.3
Описание:
Данная уязвимость характеризуется слабой защитой процедуры смены пароля.
Демонстрация наличия уязвимости:
Процедуру смены пароля в Приложении можно выполнить с любого стороннего устройства либо специализированного программного обеспечения. Для успешной смены пароля достаточно знать лишь имя пользователя:
Рекомендации по повышению уровня защищенности:
перед сменой пароля сервер должен сначало аутентифицировать пользователя.