Согласно исследованию сотрудников Mozilla, Google, Cloudflare и ряда университетов, от 4 до 11% защищенных соединений «прослушиваются» в результате установки сомнительных корневых сертификатов на компьютерах пользователей, которые даже и не догадываются о риске. Сегодня я расскажу о том, как наша команда привлекает внимание к этой проблеме с помощью Яндекс.Браузера.
![](https://habrastorage.org/r/w1560/files/fdd/c6c/f18/fddc6cf18e52494da53131655f901cbc.png)
Вряд ли на Хабре стоит подробно рассказывать об SSL-сертификатах и тех задачах, которые они решают, но на всякий случай коротко напомним о главном (вы можете просто пропустить пару абзацев, если хорошо представляете принципы работы). Получить закрытый замочек в адресной строке браузера сейчас легко и быстро может любой сайт, поэтому сертификат это ни в коей мере не признак «надежности» сайта, несмотря на соответствующую маркировку в Chromium. Тем не менее он выполняет важную функцию защиты наших с вами данных от перехвата. Администратору сети или злоумышленнику, получившему доступ к трафику, нужно еще придумать способ для расшифровки потока, что обычно сделать затруднительно при стойкой криптографии и отсутствии ключа.
Если нельзя расшифровать поток, то можно его перенаправить через себя, заставив браузер устанавливать соединение не с сайтом, а со своим сервером (атака типа man-in-the-middle). Например, можно взломать маршрутизатор пользователя и с помощью подмены DNS-ответов перенаправлять его на фишинг-сайт для воровства паролей. Опытный пользователь вряд ли с таким столкнется, а своим близким можно настроить альтернативный DNS-сервер с поддержкой DNSCrypt прямо в браузере. Но если злоумышленник захочет пойти дальше и начнет выступать посредником между пользователем и HTTPS-сайтом, то тут нас спасет другая задача сертификата – аутентификация.
Когда браузер получает сертификат от сайта, он должен убедиться, что его прислал именно сайт, а не «человек посередине». Подтвердить это можно с помощью корневых сертификатов, которые находятся в хранилище операционной системы. Если для сертификата, который якобы прислал сайт, не удается найти подтверждающий корневой, то любой современный браузер выдаст что-то такое:
![](https://habrastorage.org/r/w1560/files/27d/c39/2d4/27dc392d4faa437184655438a85d48e1.png)
Чтобы обойти такую защиту и скрыть от пользователя факт своего вмешательства в трафик, остается только одно – поместить в системное хранилище свой корневой сертификат, который легализует в глазах браузера подписанные им сертификаты злоумышленника. Причем сделать это может любое приложение. А с правами администратора еще и без предупреждений и вопросов пользователю. Человек устанавливает с сомнительного сайта программу, а в довесок получает прослушку трафика. И ни один современный браузер никак на это не отреагирует. Вы увидите все ту же надпись «Надежный» и зеленые замочки. Разве что в случае с Firefox злоумышленникам понадобится добавить свой корневой сертификат еще и в хранилище этого браузера, потому что системное он не использует (но сделать это ничуть не сложнее).
Если исключить случаи относительно легального использования этой возможности со стороны программ (антивирусы, блокировщики рекламы, Fiddler) и контроль сотрудников в организациях, то обычно подобная практика приводит к появлению шокирующей и опасной рекламы на посещаемых страницах. Пользователи в большинстве случаев не догадываются о причинах, винят владельцев сайтов или даже разработчиков Яндекс.Браузера. Можете себе представить, как порой сложно нашей службе поддержки добраться до причины и помочь человеку. Но так проблему хотя бы заметно. А ведь в некоторых случаях никаких внешних проявлений не происходит, а данные просто воруются.
![](https://habrastorage.org/r/w1560/web/430/40d/947/43040d947fde453ba0eecdecb92b8646.png)
Причем вред от злоумышленников не только прямой (в виде перехвата данных и рекламы), но и косвенный. В обычной ситуации мы можем кликнуть на замочек и узнать, какой именно удостоверяющий центр выдал сертификат, оценить его надежность (в Яндекс.Браузере; в других браузерах эту информацию уже часто скрывают). При подмене эти данные скрыты от нас. И не только эти, но и любые другие проблемы с соединением. Если на сайте используется некорректный сертификат, который неизбежно бы привел к полноценной предупреждающей заглушке в любом браузере, то подмена сертификата маскирует эту проблему от пользователя – в адресной строке отображается обычный закрытый замочек. Все это приводит к общему падению уровня безопасности.
![](https://habrastorage.org/r/w1560/files/be6/a7b/f53/be6a7bf53c604340a899fe637837c604.png)
По предварительным подсчетам, уже порядка 400 тыс. пользователей из недельной аудитории Яндекс.Браузера живут с перехватом трафика. И это за вычетом антивирусов! Именно поэтому мы всерьез взялись за проблему и начали экспериментировать с выявлением факта установки сомнительного корневого сертификата в систему. Работает это следующим образом. Теперь Яндекс.Браузер не слепо доверяет корневому сертификату из системного хранилища, а проверяет его по списку известных авторитетных центров сертификации. И если корневой сертификат браузеру не знаком, то мы размыкаем замочек и честно сообщаем о потенциальном риске.
![](https://habrastorage.org/r/w1560/files/b9b/10b/965/b9b10b965fc84019b9df9840615ffbbc.png)
Решение с открытым замочком относительно мягкое – наблюдали за реакцией пользователей. Но несколько дней назад мы перешли к следующему этапу. Теперь при загрузке важных сайтов, к которым относятся банки, платежные и поисковые системы, популярные социальные сети, появляется полноценное предупреждение, рассказывающее об угрозе.
![](https://habrastorage.org/r/w1560/files/3d5/96f/d9e/3d596fd9e2224fc38fdc24057aba1d25.png)
Предупреждения в Яндекс.Браузере нельзя назвать панацеей, потому что они никак не влияют на основной источник проблемы – программу, устанавливающую свой корневой сертификат. Но мы надеемся, что информирование пользователей привлечет их внимание к риску потери данных или как минимум упростит диагностику. Ведь даже сам факт перехвата трафика до этого момента был скрыт от людей.
![](https://habrastorage.org/files/fdd/c6c/f18/fddc6cf18e52494da53131655f901cbc.png)
Вряд ли на Хабре стоит подробно рассказывать об SSL-сертификатах и тех задачах, которые они решают, но на всякий случай коротко напомним о главном (вы можете просто пропустить пару абзацев, если хорошо представляете принципы работы). Получить закрытый замочек в адресной строке браузера сейчас легко и быстро может любой сайт, поэтому сертификат это ни в коей мере не признак «надежности» сайта, несмотря на соответствующую маркировку в Chromium. Тем не менее он выполняет важную функцию защиты наших с вами данных от перехвата. Администратору сети или злоумышленнику, получившему доступ к трафику, нужно еще придумать способ для расшифровки потока, что обычно сделать затруднительно при стойкой криптографии и отсутствии ключа.
Если нельзя расшифровать поток, то можно его перенаправить через себя, заставив браузер устанавливать соединение не с сайтом, а со своим сервером (атака типа man-in-the-middle). Например, можно взломать маршрутизатор пользователя и с помощью подмены DNS-ответов перенаправлять его на фишинг-сайт для воровства паролей. Опытный пользователь вряд ли с таким столкнется, а своим близким можно настроить альтернативный DNS-сервер с поддержкой DNSCrypt прямо в браузере. Но если злоумышленник захочет пойти дальше и начнет выступать посредником между пользователем и HTTPS-сайтом, то тут нас спасет другая задача сертификата – аутентификация.
Когда браузер получает сертификат от сайта, он должен убедиться, что его прислал именно сайт, а не «человек посередине». Подтвердить это можно с помощью корневых сертификатов, которые находятся в хранилище операционной системы. Если для сертификата, который якобы прислал сайт, не удается найти подтверждающий корневой, то любой современный браузер выдаст что-то такое:
![](https://habrastorage.org/files/27d/c39/2d4/27dc392d4faa437184655438a85d48e1.png)
Чтобы обойти такую защиту и скрыть от пользователя факт своего вмешательства в трафик, остается только одно – поместить в системное хранилище свой корневой сертификат, который легализует в глазах браузера подписанные им сертификаты злоумышленника. Причем сделать это может любое приложение. А с правами администратора еще и без предупреждений и вопросов пользователю. Человек устанавливает с сомнительного сайта программу, а в довесок получает прослушку трафика. И ни один современный браузер никак на это не отреагирует. Вы увидите все ту же надпись «Надежный» и зеленые замочки. Разве что в случае с Firefox злоумышленникам понадобится добавить свой корневой сертификат еще и в хранилище этого браузера, потому что системное он не использует (но сделать это ничуть не сложнее).
Если исключить случаи относительно легального использования этой возможности со стороны программ (антивирусы, блокировщики рекламы, Fiddler) и контроль сотрудников в организациях, то обычно подобная практика приводит к появлению шокирующей и опасной рекламы на посещаемых страницах. Пользователи в большинстве случаев не догадываются о причинах, винят владельцев сайтов или даже разработчиков Яндекс.Браузера. Можете себе представить, как порой сложно нашей службе поддержки добраться до причины и помочь человеку. Но так проблему хотя бы заметно. А ведь в некоторых случаях никаких внешних проявлений не происходит, а данные просто воруются.
![](https://habrastorage.org/web/430/40d/947/43040d947fde453ba0eecdecb92b8646.png)
Причем вред от злоумышленников не только прямой (в виде перехвата данных и рекламы), но и косвенный. В обычной ситуации мы можем кликнуть на замочек и узнать, какой именно удостоверяющий центр выдал сертификат, оценить его надежность (в Яндекс.Браузере; в других браузерах эту информацию уже часто скрывают). При подмене эти данные скрыты от нас. И не только эти, но и любые другие проблемы с соединением. Если на сайте используется некорректный сертификат, который неизбежно бы привел к полноценной предупреждающей заглушке в любом браузере, то подмена сертификата маскирует эту проблему от пользователя – в адресной строке отображается обычный закрытый замочек. Все это приводит к общему падению уровня безопасности.
![](https://habrastorage.org/files/be6/a7b/f53/be6a7bf53c604340a899fe637837c604.png)
По предварительным подсчетам, уже порядка 400 тыс. пользователей из недельной аудитории Яндекс.Браузера живут с перехватом трафика. И это за вычетом антивирусов! Именно поэтому мы всерьез взялись за проблему и начали экспериментировать с выявлением факта установки сомнительного корневого сертификата в систему. Работает это следующим образом. Теперь Яндекс.Браузер не слепо доверяет корневому сертификату из системного хранилища, а проверяет его по списку известных авторитетных центров сертификации. И если корневой сертификат браузеру не знаком, то мы размыкаем замочек и честно сообщаем о потенциальном риске.
![](https://habrastorage.org/files/b9b/10b/965/b9b10b965fc84019b9df9840615ffbbc.png)
Решение с открытым замочком относительно мягкое – наблюдали за реакцией пользователей. Но несколько дней назад мы перешли к следующему этапу. Теперь при загрузке важных сайтов, к которым относятся банки, платежные и поисковые системы, популярные социальные сети, появляется полноценное предупреждение, рассказывающее об угрозе.
![](https://habrastorage.org/files/3d5/96f/d9e/3d596fd9e2224fc38fdc24057aba1d25.png)
Предупреждения в Яндекс.Браузере нельзя назвать панацеей, потому что они никак не влияют на основной источник проблемы – программу, устанавливающую свой корневой сертификат. Но мы надеемся, что информирование пользователей привлечет их внимание к риску потери данных или как минимум упростит диагностику. Ведь даже сам факт перехвата трафика до этого момента был скрыт от людей.