Определение веб-сервера
Резюме
Определение типа и версии веб-сервера — это задача выявления, на каком типе и версии веб-сервера работает целевая система. Хотя эта задача часто выполняется автоматизированными инструментами тестирования, важно, чтобы исследователи понимали основные принципы работы этих инструментов и их полезность.
Точное определение типа веб-сервера, на котором работает приложение, позволяет тестировщикам безопасности определить, уязвимо ли это приложение для атак. Особенно это касается серверов, работающих на устаревших версиях программного обеспечения без актуальных патчей безопасности, которые могут быть уязвимы к известным атакам, специфичным для версии.
Цели тестирования
Определить версию и тип работающего веб-сервера для дальнейшего поиска известных уязвимостей.
Как тестировать
Методы, используемые для определения веб-сервера, включают захват баннера, получение ответов на искаженные запросы и использование автоматизированных инструментов для более комплексных сканирований с применением различных тактик. Основная идея всех этих методов заключается в том, чтобы получить ответ от веб-сервера, который затем можно сравнить с базой данных известных ответов и поведения, что позволит сопоставить его с известным типом сервера.
Захват баннера
Захват баннера осуществляется путем отправки HTTP-запроса на веб-сервер и изучения его заголовка ответа. Это можно сделать с помощью различных инструментов, таких как telnet для HTTP-запросов или openssl для запросов по SSL.
Пример ответа от сервера Apache:
HTTP/1.1 200 OK
Date: Thu, 05 Sep 2019 17:42:39 GMT
Server: Apache/2.4.41 (Unix)
Last-Modified: Thu, 05 Sep 2019 17:40:42 GMT
Content-Type: text/html
...
Ответ от сервера nginx:
HTTP/1.1 200 OK
Server: nginx/1.17.3
Date: Thu, 05 Sep 2019 17:50:24 GMT
Content-Type: text/html
...
Ответ от lighttpd:
HTTP/1.0 200 OK
Content-Type: text/html
Date: Thu, 05 Sep 2019 17:57:57 GMT
Server: lighttpd/1.4.54
...
В этих примерах тип и версия сервера явно указаны. Однако приложения, ориентированные на безопасность, могут скрывать свою серверную информацию, изменяя заголовок. Например, вот ответ от сайта с измененным заголовком:
HTTP/1.1 200 OK
Server: Website.com
...
Если информация о сервере скрыта, тестировщики могут предположить тип сервера, основываясь на порядке заголовков. Но так как множество разных веб-серверов могут использовать одинаковые заголовки, этот метод не всегда надежен.
Отправка искаженных запросов
Веб-серверы могут быть идентифицированы по их ошибочным ответам и, если они не были настроены, по их стандартным страницам ошибок. Один из способов получить эти страницы — отправить намеренно неправильные или искаженные запросы.
Ответ от сервера Apache на запрос с несуществующим методом:
GET / SANTA CLAUS/1.1
HTTP/1.1 400 Bad Request
...
Ответ от nginx:
GET / SANTA CLAUS/1.1
HTTP/1.1 404 Not Found
...
Ответ от lighttpd:
GET / SANTA CLAUS/1.1
HTTP/1.0 400 Bad Request
...
Поскольку стандартные страницы ошибок предоставляют множество различий между типами веб-серверов, их изучение может быть эффективным методом для определения сервера, даже если поля заголовков скрыты.
Использование автоматизированных инструментов сканирования
Как уже упоминалось, определение веб-сервера часто включено в функции автоматизированных инструментов сканирования. Эти инструменты могут отправлять запросы, подобные вышеописанным, а также другие специфические запросы. Автоматизированные инструменты могут быстрее сравнивать ответы от веб-серверов и используют обширные базы данных известных ответов для попытки определения сервера. Поэтому автоматизированные инструменты чаще дают точные результаты.
Некоторые распространенные инструменты для сканирования с функцией определения веб-сервера:
- Netcraft — онлайн-инструмент для сканирования сайтов на информацию, включая веб-сервер.
- Nikto — инструмент командной строки с открытым исходным кодом.
- Nmap — инструмент командной строки с открытым исходным кодом, также имеет GUI Zenmap.
Рекомендации
Хотя открытая информация о сервере сама по себе не является уязвимостью, она может помочь злоумышленникам в эксплуатации других уязвимостей. Открытая информация о сервере также может помочь злоумышленникам находить уязвимости, специфичные для версий, что может использоваться для эксплуатации незапатченных серверов. Поэтому рекомендуется предпринять некоторые меры предосторожности:
- Скрывать информацию о веб-сервере в заголовках, например, с помощью модуля mod_headers для Apache.
- Использовать защищенный обратный прокси-сервер для создания дополнительного уровня безопасности между веб-сервером и интернетом.
- Обеспечить обновление веб-серверов с последним программным обеспечением и патчами безопасности.