10.07.2015

Безопасность IOS-приложений (часть 36) – Обход certificate pinning при помощи SSL Kill Switch

image

В этой статье мы рассмотрим анализ сетевого трафика у приложений, использующих технологию certificate pinning.

Автор: Prateek Gianchandani

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

По умолчанию при инициации SSL-соединения клиент проверяет, что сертификат сервера:

  • имеет проверяемую цепочку сертификатов до достоверного (корневого) сертификата.
  • соответствует имени хоста.

Хотя, клиент не проверяет, является ли текущий сертификат именно тем, который использует сервер.

Проверка на соответствие между сертификатами на устройстве и на удаленном сервере потенциально является брешью в системе безопасности. Все дело в том, что хранилище сертификатов на устройстве может быть легко скомпрометировано; пользователь может установить небезопасные сертификаты, тем самым ставя себя под угрозу стать жертвой атак типа «человек посередине» (man-in-the-middle attacks). Технология certificate pinning позволяет решить эту проблему. Суть метода заключается в том, что сертификат, соответствующий тому, который использует сервер, жестко зашивается в мобильное приложение. Во время инициации SSL-соединения мобильное приложение игнорирует хранилище на устройстве и соединяется только с теми хостами, сертификат у которых соответствует сертификату, зашитому в приложении. Сия технология также помогает нам сделать хост достоверным при помощи самоподписанного сертификат и не устанавливать дополнительные сертификаты на устройстве.

Технология certificate pinning используется многими популярными приложениями: Twitter, Square и т. д. Вопрос заключается в том, как обойти проверку сертификата на стороне клиента? Важно отметить, что все проверки происходят на стороне клиента, и мы можем, используя различные фреймворки (Mobile Substrate и другие), патчить методы и обходить эти проверки.

На конференции Blackhat была представлена экспериментальная утилита SSL Kill Switch, которая позволяет обходить проверку сертификатов. С полной версией презентации можно ознакомиться здесь. Спустя некоторое время у автора получилось отследить трафик приложений, использующих технологию certificate pinning (например, Twitter), но возникли сложности с отслеживанием трафика у приложения App Store. Далее автор пришел к выводу, что для отслеживания трафика у приложения App Store, необходимо пропатчить более низкоуровневые методы и завершить некоторые процессы. На эту тему была написана довольно интересная статья, с которой я рекомендую вам ознакомиться. Кроме того, обратите внимание, что SSL Kill Switch будет способна отключить стандартную проверку SSL-сертификатов, и вам не нужно будет устанавливать корневой достоверный сертификат, что мы обычно делаем для анализа трафика через протоколы HTTP/HTTPS.

Чтобы проверить, что приложение Twitter использует технологию certificate pinning, установите эту программу и направьте весь трафик с устройства через Burp Proxy. Более подробно об инспектировании трафика через HTTP/HTTPS описано в 11-й статье этого цикла. Если вы поработаете с приложением Twitter, трафик не будет перехватываться Burpsuite.

Чтобы проанализировать трафик приложения Twitter, подключитесь к устройству через ssh и загрузите приложение iOS SSL Kill Switch. Кроме того, установите следующие приложения через Cydia:

  • dpkg
  • MobileSubstrate
  • PreferenceLoader

Устанавливаем deb-пакет при помощи команды dpkg -i.

http://2we26u4fam7n16rz3a44uhbe1bq2.wpengine.netdna-cdn.com/wp-content/uploads/102914_1531_iOSApplicat1.png

Рисунок 1: Установка приложения SSL Kill Switch

После установки сделайте респринг устройства при помощи команды killall -HUP SpringBoard.

Далее зайдите в настройки SSL Kill Switch и включите опцию Disable certificate validation.

http://2we26u4fam7n16rz3a44uhbe1bq2.wpengine.netdna-cdn.com/wp-content/uploads/102914_1531_iOSApplicat2.png

Рисунок 2: Отключение проверки сертификата

Теперь трафик приложения Twitter будет проходить через Burp Proxy.

http://2we26u4fam7n16rz3a44uhbe1bq2.wpengine.netdna-cdn.com/wp-content/uploads/102914_1531_iOSApplicat3.png

Рисунок 3: Лог Burp Proxy

Чтобы проверить, что SSL Kill Switch инжектируется в приложение, зайдите в Xcode -> Devices (я использую Xcode 6), найдите ваше устройстве в меню слева и кликните на стрелку, указывающую вверх, в левом нижнем углу. По логам устройства вы увидите, что SSL Kill Switch инжектируется в приложение.

http://2we26u4fam7n16rz3a44uhbe1bq2.wpengine.netdna-cdn.com/wp-content/uploads/102914_1531_iOSApplicat4.png

Рисунок 4: Полный лог устройства

Еще одна утилита со схожим функционалом - trustme. Рекомендую вам также ознакомиться с этим приложением.