Сервис для
сео - оптимизаторов

Найди ошибки на сайте
Ошибки мешают продвижению сайта
Исправь ошибки на сайте
Сайт без ошибок продвигать легче
Получи новых клиентов
Новые клиенты принесут больше прибыль

Платформа отпечатков пальцев для веб-приложений (OTG-INFO-008)

  1. Резюме
  2. Задачи теста
  3. Как проверить
  4. Печенье
  5. Исходный код HTML
  6. Расширения файлов
  7. Сообщение об ошибке
  8. Исходный код HTML
  9. Конкретные маркеры
  10. Конкретные файлы и папки
  11. инструменты
  12. WhatWeb
  13. BlindElephant
  14. Wappalyzer
  15. Рекомендации
  16. Санация
  17. Печенье
  18. Исходный код HTML
  19. Конкретные файлы и папки
  20. Дополнительные подходы
Эта статья является частью нового руководства по тестированию OWASP v4.

Назад к Руководству по тестированию OWASP v4 ToC: https://www.owasp.org/index.php/OWASP_Testing_Guide_v4_Table_of_Contents Вернуться к проекту руководства по тестированию OWASP: https://www.owasp.org/index.php/OWASP_Testing_Project

Резюме

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


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


[*] Обратите внимание, что в этой статье не проводится различий между платформами веб-приложений (WAF) и системами управления контентом (CMS). Это было сделано для того, чтобы было удобно сделать отпечатки обоих в одной главе. Кроме того, обе категории упоминаются как веб-фреймворки.

Задачи теста

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

Как проверить

Тестирование черного ящика

Есть несколько наиболее распространенных мест для поиска, чтобы определить текущую структуру:

  • Заголовки HTTP
  • Печенье
  • Исходный код HTML
  • Конкретные файлы и папки
  • Расширения файлов
  • Сообщение об ошибке

Самая простая форма идентификации веб-фреймворка - это посмотреть на поле X-Powered-By в заголовке ответа HTTP. Многие инструменты могут быть использованы для идентификации цели. Самый простой из них - утилита netcat.

Рассмотрим следующий HTTP-запрос-ответ:

$ nc 127.0.0.1 80 HEAD / HTTP / 1.0 HTTP / 1.1 200 OK Сервер: nginx / 1.0.14 Дата: суббота, 07 сентября 2013 г. 08:19:15 GMT Тип контента: text / html; charset = ISO-8859- 1 Соединение: закрыть Зависит от: Accept-Encoding X-Powered-By: Mono

