Как стать автором
Обновить
37.66
Вебмониторэкс
Платформа WAF и API Security

Зачем менять заголовки ответа сервера и при чем здесь WAF

Время на прочтение5 мин
Количество просмотров1.7K

Приветствую тебя, уважаемый читатель!

Мы начинаем цикл статей про настройку правил WAF (на примере продукта «ПроWAF»), поделимся хитростями и неочевидными способами настройки WAF для борьбы с некоторыми веб-атаками. И наша первая тема: манипуляция с заголовками ответа. Сразу стоит заметить, что управлять заголовками ответа чаще всего приходится через конфиг веб‑сервера и очень многие DevOps инженеры сочтут странным использование для этого WAF, ведь конфигурация как бы «размазывается» между несколькими сущностями...

Ответим: через WAF делать настройку может оказаться удобнее. То, что относится к безопасности — отображается в WAF. Также не нужно лезть в конфиги веб‑серверов, не нужны права root. Безопасник может настраивать систему, не тревожа DevOps.

Зачем вообще управлять заголовками ответа HTTP-сервера?

Управление механизмами безопасности браузера

Это первое и основное применение. Заголовки ответа используются браузерами для активации или настройки механизмов защиты клиента. 

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

Также есть онлайн сервисы для тестирования приложения на наличие и корректность заголовков безопасности. Например:

Примеры правил «ПроWAF» на добавление заголовков безопасности.

Рис. 1. Добавление заголовка Content-Security-Policy
Рис. 1. Добавление заголовка Content-Security-Policy
Рис. 2. Добавление заголовка X-Frame-Options
Рис. 2. Добавление заголовка X-Frame-Options

Управление кешированием

Обычно статику через WAF не раздают, но раз уж пошел разговор про заголовки ответа, то для общей картины, думаю, стоит упомянуть про заголовок Cache-Control.

Взаимодействие с поисковыми роботами

Тут отмечу только X-Robots-Tag.

Затруднение сбора информации о приложении (Security through obscurity)

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

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

Вот некоторые заголовки ответа, которые могут раскрыть информацию о сервере:

Server:

Указывает информацию о веб-сервере: его название и версию.

Пример: Server: Apache/2.4.41 (Ubuntu)

X-Powered-By:

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

Пример: X-Powered-By: PHP/7.4.3 или X-Powered-By: Express

X-AspNet-Version:

Указывает версию ASP.NET, которая используется на сервере.

Пример: X-AspNet-Version: 4.0.30319

X-Backend-Server:

Пример: X-Backend-Server: backend1.example.com

X-Generator:

Этот заголовок может указывать на инструмент или фреймворк, который сгенерировал страницу.

Пример: X-Generator: WordPress 5.5.1

Х-Powered-CMS:

Иногда указывает на использование конкретной CMS (Content Management System).

Пример: X-Powered-CMS: Joomla! 3.9.19

X-Powered-By-Plesk:

Указывает на использование панели управления хостингом Plesk.

Пример: X-Powered-By-Plesk: PleskWin

X-Environment:

Может указывать на среду, в которой работает приложение (например, production, staging, development).

Пример: X-Environment: production

X-Powered-By-Framework:

Может содержать информацию о фреймворке, на котором построено приложение.

Пример: X-Powered-By-Framework: Laravel

 X-Server-Software:

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

Пример: X-Server-Software: Apache/2.4.41 (Unix)

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

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

Для интересующихся темой fingerprintin'га веб-серверов оставлю несколько ссылок на инструменты и сигнатуры:

https://github.com/saganshul/owtf-tornado-react-demo/blob/master/tools/httprint-signatures.txt

https://webtechsurvey.com/common-response-headers

https://github.com/tunetheweb/wappalyzer/tree/master

https://github.com/nmap/nmap/blob/master/nselib/data/http-fingerprints.lua

https://github.com/OWASP/www-project-web-security-testing-guide/blob/master/stable/4-Web_Application_Security_Testing/01-Information_Gathering/02-Fingerprint_Web_Server.md

 А правило для удаления заголовка ответа приводим ниже:

Рис. 3. Удаление заголовка X-POWERED-BY
Рис. 3. Удаление заголовка X-POWERED-BY

Кстати, ничего не мешает перезаписывать содержимое заголовка ответа и менять шило на мыло, т.е. IIS на apache ;)

Немножечко странного

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

Некоторые компании так размещают объявления о вакансиях

X-Recruiting: Like HTTP headers? Come write ours: https://careers.example.com

X-Hiring: "We are hiring! Join our team as a Senior Backend Developer at jobs.example.com".

Кто-то пытается вставлять рекламу

X-Promo: "Check out our new API at api.example.com!".

Помню, была история с веб-сервером (его название, увы, уже выветрилось из памяти), который так пытался монетизироваться ;)

Кто-то использует заголовки в юмористических целях

X-Security: "Armed with lasers and firewalls!".

X-AI-Message: "I’m learning from every request you send...".

X-API-Calories: "This request burned 42 calories".

X-Secret-Code: "42-A7F9-GH35". # и пусть свидетель сего заголовка ломает голову что бы это значило ))

 Или для новостей, подсказок и анонсов

X-Tip: "Did you know? You can now integrate with our API using GraphQL!".

X-Update-Notice: "Version 2.0 is live! Explore the new API endpoints.".

X-Quest-Hint: "To unlock the next level, find the secret word hidden in our API docs.".

X-Security-Tip: "Enable two-factor authentication for better security.".

 И да, вы можете настроить что-то подобное у себя через наш WAF ;))

Заключение

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

Буду рад дополнениям, замечаниям и предложениям )

Теги:
Хабы:
+3
Комментарии1

Публикации

Информация

Сайт
webmonitorx.ru
Дата регистрации
Дата основания
Численность
51–100 человек
Местоположение
Россия

Истории