Разработка сайта для Вашего бизнеса. Веб дизайн. Дизайн логотипа, фирменного стиля, рекламная фотография . Комплексный рекламный креатив.

Ralex. We do the work.
На рынке с 1999го года. Средняя ценовая категория. Ориентация на эффективность решений.
Ознакомтесь с нашим портфолио
Узнайте больше о услугах
Свяжитесь с нами:
E-mail: [email protected]
Tel: (044) 587 - 84 - 78
Custom web design & дизайн и разработка сайта "под ключ"
Креативный, эффективный дизайн. Система управления сайтом (СУС).
Custom flexible разработка систем электронной коммерции
Система e-commerce разрабатывается под индивидуальные потребности. Гибкая функциональность.
Search Engine Optimzation & оптимизация под поисковые системы (SEO)
Постоянная оптимизация и мониторинг сайта в поисковых системах. Достигаем результата быстро и эффективно
Custom logo design & дизайн логотипа и фирменного стиля
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.
профессиональная рекламная фотография
креативно, смело, качественно
Custom logo design & рекламный креатив. дизайн рекламы
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.

4 методу обходу верифікації SSL-сертифікатів в Android

Наша взаимовыгодная связь https://banwar.org/

Пройшли ті часи, коли мобільні додатки мужньо ігнорували всі помилки, пов'язані з SSL, і дозволяли перехоплювати і модифікувати трафік.

Автор: Cody Wass

Пройшли ті часи, коли мобільні додатки мужньо ігнорували всі помилки, пов'язані з SSL, і дозволяли перехоплювати і модифікувати трафік. Сучасні програми, як мінімум, перевіряють ланцюжки сертифікатів на валідність і приналежність до достовірного центру сертифікації. Ми, пентестери, ставимо перед собою завдання «переконати» додаток, що сертифікат надійний з метою виконання атаки типу «людина посередині» і подальшої зміни трафіку. У цій статті будуть розглянуті наступні техніки обходу перевірок SSL-сертифікатів в Android:

  • Додавання сертифікатів в сховище достовірних сертифікатів.
  • Перезапис упакованих сертифікатів.
  • Використання скрипта Frida для обходу перевірок SSL-сертифікатів.
  • Зміна коду перевірки сертифіката.

Деякі з вищевказаних технік - прості, інші - більш складні в реалізації. Ми розглянемо кожен з цих методів без особливого заглиблення в специфічні деталі.

Навіщо потрібна MITM-атака на SSL

Щоб переглядати та змінювати виклики веб-служби, використовуваної мобільним додатком, нам знадобиться проміжний проксі сервер для перехоплення, створений за допомогою утиліт навроде BurpSuite або ZAP. При перехопленні SSL-трафіку SSL-з'єднання переривається на стороні проксі-сервера. Сертифікат, що відсилається проксі-сервером, аналізується мобільним додатком, як якщо б проксі був кінцевої точкою веб-служби. За замовчуванням самоподпісанний сертифікат, що генеруються утилітами зразок Burp, не належатиме перевіреної достовірної ланцюжку. Якщо сертифікат не можна перевірити на достовірність, більшість мобільних будуть обривати з'єднання замість того, щоб підключатися і працювати в потенційно незахищеному каналі. Техніки, представлені нижче, призначені для однієї мети - переконати мобільний додаток, що сертифікат, що відправляється проксі-сервером, є достовірним.

Техніка 1 - Додавання сертифіката в сховище сертифікатів користувача

Найпростіший спосіб уникнути SSL-помилок - обзавестися дійсним і надійним сертифікатом. Це завдання вирішується відносно просто, якщо ви зможете встановити достовірний сертифікат на пристрій. Якщо операційна система довіряє вашому центру сертифікації, то буде довіряти і сертифікату, підписаного центром сертифікації.

В Android є два вбудованих сховища сертифікатів, які відстежують, яким центрам сертифікації довіряє операційна система: системне сховище (зберігає встановлені сертифікати) і призначене для користувача сховище (зберігає сертифікати, додані користувачами).

Витримка з сайту developer.android.com:

