Я как
Первое, на что я наткнулся — было отличное приложение от разработчиков Mozilla, которое анализирует Headers и много чего другого и выставляет оценку безопасности сайту. Очень хорошая вещь, и мне самому очень помогла, но пользоваться ей не всегда удобно.
И я решил сделать свое приложение, которое могло бы с лету анализировать все сайты, которые я посещаю, анализируя HTTP headers и выставляя оценку подобно сайту Mozilla. А еще очень хотелось, чтобы оно сразу определяло не использует ли сервер уязвимые технологии. И чтобы готовить умело. Но от последней фичи впоследствии пришлось отказаться.
Код можно посмотреть на GitHub, хотелось бы выразить благодарность noomorph за советы в непрофильном для меня JavaScript. Само расширение доступно по ссылке: HeaderView
Для демонстрации работы, можно просто открыть хабр, и если вы им воспользуетесь вскоре после публикации статьи, то скорее всего увидите следующее:
Оценка безопасности сайта F+, из расчета что А — наивысшая оценка, и F — наинизшая. Хабр имеет хедеры безопасности, но вместе с тем, он показывает на каком языке он работает, и версия этого языка малость устарела (на момент публикации статьи актуальная версия PHP 5.6.29 согласно официальной документации. Расширение автоматически формирует ссылку по которой вы можете увидеть уязвимости данной версии.
В качестве поисковика уязвимостей я выбрал Vulners, так как, во-первых, он мне нравится, а во-вторых, я не знаю других, и если у вас таки есть что мне подсказать, буду рад.
Также расширение пытается анализировать используемый сервер, но в данном случае хабр не показывает версию, и определить уязвима ли она не представляется возможным.
Что интересно, при переходе с Geektimes на хабр, редирект проходит через другой сервер, у которого версия PHP чуть поновее:
Хотя и недостаточно.
Таким образом, я теперь просматриваю все сайты, где оставляю личную информацию или совершаю покупки.
Если у вас свой ресурс, стоит посмотреть, что вы сообщаете в мир, а по-хорошему рекомендуется не только скрыть версию языка/сервера, но и вовсе не показывать какие технологии вы используете. Это, конечно, не поможет уберечься от целенаправленной атаки, но является правилом хорошего тона.
Буду рад подсказкам и идеям что добавить, а так же чем расширить распознаваемые технологии!
Комментарии (31)
sumanai
19.01.2017 16:26Буду рад подсказкам и идеям что добавить, а так же чем расширить распознаваемые технологии!
Совместимость с Firefox? К сожалению, я не умею отлаживать дополнения браузера, но ваше, после конвертации, отображает пустой серый dropdown по нажатию.LoadRunner
19.01.2017 17:12+1Глупый вопрос — Вы обновляли страницу перед нажатием? На уже открытых и не обновлённых страницах даже в хроме ничего не покажет — и это нормальная ситуация, у расширения же нет пакетов с этого сайта.
sumanai
19.01.2017 19:47Да конечно, даже браузер перезапустил. На одной вкладке на иконке появилась цифра «302», но как там она оказалась- загадка.
Nidhognit
19.01.2017 20:32+1Я до конца не уверен, но думаю дело в следующем:
Расширение использует API браузера(google chrome), где оно подписывается на конкретные события. По вашей ссылке расширение, которое помогает устанавливать расширения из магазина google. Я попробовал, и мое расширение установилось без изменений (я открыл в редакторе установленный в Firefox файл и изменений не обнаружил), что натолкнуло меня на мысль, что расширение от googl конвертацию не производит, оно создает что то типа обертки над методами Firefox. Возможно не все методы имеют обертки, или суть в том что я подписываюсь на события браузера chrome, а в Firefox они другие.sumanai
19.01.2017 20:46Расширение использует API браузера(google chrome)
А почему не WebExtensions API? Вроде как раз его и придумали для того, чтобы дополнения работали во всех актуальных браузерах.
dartraiden
22.01.2017 13:38+1Для Firefox есть Wappalyzer.
sumanai
23.01.2017 21:14Показывает версии, но не предупреждает об уязвимостях и не ставит всякие там оценки.
ognivo777
19.01.2017 17:12Если найденная версия софта не самая свежая и это подсвечивается красным, правила хорошего тона требуют так же дать информацию о текущей, считающейся актуальной версии.
AEP
21.01.2017 23:48Не забывайте о пользователях enterprise-дистрибутивов — там уязвимости исправляются БЕЗ повышения версии, а отдельным патчем.
pansa
19.01.2017 22:49+6> но вместе с тем, он показывает на каком языке он работает, и версия этого языка малость устарела
Это если верить хидерам. Но это же просто буковки и циферки. Я, например, на некоторых серверах специально отдаю «левые» значения в server, x-powered-by и тп, не имеющие отношения к реальному софту. Глупенькие боты радостно бросаются искать дыры в php или апаче, а их там отродясь не стояло :)
Зато тем самым они отлично себя выдают и попадают в бан.
neuotq
19.01.2017 23:40+1Тема на самом деле важная и как показала проверка различных сайтов актуальная. Молодец что поднял.
UPD а и добавь фишку с обзервера, чтобы было ясно за что снимаются баллы, а что хорошо.Nidhognit
20.01.2017 12:41+1Думаю, можно зеленым подсвечивать headers которые расширение считает валидными. Добавлю.
igurylev
20.01.2017 12:42+1Хм, ну вот я проверил свой сайт и получил рейтинг F.
«Отлично», но что дальше? Ни одна строчка не подсвечена, куда двигаться для исправления — неясно.
Версию ни PHP ни вебсервера не отдаю, только server: nginx и всё, про PHP ни слова.
Было бы очень неплохо, если бы выдавались рекомендации по исправлению, типа как в Page Speed Insights или SSLLabs.
ssh24
20.01.2017 13:29по этому тесту даже у google.com и microsoft.com всего D
чего уж про остальные сайты…
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 лежит вот тут.Nidhognit
21.01.2017 12:30Спасибо огромное за пример!
Идея хорошая, но так почему-то находит гораздо меньше. Я пробовал
affectedSoftware.name:«php» AND affectedSoftware.version:«5.3.3»
и просто
php-5.3.3
в последнем случае найдено намного больше (хоть и не все по делу).
isox
21.01.2017 13:13+1Когда запрос идет без конкретизации полей, то работает механика обычного полнотекстового поиска.
А вот с affectedSoftware можно пользоваться уже точными сравнениями.
Хоть и не очень удобный, но правильный путь это посмотреть на все коллекции. Потом выбрать один элемент из нее, к примеру на Nginx.
Дальше там есть малозаметная но полезная кнопка «JSON source»:
И посмотреть как выглядит разметка для автоматизации сканирования:
"affectedSoftware": [
{
"operator": "le",
"version": "1.9.9",
"name": "nginx"
}
],
Соответственно, «operator» подразумевает оператор сравнения, который надо применить между целевой версией софта и указанной в advisory. Если оператор выдал True, значит уязвимость присутствует.
Для поиска по конкретным полям в запросах надо применять разделитель "."
То есть, если мы хотим искать по name из примера, то affectedSoftware.name:«запрос»
LoadRunner
А есть сайт с оценкой A?
Nidhognit
Наверняка, но я видел самое лучшее «B»)
LoadRunner
И что же это за сайт такой интересный?
Nidhognit
Это поисковик уязвимостей что я использую (https://vulners.com/), если бы они настроили «CONTENT-SECURITY-POLICY», у них был бы «A».
yjurfdw
Нашел такой
hackerone.com
https://observatory.mozilla.org/analyze.html?host=hackerone.com
pansa
A+
Хех, не зря CSP настраивал :)
https://observatory.mozilla.org/analyze.html?host=bugs.drweb.com
LoadRunner
На этот сайт расширение у меня C+ показывает.
pakrauce
Observatory by Mozilla показывает A+. Расширение показывает вообще F
Nidhognit
Согласен, это баг, исправлю.