Из поля X-Powered-By мы понимаем, что фреймворк веб-приложения, вероятно, будет Mono. Однако, хотя этот подход прост и быстр, эта методология не работает в 100% случаев. Можно легко отключить заголовок X-Powered-By с помощью правильной конфигурации. Есть также несколько методов, которые позволяют веб-сайту запутывать заголовки HTTP (см. Пример в #Remediation глава).


Таким образом, в том же примере тестировщик может либо пропустить заголовок X-Powered-By, либо получить ответ, подобный следующему:

HTTP / 1.1 200 OK Сервер: nginx / 1.0.14 Дата: суббота, 07 сентября 2013 г. 08:19:15 GMT Тип контента: text / html; charset = ISO-8859-1 Соединение: закрыть Зависит: Accept-Encoding X- Powered-By: кровь, пот и слезы


Иногда существует больше HTTP-заголовков, которые указывают на определенную веб-среду. В следующем примере, согласно информации из HTTP-запроса, видно, что заголовок X-Powered-By содержит версию PHP. Тем не менее, заголовок X-Generator указывает на то, что используемая структура на самом деле является Swiftlet, что помогает тестеру проникновения расширить его векторы атаки. При выполнении дактилоскопии всегда тщательно проверяйте каждый HTTP-заголовок на наличие утечек.

HTTP / 1.1 200 OK Сервер: nginx / 1.4.1 Дата: суббота, 07 сентября 2013 г. 09:22:52 GMT Тип контента: text / html Соединение: keep-alive Зависит: Accept-Encoding X-Powered-By: PHP / 5.4.16-1 ~ dotdeb.1 Истекает: четверг, 19 ноября 1981 г. 08:52:00 GMT Cache-Control: нет хранилища, нет кэша, необходимо подтвердить заново, пост-проверка = 0, предварительная проверка = 0 Прагма : no-cache X-Generator: Swiftlet

Печенье

Другим похожим и более надежным способом определения текущей веб-инфраструктуры являются файлы cookie, специфичные для этой платформы.

Рассмотрим следующий HTTP-запрос:

Рассмотрим следующий HTTP-запрос:


Файл cookie CAKEPHP был установлен автоматически, что дает информацию об используемой платформе. Список общих имен файлов cookie представлен в главе # Cookies_2 , Ограничения те же - есть возможность изменить имя куки. Например, для выбранной платформы CakePHP это можно сделать с помощью следующей конфигурации (отрывок из core.php):

/ ** * Имя куки сессии CakePHP. * * Обратите внимание на правила для имен сеансов: «Имя сеанса ссылается на * идентификатор сеанса в файлах cookie и URL-адресах. Он должен содержать только буквенно-цифровые * символы». * @link http://php.net/session_name * / Configure :: write ('Session.cookie', 'CAKEPHP');


Однако эти изменения менее вероятны, чем изменения в заголовке X-Powered-By , поэтому такой подход можно считать более надежным.

Исходный код HTML

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


На скриншоте ниже можно легко узнать используемую платформу и ее версию по указанным маркерам. Комментарии, конкретные пути и переменные сценария могут помочь злоумышленнику быстро определить экземпляр инфраструктуры ZK.

Комментарии, конкретные пути и переменные сценария могут помочь злоумышленнику быстро определить экземпляр инфраструктуры ZK


Чаще всего такая информация помещается между тегами <head> </ head>, в тегах <meta> или в конце страницы. Тем не менее, рекомендуется проверить весь документ, так как он может быть полезен для других целей, таких как проверка других полезных комментариев и скрытых полей. Иногда веб-разработчикам не очень важно скрывать информацию об используемой платформе. Это все еще возможно наткнуться на что-то вроде этого в нижней части страницы:

Это все еще возможно наткнуться на что-то вроде этого в нижней части страницы:

Расширения файлов

URL может включать в себя расширения файлов. Расширения файлов также могут помочь определить веб-платформу или технологию.

Например, OWASP использует PHP

https://www.owasp.org/index.php?title=Fingerprint_Web_Application_Framework_(OTG-INFO-008)&action=edit&section=4

Вот некоторые распространенные веб-расширения и технологии

  • PHP - PHP
  • ASPX - Microsoft ASP.NET
  • jsp - страницы сервера Java

Сообщение об ошибке

Общие рамки

Печенье

Фреймворк Cookie name Zope zope3 CakePHP cakephp Kohana kohanasession Laravel laravel_session

Исходный код HTML

Общие маркеры

% framework_name% работает на основе при запуске

Конкретные маркеры

Framework Keyword Adobe ColdFusion <! - START headerTags.cfm Microsoft ASP.NET __VIEWSTATE ZK <! - ZK Business Catalyst <! - BC_OBNW -> Indexhibit ndxz-studio

Конкретные файлы и папки

Конкретные файлы и папки различны для каждой конкретной структуры. Рекомендуется устанавливать соответствующую инфраструктуру во время тестов на проникновение, чтобы лучше понять, какая инфраструктура представлена ​​и какие файлы могут остаться на сервере. Однако, несколько хороших списков файлов уже существуют, и один хороший пример - списки слов FuzzDB с предсказуемыми файлами / папками ( http://code.google.com/p/fuzzdb/ ).

инструменты

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

WhatWeb

Веб-сайт: http://www.morningstarsecurity.com/research/whatweb
В настоящее время один из лучших инструментов для снятия отпечатков пальцев на рынке. Включено по умолчанию Кали Линукс строить. Язык: Рубиновые Спички для снятия отпечатков пальцев изготавливаются с:

  • Текстовые строки (с учетом регистра)
  • Регулярные выражения
  • Запросы к базе данных Google Hack (ограниченный набор ключевых слов)
  • MD5 хэши
  • Распознавание URL
  • Шаблоны HTML-тегов
  • Пользовательский код рубина для пассивных и агрессивных операций


Пример вывода представлен на скриншоте ниже:

BlindElephant

Веб-сайт: https://community.qualys.com/community/blindelephant
Этот замечательный инструмент работает по принципу разницы версий на основе статической контрольной суммы файла, что обеспечивает очень высокое качество снятия отпечатков пальцев. Язык: Python

Пример вывода успешного отпечатка пальца:

pentester $ python BlindElephant.py http: // my_target drupal Загружен /Library/Python/2.7/site-packages/blindelephant/dbs/drupal.pkl с 145 версиями, 478 различающимися путями и 434 группами версий. Запуск слепого отпечатка BlindElephant для версии drupal по адресу http: // my_target Нажмите http: //my_target/CHANGELOG.txt Файл не соответствует. Ошибка: полученный файл не соответствует известному отпечатку. 527b085a3717bd691d47713dff74acf4 Hit http: //my_target/INSTALL.txt Файл не соответствует. Ошибка: полученный файл не соответствует известному отпечатку. 14dfc133e4101be6f0ef5c64566da4a4 Hit http: //my_target/misc/drupal.js Возможные версии в зависимости от результата: 7.12, 7.13, 7.14 Hit http: //my_target/MAINTAINERS.txt Файл не соответствует. Ошибка: полученный файл не соответствует известному отпечатку. 36b740941a19912f3fdbfcca7caa08ca Hit http: //my_target/themes/garland/style.css Возможные версии, основанные на результате: 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 ... Отпечатки пальцев В результате: 7,14 Лучшие догадки: 7,14

Wappalyzer

Веб-сайт: http://wappalyzer.com
Wapplyzer - это подключаемый модуль Firefox Chrome. Он работает только при сопоставлении регулярных выражений и не требует ничего, кроме страницы, загружаемой в браузер. Он работает полностью на уровне браузера и дает результаты в виде иконок. Хотя иногда он имеет ложные срабатывания, очень удобно иметь представление о том, какие технологии использовались для создания целевого веб-сайта сразу после просмотра страницы.


Пример вывода плагина представлен на скриншоте ниже.

Пример вывода плагина представлен на скриншоте ниже

Рекомендации

Белые бумаги

Санация

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

Проверьте конфигурацию и отключите или запутайте все HTTP-заголовки, которые раскрывают информацию об используемых технологиях. Вот интересная статья об обфускации HTTP-заголовков с помощью Netscaler: http://grahamhosking.blogspot.ru/2013/07/obfuscating-http-header-using-netscaler.html

Печенье

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

Исходный код HTML

Вручную проверьте содержимое HTML-кода и удалите все, что явно указывает на структуру.

Общие рекомендации:

  • Убедитесь, что нет никаких визуальных маркеров, раскрывающих основу
  • Удалите все ненужные комментарии (авторские права, информацию об ошибках, комментарии конкретной структуры)
  • Удалить мета и теги генератора
  • Используйте собственные файлы 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 ).

Дополнительные подходы

Общие рекомендации:

  • Управление контрольной суммой Цель этого подхода - побить сканеры на основе контрольной суммы и не позволить им раскрывать файлы по их хэшам. Как правило, есть два подхода к управлению контрольной суммой:
    • Измените расположение этих файлов (т.е. переместите их в другую папку или переименуйте существующую папку)
    • Изменить содержимое - даже небольшая модификация приводит к совершенно другой хэш-сумме, поэтому добавление одного байта в конец файла не должно быть большой проблемой.
  • Контролируемый хаос Забавный и эффективный метод, который включает в себя добавление поддельных файлов и папок из других сред, чтобы обмануть сканеры и запутать злоумышленника. Но будьте осторожны, чтобы не перезаписать существующие файлы и папки и не сломать текущий фреймворк!
Php?