Сертификаты не найдены chrome android
Прошли те времена, когда мобильные приложения мужественно игнорировали все ошибки, связанные с SSL, и позволяли перехватывать и модифицировать трафик. Современные приложения, как минимум, проверяют цепочки сертификатов на валидность и принадлежность к достоверному центру сертификации. Мы, пентестеры, ставим перед собой задачу «убедить» приложение, что сертификат надежный с целью выполнения атаки типа «человек посередине» и последующего изменения трафика. В этой статье будут рассмотрены следующие техники обхода проверок SSL-сертификатов в Android:
- Добавление сертификатов в хранилище достоверных сертификатов.
- Перезапись упакованных сертификатов.
- Использование скрипта Frida для обхода проверок SSL-сертификатов.
- Изменение кода проверки сертификата.
Некоторые из вышеуказанных техник - простые, другие – более сложные в реализации. Мы рассмотрим каждый из этих методов без особого углубления в специфические детали.
Зачем нужнаMITM-атака наSSL
Чтобы просматривать и изменять вызовы веб-службы, используемой мобильным приложением, нам понадобится промежуточный прокси сервер для перехвата, созданный при помощи утилит навроде BurpSuite или ZAP. При перехвате SSL-трафика SSL-соединение прерывается на стороне прокси-сервера. Сертификат, отсылаемый прокси-сервером, анализируется мобильным приложением, как если бы прокси был оконечной точкой веб-службы. По умолчанию самоподписанный сертификат, генерируемые утилитами наподобие Burp, не будет принадлежать проверенной достоверной цепочке. Если сертификат нельзя проверить на достоверность, большинство мобильных будут обрывать соединение вместо того, чтобы подключаться и работать в потенциально незащищенном канале. Техники, представленные ниже, предназначены для одной цели – убедить мобильное приложение, что сертификат, отправляемый прокси-сервером, является достоверным.
Техника 1 – Добавление сертификата в хранилище пользовательских сертификатов
Самый простой способ избежать SSL-ошибок – обзавестись валидным и надежным сертификатом. Эта задача решается относительно просто, если вы сможете установить достоверный сертификат на устройство. Если операционная система доверяет вашему центру сертификации, то будет доверять и сертификату, подписанному центром сертификации.
В Android есть два встроенных хранилища сертификатов, которые отслеживают, каким центрам сертификации доверяет операционная система: системное хранилище (хранит предустановленные сертификаты) и пользовательское хранилище (хранит сертификаты, добавленные пользователями).
Сей факт означает, что, если мы имеем дело с приложением, которое работает в Android 6.0 и более ранних версиях, то можно просто добавить сертификат в пользовательское хранилище. Когда приложение пытается проверить достоверность цепочки для нашего сертификата, то обнаружит, что наш центр сертификации связан с достоверным хранилищем и, следовательно, будет доверять нашему сертификату. В более новых версиях приложение не будет доверять хранилищу пользовательских сертификатов. Чтобы решить эту проблему, нужно прописать такой уровень API и версию Android, чтобы приложение стало доверять пользовательским центрам сертификации. Мы будем редактировать атрибут «platformBuildVersionCode» элемента «manifest» в файле AndroidManifest.xml.
В коде выше в строке «platformBuildVersionCode=25» нужно поменять значение 25 на 23, а в строке platformBuildVersionName="7.1.1" значение 7.1.1 на 6.0.
После переупаковки приложения с обновленным файлом AndroidManifest.xml, доверие пользовательским центрам сертификации будет восстановлено.
Если в приложении будет проходить проверку только указанный сертификат, условия для успешного выполнения этой техники выполняются.
Техника 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, который отслеживает наше устройство:
[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
Теперь вы можете воспользоваться функцией для обхода технологии SSL pinning:
Техника 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-приложений и демонстрируют важность наличия нескольких способов проведения подобного рода исследований.
Некоторые пользователи нашего сайта сталкиваются с проблемой при доступе к защищенным областям нашего веб-сайта на устройствах Android в Google Chrome.
Это выглядит так:
Я смог реплицировать проблему на следующих устройствах, используя тестирование физических устройств с помощью браузера,
- Samsung Galaxy S6, Samsung Galaxy S5, Samsung Galaxy S4 (Android v5 и v4.4).
- Nexus 6 (Android v6, v5 и v4.4)
- Moto X 2nd Gen (Android v6 и v5)
Все статьи, форумы и вопросы, которые я читал в Интернете (и их не так много, если только я не искал неправильную вещь) указывают на настройку и настройку сервера и/или SSL-сертификата, и что проблема будучи опытным по дизайну.
Рекомендуемое исправление 1
Комментарий 18 предлагает изменить настройки SSL в IIS;
Мы это сделали, но, похоже, это не повлияло.
Рекомендуемое исправление 2
Я проверил и у нас есть сертификат домена (который не является подстановочным сертификатом), промежуточным сертификатом и корневым сертификатом, поэтому я не думаю, что проблема тоже. Я также проверил проверку сайта на веб-сайте Networking4all и SSL-тест на веб-сайте Qualys SSL, и оба пути без ошибок или предупреждений.
Некоторые дополнительные сведения на всякий случай
Характеристики сервера (по существу такие же, как O.P)
- Windows Server 2008 r2
- IIS 7.5
- Поставщик SSL: GeoTrust RapidSSL
Первая проблема: устаревшие криптографические политики
В нескольких статьях указывается, что сервер может иметь устаревшие криптографические политики. Немного исследований показали, что все должно быть настроено с использованием параметров реестра. Дополнительную информацию см. В статье поддержки MS Как ограничить использование определенных криптографических алгоритмов и протоколов в Schannel.dll.
Вручную отредактировать реестр?
С сайта программного обеспечения Nartac:
Вторая проблема: неправильные настройки сайта IIS SSL
Обернуть
Некоторые пользователи нашего сайта сталкиваются с проблемой при доступе к защищенным областям нашего веб-сайта на устройствах Android в Google Chrome.
Это выглядит так:
Я смог реплицировать проблему на следующих устройствах, используя тестирование физических устройств с помощью браузера,
-
Samsung Galaxy S6, Samsung Galaxy S5, Samsung Galaxy S4 (Android v5 и v4.4).
Nexus 6 (Android v6, v5 и v4.4)
Moto X 2nd Gen (Android v6 и v5)
Все статьи, форумы и вопросы, которые я читал в Интернете (и их не так много, если только я не искал неправильную вещь) указывают на настройку и настройку сервера и/или SSL-сертификата, и что проблема будучи опытным по дизайну.
Рекомендуемое исправление 1
Самая полезная статья, которую я нашел до сих пор, - Проблема 268055 "Нет найденных сертификатов" на трекере хромовой проблемы.
Комментарий 18 предлагает изменить настройки SSL в IIS;
Я не думаю, что люди в этой ошибке много знали о настройке IIS. Вы хотите поговорить с Microsoft об этом. От поиска вокруг "Игнорировать сертификат клиента", по-видимому, вам нужен вариант.
Мы это сделали, но, похоже, это не повлияло.
Рекомендуемое исправление 2
Другой вопрос здесь о Stack ( "сертификат, доверенный на компьютере, но не в android) предполагает, что промежуточный сертификат может отсутствовать;
Возможно, вам не хватает промежуточного сертификата в вашем файле сертификата. Если вы уже посетили другой веб-сайт с таким же продавцом сертификатов, промежуточный сертификат запоминается в вашем браузере. Это не может быть - или даже лучше - не будет иметь место с каждым посетителем вашего сайта. Чтобы решить отсутствующий промежуточный сертификат в соединении SSL, вам нужно будет добавить промежуточный сертификат в свой собственный файл сертификата.
Я проверил и у нас есть сертификат домена (который не является подстановочным сертификатом), промежуточным сертификатом и корневым сертификатом, поэтому я не думаю, что проблема тоже. Я также проверил проверку сайта на веб-сайте Networking4all и SSL-тест на веб-сайте Qualys SSL, и оба пути без ошибок или предупреждений.
Некоторые дополнительные сведения на всякий случай
Сервер, на котором работает веб-сайт, работает под управлением Windows Server 2008 R2 и IIS 7.5, а наш поставщик сертификатов SSL - Thawte.
Некоторые пользователи нашего веб-сайта сталкиваются с проблемой при доступе к защищенным областям нашего веб-сайта на устройствах Android в Google Chrome.
Мне удалось воспроизвести проблему на следующих устройствах с помощью тестирования физического устройства Browserstack;
- Samsung Galaxy S6, Samsung Galaxy S5, Samsung Galaxy S4 (Android v5 и v4.4)
- Nexus 6 (Android v6, v5 и v4.4)
- Moto X 2nd Gen (Android v6 и v5)
Все статьи, форумы и вопросы, которые я читал в Интернете (и их немного, если я не ищу что-то неправильное), указывают на настройку и настройку сервера и / или сертификата SSL, и проблема заключается в том, что по дизайну.
Предлагаемое исправление 1
Самая полезная статья, которую я нашел до сих пор, - это ошибка 268055 "Сертификаты не найдены" на трекере хрома.
Комментарий 18 предлагает изменить настройки SSL в IIS;
Я могу решить эту проблему, если у вас есть доступ к IIS. В основном вам нужно перейти к настройкам SSL и убедиться, что параметр "Требовать SSL" снят, а для сертификатов клиентов выбрано "Игнорировать".
Я не думаю, что люди об этой ошибке знали бы много о настройке IIS. Вы бы хотели поговорить с Microsoft об этом. Похоже, что вам нужен поиск по "Игнорировать сертификат клиента".
Мы сделали это, но, похоже, ничего не изменилось.
Предлагаемое исправление 2
Другой вопрос здесь, в стеке (" сертификат доверен на ПК, но не на Android "), предполагает, что промежуточный сертификат может отсутствовать;
Возможно, в вашем сертификате отсутствует промежуточный сертификат. Если вы уже посетили другой веб-сайт с тем же продавцом сертификатов, промежуточный сертификат запоминается в вашем браузере. Это не может - или даже лучше - не будет иметь место с каждым посетителем вашего сайта. Чтобы устранить отсутствующий промежуточный сертификат в соединении SSL, вам необходимо добавить промежуточный сертификат в свой собственный файл сертификата.
Я проверил, и у нас есть сертификат домена (который не является групповым сертификатом), промежуточный сертификат и корневой сертификат, поэтому я не думаю, что это тоже проблема. Я также выполнил тест проверки сайта на веб-сайте Networking4all и тест SSL на веб-сайте Qualys SSL, и они оба прошли без ошибок и предупреждений.
Некоторые дополнительные детали на всякий случай
Сервер, на котором находится веб-сайт, работает под управлением Windows Server 2008 R2 и IIS 7.5, а нашим поставщиком SSL-сертификатов является Thawte.
Отладка интернет-соединения
Прежде всего стоит использовать альтернативную точку доступа: подключиться к Wi-Fi, если у вас мобильный интернет, или наоборот – отключиться от стационарной точки доступа и использовать сотового оператора.
Попробуйте загрузить другой веб-сайт. Возможно, проблема не в вашем подключении, а в неполадках на стороне провайдера или самого сайта. Если это так, проблему скорее всего уже решают, так как ошибки при соединении в этом случае будут не у вас одного.
Иногда после очередного обновления в работе приложения могут наблюдаться сбои. В этом случае стоит попробовать полностью сбросить сетевые настройки.
- Перейдите в настройки смартфона.
- Найдите меню «сброс и восстановление» (в разных смартфонах оно может находиться либо в самом низу списка настроек, либо в одном из подпунктов).
- В меню «сброс и восстановление» выберите «сброс сетевых настроек».
Дата и время как виновники всех проблем
В современных гаджетах многие приложения (в особенности сетевые программы) синхронизируются с часами. Любая манипуляция с текущей датой приводит к ошибкам приложения. Об ошибочной дате может сообщить сам гаджет: он попросит перевести часы в соответствие с текущим временем.
Чтобы не настраивать каждый раз время на телефоне вручную, поставьте галочку в настройках «дата и время» напротив пункта «дата и время сети» или «синхронизировать время по сети»
Всегда обновляйте устаревшие приложения
Ошибка SSL-подключения может возникать и при долгом отсутствии обновлений. Связано это с просроченным сертификатом текущей программы, так как действие сертификатов ограничено из целей безопасности.
Чтобы обновить текущий софт на смартфоне, необходимо:
- зайти в меню Play Market;
- выбрать пункт «мои приложения и игры»;
- нажать кнопку «обновить все».
Если вы не желаете обновлять некоторые приложения, всегда можно провести процесс в ручном режиме. Для удобства рекомендуется зайти непосредственно в настройки приложения и отметить галочкой пункт «автоматическое обновление».
Проводите регулярную очистку кэша в браузере
При обновлении софта нередко остаются кэшированные данные, которые мешают корректно обрабатывать текущие страницы сайта, из-за чего возникают ошибки с сертификатом.
Чтобы очистить кэш, можно использовать внутренние настройки самого браузера либо универсальную утилиту для очистки системы Android.
Для чистки кеша необходимо:
- зайти в настройки телефона;
- выбрать меню «приложения»;
- найти веб-обозреватель и тапнуть по нему.
В зависимости от операционной системы здесь может возникнуть необходимость зайти в пункт «память». В общем, найдите кнопку «очистить кеш» и смело жмите на нее.
Антивирус мешает корректной работе в сети
Хоть антивирус и предназначен для поиска уязвимостей в системе и предотвращения несанкционированного доступа в систему, он может блокировать и текущее подключение к сети, выдавая SSL-ошибку. Есть вероятность, что в эту самую минуту он отражает атаку, поэтому ошибке стоит уделить особое внимание и отключиться от текущей сети, особенно если вы используете публичную точку доступа.
Полное восстановление устройства из бэкапа
Знайте, что иногда восстановить смартфон в первоначальное состояние куда проще, чем искать виновника проблем. Если ничего не помогло и вы решились на кардинальные меры, необходимо:
- перейти в настройки смартфона;
- отыскать пункт «сброс и восстановление»;
- в подпункте выбрать «полный сброс до заводских настроек».
Нетрудно догадаться, что все ваши личные данные будут утеряны безвозвратно. Поэтому рекомендуется использовать резервную копию данных контактов и заметок. Если при первой настройке вы соглашались резервировать свои данные в Google-облако, то после сброса до заводского состояния используйте свой аккаунт для восстановления данных.
Однако это не распространяется на фото, видео и музыкальные файлы, поэтому перед форматированием скопируйте мультимедиа с памяти устройства на свой компьютер.
Читайте также: