Как стать автором
Обновить

Комментарии 21

Мне кажется, что это ошибка дизайна SSL/TLS. Там с самого начала надо было закладывать поддержку третьей стороны с явным согласием на это пользователя.

Нельзя такое делать на транспортном уровне — согласие это просто один бит да/нет, его слишком легко подделать, скрыть, получить от пользователя обманом, или вообще игнорировать. Про этот принцип уже немало писали: нельзя сделать софт, который позволил бы прослушивать трафик террористов и педофилов, но при этом не дал бы возможности прослушивать вообще всех подряд.


Если пользователь хочет дать доступ к своему трафику — этот доступ необходимо реализовывать непосредственно на одном из концов шифрованного соединения (напр. в браузере пользователя). Нет ничего плохого в том, чтобы браузер предоставлял API для антивирусов и прочих инструментов, которые пользователь должен сначала установить на свой комп, и потом открыть им доступ к конкретному браузеру — вот это будет вполне приемлемой формой получения согласия пользователя слушать его трафик.


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


Собственно, такие API уже есть: браузерные плагины имеют доступ к трафику, плюс имеют возможность коммуникации с локально установленными приложениями.

Немного не так. Надо было предусмотреть, что в браузере может быть установлен сертификат от MitM'а. Нет сертификата — нет доверия. MitM осуществляется использованием общего ключа для передачи, при этом клиенту предъявляют сертификат и подпись данных оригинального сайта (т.е. MitM'у не надо CA, который может что угодно подписывать), и, возможно, подпись от MitM'а, который контент разрешает.
Т.е. браузер должен давать явное согласие на участие mitm'а (и сервер с своей стороны тоже). Никакого wiretapping, просто участие third party.

Что значит "общего ключа для передачи"? Насколько этот общий ключ вычисляется с поддержкой адекватных алгоритмов, насколько поддерживает forward secrecy, etc. — т.е. насколько использование такого MITM сделает коммуникацию более уязвимой по сравнению с вариантом без MITM? Учитывая среднее качество таких инструментов, хорошо описанное в данной статье — это явно плохая идея. Канал сайт-браузер должен быть защищён. А что там пользователь добровольно делает с полученными браузером данными — кому их передаёт и как при этом шифрует — это уже его личное дело.

Тот же PFS прекрасно реализуется и тремя сторонами. Я говорю о том, что практическое применение SSL показало, что модель Алиса/Боб/Ева ему не соответствует. Вместо того, чтобы городить костыли в стиле «самопальный CA, подписывающий всё подряд» правильнее было бы признать существование (кто там по очереди? Клэр?), которая имеет разрешение от Алисы участвовать в процессе и согласовывает ключ наравне с Алисой и Бобом. В этой ситуации Алиса может проверить сертификат Боба (напоминаю, если Клэр выпускает свой сертификат для Боба, то Алиса не знает какой был сертификат у Боба), а Клэр может спокойно инспектировать трафик.

Разрешит Алиса участвовать Клэр в этом процессе или нет — вопрос настроек браузера Алисы.

А мой комментарий был, что модель SSL не соответствует его применению в энтерпрайзе. И это порождает хаки, которые значительно хуже, чем признание наличия Клэр в протоколе.

Да, не соответствует. Да, порождает. Нет, признавать этот факт и менять протокол всё-равно плохая идея, и мой комментарий был о том, почему это плохая идея: мы не сможем гарантировать, что никто кроме уважаемой в нашей компании Клэр не использует эту дырувозможность протокола без нашего ведома. В текущем виде протокол, по крайней мере, очень старается исключить MITM либо сделать его применение очень неудобным и/или заметным. Если протокол будет допускать "доверенный MITM", то отличать доверенный от недоверенного и контролировать наличие MITM в принципе станет намного сложнее.

Мне кажется, что довольно просто. Достаточно, чтобы браузер явно давал контроль за этим и явно показывал всех участников.

Согласитесь, что ткнуть в адресную строку и посмотреть «кто именно ещё участвует» куда удобнее, чем сидеть с strace'ом/tcpdump'ом и вылавливать кто там что кому подменяет.

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

