June 11, 2020

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&section=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. Для определения использует только регулярные выражения, чтобы он заработал нужно просто загрузить страницу в браузере. Работает полностью в браузере и выдает результаты в виде иконок. Иногда он выдает ложные результаты, но все же полезно узнать о технологиях, используемых веб-приложением сразу после его загрузки.

Пример работы:

Справочные материалы

Противодействие атакующему

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

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])

Хорошо там где нас нет (с) Русские хакеры
Добре там де нас немає (с) Російські хакери