TLS/SSL в обычных конфигурациях дает вам три вещи:
- конфиденциальность — никакая третья сторона не может прочитать отправленные и полученные сообщения,
- целостность — никакая третья сторона не может изменить отправленные и полученные сообщения,
- аутентификация сервера — вы знаете, с кем разговариваете.
То, что вы делаете с установкой verify
на false
, отключает проверку сертификата. Он немедленно отключает функцию аутентификации сервера, а также позволяет потерять конфиденциальность и целостность при столкновении с активным злоумышленником, имеющим доступ к вашему потоку данных.
Как это?
Во-первых, TLS/SSL опирается на инфраструктуру открытых ключей. Не вдаваясь в подробности: вы держите на своей машине набор сертификатов так называемых центров сертификации (ЦС), которым вы доверяете. Когда вы открываете новую связь со службой, вы получаете сертификаты служб и в процессе проверки проверяете, среди прочего, принадлежит ли сертификат ЦС, которому вы доверяете. Если да, то общение может продолжаться. Если нет, то канал связи закрыт.
Шаблоны атак
Отключение проверки сертификата позволяет проводить атаки «человек посередине» (MitM), которые легко могут быть выполнены в вашей локальной сети (например, через отравление ARP), в локальной сети службы, к которой вы звоните, или в сети между ними. Поскольку мы обычно не доверяем сети полностью, мы склонны проверять.
Представьте, что я атакую вас. Я провел отравление ARP, теперь я вижу весь ваш трафик. Он зашифрован, не так ли? Ну, не очевидно. Рукопожатие TCP и TLS, которые, по вашему мнению, вы выполнили с целевой службой, вы выполнили со мной. Я предъявил вам не удостоверение целевой службы, так как не могу его подделать, а свое собственное. Но вы не подтвердили это, чтобы отклонить его. Я также установил соединение между мной и целевой службой от вашего имени, чтобы я мог просмотреть расшифрованный трафик, изменить при необходимости и ответить вам, чтобы вы поверили, что все в порядке.
Во-первых, все твои секреты принадлежат мне. Во-вторых, я могу проводить атаки как на вас, так и на целевой сервис (который мог бы быть защищен механизмами аутентификации, но сейчас это не так).
Как это исправить?
В XXI веке не должно быть особых причин отключать проверку TLS где бы то ни было. Однако настроить его для правильной работы может быть проблемой, особенно когда вы делаете это впервые. По моему опыту, наиболее распространенными проблемами в мире микросервисов являются:
- целевой сертификат является самоподписанным,
- у вас отсутствует корневой сертификат ЦС в хранилище доверенных сертификатов,
- микросервис предоставляет его сертификат, но не предоставляет промежуточный сертификат ЦС.
Трудно догадаться, в чем ваша проблема. Нам нужно копнуть глубже.
person
Marek Puchalski
schedule
15.07.2020