Для мобильных приложений обычной проверки SSL-сертификата часто недостаточно. Если атакующий проникает в сеть и подсовывает свой поддельный сертификат, подписанный любым признанным удостоверяющим центром, приложение доверяет такому сертификату и позволяет читать трафик в открытом виде. Эта атака называется man-in-the-middle (MITM) и особенно опасна в открытых Wi-Fi сетях. SSL pinning внедрен как раз для решения этой проблемы.
Что такое SSL pinning
SSL pinning — это способ хранения хеша определенного сертификата или ключа внутри мобильного приложения в качестве "пина". При соединении с сервером приложение не только выполняет стандартную проверку сертификата, но и контролирует, что предоставленный сертификат соответствует пину. Если совпадения нет — например, атакующий предъявляет другой, пусть даже подписанный реальным CA сертификат — приложение немедленно разрывает соединение. Этот подход стал стандартной практикой в банковских, платежных и медицинских приложениях, где требуется максимальная безопасность.
Типы пиннинга
В основном применяются два типа. Certificate pinning сохраняет хеш всего сертификата внутри приложения, что дает самую строгую проверку, но требует обновления приложения при каждом обновлении сертификата. Public key pinning сохраняет только хеш открытого ключа, и этот подход гораздо гибче — если вы выпускаете новый сертификат с тем же ключом, приложение продолжает работать без проблем. Большинство современных приложений выбирают именно public key pinning.
Практика iOS и Android
В Android пиннинг описывается через XML-файл Network Security Configuration. Этот подход позволяет добавить пиннинг без написания кода, только через конфигурацию. В iOS обычно пишется custom delegate с URLSession или используется механизм ServerTrustManager из Alamofire. На обеих платформах стандарт OWASP MASVS относит пиннинг к обязательным требованиям.
Риски пиннинга
Хотя пиннинг дает мощную защиту, при неправильном внедрении он порождает серьезные проблемы. Самая частая ошибка — приложение внезапно перестает работать в день смены сертификата. Пользователи не смогут запустить приложение, пока не установят новую версию. Поэтому политика пиннинга всегда должна включать несколько резервных пинов — основной ключ и резерв для следующей ротации. Некоторые компании также применяют механизм динамического обновления пинов с сервера, но это частично открывает поверхность для MITM.
Sayt.uz практика
Мобильное приложение Sayt.uz обновило политику SSL pinning в мае 2036 года. В приложение заложены 3 резервных пина, а порядок ротации сертификатов настроен на 6 месяцев. После новой политики количество попыток MITM-атак сократилось на 84 процента, а уровень успешности мобильных платежных транзакций достиг 99,2 процента. Для клиентов Sayt.uz услуга интеграции SSL pinning в мобильное приложение стоит 1 245 000 сум, а техническая консультация по ротации сертификатов — 380 000 сум. Для банковских и платежных сервисов этот сервис рекомендован как обязательное требование.