4.1.8 Определение фреймворка веб-приложения
Сейчас наиболее широко используются фреймворки от различных производителей и их различные версии. Информация о фреймворке не только упрощает тестирование, но и может полностью изменить его курс. Подобную информацию можно получить тщательно изучив веб-приложение. Большинство фреймворков содержат маркеры, благодаря которым можно определить какой именно фреймворк используется. Определить используемый фреймворк можно также с помощью различных автоматизированных инструментов — они находят маркеры и сравнивают их с содержащимися в базе. Для большей точности лучше использовать несколько маркеров.
[*]Пожалуйста, обратите внимание на то, что данная статья не различает Web Application Frameworks и Content Management Systems, это сделано для того чтобы объединить их определение в один раздел.
Поставленные задачи
Определить фреймворк , использующийся в веб приложении , чтобы лучше понять как эффективнее провести аудит
Как тестировать?
Тестирование методом "Чёрного ящика"
Есть несколько факторов , которые могут нам помочь определить фреймворк , среди них:
- HTTP заголовки
- Куки
- HTML код
- Специфические названия файлов и пути
- Расширения файлов
- Сообщения об ошибках
HTTP заголовки
Наиболее простой способ определения фреймворка — это изучить HTTP заголовок X-Powered-By
в ответе сервера. Для данной задачи можно использовать различные инструменты, наиболее простым из которых является netcat
.
Рассмотрим следующий HTTP запрос-ответ:
$ nc 127.0.0.1 80 HEAD / HTTP/1.0 HTTP/1.1 200 OK Server: nginx/1.0.14 Date: Sat, 07 Sep 2013 08:19:15 GMT Content-Type: text/html;charset=ISO-8859-1 Connection: close Vary: Accept-Encoding X-Powered-By: Mono
Из приведенного выше примера видно, что наиболее вероятно фреймворком веб-приложения является Mono. Однако, хотя данный подход является простым и быстрым, он не работает в 100 % случаев. Довольно легко при определенной настройке отключить заголовок X-Powered-By
. Также существуют различные техники, позволяющие обфусцировать HTTP заголовки.
Поэтому иногда в ответах сервера заголовок X-Powered-By
может попросту отсутствовать или же иметь следующий вид:
HTTP/1.1 200 OK Server: nginx/1.0.14 Date: Sat, 07 Sep 2013 08:19:15 GMT Content-Type: text/html;charset=ISO-8859-1 Connection: close Vary: Accept-Encoding X-Powered-By: Blood, sweat and tears
Иногда, в ответе сервера присутствуют несколько заголовков, указывающих на фреймворк. В следующем примере, согласно заголовку X-Powered-By
приложение написано на PHP. Однако, заголовок X-Generator
указывает на то, что фреймворком веб-приложения на самом деле является Swiftlet
, зная это, пентестер может значительно расширить вектора атаки. Определяя фреймворк, стоит тщательно изучать каждый HTTP заголовок ради подобных утечек.
HTTP/1.1 200 OK Server: nginx/1.4.1 Date: Sat, 07 Sep 2013 09:22:52 GMT Content-Type: text/html Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/5.4.16-1~dotdeb.1 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache X-Generator: Swiftlet
Куки
Более точным и надежным методом определения фреймворка веб-приложения является изучение куки.
Рассмотрим следующий HTTP запрос:
Куки CAKEPHP
были установлены автоматически, благодаря чему мы можем определить используемый веб-приложением фреймворк. Ограничения те же, что и у предыдущего метода — можно изменить название куки, например, в фреймворке CakePHP
это можно сделать с помощью следующей конфигурации (выдержка из core.php):
/** * The name of CakePHP's session cookie. * * Note the guidelines for Session names states: "The session name references * the session id in cookies and URLs. It should contain only alphanumeric * characters." * @link http://php.net/session_name */ Configure::write('Session.cookie', 'CAKEPHP');
Однако, подобные изменения менее вероятны, чем изменение заголовка X-Powered-By
, именно поэтому данный метод считается более надежным.
HTML код
Данный метод основывается на поиске в исходном коде страниц определенных паттернов. Зачастую, из исходного кода можно получить много информации, благодаря которой можно определить фреймворк веб-приложения.
Одним из наиболее распространенных маркеров являются комментарии, которые могут напрямую раскрыть используемый фреймворк. Более часто можно обнаружить пути, характерные для определенного фреймворка, например, css файлы и/или js каталоги. Различные специфичные имена переменных в скриптах также позволяют опеределить фреймворк веб-приложения.
В скриншоте, расположенном ниже,сразу можно определить используемый фреймворк и его версию по рассмотренным ранее маркерам: комментарий, характерные пути и имена переменных в скрипте позволяют быстро определить что используемым веб-приложением фреймворком является ZK.
Довольно часто информация об используемом фреймворке размещается в теге meta или же внизу страницы. Тем не менее, рекомендуется полностью изучить исходный код страницы, так как в нем могут содержаться полезные комментарии и скрытые поля для ввода. Иногда, веб-разработчики даже не пытаются скрыть информацию об используемом фреймворке. Все еще возможно наткнуться на нечто подобное внизу страницы:
Расширения файлов
URL-адрес может содержать расширения файлов. Расширения файлов также могут помочь идентифицировать веб-платформу или используемую технологию.
Для примера - OWASP.ORG использует PHP
https://www.owasp.org/index.php?title=Fingerprint_Web_Application_Framework&action=edit§ion=4
Вот связки расширение - технология , которые наиболее часто используются в веб-приложениях
- php – PHP
- aspx – Microsoft ASP.NET
- jsp – Java Server Pages
Сообщения об ошибках
Обычно используемые фреймворки
Куки (связки технология - куки)
Zope - zope3
CakePHP - cakephp
Kohana - kohanasession
Laravel - laravel_session
HTML код
Общие маркеры
- %framework_name%
- powered by
- built upon
- running
Специфичные маркеры
Фреймворк — ключевое слово
Adobe ColdFusion — <!– START headerTags.cfm
Microsoft — ASP.NET_VIEWSTATE
ZK — <!– ZK
Business Catalyst — <!– BCOBNW –>
Indexhibit — ndxz-studio
Определенные файлы и каталоги
Файлы и каталоги различны для каждого фреймворка. Рекомендуется установить соответствующий фреймворк во время проведения пентеста для того, чтобы лучше понимать его инфраструктуру и определить файлы, которые могли остаться на сервере. Существуют различные словари файлов, одни из лучших словарей можно найти в FuzzDB, раздел predictable files/folders (http://code.google.com/p/fuzzdb/).
Инструменты
Ниже приведены несколько часто используемых инструментов при опередении фреймворка веб-приложения.
WhatWeb
Сайт: http://www.morningstarsecurity.com/research/whatweb
На данный момент один из лучших инструментов. Входит в состав Kali линукс по-умолчанию. Написан на Ruby, для определения использует:
- текстовые строки (чувствителен к регистру)
- регулярные выражения
- гугл дорки (ограниченное число ключевых слов)
- хеши MD5
- урлы
- паттерны HTML тегов
- кастомный Ruby код для пассивного и активного определения
На скриншоте показан пример работы
BlindElephant
Сайт: https://community.qualys.com/community/blindelephant
Данный инструмент выдает крайне точные результаты, его работа основывается на анализе контрольных сум статических файлов. Написан на Python.
Пример работы :
pentester$ python BlindElephant.py http://my_target drupal Loaded /Library/Python/2.7/site-packages/blindelephant/dbs/drupal.pkl with 145 versions, 478 differentiating paths, and 434 version groups. Starting BlindElephant fingerprint for version of drupal at http://my_target Hit http://my_target/CHANGELOG.txt File produced no match. Error: Retrieved file doesn't match known fingerprint. 527b085a3717bd691d47713dff74acf4 Hit http://my_target/INSTALL.txt File produced no match. Error: Retrieved file doesn't match known fingerprint. 14dfc133e4101be6f0ef5c64566da4a4 Hit http://my_target/misc/drupal.js Possible versions based on result: 7.12, 7.13, 7.14 Hit http://my_target/MAINTAINERS.txt File produced no match. Error: Retrieved file doesn't match known fingerprint. 36b740941a19912f3fdbfcca7caa08ca Hit http://my_target/themes/garland/style.css Possible versions based on result: 7.2, 7.3, 7.4, 7.5, 7.6, 7.7, 7.8, 7.9, 7.10, 7.11, 7.12, 7.13, 7.14 ... Fingerprinting resulted in: 7.14 Best Guess: 7.14
Wappalyzer
Сайт: http://wappalyzer.com
Wappalyzer — это плагин для Firefox или Chrome. Для определения использует только регулярные выражения, чтобы он заработал нужно просто загрузить страницу в браузере. Работает полностью в браузере и выдает результаты в виде иконок. Иногда он выдает ложные результаты, но все же полезно узнать о технологиях, используемых веб-приложением сразу после его загрузки.
Пример работы:
Справочные материалы
- Saumil Shah: «An Introduction to HTTP fingerprinting» — http://www.net-square.com/httprint_paper.html
- Anant Shrivastava : «Web Application Finger Printing» — http://anantshri.info/articles/web_app_finger_printing.html
Противодействие атакующему
Нужно использовать инструменты, описанные выше, и изучать логи для того, чтобы понять, что может помочь атакующему определить фреймворк веб-приложения. Сканируя свой веб-сайт и убирая различные маркеры можно достичь большего уровня защищенности, и убедиться в том, что атакующий не сможет определить фреймворк веб-приложения с помощью автоматизированных средств. Ниже приведены несколько рекомендаций о том, как усложнить жизнь атакующему.
HTTP заголовки
Проверьте конфигурацию и отключите или обфусцируйте все заголовки, раскрывающие информацию об используемых технологиях. Вот интересная статья об обфускации HTTP заголовков используя Netscaler: http://grahamhosking.blogspot.ru/2013/07/obfuscating-http-header-using-netscaler.html
Куки
Рекомендуется изменить все имена куки, отредактировав соответствующие конфигурационные файлы.
HTML-код
Просмотрите исходный код страниц и удалите все, что явно указывает на фреймворк.
Общие рекомендации:
- убедитесь, что нет визуальных маркеров, раскрывающих фреймворк
- удалите все ненужные комментарии (информация об авторских правах, информация о багах, комментарии характерные для фреймворка)
- удалите в теге META аттрибут generator
- используйте свои собственные css и js файлы, также не сохраняйте их в директориях созданных фреймворком
- не используйте скрипты по-умолчанию и обфусцируйте их,если вам все же нужно их использовать
Определенные файлы и каталоги
Общие рекомендации:
- удалите все неиспользуемые и ненужные файлы. Это также относится к текстовым файлам, раскрывающим версию фреймворка или любую другую важную информацию
- запретите доступ к другим файлам, необходимо выдавать 404 ошибку при доступе из вне. Это можно сделать, например, с помощью файла htaccess, добавив в него RewriteCond или RewriteRule. Ниже приведен пример запрета двух распространенных в WordPress директорий:
RewriteCond %{REQUEST_URI} /wp-login\.php$ [OR] RewriteCond %{REQUEST_URI} /wp-admin/$ RewriteRule $ /http://your_website [R=404,L]
Однако, это не единственный способ запрета доступа. В некоторых фреймворках существуют плагины для автоматизации этого процесса, например, в WordPress — StealthLogin (http://wordpress.org/plugins/stealth-login-page).
Общие рекомендации
- Управление контрольными суммами — данный подход используется для того, чтобы помещать автоматизированным сканерам, анализирующим контрольные суммы статических файлов. Существует два метода управления контрольными суммами:
- изменение расположения статических файлов (например, перенести файлы в другой каталог или переименовать существующий каталог)
- изменение содержимого файла — даже небольшое изменение файла приводит к кардинальному изменению контрольной суммы, тоесть достаточно добавить всего лишь один байт в конце файла
- управляемый хаос — довольно забавный и эффективный метод. Нужно добавить фиктивные файлы и каталоги из других фреймворков для того чтобы сбить с толку автоматизированные сканнеры и запутать атакующих. Правда, нужно быть крайне аккуратным, так как существует опасность перезаписи существующих файлов.
Перевод подготовлен специально для канала t.me/FreedomF0x
Contact: t.me/freedomf0x t.me/Slippery_Fox twitter.com/FlatL1ne
xmpp(жаба_ёпт): [email protected]
При поддержке друзей: t.me/in51d3 t.me/NeuroAliceMusic t.me/vulnersBot t.me/darknet_prison
Our private (no logs) xmpp server: FreedomFox.im (for add, write to [email protected])
Хорошо там где нас нет (с) Русские хакеры
Добре там де нас немає (с) Російські хакери