Недавно в одном из прочитанных блогов увидел интересное утверждение (в моем вольном
переводе): «Думаете, когда вы работаете с онлайн-банкингом из офиса, у вас
сквозное безопасное соединение? Подумайте еще разок».
Достаточно, чтобы заинтересовать и немного
покопать. «И шо ви таки думаете? (с)» В «насквозь безопасное» HTTPS соединение
можно врезать как минимум двух посредников (Man In The Middle). Правда, оба
должны быть Trusted (TMITM), так что не надо сильно паниковать. Пока что.
Вариант 1: корпоративный файрвол
или прокси
В корпоративных сетях пользователи обычно выходят в
Интернет через прокси, который может быть задан явно или неявно (transparent
или просто продвинутый firewall). Это необходимо для поддержания хотя-бы
минимального корпоративного контроля над трафиком (фильтрация нежелательных
сайтов/скриптов/рекламы, антивирусные проверки, кеширование и т.д.) и, в
принципе, логично. Абсолютно понятно, как это работает для нешифрованного HTTP,
а вот с HTTPS — понятно не все. Ведь HTTPS как раз и предназначен для защиты от
«врезания» в сессию и перехвата трафика: данные шифруются, а аутентичность
сервера проверяется сертификатами. Так что, возникают как минимум два вопроса:
- Почему я должен доверять
сертификату прокси?
- Даже если я доверяю сертификату прокси, он же выпущен на имя прокси, а не на имя моего банка — как он может сработать?Выходит, что может.
Первый вопрос вообще не возникает, если в компании
развернута собственная инфраструкра сертификатов и есть свой CA. В таком
случае, сертификат этого CA будет установлен как доверенный на каждой рабочей
машине, и всё, что будет подписано этим же сертификатом (наш прокси) также
будет доверенным. Именно из-за этого подобное «доверенное» (Trusted) внедрение
и становится возможным в этом сценарии.
Но что делать с неправильным именем в сертификате? Существует (и довольно давно) класс программ типа MITMproxy или HoneyProxy, которые этот вопрос успешно решают. Их основная функция — генерировать сертификаты на лету! Прокси устанавливается в качестве промежуточного CA (подписанного Enterprise Root CA) и динамически генерирует сертификаты (для себя же) на любое имя. Таким образом, клиент думает, что он общается с банком, хотя, на самом деле, его HTTPS сессия заканчивается на прокси.
Так что, исходное утверждение оказалось верным, и верить рабочим HTTPS-соединениям можно лишь настолько, насколько можно верить своему ИТ-отделу. Или же использовать браузер вроде Firefox, у которого имеется свое, независимое от ОС, хранилище сертификатов и поддержка Certificate Pinning (не так давно ставшая популярной в браузерах). Ну, или, конечно же, не использовать рабочие машины в рабочей сети в нерабочих целях, но кто будет следовать этому глупому правилу? VPN тоже может помочь, если он не на основе SSL.Но что делать с неправильным именем в сертификате? Существует (и довольно давно) класс программ типа MITMproxy или HoneyProxy, которые этот вопрос успешно решают. Их основная функция — генерировать сертификаты на лету! Прокси устанавливается в качестве промежуточного CA (подписанного Enterprise Root CA) и динамически генерирует сертификаты (для себя же) на любое имя. Таким образом, клиент думает, что он общается с банком, хотя, на самом деле, его HTTPS сессия заканчивается на прокси.
Вариант 2: Облачный бесключевой прокси CloudFlare
Ладно, в первом
случае имеется прокси, который стоит в моей конторе и который инициирует
соединения от моего имени. Ну да ладно. Во всяком случае, целевой сервер, к
которому я подключаюсь должен быть аутентичным — иначе прокси запаникует и не
построит до него HTTPS-сессию (если только админы не накосячили с настройкой).
В свете недавнего анонса Keyless SSL от
CloudFlare, похоже, это уже тоже не факт.
Для нас важно то,
что в данном сценарии уже целевой сервер (тот же онлайн-банкинг), оказывается,
уже банку не принадлежит! Хорошая новость в том, что он принадлежит кому-то,
кому банк доверяет.
Товарищи из CloudFlare разработали способ представляться HTTPS-сервером
заказчика без необходимости подделывать сертификаты или даже подписываться
ключами заказчика. По факту, как раз проверка аутентичности проводится с
сервером банка, но как только она пройдена — сеанс устанавливается с доверенным
сервером CloudFlare. Цель благородна — разгрузка HTTPS-трафика клиентов и
защита от DDoS-атак. Сколько времени понадобится на изобретение метода
имперсонации целевого сервера без необходимости получать его сертификаты и
ключи — кто его знает. Надеюсь, достаточно долго.
Итого
В,
казалось бы, «безопасном от и до» HTTPS соединении могут успешно поселиться как
минимум два посредника. Оба должны быть доверенными, но доверяет им ваш админ,
ваш босс, ваш банк, ваш магазин — только не вы. Если вы думаете, что в
Интернете еще есть 100% приватность — подумайте еще разок.
А вы знаете какие-то еще методы атак на HTTPS?
Источник: habrahabr.ru
Комментариев нет:
Отправить комментарий