# Отчет по анализу защищенности Android приложения com.android.InsecureBankv2 ## Введение В рамках проводимых работ производился анализ защищенности приложения com.android.InsecureBankv2 (далее - Приложение) и его компонентов. ## Цель и Задачи Целью данных работ являлось поиск уязвимостей Приложения и поиск методов их устранения. Задачи: - сбор информации о системе - анализ защищенности - предоставление рекомендаций по увеличению защищенности Системы - формирование отчетной документации ## Состав работ в рамках проводимых работ предополагалось проведение следующих этапов: - статический анализ защищенности - динамический анализ защищенности - составление отчета ## Методика проведения работ 1. Сбор информации о Приложении 2. Анализ ошибок приложения 3. Тестирование механизма аутентификации 4. Тестирование механизма управления сессиями 5. Анализ защищенности среды передачи данных 6. Тестирование защищенности клиентской части приложения от возможных утечек данных 7. Тестирование серверной части Приложения на чувствительность к иньекциям ## Условия проведения работ Серверная часть Приложения была развернута на локальном компьютере также как и виртуальных эмулятор (далее - Устройство), на котором было установлено Приложение из apk файла. Каких либо дополнительных методов защиты включено не было. ## Исходные данные В качестве исходных данных для проводимых работ на сервере была использована база данных SQLLite, в которой присутствовали 2 тестовые записи пользователей: jack, dinesh. ## Краткое содержание результатов работ В результате выполнения работ были обнаружены следующие уязвимости: 1. Insecure Logging mechanism 2. Insecure HTTP connections 3. Username Enumeration issue 4. Insecure SDCard storage 5. Developer Backdoors 6. Android Backup vulnerability 7. Application Debuggable 8. Hardcoded secrets 9. Sensitive Information in Memory 10. Insecure Content Provider access 11. Vulnerable Activity Components 12. Intent Sniffing and Injection 13. Root Detection and Bypass 14. Android keyboard cache issues 15. Insecure Webview implementation 16. Weak change password implementation Выработаны рекомендации по их устранению. ## подробное описание результатов работ ### 1. Insecure Logging mechanism **CWE-532:** Inclusion of Sensitive Information in Log Files **Уровень опасности по CVSS 3.0:** [Средний (4.6)](https://www.first.org/cvss/calculator/3.0#CVSS:3.0/AV:P/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N) **Описание:** Данная уязвимость является следствием ведения лога действий пользователя при вводе конфиденциальных данных. В результате чего указанные данные сохраняются в лог-файлах устройства. **Демонстрация наличия уязвимости:** Было установлено, что Приложение пишет в лог устройства конфиденциальные данные. Так в коде Приложения прописано отправлять данные в журнал событий: - о смене пароля: ![](https://i.imgur.com/UNZYufT.png) - об авторизации с указанием имени пользователя и пароля: ![](https://i.imgur.com/KZuTy9E.png) Указанные данные были обнаружены в лог файлах посредством Logcat: - о переводе средств: ![](https://i.imgur.com/rFPjrlU.png) - об авторизации с указаниме логина и пароля: ![](https://i.imgur.com/53vDans.png) **Рекомендации по повышению уровня защищенности:** удалить в коде программы логирование конфиденциальных данных. ### 2. Insecure HTTP connections **CWE-319:** Cleartext Transmission of Sensitive Information **Уровень опасности по CVSS 3.0:**[средний 5.7](https://www.first.org/cvss/calculator/3.0#CVSS:3.0/AV:A/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N) **Описание:** Данная уязвимость является следствием использования разработчиками приложений небезопасного протокола http, при использовании которого данные передаются в открытом, незащищенном виде. В рузультате чего все данные, которыми обменивается Приложение и сервер могут быть перехвачены злоумышленником. **Демонстрация наличия уязвимости:** В коде Приложения прописана отправка конфиденциальных данных через небезопасный протокол http: ![](https://i.imgur.com/c30KhkN.png) В связи с этим у злоумышленника существует возможность перехватить данные пользователя при: - авторизации: ![](https://i.imgur.com/pTnazwx.png) - смене пароля: ![](https://i.imgur.com/n7X8J4j.png) - переводе денежных средств: ![](https://i.imgur.com/bKOFcwM.png) **Рекомендации по повышению уровня защищенности:** в коде программы использовать только безопасный протокол https. В логике сервера запретить использование протокола http. ### 3. Username Enumeration issue **CWE CATEGORY:** SFP Secondary Cluster: Insecure Authentication Policy **Уровень опасности по CVSS 3.0:**[средний 5.3](https://www.first.org/cvss/calculator/3.0#CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N) **Описание:** Данная уязвимость прослеживается в случае если сервер приложения ни как не отслеживает количество запросов с одного ip адреса, а так же дает ответ о неправильном имени пользователя без получения пароля. В результате чего сильно упрощается механизм перебора имени пользователя. **Демонстрация наличия уязвимости:** В Приложении возможно перебрать имена пользователей, таким образом установить все логины учетных записей зарегестрированные на сервере: ![](https://i.imgur.com/nVSQbie.png) **Рекомендации по повышению уровня защищенности:** настроить логику сервера таким образом, чтобы он отвечал только на валидные запросы, содержащие как имя пользователя так и пароль. ### 4. Insecure SDCard storage **CWE CATEGORY:** OWASP Top Ten 2004 Category A8 - Insecure Storage **Уровень опасности по CVSS 3.0:**[низкий 2.4](https://www.first.org/cvss/calculator/3.0#CVSS:3.0/AV:P/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N) **Описание:** Небезопасное хранение конфиденциальных данных на SDCard в открытом виде. **Демонстрация наличия уязвимости:** В коде Приложения прописано отправлять лог переводов по счетам на sdcard: ![](https://i.imgur.com/HGnHg02.png) Где они хранятся в незашифрованном виде: ![](https://i.imgur.com/cUgXdkO.png) **Рекомендации по повышению уровня защищенности:** отключить логирование конфиденциальных данных для предотвращения их утечек. ### 5.Developer Backdoors **CWE-912:** Hidden Functionality (Backdoor) **Уровень опасности по CVSS 3.0:**[низкий 2.4](https://www.first.org/cvss/calculator/3.0#CVSS:3.0/AV:P/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N) **Описание:** Зачастую, разработчики приложений создают backdoor для возможности входа при его отладки. Однако после выхода приложения в релиз данный backdoor просто забывают удалить. В результате чего злоумышленик может зайти в приложение не имея учетной записи на сервере. **Демонстрация наличия уязвимости:** В коде программы указан логин суперпользователя: ![](https://i.imgur.com/41pmPtm.png) При вводе которого возможно зайти в Приложение без указания пароля: ![](https://i.imgur.com/rjfCvYa.png) **Рекомендации по повышению уровня защищенности:** удалить из кода Приложения возможность зайти на него без регистрации на сервере. ### 6.Android Backup vulnerability **CWE-530:** Exposure of Backup File to an Unauthorized Control Sphere **Уровень опасности по CVSS 3.0:**[средний 4.6](https://www.first.org/cvss/calculator/3.0#CVSS:3.0/AV:P/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N) **Описание:** Устройства Android имеют функцию бэкапа установленных приложений. При этом данные хранящиеся в приложениях так же сохраняются в бэкап файлах. Таким образом, злоумышленник, получив доступ к бэкап файлу, может извлечь из него данные приложения. **Демонстрация наличия уязвимости:** В манифесте Приложения разрешено копирование данных приложения в бэкап устройства: ![](https://i.imgur.com/GVIPmqy.png) Таким образом при создании бэкапа Устройство существует возможность получить доступ к сохраненным в Приложении конфиденциальным данным. К примеру к зашифрованным логинам и паролям: ![](https://i.imgur.com/L6NVzD5.png) **Рекомендации по повышению уровня защищенности:** запретить в манифесте Приложения копировать данные в бэкап файл. ### 7.Application Debuggable **CWE-215:** Information Exposure Through Debug Information **Уровень опасности по CVSS 3.0:**[средний 4.6](https://www.first.org/cvss/calculator/3.0#CVSS:3.0/AV:P/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N) **Описание:** Android устройства возможно запустить в режиме отладки. При этом все приложения, которые в манифесте разрешено запускать в данном режиме, также возможно отлаживать. При этом, в процессе отладки появляется возможность получить доступ к расшифрованным данным приложения. **Демонстрация наличия уязвимости:** В манифесте Приложения присутствует строка android:debuggable="true", позволяющая производить отладку: ![](https://i.imgur.com/48IlZDv.png) Таким образом, запустив отладку Приложения при автозаполнении логина и пароля можно перехватить указанные данные: ![](https://i.imgur.com/sCNj22c.png) **Рекомендации по повышению уровня защищенности:** отладку Приложения необходимо отключать при его выпуске. ### 8. Hardcoded secrets **CWE-321:** Use of Hard-coded Cryptographic Key **Уровень опасности по CVSS 3.0:**[средний 4,6](https://www.first.org/cvss/calculator/3.0#CVSS:3.0/AV:P/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N) **Описание:** Логин и пароль пользователя хранятся на устройстве в зашифрованном виде. Однако шифрование и дешифрование указанных данных производится Приложением с использованием ключей, которые хранятся в коде программы. **Демонстрация наличия уязвимости:** Использовав код Приложения, возможно написать скрипт, который декодирует зашифрованные логин и пароль, хранящиеся в share_preferense: ```java import java.util.Base64; import java.io.UnsupportedEncodingException; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.spec.AlgorithmParameterSpec; import javax.crypto.IllegalBlockSizeException; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; class enc{ public static byte[] aes256decrypt(byte[] ivBytes2, byte[] keyBytes, byte[] textBytes) throws UnsupportedEncodingException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivBytes2); SecretKeySpec newKey = new SecretKeySpec(keyBytes, "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(2, newKey, ivSpec); return cipher.doFinal(textBytes); } public static void main(String[] args) throws UnsupportedEncodingException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { String theString = "v/sJpihDCo2ckDmLW5Uwiw=="; String key = "This is the super secret key 123"; byte[] ivBytes = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; byte[] cipherData = aes256decrypt(ivBytes, key.getBytes("UTF-8"), Base64.getDecoder().decode(theString.getBytes("UTF-8"))); System.out.println(new String(cipherData, "UTF-8")); } } ``` ![](https://i.imgur.com/SUyzHs9.png) **Рекомендации по повышению уровня защищенности:** хранить ключи шифрования на серверной части Приложения. ### 9. Sensitive Information in Memory **CWE-316:** Cleartext Storage of Sensitive Information in Memory **Уровень опасности по CVSS 3.0:**[средний 4.6](https://www.first.org/cvss/calculator/3.0#CVSS:3.0/AV:P/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N) **Описание:** При работе любых приложений используются переменные в оперативной памяти, которые могут хранить конфиденциальные данные.Так, Приложением используются переменные, хранящие в незащищенном виде логин и пароль. При этом срок хранения данных переменные не ограничен: **Демонстрация наличия уязвимости:** ![](https://i.imgur.com/5zyR4r5.png) Таким образом в памяти устройства продолжительное время после аудонтификации возможно найти и прочитать данные пользователя. ![](https://i.imgur.com/0copuQy.png) **Рекомендации по повышению уровня защищенности:** в коде Приложения необходимо указать минимальный срок хранения переменных, хранящих логин и пароль пользователя. ### 10. Insecure Content Provider access **CWE-926:** Improper Export of Android Application Components **Уровень опасности по CVSS 3.0:**[средний 5.7](https://www.first.org/cvss/calculator/3.0#CVSS:3.0/AV:P/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N) **Описание:** При использовании content provider разработчики не ограничивают обращение к нему из сторонних приложений. **Демонстрация наличия уязвимости:** В коде программы и в манифесте указано информацию об успешной авторизации писать в базу данных посредством content provider: ![](https://i.imgur.com/plpUSTu.png) ![](https://i.imgur.com/5RL9lJj.png) Однако данный content provider доступен из других приложений Устройства. Таким образом возможно, используя сторонние механизмы получить доступ к информации о том, под какими логинами заходили в Приложение: ![](https://i.imgur.com/r5QlSvf.png) **Рекомендации по повышению уровня защищенности:** не использовать content provider для работы с конфиденциальными данными ### 11.Vulnerable Activity Components **CWE-926:** Improper Export of Android Application Components **Уровень опасности по CVSS 3.0:**[низкий 2.4](https://www.first.org/cvss/calculator/3.0#CVSS:3.0/AV:P/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N) **Описание:** В некоторых случаях разработчики приложений используют intent функции в классах. При этом к данным функциям могут обращаться другие классы. **Демонстрация наличия уязвимости:** Приложение использует intent для определения имени пользователя под которым он вошел в приложение: ![](https://i.imgur.com/Y2mn5DZ.png) Однако, данный intent доступен из сторонних приложений Устройства. Таким образом возможно, не заходя в приложение, определить валидное имя пользователя: ![](https://i.imgur.com/ymb0WPb.png) **Рекомендации по повышению уровня защищенности:** не использовать элементы intent для конфиденциальных данных пользователя. ### 12.Intent Sniffing and Injection **CWE-926:** Improper Export of Android Application Components **Уровень опасности по CVSS 3.0:**[низкий 2.4](https://www.first.org/cvss/calculator/3.0#CVSS:3.0/AV:P/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N) **Описание:** В некоторых случаях разработчики приложений используют intent функции в классах. При этом к данным функциям могут обращаться другие классы. **Демонстрация наличия уязвимости:** Приложение использует intent для отправки смс об изменении пароля на Устройство: ![](https://i.imgur.com/OzvnmQh.png) Данный intent возомжно использовать из стороннего приложения. Таким образом пользователя можно ввести в заблуждение о том, что его пароль был изменен: ![](https://i.imgur.com/fBRU0UV.png) ![](https://i.imgur.com/AG1Xqln.png) **Рекомендации по повышению уровня защищенности:** при использовании intent не следует открывать доступ к ним из сторонних приложений ### 13. Root Detection and Bypass **CWE-693:** Protection Mechanism Failure **Уровень опасности по CVSS 3.0:**[средний 4.6](https://www.first.org/cvss/calculator/3.0#CVSS:3.0/AV:P/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N) **Описание:** Для защиты приложений от действий злоумышленников разработчики проверяют устройство на наличие расширенных прав. В случае обнаружения указанных прав ряд функционала Приложения следует отключить. **Демонстрация наличия уязвимости:** Приложение использует 2 функции для проверки Устройства на наличии прав root. ![](https://i.imgur.com/girknGQ.png) При запуске Приложения через специализированные программные средства возможно подменить вывод функций таким образом, что бы логика программы была нарушена. ![](https://i.imgur.com/aGu2B6m.png) **Рекомендации по повышению уровня защищенности:** при написании кода Приложения использовать переменные и ссылки для усложнения прочтения данного кода злоумышленником. ### 14. Android keyboard cache issues **CWE-524:** Information Exposure Through Caching **Уровень опасности по CVSS 3.0:**[низкий 2.4](https://www.first.org/cvss/calculator/3.0#CVSS:3.0/AV:P/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N) **Описание:** В Android устройствах присутсвуют функции автокоррекции вводимого пользователем текста. Для заполнения полей используются встроенные словари. Таким образом существует опасность того, что информация о логине, вводимом пользователем может быть автоматически или вручную самим пользователем добавлена в "пользовательский словарь" **Демонстрация наличия уязвимости:** Указанная функция реализована при введении логина при входе в Приложение: ![](https://i.imgur.com/mkaiVoR.png) Содержимое "пользовательского словаря": ![](https://i.imgur.com/M74Spyk.png) Таким образом злоумышленник может похитить указанные конфиденциальные данные пользователя. **Рекомендации по повышению уровня защищенности:** поля для ввода любых конфиденциальных данных должны иметь тип, к которому запрещено применение авторедактирования. ### 15. Insecure Webview implementation **CWE-749:** Exposed Dangerous Method or Function **Уровень опасности по CVSS 3.0:**[средний 6.4](https://www.first.org/cvss/calculator/3.0#CVSS:3.0/AV:P/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H) **Описание:** При использовании метода webview разработчики не учитывают риск того, что файл, на который ссылается указанный метод может быть подменен злоумышленником на файл с кодом. При этом, при обращении метода webview к данному файлу код будет выполнен. **Демонстрация наличия уязвимости:** В приложении существует возможность просмотра последних переводов средств между счетами. Однако для этих целей используется небезопасный метод webview: ![](https://i.imgur.com/1ujTSdG.png) Пример выполнения кода, написанного в файле, к которому обращается метод webview Приложения: ![](https://i.imgur.com/hLTCrJY.png) **Рекомендации по повышению уровня защищенности:** по возможности не использовать webview, либо обращаться не к локально размещенному на Устройстве файлу, а к базе даных сервера. ### 16. Weak change password implementation **CWE-620:** Unverified Password Change **Уровень опасности по CVSS 3.0:**[средний 4.3](https://www.first.org/cvss/calculator/3.0#CVSS:3.0/AV:P/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L) **Описание:** Данная уязвимость характеризуется слабой защитой процедуры смены пароля. **Демонстрация наличия уязвимости:** Процедуру смены пароля в Приложении можно выполнить с любого стороннего устройства либо специализированного программного обеспечения. Для успешной смены пароля достаточно знать лишь имя пользователя: ![](https://i.imgur.com/cZN51lw.png) **Рекомендации по повышению уровня защищенности:** перед сменой пароля сервер должен сначало аутентифицировать пользователя. ## При тестировании Приложения использовались следующие программные средства 1. Android Studio 2. Apktool 3. Jadx-gui 4. Frida 5. Burp Suit Так как Приложение было развернуто на тестовом стенде, в ходе тестирования доступа к персональным данным получено не было. Изменений на рабочих серверах Приложения внесено не было.