Cacertapp что это за программа на xiaomi

Обновлено: 05.07.2024

Начиная с Android 7, приложения игнорируют предоставленные пользователем сертификаты, если они не настроены на их использование. Поскольку большинство приложений явно не соглашаются на использование пользовательских сертификатов, нам необходимо поместить наш сертификат ЦС mitmproxy в системное хранилище сертификатов, чтобы избежать необходимости исправлять каждое приложение, которое мы хотим отслеживать.

Обратите внимание, что приложения могут игнорировать системное хранилище сертификатов и использовать собственные сертификаты ЦС. В этом случае вы должны исправить приложение.

Установлена ​​Android Studio/Android Sdk (проверено с версией 4.1.3 для 64-разрядной версии Linux)

Было создано виртуальное устройство Android (AVD). Документация по установке доступна здесь

  • AVD не должен запускать производственную сборку (это не позволит вам использовать adb root )
  • Параметры прокси-сервера AVD настроены на использование mitmproxy. Документация здесь

Исполняемые файлы эмулятора и adb из Android Sdk добавлены в переменную $PATH

  • эмулятор обычно находится в папке /home/ /Android/Sdk/emulator/emulator в системах Linux
  • adb обычно находится в /home/ /Android/Sdk/platform-tools/adb в системах Linux
  • Я добавил эти строки в свой .bashrc

Сертификат ЦС Mitmproxy создан

  • Обычно находится в ~/.mitmproxy/mitmproxy-ca-cert.cer в системах Linux
  • Если папка пуста или не существует, запустите mitmproxy, чтобы сгенерировать сертификаты

Сертификаты ЦС в Android хранятся по имени их хэша с расширением «0» (пример: c8450d0d.0 ). Необходимо вычислить хэш вашего сертификата ЦС и скопировать его в файл с этим хешем в качестве имени файла. В противном случае Android проигнорирует сертификат. По умолчанию сертификат CA mitmproxy находится в этом файле: ~/.mitmproxy/mitmproxy-ca-cert.cer

  • Введите папку с сертификатом: cd ~/.mitmproxy/
  • Создать хэш и скопировать сертификат: hashed_name=`openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.cer | head -1` && cp mitmproxy-ca-cert.cer $hashed_name.0

Теперь нам нужно поместить наш сертификат ЦС в хранилище системных сертификатов, расположенное в /system/etc/security/cacerts/ в файловой системе Android. По умолчанию раздел /system монтируется как доступный только для чтения. Следующие шаги описывают, как получить права на запись в системный раздел и как скопировать сертификат, созданный на предыдущем шаге.

Начиная с УРОВНЯ API 29 (Android 10) кажется невозможным монтировать раздел «/» для чтения и записи. Google предложил обходной путь для этой проблемы с помощью OverlayFS. К сожалению, на момент написания этой статьи (11 апреля 2021 г.) инструкции этого обходного пути приведут к тому, что ваш эмулятор застрянет в цикле загрузки. Какой-то умный парень из Stackoverflow все равно нашел способ сделать каталог /system доступным для записи.

Имейте в виду: вам всегда нужно запускать эмулятор с параметром -writable-system, если вы хотите использовать свой сертификат. В противном случае Android загрузит «чистый» образ системы.

Ваши доверенные центры сертификации (ЦС) — это организации, которым вы доверяете, чтобы гарантировать подписи вашего зашифрованного трафика и содержимого. Это большая власть, а со списком доверенных лиц возиться опасно. Тем не менее, это также то, что опытные пользователи могут захотеть настроить для тестирования Android, отладки приложений, обратного проектирования или в рамках некоторых конфигураций корпоративной сети.

Некоторое время Android жестко ограничивал эту возможность, но в Android 11 (выпущенной на этой неделе) она блокируется еще больше, что делает невозможным запрос на установку сертификата ЦС любым приложением, средством отладки или действием пользователя, даже для ненадежное по умолчанию хранилище сертификатов, управляемое пользователем. Единственный способ установить любой сертификат ЦС сейчас — это использовать кнопку, скрытую глубоко в настройках, на странице, на которую приложения не могут ссылаться.

