Windows имеет внутренний список неудаляемых корневых сертификатов

    В Windows, согласно этой информации обновление корневых сертификатов производится с помощью Certificate Trust List — CTL. Хотя из статьи следует, что это какая то примочка для кеширования списка сертификатов на локальном сервере, поиск услужливо подсказывает, что существует authrootstl.cab, подписанный Microsoft, которому Windows, начиная с 7, доверяет безоговорочно, и обновляет его каждую неделю, а в случае установки обновления KB3004394 — каждый день.


    В консоли (MMC) можно добавить сертификаты, к которым нет доверия, но вот удалить корневой сертификат не так то просто.



    Вдохновившись недавним скандалом с объединением WoSign и StartCom, решил удалить какой-нибудь стремный сертификат из Windows 7. Выбор пал на Izenpe.com (‎06 e8 46 27 2f 1f 0a 8f d1 84 5c e3 69 f6 d5), ибо баски и SHA-1. Но не тут-то было. После удаления корневого сертификата и захода на https://www.izenpe.com из Chrome 55.0.2883.87 m сертификат появился в списке сторонних корневых центров сертификации, и, соответственно, в списке доверенных корневых центров сертификации. Что, в принципе, ожидаемо.


    Google Chrome attempts to use the root certificate store of the underlying operating system to determine whether an SSL certificate presented by a site is indeed trustworthy, with a few exceptions.
    https://www.chromium.org/Home/chromium-security/root-ca-policy

    Повторить трюк с Firefox 50.1.0 не вышло, те используют внутри браузера свое хранилище сертификатов. С Internet Explorer 11.0.9600.18163 трюк повторяется.


    Казалось бы, виновники найдены. Но нет, берем https://opensource.apple.com/source/security_certificates/security_certificates-55036/roots/Izenpe-RAIZ2007.crt и открываем через Расширения оболочки шифрования, то бишь двойным щелчком.


    И видим, что сертификат доверенный.


    Это как вообще? Заходим в консоль и видим, что злосчастный сертификат есть в списке доверенных корневых центров сертификации.


    А может Windows все неизвестные корневые сертификаты подтягивает в доверенное хранилище? Берем OpenSSL, генерируем корневой сертификат, открываем. Недоверенный.


    А я уже раскатал губу, что удастся подписывать своим CA сертификаты для гитхаба. Хотя ни одна из записей реестра, описанная в статье на technet не существует по умолчанию ни в Windows 7, ни в Windows Server 2012, по всему видно, что имеется захардкоженный список доверенных сертификатов, не видимый ни в реестре, ни в групповых политиках, ни в консоли управления.

    Поделиться публикацией

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

      +5
      Бекдор для АНБ? :)
        +11
        Для ??Б.
          +7
          Бекдор для *
          –1
          Точно, и все сис.админы про это знают, особенно работающие на гос. и военком. структуры
            0
            У них должен стоять сертифицированный дистрибутив, обновления к которому тоже проверяются.
          +3
          Это же известная фича, если я правильно понял описание. Windows по умолчанию установлена с небольшим количеством сертификатам в store и новые сертификаты берутся либо через Windows Update по необходимости, либо из ресурсов Crypt32.dll (например когда нет связи с Windows Update).
          +3
          Разработчики Огнелиса весьма предусмотрительно создали и эксплуатируют собственное хранилище сертификатов.
            0
            Которое использует и Node.js
              +1

              Это как вообще?

                0
                If the 'ca' option is not given, then Node.js will use the default publicly trusted list of CAs as given in http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt.
                Документация

                Но уважаемые разработчики Node.js несколько лукавят, т.к. используют бандл, который вручную сами и правят.

                Несколько странный уровень доверия, не так ли?

                И только в недавнем пулл реквесте добавили опцию, для указания собственного (пользовательского) бандла.
                  0

                  Вот именно, они собирают свой бандл. Который не обращается к хранилищу сертификатов браузера.

              0

              Mozilla и The BAt в почтовиках делает точно так же — свои хранилища.
              Я долго возился, когда внедрял корпоративные сертификаты и ЦА и удивлялся, что не все почтовые клиенты их видят по умолчанию, пока не полез достаточно глубоко в настройки чтобы обьяснить Mozilla TB что ему для почты надо использовать и системное хранилище сертификатов

                0
                В линуксовых приложениях часто используют набор УЦ от Мозиллы. А свои хранилища ещё есть в JRE и WAS.
                +1
                И Огнелис и браузеры Chrome от Google
                создали и эксплуатируют собственное хранилище сертификатов

                на базе NSS (Network Security System)
                  +1
                  На Винде Хром использует системное хранилище.
                    0
                    Да, это именно так. Спасибо. Все время этот Windows
                0

                Один раз имел с этим небольшой секс, везде работает, в лисе невалидный сертификат на одном из линков. И да, я тогда еще не знал, что у них свое хранилище.

                0
                Автоматическое обновление можно отключить через ГП, также с ним при недоступности CDN и протухании CTL возможны интересные эффекты.
                А тут исследователь ведёт список добавляемых сертификатов, у него вообще много интересного по теме.
                  0
                  Ну так то предустановленные корневые сертификаты используются для проверки валидности ПО и драйверов для самой ОС. Что само по себе вполне рабочий вариант, не считая постоянных дырок для обхода этих проверок.
                    0

                    хм… я правильно понимаю, что чтобы внедрить национальный HTTPS MITM достаточно договориться с Microsoft?

                      –1
                      Хром настучит при первом запуске и сертификат отзовут.
                        0

                        Почему настучит? И кому настучит? И кто отзовет? Предположим некая спецслужба "договаривается" с Microsoft, та в очередном обновлении добавляет любезно предоставленный спецслужбой сертификат в это "неубиваемое" хранилище кроневых сертификатов. После этого все сертификаты выпущенные спецслужбой становятся как бы "легальными".
                        Или хром при каждом запуске проверяет содержимое этого хранилища и сравнивает с каким-то своим списком?

                          0
                          В Хроме захардкожены сертификаты для некоторых сайтов (GMail, Paypal и т.п.) и при подмене сертификата публичным CA идёт уведомление.
                          Отзовёт сам Microsoft: наверняка реакция прописана в правилах CA/B Forum и из-за угрозы перехвата данных за пределами РФ.
                            0

                            Как показали недавние события с Google тоже можно договориться.


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

                        +1
                        К счастью договорится с MS в наших реалиях проблематично. Но в наших казахских степях у большинства стоят корневые сертификаты местного центра. Без них не работает онлайн сервис всяких справок, а без него жизнь сильно усложняется.
                        Самое веселое — у всей страны один пароль на личный сертификат. Безопасность на уровне!
                          0

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

                            0

                            Ну… при паранойе нижнего уровня, я бы сделал как-то так:


                            #!/bin/sh
                            #export HOME=/some/path
                            export profile="$HOME/some-profile-path"
                            exec firefox --profile "$profile" "$@"

                            Засунуть это в gosfirefox и сделать ему chmod +x… Затем добавить туда корневой сертификат местного центра и использовать этот "бандл" для работы с гос-сайтами.


                            Дефолтный firefox использовать для обычной жизни.


                            По мере роста параноидальности, можно разбавить:


                            1. Убрать комментарий с экспорта HOME
                            2. Запускать вообще от отдельного пользователя
                            3. Запускать из chroot
                            4. Виртуалки

                            5. N. ..

                            А по поводу пароля… Его же вроде средствами OpenSSL поменять можно, не?

                              0
                              Вы абсолютно правы, вариантов много и разных. Только вот большинство населения этим заниматься не будут ввиду отсутствия элементарных навыков. Правильнее было бы генерировать рандомный пароль для каждого выданного сертификата, а не 123456. Ой, кажется я допустил утечку государственного масштаба! =)
                          0
                          Интересно, чем вам баски-то не угодили?
                            0
                            Обновление корневых сертификатов можно отключить в компонентах Windows или в групповой политике.
                            https://technet.microsoft.com/en-us/library/cc734054(WS.10).aspx
                            Есть несколько required сертификатов, но в целом никаких секретных мест больше вроде бы нет. Но их тоже можно удалить. Вот список для старой ОС:
                            https://support.microsoft.com/en-us/help/293781/trusted-root-certificates-that-are-required-by-windows-server-2008-r2,-by-windows-7,-by-windows-server-2008,-by-windows-vista,-by-windows-server-2003,-by-windows-xp,-and-by-windows-2000

                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                            Самое читаемое