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

image

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

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

И я решил сделать свое приложение, которое могло бы с лету анализировать все сайты, которые я посещаю, анализируя HTTP headers и выставляя оценку подобно сайту Mozilla. А еще очень хотелось, чтобы оно сразу определяло не использует ли сервер уязвимые технологии. И чтобы готовить умело. Но от последней фичи впоследствии пришлось отказаться.

Код можно посмотреть на GitHub, хотелось бы выразить благодарность noomorph за советы в непрофильном для меня JavaScript. Само расширение доступно по ссылке: HeaderView

Для демонстрации работы, можно просто открыть хабр, и если вы им воспользуетесь вскоре после публикации статьи, то скорее всего увидите следующее:

image

Оценка безопасности сайта F+, из расчета что А — наивысшая оценка, и F — наинизшая. Хабр имеет хедеры безопасности, но вместе с тем, он показывает на каком языке он работает, и версия этого языка малость устарела (на момент публикации статьи актуальная версия PHP 5.6.29 согласно официальной документации. Расширение автоматически формирует ссылку по которой вы можете увидеть уязвимости данной версии.

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

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

Что интересно, при переходе с Geektimes на хабр, редирект проходит через другой сервер, у которого версия PHP чуть поновее:

image

Хотя и недостаточно.

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

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

Буду рад подсказкам и идеям что добавить, а так же чем расширить распознаваемые технологии!
Поделиться с друзьями
-->

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


  1. LoadRunner
    19.01.2017 15:11

    А есть сайт с оценкой A?


    1. Nidhognit
      19.01.2017 15:22

      Наверняка, но я видел самое лучшее «B»)


      1. LoadRunner
        19.01.2017 15:31

        И что же это за сайт такой интересный?


        1. Nidhognit
          19.01.2017 15:54

          Это поисковик уязвимостей что я использую (https://vulners.com/), если бы они настроили «CONTENT-SECURITY-POLICY», у них был бы «A».


    1. yjurfdw
      19.01.2017 17:05

      1. pansa
        19.01.2017 23:25

        A+
        Хех, не зря CSP настраивал :)
        https://observatory.mozilla.org/analyze.html?host=bugs.drweb.com


      1. LoadRunner
        20.01.2017 08:34

        На этот сайт расширение у меня C+ показывает.


        1. pakrauce
          21.01.2017 12:30

          Observatory by Mozilla показывает A+. Расширение показывает вообще F


      1. Nidhognit
        20.01.2017 12:40

        Согласен, это баг, исправлю.


  1. sumanai
    19.01.2017 16:26

    Буду рад подсказкам и идеям что добавить, а так же чем расширить распознаваемые технологии!

    Совместимость с Firefox? К сожалению, я не умею отлаживать дополнения браузера, но ваше, после конвертации, отображает пустой серый dropdown по нажатию.


    1. LoadRunner
      19.01.2017 17:12
      +1

      Глупый вопрос — Вы обновляли страницу перед нажатием? На уже открытых и не обновлённых страницах даже в хроме ничего не покажет — и это нормальная ситуация, у расширения же нет пакетов с этого сайта.


      1. sumanai
        19.01.2017 19:47

        Да конечно, даже браузер перезапустил. На одной вкладке на иконке появилась цифра «302», но как там она оказалась- загадка.


    1. Nidhognit
      19.01.2017 20:32
      +1

      Я до конца не уверен, но думаю дело в следующем:
      Расширение использует API браузера(google chrome), где оно подписывается на конкретные события. По вашей ссылке расширение, которое помогает устанавливать расширения из магазина google. Я попробовал, и мое расширение установилось без изменений (я открыл в редакторе установленный в Firefox файл и изменений не обнаружил), что натолкнуло меня на мысль, что расширение от googl конвертацию не производит, оно создает что то типа обертки над методами Firefox. Возможно не все методы имеют обертки, или суть в том что я подписываюсь на события браузера chrome, а в Firefox они другие.


      1. sumanai
        19.01.2017 20:46

        Расширение использует API браузера(google chrome)

        А почему не WebExtensions API? Вроде как раз его и придумали для того, чтобы дополнения работали во всех актуальных браузерах.


    1. dartraiden
      22.01.2017 13:38
      +1

      Для Firefox есть Wappalyzer.


      1. sumanai
        23.01.2017 21:14

        Показывает версии, но не предупреждает об уязвимостях и не ставит всякие там оценки.


  1. ognivo777
    19.01.2017 17:12

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


    1. Nidhognit
      19.01.2017 20:14

      Согласен, хорошая идея


    1. AEP
      21.01.2017 23:48

      Не забывайте о пользователях enterprise-дистрибутивов — там уязвимости исправляются БЕЗ повышения версии, а отдельным патчем.


  1. pansa
    19.01.2017 22:49
    +6

    > но вместе с тем, он показывает на каком языке он работает, и версия этого языка малость устарела

    Это если верить хидерам. Но это же просто буковки и циферки. Я, например, на некоторых серверах специально отдаю «левые» значения в server, x-powered-by и тп, не имеющие отношения к реальному софту. Глупенькие боты радостно бросаются искать дыры в php или апаче, а их там отродясь не стояло :)
    Зато тем самым они отлично себя выдают и попадают в бан.


  1. neuotq
    19.01.2017 23:40
    +1

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


    1. Nidhognit
      20.01.2017 12:41
      +1

      Думаю, можно зеленым подсвечивать headers которые расширение считает валидными. Добавлю.


  1. igurylev
    20.01.2017 12:42
    +1

    Хм, ну вот я проверил свой сайт и получил рейтинг F.
    «Отлично», но что дальше? Ни одна строчка не подсвечена, куда двигаться для исправления — неясно.
    Версию ни PHP ни вебсервера не отдаю, только server: nginx и всё, про PHP ни слова.
    Было бы очень неплохо, если бы выдавались рекомендации по исправлению, типа как в Page Speed Insights или SSLLabs.


    1. Nidhognit
      20.01.2017 12:42

      Да, хорошая идея.


  1. ssh24
    20.01.2017 13:29

    по этому тесту даже у google.com и microsoft.com всего D
    чего уж про остальные сайты…


    1. sumanai
      20.01.2017 15:31

      Эти сайты и не должны быть сверхбезопасными, они стремятся к большей совместимости в ущерб безопасности, так как с их посещаемостью даже 0,5% это очень много.


      1. ssh24
        20.01.2017 15:35
        +1

        да, вы правы


  1. isox
    21.01.2017 09:12

    Можно еще немножко расширить функционал и добавить к учету рейтинга факт использования уязвимой версии ПО.
    Если использовать запрос на Vulners вот так:

    Поисковый запрос:

    affectedSoftware.name:"nginx" AND affectedSoftware.version:"1.11.0"


    Делаем запрос API

    То получаем выхлоп с уязвимостью. Можно использовать параметр «total»: 1 как метрику.
    Не на все софты это сработает подобным образом, но на многие.

    Вот еще пример для Apache:

    (affectedSoftware.name:*apache*) AND (affectedSoftware.version:"2.4.18")


    P.S.
    Мануал по query лежит вот тут.


    1. Nidhognit
      21.01.2017 12:30

      Спасибо огромное за пример!
      Идея хорошая, но так почему-то находит гораздо меньше. Я пробовал

      affectedSoftware.name:«php» AND affectedSoftware.version:«5.3.3»

      и просто

      php-5.3.3

      в последнем случае найдено намного больше (хоть и не все по делу).


      1. isox
        21.01.2017 13:13
        +1

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

        Хоть и не очень удобный, но правильный путь это посмотреть на все коллекции. Потом выбрать один элемент из нее, к примеру на Nginx.

        Дальше там есть малозаметная но полезная кнопка «JSON source»:
        image

        И посмотреть как выглядит разметка для автоматизации сканирования:

        "affectedSoftware": [
        {
        "operator": "le",
        "version": "1.9.9",
        "name": "nginx"
        }
        ],


        Соответственно, «operator» подразумевает оператор сравнения, который надо применить между целевой версией софта и указанной в advisory. Если оператор выдал True, значит уязвимость присутствует.

        Для поиска по конкретным полям в запросах надо применять разделитель "."
        То есть, если мы хотим искать по name из примера, то affectedSoftware.name:«запрос»


        1. Nidhognit
          22.01.2017 12:43

          Теперь понял, спасибо)