За замовчуванням безпечні з'єднання (використовують протоколи TLS, HTTPS і їм подібні) у всіх додатках довіряють встановленим системним сертифікатами. В Android 6.0 (API level 23) і більш ранніх версіях за умовчанням також вважаються достовірними сертифікати, додані користувачами. Додаток може налаштовувати свої власні з'єднання на рівні додатку (base-config) і на рівні домену (domain-config).

Цей факт означає, що, якщо ми маємо справу з додатком, яке працює в Android 6.0 і раніших версіях, то можна просто додати сертифікат в призначене для користувача сховище. Коли додаток намагається перевірити достовірність ланцюжка для нашого сертифіката, то виявить, що наш центр сертифікації пов'язаний з достовірним сховищем і, отже, буде довіряти нашому сертифікату. У більш нових версіях програма не буде довіряти сховища сертифікатів користувача. Щоб вирішити цю проблему, потрібно прописати такий рівень API і версію Android, щоб додаток стало довіряти призначеним для користувача центрам сертифікації. Ми будемо редагувати атрибут «platformBuildVersionCode» елемента «manifest» в файлі AndroidManifest.xml.

<Manifest xmlns: android = " http://schemas.android.com/apk/res/android&quot ; package = "com.test.app" platformBuildVersionCode = "25" platformBuildVersionName = "7.1.1">
У коді вище в рядку «platformBuildVersionCode = 25» потрібно поміняти значення 25 на 23, а в рядку platformBuildVersionName = "7.1.1" значення 7.1.1 на 6.0.

<Manifest xmlns: android = " http://schemas.android.com/apk/res/android&quot ; package = "com.test.app" platformBuildVersionCode = "23" platformBuildVersionName = "6.0">

Після перепакування додатки з оновленим файлом AndroidManifest.xml, довіру призначеним для користувача центрам сертифікації буде відновлено.