Насчёт гэбни — это не сделает их жизнь легче. Браузер предоставляет возможность не доверять третьей стороне. (Гэбня может за это не пускать трафик, но это уже другой вопрос — сейчас они с тем же успехом могут резать чужой SSL).
Так сейчас проверяется просто — смотрится, что за сертификат подписал трафик.
Зачем tcpdump?
В хроме, кстати, доступ к просмотру сертификата закопали в консоль отладки, за что им моё большое фи.
В мозилле и хроме в начале урля замочек, тыкнув по которому можно смотреть и сертификат, и всю цепочку сертификатов

Неплохой вариант: что бы это разрешать по идее должен быть только 1 метод — доменные политики, и при установке такой политики в MITM:true — в заголовке хрома указывать:
«Ваш сетевой администратор имеет полный доступ к вашему трафику»


Если продолжить идею — такой заголовок надо бы передавать веб-серверам, т.к возможно не все сайты согласятся давать трубу, которая доступна третьей стороне.

Да. Надо сказать, что со стороны сервера тоже могло бы быть больше одного участника. Reverse proxy (типа cloudflare) мог бы тоже легально участвовать в процессе не получая доступ к сертификатам клиента.

Соединение (полный вариант с всеми возможными опциями) выглядело бы так:

Пользователь: Сертификат выписан CA-таким-то.
Proxy пользователя: сертификат подписан тем-то, разрешение на участие в соединении выдано (согласие пользователя/настройки браузера/доменная политика/etc)
Proxy сервера: сертификат cloudflare, подписанный сертификатом сервера example.com
Example.com: сертификат от Let's Encrypt.

Всё понятно, ясно, у пользователя есть возможность видеть всех их, видеть почему каждый из них в процессе участвует, возможность забанить любого из (возможно/нет — это уже локальные настройки браузера).

Вместо этого у нас супердырявые MITM'ы, которые скрывают от пользователя оригинальные сертификаты.
Я правильно понимаю, что если установить в систему сертификат доверенного центра сертификации, то система будет принимать все сертификаты, заверенные этим центром? А не существует ли механизма, который бы разрешал удостоверя заверение только определённых сертификатов? Ну например я у меня установлен сертификат минкомсвязи. Пусть он используется для проверки сертификата с сайта госуслуги, но не сертификата гугла.

На сколько мне известно на стороне клиента — нет. Если корневой сертификат стоит, то все его дочерние сертификаты (т.е. в рамках дерева доверия) будут автоматически верны.
Собственно, на этом и основаны прокси.

Нечто подобное пытаются внедрять: Certificate Transparency.

Года через три до этого дойдут, думаю. Красные плашки для HTTP сайтов тоже долго внедряли, но вот, они уже есть.
Я тоже считаю, что некие «зоны ответственности» у корневых сертификатов должны быть определены. Пусть даже на уровне DNS (с новыми протоколами DOT, DOH и т.п.), можно было бы прописать некую TXT-запись, в которой указать кто ответственен за данный домен. Хотя, это не панацея, нужно придумать механизм распространения этих данных.

Беда в том, что это не нужно рынку. Красная или не красная плашка это блаж и фича, ничего, по сути, не меняющая.
А вот реализация "это проверяем так, а то — эдак на стороне клиента" приведет к падению работы всей infosec какая она есть сей час.


Вообще же, если говорить серьезно, то нужно сделать, так это вернуть обратно HPKI, который как раз эту проблему и решал (как я понимаю), но был выпелен под благие лозунги. А стоило бы оставить...

Что такое HPKI?

Ошибочка вышла, HPKP

Оно создавало больше проблем, чем решало. При смене сертификата сайт становится недоступным и теряет посетителей.


В браузерах есть нормальные схемы с использованием pki, кому нужна безопасность.

Слушайте: всегда можно было добавить несколько сигнатур.
Хотя, 2bh, это не решает проблемы "левого" сертификата от слова совсем.

Система — да, а вот браузеры — нет. У них свой набор сертификатов доверенных CA. По этой причине пытались в своё время казахские CA пропихнуть в CA на FF. В комментариях возник человек, который пояснил, что это из-за попытки контроля через MitM на госуровне, после чего запрос свернули.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий