Сегодня утром, после горячей чашечки шоколада кофе, в голову пришла идея сменить привычный мне браузер Chrome на Firefox. Причиной тому было скорее не кофе, а аномальная тормознутость моего браузера в последнее время. После первого запуска предательски ввожу в адресную строку «google.ru» и вижу следующую ошибку:



Браузер даже не дает права проигнорировать ошибку. По привычке первым делом взгляд упал на дату и время. Убедившись, что временные параметры на компьютере установлены верно, перешел на другой ресурс «yandex.ru»:



Тут дела обстояли чуть лучше, Firefox уже предлагает добавить сертификат в хранилище доверенных. Тут пришлось уже включать мозги, т.к. активно пользуюсь сервисом Яндекс.Деньги и любые утечки для меня существенны. Первым делом решил проверить, что именно браузеру не нравится в сертификате:



Нет доверия стороне выдавшей сертификат. И такая картина на всех ресурсах, где используется безопасное соединение HTTPS.
Много немного теории:
Для использования шифрованного канала связи, ваш браузер использует протокол SSL (или TLS) (HTTPS пользуется им), который, в свою очередь, использует сертификат проверки подлинности. Этот сертификат хранит в себе информацию как для шифрования данных, так и для идентификации WEB-сервера, к которому вы обращаетесь. Помимо всей прочей информации, хранимой в сертификате (тип шифрования, альтернативные имена и т.д.), нас интересуют открытый ключ, который решает проблему №1 — шифрование в открытых сетях и информация о центре, выдавшем этот сертификат, которая решает проблему №2 — доверие к открытому ключу.

Опишу на примерах.

Сценарий 1:

1. Сервис Яндекс хочет организовать безопасный канал связи со своими пользователями и генерирует для этого пару ключей (открытый и закрытый).
2. Я, как клиент сервиса Яндекс, получаю от него открытый ключ и шифрую им все свои данные. При этом я уверен, что прочитать данные сможет только владелец закрытого ключа, в нашем случае владелец — сервис Яндекс.
Этим самым сервис Яндекс решает проблему шифрования в открытых сетях.

А что если некий троянский вирус встанет между вами и сервисом Яндекс (к примеру, в роли сквозного прокси-сервера)…???

Сценарий 2:

1. Троян получает от сервиса Яндекс открытый ключ.
2. Троян генерирует пару своих ключей и передает открытую часть вам от имени сервиса Яндекс.
3. Все сообщения, адресованные от вас сервису Яндекс, перехватываются и дешифруются трояном, а троян в свою очередь шифрует эти данные ключом от Яндекс и передает их ему же. Вот тут и возникает проблема №2, а именно, проблема доверия к открытому ключу.

Данная проблема решается третьим лицом, которому доверяет, как сервис Яндекс, так и клиент. В данном случае запись указывала на AtomPark Software Inc, которая выдала тот самый сертификат подлинности сервису Яндекс.

Вернемся к моему сертификату и удостоверимся, что мы доверяем третьему лицу. В поле Общее имя (CN) группы «кем выдано» стоит запись «AtomPark Software Inc». Первый признак доверия этому центру сертификации – наличие его корневого сертификата в хранилище доверительных центров. В Mozille этот список можно открыть так: Настройка-> Дополнительно-> Сертификаты-> Просмотреть сертификаты-> Центры сертификации. По имени нашел сертификат:



На первый взгляд все в порядке. Решил сверить отпечатки SHA1 сертификатов. Полез в иерархию и увидел следующее:



В иерархии сертификатов корневым сертификатом является сам сертификат (самоподписанный).
Чтобы окончательно убедиться, что это недействительный сертификат, с браузера Chrome выполнил Online проверку актуального сертификата sslshopper.com и сверил серийные номера:



Теперь было необходимо найти этот троян. В настройках прокси было все чисто, а антивирус не дал никаких результатов. Полез в мониторинг сети и заметил некое приложение, которое проявляло активность всякий раз, когда я обращался к веб сервисам:



Первая же ссылка в интернете раскрыла все карты. Оказалось, что недавно наше руководство внесло некоторые поправки в политику защиты конфиденциальной информации. Было решено установить всему персоналу программу StaffCop, которая осуществляет мониторинг деятельности сотрудников. После отключения данной службы, решились не только проблемы с сертификатами, но и с моим основным браузером Chrome. Несмотря на большое описание, фактически задача была решена очень быстро, и я надеюсь, что последовательность моих действий поможет кому-либо.