Якщо потрібно запуск на конкретної версії платформи, ми можемо визначити тег trust-anchors в файлі «/res/xml/network_security_config.xml». Наприклад, наступний файл ( https://developer.android.com/training/articles/security-config.html ) Визначає новий достовірний сертифікат, який повинен зберігатися за адресою / res / raw / my_ca.

&lt;? Xml version = "1.0" encoding = "utf-8"?> <Network-security-config> <base-config> <trust-anchors> <certificates src = "@ raw / my_ca" /> </ trust- anchors> </ base-config> </ network-security-config>

Якщо в додатку буде проходити перевірку тільки зазначений сертифікат, умови для успішного виконання цієї техніки виконуються.

Техніка 2 - Перезапис упакованого сертифіката

Якщо після установки сертифіката в призначене для користувача сховище, зміні в настройках версії Android і успішне проходження перевірок при перегляді інших ресурсів, захищених протоколом SSL, все одно виникають помилки, значить, розробники впровадили додаткові умови, яким повинні задовольняти достовірні центри сертифікації. Якщо не забули, в попередньої техніці всередині тега trust-anchors додавався новий шлях до сертифікату. Подібний трюк може використовуватися розробниками для захисту додатків від перехоплення SSL.

Якщо в додатку використовується індивідуальна ланцюжок сертифікатів, може спрацювати метод, пов'язаний з перезаписом сертифіката. Оскільки в деяких випадках розробники можуть передбачити додаткові методи для перевірки достовірної ланцюжка, ця техніка не гарантує стовідсоткового результату.

Малюнок 1: Перелік сертифікатів, які використовуються додатком
Малюнок 1: Перелік сертифікатів, які використовуються додатком

Якщо відкрити пакет додатка за допомогою, наприклад, APK Studio, то можна відразу побачити перелік прив'язаних сертифікатів. На зображенні вище сертифікати знаходяться в папці «assets». Заміна явно кидається в очі сертифіката UniversalRootCA дозволить нам підсунути додатком наш сертифікат.

Техніка 3 - Підключення до функцій через фреймворк Frida

Якщо установки власного сертифіката недостатньо для успішного перехоплення SSL-трафіку, швидше за все, в додатку використовуються техніки навроде SSL pinning або додаткова SSL-валідація. В цьому випадку потрібно блокувати перевірки через безпосереднє підключення до відповідних функцій. Раніше ця техніка була доступна для реалізації тільки на пристроях з правами суперкористувача. Однак на даний момент за допомогою бібліотеки Frida Gadget можна працювати з додатком і отримати доступ до повного функціоналу фреймворка Frida без прав суперкористувача.

Якщо ви вже виконували пентести мобільних додатків, то, ймовірно, знайомі з цим фреймворком. Опис всієї функціональності Frida виходить за рамки цієї статті, але якщо говорити в загальному, то цей фреймворк дозволяє змінювати логіку роботи програми під час виконання. Зазвичай Frida працює як окремий додаток і вимагає прав суперкористувача на пристрої. Якщо у нас немає прав суперкористувача, ми можемо инжектировать в пакет додатка динамічну бібліотеку Frida Gadget, що містить велику частину функціоналу фреймворка Frida. Ця бібліотека завантажується під час виконання програми та дозволяє вносити зміни в код.
Щоб завантажити Frida Gadget, потрібно розпакувати APK, вставити динамічну бібліотеку, відредагувати smali-код так, щоб динамічна бібліотека викликалася найпершої, а потім переупакувати і встановити пакет. Весь цей процес добре задокументований Джоном Козіракісом (John Kozyrakis). Спочатку краще пройти всі етапи вручну, щоб краще зрозуміти, як працює ця технологія. Щоб заощадити час, існує утиліта - Objection , Яка автоматизує весь вищезгаданий процес. Потрібно лише вказівку цільового пакету, над яким потрібно виконати маніпуляції.

C: \> objection patchapk -s test_app.apk No architecture specified. Determining it using `adb` ... Detected target device architecture as: armeabi-v7a Github FridaGadget is v10.6.28, local is v10.6.13. Updating ... Downloading armeabi-v7a library to C: \. Objection \ android \ armeabi-v7a \ libfrida-gadget.so.xz ... Unpacking C: \. Objection \ android \ armeabi-v7a \ libfrida-gadget.so .xz ... Cleaning up downloaded archives ... Using Gadget version: 10.6.28 Unpacking test_app.apk App already has android.permission.INTERNET Reading smali from: C: \ Temp \ tmp8dxqks1u.apktemp \ smali \ com / test / app / TestMainActivity.smali Injecting loadLibrary call at line: 10 Writing patched smali back to: C: \ Temp \ tmp8dxqks1u.apktemp \ smali \ com / test / app / TestMainActivity.smali Creating library path: C: \ Temp \ tmp8dxqks1u.apktemp \ lib \ armeabi-v7a Copying Frida gadget to libs path ... Rebuilding the APK with the frida-gadget loaded ... Built new APK with injected loadLibrary and frida-gadget Signing new APK. jar signed. Signed the new APK Performing zipalign Zipaling completed Copying final apk from C: \ Users \ cwass \ AppData \ Local \ Temp \ tmp8dxqks1u.apktemp.aligned.objection.apk to current directory ... Cleaning up temp files ...

Після завершення в нашій робочій директорії повинен з'явитися файл «test_app.objection.apk». За замовчуванням утиліта objection додає постфікси «.objection» до назви пакунка. Далі ми можемо встановити цей пакет так же, як і будь-який інший APK, за допомогою команди adb install test_app.objection.apk. Після того як змінений пакет встановлений на цільовому пристрої, під час запуску програма має стати на паузу на початковому екрані. У цей момент ми можемо підключитися до сервера Frida, який відстежує наше пристрій:

C: \> frida-ps -U
PID Name
---- ------
6383 Gadget

C: \> frida -U gadget
____
/ _ | Frida 10.3.14 - A world-class dynamic instrumentation framework
| (_ | |
> _ | Commands:
/ _ / _ | help -> Displays the help system
. . . . object? -> Display information about 'object'
. . . . exit / quit -> Exit
. . . .
. . . . More info at http://www.frida.re/docs/home/

[Motorola Moto G (5) Plus :: gadget] -> Java.available
true

Alternatively, Objection supports interaction with the listening Frida server by using the 'explore' command:

C: \> objection explore
___ | | _ | _ | ___ ___ | | _ | _ | ___ ___
| . | . | | | -_ | _ | _ | | . | |
| ___ | ___ | _ | | ___ | ___ | _ | | _ | ___ | _ | _ |
| ___ | (object) inject (ion) v1.2.2

Runtime Mobile Exploration
by: @leonjza from @sensepost

[Tab] for command suggestions
com.test.app on (motorola: 7.0) [usb] # android hooking search classes TrustManager
android.security.net.config.RootTrustManager
android.app.trust.ITrustManager $ Stub $ Proxy
android.app.trust.ITrustManager
android.security.net.config.NetworkSecurityTrustManager
android.security.net.config.RootTrustManagerFactorySpi
android.app.trust.TrustManager
android.app.trust.ITrustManager $ Stub
com.android.org.conscrypt.TrustManagerImpl
com.android.org.conscrypt.TrustManagerImpl $ ExtendedKeyUsagePKIXCertPathChecker
com.android.org.conscrypt.TrustManagerImpl $ TrustAnchorComparator
com.android.org.conscrypt.TrustManagerFactoryImpl
javax.net.ssl.TrustManagerFactory $ 1
javax.net.ssl.TrustManager
javax.net.ssl.TrustManagerFactory
javax.net.ssl.X509TrustManager
javax.net.ssl.TrustManagerFactorySpi
javax.net.ssl.X509ExtendedTrustManager
[Ljavax.net.ssl.TrustManager;

Тепер ви можете скористатися функцією для обходу технології SSL pinning:

com.test.app on (motorola: 7.0) [usb] # android sslpinning disable
Job: 2f633f86-f252-4a57-958e-6b46ac8d69d1 - Starting
[6b46ac8d69d1] [android-ssl-pinning-bypass] Custom, Empty TrustManager ready
Job: 2f633f86-f252-4a57-958e-6b46ac8d69d1 - Started

Техніка 4 - Реверс-інжиніринг коду верифікації сертифіката

Можливий такий випадок, коли розробник використовує власні SSL-бібліотеки замість системних для верифікації сертифіката. У цій ситуації нам потрібно розпакувати пакет, конвертувати smali-код в Java-код і знайти функції, що відповідають за перевірку сертифіката.

Якщо використовувати «dex2jar», синтаксис буде наступним:

C: \> d2j-dex2jar.bat "C: \ test_app.apk"
dex2jar C: \ test_app.apk ->. \ test_app-dex2jar.jar

Отриманий файл з розширенням .jar повинен бути придатний для відкриття в вашої улюбленої утиліті для дослідження Java-додатків (наприклад, JD-GUI).

Після того як ви знайшли функції, що відповідають за перевірку сертифіката, можна або повністю пропатчити код, або підчепитися до потрібної функції за допомогою Frida. Щоб заощадити час і не збирати заново повністю додаток, ефективніше підчепитися до функцій, які відповідають за перевірку сертифіката. Кроки, описані в попередньому техніці, дозволять підключитися до додатка, і далі ви можете або підчепитися до функції за допомогою утиліт фреймворка Frida, або за допомогою програми Objection.

висновок

Техніки, описані в цій статті, дозволяють перехоплювати SSL-трафік і обходити деякі найбільш поширені захисту, що використовуються розробниками. Крім того, я коротко розповів про утиліту Objection і фреймворку Frida. Обхід технології SSL pinning та інших захистів лише невелика частина можливостей, які дозволяють реалізувати ці інструменти.

Сподіваюся, мені вдалося доступною мовою розповісти про техніках, які можуть бути придатні для оцінки безпеки мобільних Android-додатків і демонструють важливість наявності декількох способів проведення подібного роду досліджень.


Lt;?
Encoding = "utf-8"?
Object?
Категории
  • Биология
  • Математика
  • Краеведению
  • Лечебная
  • Наука
  • Физике
  • Природоведение
  • Информатика
  • Новости

  • Новости
    https://banwar.org/
    Наша взаимовыгодная связь https://banwar.org/. Запустив новый сайт, "Пари Матч" обещает своим клиентам незабываемый опыт и возможность выиграть крупные суммы.


    Наши клиенты
    Клиенты

    Быстрая связь

    Тел.: (044) 587-84-78
    E-mail: [email protected]

    Имя:
    E-mail:
    Телефон:
    Вопрос\Комментарий: