Будет ли режим iOS AFNetwork SSL Pinning обеспечивать дополнительный бонус безопасности, если развернут действительный сертификат

Насколько я понимаю, SSL Pinning предназначен для сравнения открытого ключа или сертификата сервера с копиями, предварительно упакованными в клиенте.

Я видел в Stackoverflow, что многие разработчики используют SSL Pinning библиотеками AFNetwork, но большинство из них используют его вместе с самозаверяющим сертификатом.

Я купил действующий сертификат в ЦС и прошел тест, чтобы убедиться, что он работает нормально. Я имею в виду, я установил следующее, и это сработало

    ...
    _sharedHttpsInstance.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
    _sharedHttpsInstance.securityPolicy.allowInvalidCertificates = NO;
    ...

Что мне интересно, так это то, что если установить для режима закрепления значение AFSSLPinningModePulicKey, мое приложение будет более безопасным при взаимодействии с сервером в дополнение к тому, что предоставил действительный сертификат?

большое спасибо.


person firebear    schedule 05.07.2014    source источник
comment
Да, закрепление более безопасно, чем отсутствие закрепления. Учтите: когда Diginotar был взломан, злоумышленник выдал поддельные сертификаты для Google, Hotmail, Yahoo и т. д. Наивные клиенты приняли их как настоящие, потому что Diginotar был ЦС в доверенном хранилище. Если вы хотите увидеть пример с iOS, посмотрите, как одна и та же атака взломала встроенные покупки. См. сервис Apple «покупка в приложении» для iOS. обойден российским хакером. Apple должна была закрепить свою платформу Store Kit, но они слишком высокомерны или глупы.   -  person jww    schedule 06.07.2014


Ответы (2)


Я не знаю точной реализации закрепления SSL в iOS, но в принципе закрепление обеспечивает определенно большую безопасность, чем проверка по умолчанию против набора встроенных агентств сертификации. По умолчанию системы доверяют более чем 100 различным ЦС со всего мира, и каждый из ЦС имеет возможность выдать любой сертификат, который он хочет, даже если другой ЦС уже выдал такой же или аналогичный сертификат. Таким образом, если какой-либо из этих более чем 100 ЦС будет скомпрометирован, они могут выдать сертификат для вашего домена, который пройдет проверку в вашем приложении, если вы не используете закрепление сертификата. Такие компромиссы произошли в 2011 году с DigiNotar (из-за этого больше не существует) и Comodo (был слишком большим, чтобы потерпеть неудачу).

Вероятно, самым известным пользователем закрепления сертификатов является Google Chrome, где он используется для доменов Google, и это помогло обнаружить компрометацию DigiNotar и Comodo.

Недостатком закрепления сертификата может быть то, что приложение перестанет работать внутри сетей, которые выполняют перехват SSL по соображениям безопасности. Google Chrome, кажется, справляется с этой ситуацией, принимая сертификат, если он подписан ЦС, явно добавленным пользователем (т.е. не встроенным) в качестве альтернативы проверкам закрепления.

Другой вопрос, который может быть интересен, заключается в том, является ли закрепление SSL безопасным «ENOUTH» для «большинства» приложения, даже если оно работает вместе с самозаверяющей сертификацией?

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

person Steffen Ullrich    schedule 05.07.2014
comment
Другой вопрос, который может быть интересен, заключается в том, является ли закрепление SSL безопасным «ENOUTH» для «большинства» приложения, даже если оно работает вместе с самозаверяющей сертификацией? - person firebear; 06.07.2014
comment
@firebear: Хороший вопрос. Я добавил и ответил на него в своем ответе. - person Steffen Ullrich; 06.07.2014
comment
Понимая, сравнивая ответы @Steffen & Bruno, мне кажется, что использование действительного/недействительного сертификата, закрепление SSL или нет, каким-то образом представляет собой баланс риска, стоимости и эффективности. Я бы выбрал закрепление SSL с самозаверяющим сертификатом для обычного соединения HTTPS, выбрал действительный сертификат для Интернета, а для нашей системы AAA я намерен объединить закрепление SSL и действительный сертификат и тщательно защитить свой закрытый ключ. большое спасибо - person firebear; 06.07.2014

Очень сложно однозначно сказать, лучше или хуже закрепление, так как оно перекладывает риск на другую сторону.

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

Недостатком является то, что это не позволит вам использовать механизмы, имеющиеся в ЦС, для работы со скомпрометированным хостом: отзыв сертификата. Если закрытый ключ хоста скомпрометирован, прохождение механизма проверки PKI должно позволить вам проверить отзыв и получить предупреждение о возникновении такой проблемы. Напротив, вы не сможете узнать это при закреплении, так как вы вообще не проходите через ЦС для проверки сертификата.

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

Я не знаю, заменяет ли механизм закрепления AFNetworking проверку PKI или дополняет ее.

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

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

(Для ясности: я не говорю, что центры сертификации лучше, просто закрепление меняет набор проблем.)

person Bruno    schedule 06.07.2014
comment
см. мое понимание и выбор в комментарии к @Steffen. Спасибо - person firebear; 06.07.2014