Чтобы было ясно, важно тщательно управлять доверенными центрами сертификации на устройствах Android! Добавить ЦС не должно быть легко случайно или неосознанно. Защита пользователей от самих себя здесь абсолютно необходима, и это трудная задача.

Тем не менее, есть много законных вариантов использования, когда вы хотите иметь возможность выбирать, каким центрам сертификации вы доверяете, и это стало намного сложнее. Здесь нужно соблюдать баланс, и я не уверен, что Android сделал правильный выбор.

Давайте углубимся в детали:

Как раньше работало управление сертификатами CA Android?

До сих пор приложение могло попросить пользователя доверять сертификату ЦС в хранилище сертификатов пользователя (но не в хранилище системы) с помощью API-метода KeyChain.createInstallIntent(). Точно так же операционная система предложит доверять сертификату ЦС, если он был вручную открыт на устройстве из файловой системы.

Эти подсказки о доверии сертификатов сопровождались множеством громких предупреждений и подтверждений, а также обязательной установкой PIN-кода устройства или другой блокировки экрана, прежде чем вы сможете выполнить их, если они еще не были установлены. Это было невозможно сделать случайно, и было трудно обманом заставить пользователей принять эти пугающие подсказки (хотя, вероятно, не невозможно).

Это относится только к хранилищу сертификатов пользователей. Это хранилище, если вы не знакомы, существенно отличается от общесистемного хранилища сертификатов Android, и начиная с Android 7 (Nougat, выпущенный в 2016 году) было невозможно установить какие-либо сертификаты ЦС в системное хранилище без полного рутирования устройства.

Однако до сих пор вы могли устанавливать в хранилище сертификатов user, которым приложения могли доверять по отдельности, но которым они не доверяют по умолчанию.

К сожалению, автоматизация этой настройки больше невозможна на этих устройствах, и каждый из этих вариантов использования теперь потребует ряда кропотливых ручных действий, которые инструменты не могут выполнить или помочь.

В Android 11 установщик сертификата теперь проверяет, кто запросил установку сертификата. Если он был запущен кем-либо, кроме приложения системных настроек, в установке сертификата будет отказано с неясным предупреждающим сообщением:

Не удается установить сертификаты ЦС. Сертификаты ЦС могут поставить под угрозу вашу конфиденциальность, поэтому их необходимо устанавливать в настройках

Насколько я могу судить, об этом нигде не было объявлено. Единственное упоминание в информации о выпуске Android 11 — это небольшое примечание в журнале изменений корпоративных функций, в котором отмечается, что в некоторых случаях API createInstallIntent() больше не работает.

На практике это изменение означает, что API установки сертификата больше не работает, открытие файлов сертификатов больше не работает, и невозможно инициировать установку сертификата даже из ADB (средства отладки Android).

По-прежнему можно установить сертификаты с помощью API управления устройством, но только в особом случае, когда ваше приложение является предустановленным OEM-приложением, отмеченным во время первоначальной настройки устройства как "владелец устройства". Если нет, вам не повезло.

В Android 11, чтобы установить сертификат ЦС, пользователям необходимо вручную:

  • Открыть настройки
  • Перейти к разделу "Безопасность"
  • Перейдите к разделу "Шифрование и учетные данные"
  • Перейти к пункту "Установить из хранилища"
  • Выберите «Сертификат ЦС» из списка доступных типов.
  • Принять большое страшное предупреждение
  • Перейдите к файлу сертификата на устройстве и откройте его.
  • Подтвердите установку сертификата

Приложения и инструменты автоматизации могут отправить вас на страницу общих настроек "Безопасность", но не дальше: оттуда пользователь должен идти один (затруднительно, если не невозможно с инструментами автоматизации тестирования).

Еще более неудобно: с существующими API приложение может предоставлять байты сертификата напрямую, считывая сертификаты из собственных внутренних данных или хранилища. Теперь, поскольку пользователь должен перейти к нему, сертификат должен находиться в общем доступном пользователю хранилище на устройстве. Это также рискует перезаписать его другими приложениями на устройстве до того, как оно станет доверенным, если у них есть разрешения на запись в общие папки (не по умолчанию, но не редкость), что позволяет этим приложениям передавать свой собственный ЦС ничего не подозревающим пользователям.

