Парсинг безопасных HTTP-заголовков

Парсинг безопасных HTTP-заголовков

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

Автор: SmeegeSec

Ссылка на скачивание парсера безопасных HTTP-заголовков

Недавно было выпущено несколько отчетов о том, как часто сайты (например, входящие в топ по рейтингу Alexa) используют безопасные HTTP-заголовки. Удивительно то, что многие не используют преимущества, которые дают эти заголовки. Кажется, что владельцы систем мало осведомлены о HTTP-заголовках, особенно имеющих отношение к безопасности. Во многих архитектурах использование этих заголовков может быть настроено без изменения приложения. Так почему же многие сайты до сих пор не пользуются этой возможностью? Внедрение (или удаление) некоторых заголовков может быть чрезвычайно полезно. Следует отметить, что некоторые заголовки поддерживаются лишь частью браузеров, предоставляя лишь определенный уровень безопасности. Так что, полностью полагаться только на безопасные заголовки не нужно.

Что мы делаем в самом начале тестирования безопасности сети? Конечно, запускаем Nmap. В Nmap встроен скрипт ‘http-headers’, возвращающий заголовки через HEAD-запрос веб сервера. Просмотр огромного файла, который возвращает скрипт, довольно затруднителен, и я написал небольшой парсер на python, принимающий на вход выходной .xml файл от Nmap и генерирующий .html отчет, содержащий только безопасные заголовки.

Последовательность действий:

1. Запускаем Nmap со скриптом http-headers. Результаты складываем в xml файл: nmap --script=http-headers <target> -oX output_file.xml

2. Запускаем парсер Security-Headers-Nmap-Parser.py вместе с ранее созданным xml файлом: python Security-Headers-Nmap-Parser.py -f output_file.xml

Параметры парсера: Security-Headers-Nmap-Parser.py { -f file } [-o output_filename].

Требуется указать один аргумент - .xml файл, сгенерированный Nmap. Также можно указать имя html отчета (по умолчанию создается файл Security-Headers-Report.html).

https://lh6.googleusercontent.com/-SYKfC_4We6I/U438NIZIw6I/AAAAAAAAAMg/ZLjCVuHZfak/s729/Security-Headers-Cmd.png

Рисунок 1: Пример использования парсера

https://lh4.googleusercontent.com/-TiGVFmBOwUs/U438NBbC6iI/AAAAAAAAAMo/fiIpEF1-76U/s2048/Security-Headers-Report2.png

Рисунок 2: Отчет об использовании безопасных заголовков

После запуска скрипта в нашем распоряжении появился отформатированный отчет в разрезе по связке IP-адрес:порт. По каждому IP-адресу содержится информация по 9-ти безопасным заголовкам: Access Control Allow Origin, Content Security Policy, Server, Strict Transport Security, Content Type Options, Frame Options, Cross Domain Policies, Powered By и XSS Protection. Отчет можно скопировать, например, в Microsoft Excel и уже там отредактировать и отсортировать.

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

Ссылки:

https://securityheaders.com
https://www.owasp.org

Домашний Wi-Fi – ваша крепость или картонный домик?

Узнайте, как построить неприступную стену