А напоследок, то, как должны выглядеть «правильные» сертификаты:


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


  1. Valdei
    12.10.2015 17:16
    +5

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

    Кстати, а в трудовом договоре у вас есть пункт про возможность сбора информации о деятельности сотрудника?


    1. RazorBlade
      12.10.2015 17:22
      +11

      Chrome, скорее всего не среагировал, т.к. в организации внедрили в ОС свой сертификат на рабочие компьютеры, например групповыми политиками. А FF не смотрит на сертификаты ОС, а использует свою базу.


    1. GebekovAS
      12.10.2015 17:28
      +2

      Вот, что видит хром если включить службу:

      … а вот, что видит если отключить:


      Нет, в трудовом такой пометки нет=)


    1. blind_oracle
      12.10.2015 17:44
      +3

      Хром использует системное хранилище сертификатов, лиса — своё.
      Свой сертификат Staffcop Agent добавляет в систему в доверенные при установке.


      1. farcaller
        12.10.2015 20:31
        +1

        Но в хроме же по идее SSL Pinning на сертификаты сайтов Google и он все равно не должен дать зайти на google.com с чужим сертификатом:

        Chrome has HTTPS «pins» for most Google properties — i.e. certificate chains for Google properties must have a whitelisted public key, or it will result in a fatal error


        1. blind_oracle
          12.10.2015 20:48

          В идеале, конечно, именно так. Они много где об этом пишут.
          Но на деле, по крайней мере в enterprise версии Хрома (которая из MSI ставится), картина такая:



          То есть, Хром без проблем жуёт сертификат для google.com, который сгенерировал прокси-сервер.


          1. lexore
            12.10.2015 21:35

            в enterprise версии Хрома (которая из MSI ставится)
            Может быть, дело в том, что в вашей enterprise версии это «поправили»?


            1. blind_oracle
              12.10.2015 22:08
              +2

              Почитав Security FAQ наткнулся на такое:

              Chrome does not perform pin validation when the certificate chain chains up to a private trust anchor. A key result of this policy is that private trust anchors can be used to proxy (or MITM) connections, even to pinned sites. “Data loss prevention” appliances, firewalls, content filters, and malware can use this feature to defeat the protections of key pinning.

              То есть, если корневой сертификат в цепочке доверия — частный (то бишь не поставлялся с ОС, а был добавлен вручную), то Certificate Pinning отключается.


  1. bougakov
    12.10.2015 18:48
    +5

    Было решено установить всему персоналу программу StaffCop
    После отключения данной службы
    Ваша организация централизованно ставит сотрудникам софт и доверенные сертификаты, но не отбирает админские права (без которых не получится остановить службу)? Оригинальненько.


    1. GebekovAS
      12.10.2015 18:50
      +3

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


  1. ploop
    12.10.2015 20:31
    +1

    Было решено установить всему персоналу программу StaffCop, которая осуществляет мониторинг деятельности сотрудников
    Я правильно понимаю, что о таких действиях сотрудники должны быть информированы под подпись?


    1. Delphinum
      13.10.2015 01:08
      +1

      Там где работает автор, начальство мало интересуется своими обязанностями.


  1. mayorovp
    12.10.2015 20:39
    +1

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


    1. GebekovAS
      12.10.2015 20:47

      Согласен, запись кем выдан уже говорит нам, что это не самоподписанный. Меня иерархия запутала, обычно системное окно отображает корневой сертификат даже если ему нет доверия=) Когда в хроме увидел, что сертификат имеет свой ЦС, то удостоверился что он не самоподписанный, но забыл прописать в статье.


      1. mayorovp
        12.10.2015 21:57
        +1

        «Сертификат известен, но нет доверия» и «сертификат не найден» — это разные ситуации, и обрабатываются они по разному.

        Обычно сервер отдает не только свой сертификат — но и всю цепочку. Однако, так делать не обязательно. Ваш прокси-сервер решил послать только свой сертификат — вот и получилось что получилось.


        1. GebekovAS
          12.10.2015 23:40

          Спасибо за разъяснение, но разве информация в поле «иерархия сертификата» не идентична информации во вкладке «путь сертификации» в системном окне просмотра свойств сертификата? Мне всегда казалось, что если сертификат выдан каким либо центром сертификации, то он должен отображаться в пути сертификации (даже если сертификата физически нет, но описание все равно должно быть указано).


          1. mayorovp
            13.10.2015 06:09

            Да, идентична. Нет, при ненайденном издателе сертификат в обоих окнах остается единственной строчкой насколько я помню.


  1. ipswitch
    12.10.2015 22:27

    Догадался кто виновник сразу после упоминания AtomPark Software.
    Означенный StaffCop — не новая программа, но так и не отлаженная. Жуткое глюкалово! После её установки многое начинает глючить и тормозить.


    1. vma
      13.10.2015 15:00

      Уже много более качественных, стабильных и функциональных аналогов есть, вот например SecureTower:
      falcongaze.ru


  1. J_o_k_e_R
    13.10.2015 00:03
    +3

    Почему chrome, а не Google, но mozilla, а не Firefox? Может стоит называть правильно то, про что Вы пишете? Если что, ПО с названием mozilla (suite) тоже было, но Вы явно не про него.


    1. GebekovAS
      13.10.2015 08:07
      +1

      Это моя давняя привычка от которой пора избавиться=) Заголовок и метки не стал трогать, а в основном подправил. Спасибо за резонное замечание.


  1. SkidanovAlex
    13.10.2015 03:07
    +1

    > Браузер даже не дает права проигнорировать ошибку.

    Если я правильно помню, если развернуть «Технические Детали» внизу, там будет опция проигнорировать ошибку.


    1. GebekovAS
      13.10.2015 15:29

      Такой возможности там нет:

      Было бы интересно узнать почему.


      1. SunX
        13.10.2015 15:41
        +1

        Там же написано «Этот сайт использует HSTS… бла бла бла… В результате, добавление исключения для этого сертификата невозможно».


  1. ComodoHacker
    13.10.2015 09:49

    Вы не совсем верно интерпретировали свои наблюдения.

    StaffCop установил свой корневой сертификат также и в хранилище сертификатов Firefox, его видно на вашем скриншоте окна «Управление сертификатами». Обратите внимание на надпись «Модуль защиты» рядом с ним, она говорит о том, что сертификат не встроенный, а установлен извне.
    Но это не сработало из-за пиннинга, который в Firefox работает жестко. В то время как Chrome только отправляет информацию в Гугл о подозрительных сертификатах.

    И еще, если пользуетесь Firefox, обязательно установите расширение Cretificate Patrol. Оно поможет заметить подозрительный сертификат по косвенным признакам, даже если он подписан как положено (например украденным ключом корневого CA).


    1. GebekovAS
      13.10.2015 15:24

      Спасибо за подробное разъяснение. Я заметил, что корневой сертификат присутствует в хранилище (про «модуль защиты» не знал) и стал грешить на то, что сертификат самоподписанный, что и сподвигло меня на онлайн проверку. Комментарием выше мне уже объяснили, что отсутствие корневого сертификата в иерархии не признак самоподписанного сертификата. Получается, мне просто повезло, что у FireFox более жесткий процесс пиннинга чем у Chrome.
      Теперь возник вопрос: Будет ли правильным все эти поправки перенести в конец статьи или наличие их в комментариях будет достаточным?


      1. mayorovp
        13.10.2015 16:01

        Кстати, интересный вопрос — а пинниг ли это, или корневому сертификату просто нет доверия?

        Что, если снова найти корневой сертификат в хранилище и нажать на кнопку «Изменить доверия»?


        1. ComodoHacker
          13.10.2015 16:44

          Кстати, интересный вопрос — а пинниг ли это, или корневому сертификату просто нет доверия?

          В данном случае это одно и то же. :)


          1. mayorovp
            13.10.2015 18:18

            Нет, это не одно и то же.

            Certificate pinning — это привязка к конкретному сертификату без проверки иерархии, или проверка всего одного уровня иерархии.

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


        1. GebekovAS
          14.10.2015 09:16


          Теперь вроде все понятно


  1. DanXai
    13.10.2015 11:02

    На днях была аналогичная проблема в Хроме. Выяснилось, что Хрм не доверяет сертификату от Comodo.


    1. GebekovAS
      14.10.2015 09:33

      В свое время использовал сертификат от Comodo только потому, что на моем телефоне (Android) ему было доверие (поднимал Lync для демонстрации клиенту). Если не ошибаюсь, они еще тогда в архиве помимо моих сертификатов отправляли сертификат центра и вроде тоже приходилось вручную помещал его в хранилище доверительных центров на машинах с Windows 7. Думаю в поздних версиях (Windows 8 и 10) они уже включены.


  1. ComodoHacker
    13.10.2015 17:06

    Еще один сайт для проверки наличия подмененных корневых сертификатов: https://superfish.tlsfun.de/