Хотя по-прежнему можно доверять своим собственным центрам сертификации на корневых устройствах, Android также создает параллельный диск для аттестации оборудования в рамках SafetyNet для новых выпусков ОС и устройств, что значительно усложнит эту задачу.

Аттестация оборудования позволяет приложениям Android точно знать, является ли ОС на устройстве оригинальной, установленной OEM-производителем. Многие приложения используют SafetyNet для блокировки установок и использования на таких устройствах, и это относится не только к безопасным банковским приложениям: приложения от Netflix до Pokemon Go и McDonald’s требуют проверок SafetyNet. В не столь отдаленном будущем эти и многие другие приложения станут полностью непригодными для использования на устройствах с root-правами, как только аппаратная аттестация станет стандартной.

В совокупности это нехорошо. Android какое-то время блокировал это, но теперь действительно кажется, что они движутся в мир, где пользовательские ПЗУ отрезаны от большей части экосистемы Android, а официальные ПЗУ полностью заблокированы и недоступны даже для разработчиков.< /p>

После этого у вас есть несколько вариантов:

    Для пользователей Android Опубликовано год назад Тимом Перри

Я создал свой собственный сертификат ЦС и теперь хочу установить его на свое устройство Android Froyo (HTC Desire Z), чтобы устройство доверяло моему сертификату.

Android хранит сертификаты ЦС в своем хранилище ключей Java в /system/etc/security/cacerts.bks . Я скопировал файл на свой компьютер, добавил свой сертификат с помощью portecle 1.5 и отправил его обратно на устройство.

Теперь Android не перезагружает файл автоматически.Я прочитал в нескольких сообщениях в блоге, что мне нужно перезагрузить устройство. Это приведет к тому, что файл снова будет перезаписан исходным файлом.

Моей следующей попыткой было установить сертификат с SD-карты, скопировав его и выбрав соответствующую опцию в меню настроек. Устройство сообщает мне, что сертификат был установлен, но, видимо, не доверяет сертификату. Более того, когда я пытаюсь скопировать хранилище ключей на свой компьютер, я все равно нахожу оригинальный стоковый cacerts.bks.

Итак, как правильно установить мой собственный корневой сертификат ЦС на устройстве Android 2.2 в качестве доверенного сертификата? Есть ли способ сделать это программно?

10 ответов 10

До Android KitKat для установки новых сертификатов необходимо получить root права на устройство.

От Android KitKat (4.0) до Marshmallow (6.0) это возможно и просто. Мне удалось установить сертификат прокси-сервера Charles Web Debbuging Proxy на мое устройство без рута и успешно перехватить SSL-трафик.

До версии Android 4.0 с версией Android Gingerbread & Froyo существовал единственный файл только для чтения ( /system/etc/security/cacerts.bks ), содержащий доверенное хранилище со всеми ЦС («система» ) сертификаты, которым доверяют по умолчанию на Android. Его используют как системные приложения, так и все приложения, разработанные с помощью Android SDK. Используйте эти инструкции для установки сертификатов CAcert на Android Gingerbread, Froyo, .

Начиная с Android 4.0 (Android ICS/'Ice Cream Sandwich', Android 4.3 'Jelly Bean' и Android 4.4 'KitKat'), система доверенные сертификаты находятся в системном разделе (доступном только для чтения) в папке «/system/etc/security/» в виде отдельных файлов. Однако теперь пользователи могут легко добавлять свои собственные «пользовательские» сертификаты, которые будут храниться в «/data/misc/keychain/certs-added».

Сертификаты, установленные системой, можно управлять на устройстве Android в раздел «Настройки» -> «Безопасность» -> «Сертификаты» -> «Система», тогда как доверенные сертификаты пользователя управляются в разделе «Пользователь». При использовании пользовательских доверенных сертификатов Android заставит пользователя Android-устройства принять дополнительные меры безопасности: использование PIN-кода, графического ключа или пароля для разблокировки устройства являются обязательными при использовании пользовательских сертификатов.

Установить сертификаты CAcert как "доверенные пользователю" очень просто. Установка новых сертификатов в качестве «доверенных системе» требует больше усилий (и требует корневого доступа), но имеет то преимущество, что позволяет избежать блокировки экрана Android.

Начиная с Android N (7.0) это становится немного сложнее, см. этот отрывок с веб-сайта прокси-сервера Charles:

Каждое устройство, использующее SSL/TLS, имеет хранилище сертификатов ЦС, содержащее открытые ключи всех доверенных ЦС (Firefox поддерживает собственное хранилище). Также существует что-то, известное как цепочки сертификатов (цепочка доверия), но это выходит за рамки текущей темы.

В Android есть два хранилища сертификатов ЦС: User и System.

Системное хранилище содержит сертификаты доверенных ЦС, которые предварительно устанавливаются производителями устройств и практически одинаковы на всех устройствах, поскольку количество доверенных ЦС в Интернете ограничено.

При тестировании или выполнении анализа безопасности приложений Android с использованием прокси-инструмента, такого как Burp, Zap, mitmprox и т. д. Все приложения по умолчанию не доверяют хранилищу доверенных сертификатов пользователя, если это явно не указано в конфигурации сетевой безопасности приложения.< /p>


Полезно проверить эту конфигурацию, прежде чем пытаться обойти закрепление сертификата, иначе вы можете разочароваться или можете оказаться в кроличьей норе.

Установка сертификата прокси-сервера в хранилище системы решит эту проблему.

Сначала нам нужно скопировать сертификат в формате PEM во внутреннюю память мобильного телефона. Мы будем устанавливать ЦС burpsuite. Для этого выполните следующие простые шаги:

  1. Экспортируйте сертификат Burp CA и сохраните его как burp.der. Но он закодирован, нам нужно преобразовать его в формат PEM.




<р>2. Откройте сертификат. Преобразуйте его в формат PEM с кодировкой base64. Сохраните его как «burp.cer». Это должно выглядеть так.




<р>3. Перенесите этот сертификат PEM во внутреннюю память.

Требования: Android 10/11 с root-доступом, Magisk и TWRP.

Способ 1 с использованием magisk (проверено на Android 10):






Способ 2 с использованием ручного метода «tmpfs» (протестировано как на Android 10, так и на Android 11) (Источник: Snehal Baghel)

  1. Сначала нам нужно переименовать наш файл сертификата в «.0». Для генерации хэша просто запустите эту команду. Затем переименуйте файл «burp.cer» в «9a5ba575.0».

openssl x509 -inform PEM -subject_hash_old -in burp.cer | голова -n -1


<р>2. Подключите свой мобильный телефон с включенной отладкой по USB и убедитесь, что установлены инструменты платформы, чтобы иметь возможность использовать adb.

<р>3. Суперпользователь (предоставьте root-права на оболочку на вашем телефоне)

<р>4. Создайте отдельный временный каталог для хранения текущих сертификатов

<р>5. Скопируйте существующие сертификаты

<р>6. Создать монтирование в памяти

<р>7. Скопируйте существующие сертификаты обратно в монтирование tmpfs

<р>8. Скопируйте новый сертификат, файл сертификата должен иметь имя в формате hash.0.

<р>9. Обновите метки контекста perms и selinux, чтобы все было как раньше.

<р>10. Проверьте системное хранилище на наличие сертификата PortSwigger. Не перезагружайтесь!.


Способ 3 (может быть рискованным) с использованием adb в twrp (проверено на Android 10):

  1. Перезагружаемся в рекавери (нужен установленный twrp, на других не пробовал).
  2. Смонтировать раздел /system в twrp.
  3. Подключите usb, чтобы иметь возможность использовать adb.
  4. Затем перенесите файл сертификата hash.0 в /system/etc/security/cacerts/ .
  5. Наконец просто запустите эти команды одну за другой:
    chown root:root /system/etc/security/cacerts/*
    chmod 644 /system/etc/security/cacerts/*
    chcon u:object_r:system_file:s0 /system/etc/security/cacerts/*
  6. Теперь ваш установленный сертификат (хэш.0) останется даже после перезагрузки!.
  7. Обратите внимание, что расположение установленного сертификата будет, я не знаю почему, но это было расположение «/data/adb/modules/movecert/system/etc/security/cacerts/» (по крайней мере, в моем случае)

Kali linux/любой дистрибутив на базе Debian:


<р>2. Скопируйте новый файл crt в папку /usr/local/share/ca-certificates/extra/.

Читайте также: