понедельник, 1 октября 2012 г.

Осваиваем Paros Proxy Server

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


Установка Paros

  1. Прежде чем загрузить Paros, следует убедиться в наличии на системе среды Java Runtime Environment (JRE). На Web-узле Java можно проверить, имеется ли в компьютере новейшая версия, или загрузить ее по адресу http://www.java.com/en/download/index.jsp
  2. После установки JRE можно загрузить Paros и краткое руководство пользователя с Web-узла Paros (http://www.parosproxy.org). Процедура установки проста. Программа Paros представляет собой файл Java Archive (JAR), но в папке имеется ярлык для запуска программы. Paros запускается в собственном окне как автономная программа Java.
  3.  Затем нужно настроить браузер, чтобы установить посредническое соединение с сервером Paros. По умолчанию Paros принимает сетевые соединения через TCP-порт 8080 локального компьютера. Можно изменить сервер, с которым будет установлено соединение, или порт подключения в Paros, выбрав режим Local proxy из меню Tools, Options. (пишем 127.0.0.1 порт 8080)
  4. Восстановление параметров браузераЗавершив аудит, следует закрыть Paros и удалить конфигурацию из браузера.

Введение.

Paros представляет из себя смесь нескольких инструментов ориентированных на анализ веб-приложений. Вот их список:
  1. Crawler (поисковый паук)
  2. Сканнер уязвимостей
  3. Фильтр данных
  4. Перехватчик запросов/ответов в режиме «on-the-fly»
  5. Иной малозначительный, но полезный в некоторых ситуациях функционал.
Первая часть окна, находящаяся слева сверху, - это древо структуры сайта. При переходах по сайту туда добавляются директории и файлы к которым Вы обращаетесь. Это, можно сказать, основная часть Paros. 
Справа от неё имеется небольшое окно разбитое на 2 части и содержащее 3 закладки — «request», «response» и «trap». Если Вы в древе структуры сайта выделите какой-либо файл то на вкладке «request» Вы увидите содержимое Вашего запроса к нему. На вкладке «response» отображается ответ сервера. Причём и в том и в том случаях в верхней части окна отображается содержимое заголовка http-пакета, а в нижнем — тело. Закладка же «trap» используется перехватчиком запросов и её мы обсудим ниже. В самой нижней части окна находится панель с 4 закладками - «History», «Spider», «Alerts», «Output». Закладка «History» содержит историю запросов браузера, «Spider» - результаты действия поискового паука, «Alerts» - сообщения сканнера уязвимостей, а «Output» - данные из фильтров.


1. Crawler (поисковый паук)

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

В списке появится несколько лишних адресов из-за того что на главной имеются вставки с этих адресов, в частности баннеры или реклама. Что бы паук во время сканирования не перекинулся на эти хосты их следует удалить. Для этого выделите их, кликните правой кнопкой мыши и выберите пункт «Delete» или «Purge».
Выделите оставшийся хост, пройдите в меню «Analyse» и выберите пункт «Spider» (аналог — выделить хост, кликнуть правой кнопкой мыши и выбрать в появившемся меню пункт «Spider..»). Вы увидите окно всего с 2 кнопками из которых активна лишь одна - «Start».  Жмём «Start» и сканирование начинается. После его окончания в папке нашего хоста появятся имена скриптов и директорий которые паук смог обнаружить.

Paros сразу собирает их в список удаляя повторы, в отличае от большинства поисковиков.
Внизу окна программы существует ещё 2 раздела - «URI found during crawl» (URI найденные во время сканирования) и «URI found but out of crawl scope» (URI найдены, но вынесены за пределы сканирования). В первом разделе хранится вообще все ссылки найденные на сайте. Во втором — ссылки которые просканированы небыли. Если Вы просмотрите этот список то увидите что это ссылки на почту или на внешние ресурсы. Обратите внимание ещё на один важный фактор — сканнеру попались папки индексирование которых запрещено в robots.txt.

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

Отдельно рассмотрим варианты записей файлов в структуре сайта которую выстраивает Paros. Примеры:
«GET:index.php» — в сканируемой папке есть файл index.php к которому на сайте обращаются с помощью метода GET. Если какой-то скритп принимает данные от формы методом POST то Paros, обнаружив его, так и напишет «POST:script.php»
«GET:script.php(C)» — на сайте имеется скрипт script.php которому в ссылках передаётся параметр «C». То есть этот вариант Paros запишет если обнаружит ссылку script.php?C=1
«GET:script.php(C,id,name)» — скрипту script.php в некоторых ссылках передаются параметры «С», «id» и «name», например script.php?C=1&name=about&id=3
Если эти параметры будут передаваться в трёх разных ссылках:
script.php?C=1
script.php?name=about
script.php?id=3
то он так и запишет:
«GET:script.php(C)»
«GET:script.php(name)»
«GET:script.php(id)»
Ссылки, по которым проходил Paros во время сканирования, Вы можете посмотреть в правом верхнем окне (закладка «Request»). При клике на любую ссылку там отображается полный запрос.


2. Сканнер уязвимостей

Данный сканнер ориентирован на поиск простейших уязвимостей в теле сайта основываясь на результате работы поискового паука (структуры сайта в левой части окна программы). То есть чем больше информации пропустит через себя паук тем больше шансов что сканнер уязвимостей что нибудь найдёт.
Paros сохраняет тела запросов, следовательно после Вашего входа на сайт он будет уже имитировать вошедшего пользователя.
Теперь пора перейти непосредственно к сканированию на уязвимости. Список уязвимостей Вы можете увидеть пройдя в меню «Analyse» и выбрав пункт «Scan policy». Перед Вами откроется окно настроек сканирования. Здесь происходит управление всевозможными частями проверки на уязвимости.

Первый пункт - «Information gathering» (раскрытие информации, сбор информации). Сюда относятся тесты:
  1. «Obsolete file» и «Obsolete file extended check» — Поиск устаревших файлов. Встречается всего 2 вида поиска таких файлов — с расширением «bak» и «old»(резервные копии). Алгоритм их поиска прост — например как только найден скрипт index.php сканнер сразу проверяет наличие index.php.bak. Если такой файл есть то сканнер пишет что найдена старая резервная копия index.php.
  2. Раскрытие IP-адреса. Этот тест занимается определением настоящего IP-адреса веб-сервера в том случае если все запросы к нему идут через брэндмауэр.
  3. Session ID in URI rewrite — подстановка идентификатора сессии при обращении к различным скриптам. Видимо это что-то похожее на подделку сессии. К сожалению эта функция в документации тоже не описана.
Второй пункт - «Client browser». К сожалению с этими тестами ничего в документации не сказано.

Следующий пункт - «Server security». Здесь находятся тесты которые связаны с веб-сервером. Список их таков:
1.Directory browsing — поиск директорий листинг которых можно посмотреть
2.IIS default file — поиск стандартных файлов IIS
3.Cold Fusion default file — поиск стандартных файлов Cold Fusion
4.Macromedia JRun default file — поиск стандартных файлов Macromedia JRun
5.Tomcat sources default file — поиск стандартных файлов Tomcat
6.BEA WebLogic default file — поиск стандартных файлов BEA WebLogic
7.IBM WebSphere default file — поиск стандартных файлов IBM WebSphere
8.Lotus Domino default file — поиск стандартных файлов Lotus Domino

Как видите — большинство тестов этого раздела ориентировано на определение типа веб-сервера. Здесь есть 2 плохих момента — отсутствие Apache (видимо при разработке Paros он ещё не был столь популярен, хотя наврятли) и наличие проверок малоизвестных или уже не развивающихся веб-серверов. Но это лишь след того что разработка сканнера была давным давно закончена.

Следующим идёт пункт «Miscellenous» - смешанные уязвимости. Эта закладка пуста, видимо авторы не успели написать плагинов к подобным уязвимостям.

И последний пункт - «Injection». Это инъекционные уязвимости. Думаю они в объяснении не нуждаются потому что названия пунктов итак до боли всем знакомы.
После выбора нужных Вам тестов на уязвимости выделяйте интересующий Вас сайт и жмите
«analyse»->«scan» (или «Scan all» если Вам нужно просканировать все сайты имеющиеся в древе). Данные сканирования будут размещены в нижней панели, в закладке «Alerts» и разбиты по папочкам в соответствии с критичностью ошибки.
Так же имеется возможность удобного экспорта отчета в HTML-файл (Report-LastScanReport)


3. Фильтр данных

Данная функция занимается различными операциями с информацией которая уходит от браузера или приходит к нему. Что бы долго не мучиться с объяснениями перейдём к практическим примерам. Для открытия настроек фильтра зайдите в меню «Tools»->«Filter...». В основной части появившегося окна располагается список фильтров и их состояний (включён/выключен).
 
Начнём с самого первого фильтра.
  1. Avoid browser cache (strip off IfModiliedSince). Данный фильтр модифицирует заголовок таким образом что браузер перестаёт использовать кэширование.
  2. Log unique GET queries into file (filter/get.xsl). При включении этого фильтра Paros начинает логировать все GET-запросы в файл filter/get.xsl, который находится в его установочной директории.
  3. Log unique POST queries into file (filter/post.xsl). При включении этого фильтра Paros начинает логировать все POST-запросы в файл filter/post.xsl, который находится в его установочной директории.
  4. Log request and response into file (filter/messages.txt). Данный фильтр логирует все запросы и ответы сервера в файл filter/messages.txt, который находится в установочной директории Paros`a. Запись осуществляется в следующем формате:Цитата:========== номер запроса =========Содержимое заголовка запросаСодержимое тела запроса (если есть)
    содержимое заголовка ответасодержимое тела ответа
  5. Replace HTTP request header using defined pattern — замена текста в заголовке запроса по указанному регулярному выражению. Для активации данного фильтра сначала нажмите на кнопку с многоточием и Вы увидите окно ввода реулярного выражения состоящее из двух полей — что искать и на что заменить. Не будем сильно мучиться и введём замену news.xml на news.txt. Это самый обычный пример работы такого фильтра. Сейчас обратитесь браузером к news.xml (по полной ссылка …/news.xml) и Paros, перехватив ответ, заменит в адресе запроса news.xml на news.txt. Убрав фильтр и снова обратившись по этому адресу Вы увидите другой результат.
  6. Replace HTTP request body using defined pattern — поиск и замена текста по регулярному выражению в теле запроса.
  7. Replace HTTP response header using defined pattern — поиск и замена текста по регулярному выражению в заголовке ответа.
  8. Replace HTTP response body using defined pattern — поиск и замена текста по регулярному выражению в теле ответа.
  9. Detect insecure or potentially maliciouse content in HTTP-response. Обнаружает небезопасный или потенциально опасный материал в содержимом HTTP-ответов. 
  10. Log cookie sent by browser. По сути смысл этого фильтра в записи cookies передаваемых браузером на сервер. Запись отловленных данных производится не в файл, а в нижнюю панель «Output».
  11. Detect and alert 'Set-Cookie' attemp in HTTP-response for modification. Данный фильтр сообщает Вам какие cookies и как хочет изменить сервер. 
  12. Change user agent to other browsers. При включении этого фильтра поле «User agent» в запросах будет заменятся на то что Вы можете выбрать из списка фильтра. 

4. Перехватчик запросов/ответов в режиме «on-the-fly»(на лету)

Эта функция пожалуй самая интересная для исследователей веб-приложений, особенно когда в приложении используется AJAX или имеется много форм передающих данные методом POST. При передаче пакета от клиента к серверу, или наоборот, Paros останавливает его и даёт Вам возможность посмотреть что в нём лежит, а так же отредактировать его содержимое. И только после Вашего разрешения пакет пойдёт дальше.
Перейдите на закладку «Trap» правой части окна. Это окно перехватчика. В нижней его части имеется два поля для галочек — «Trap request» (Перехват запроса) и «Trap response» (Перехват ответа). Поставим галочку в первом поле и обратимся к нашему сайту. После введения URI в браузере окно Paros`a замигает. Открыв его Вы увидите содержимое запроса который был отослан на сервер.Теперь Вы можете подредактировать содержимое заголовка запроса, и нажав «Continue» отправить его дальше. Нажатие же кнопки «Drop» уничтожит пакет и он так и не дойдёт до адресата. С перехватом ответов всё точно так же только галочка стоит в поле «Trap response». Одновременно Вы можете настроить Paros на перехват и запросов и ответов.


5. Дополнительный функционал

Рассмотрим меню «Edit». 

Сюда относится вспомогательный функционал который может быть иногда полезен.
Поиск в информации текущего сеанса по регулярному выражению. Эта функция используется для поиска во всех данных которые содержатся в запросах и ответах сервера, прошедших через Paros. Для открытия панели поиска пройдите в меню «Edit», пункт «Extarct pattern in session».

В верхнем списке выбираются различные готовые регулярные выражения, это: поиск всех cookies-заголовков, всех server-заголовков, вообще всех запросов к серверу, всех запросов к php-файлам, всех POST-запросов к серверу.

В поле «Search Pattern» находится текущее регулярное выражение. Вы можете его редактировать вне зависимости от того что выбрано в верхней строке. Например выражение «http.*», которое ищет все запросы начинающиеся с «http». Правее этого поля находится два пункта поиска — в запросах (request) и в ответах сервера (response).
Самое нижнее поле - «Search Result» содержит результаты поиска по введённому регулярному выражению.

Рассмотрим меню «View». 

Первый пункт в нём «Enable Image in history». Данный пункт включает отображение запросов к изображениям в истории запросов (закладка History в нижней части окна). Как Вы все знаете после получения кода страницы начинается загрузка дополнительного контента — стилей, скриптов, картинок и т.д. Сейчас на сайтах очень много изображений, поэтому при включенной этой опции история сильно захламляется запросами к ним. Но иногда это может быть полезно.

Следующие 2 пункта - «Filter history by Request...» и «Filter history by Response...». Эти пункты отвечают за фильтрацию истории по регулярным выражениям, применяемым к запросу и ответу соответственно. Здесь Вам предлагается ввести либо жётское выражение, совпадение с которым будет искаться в запросах или ответах, либо регулярное выражение.

Рассмотрим меню «Tools»

Следующее что мы рассмотрим — пункт «Encoder/Hash» в меню «Tools». Это простейший инструмент для быстрого кодирования информации. В верхнее текстовое поле Вы вводите нужное выражение и справа выбираете операцию. После преобразования результат отобразится в нижнем текстовом поле.

Далее рассмотрим пункт «Manual Request Editor». Это примитивный редактор создания запросов. Окно делится на 2 закладки — Request и Response. Так же окно разделено на 2 части — заголовок пакета и его тело. Здесь Вы можете спокойно формировать нужные Вам запросы, которые по нажатии кнопки «Send» отправятся к серверу. После получения ответа автоматически включится закладка «Response» в которой будет его содержимое.

Ну и под конец хотелось бы рассмотреть настройки (то же меню, пункт «Options») которые могут Вам пригодится при использовании Paros. Первый пункт настроек «Connection». Здесь Вы можете указать прокси-сервер к которому запрос пойдёт после Paros`a. Так же можно указать и авторизационные данные для прокси-сервера. Пункт «Local proxy» хранит настройки самого Paros`a — имя его хоста и порт. Пункт «Authentication» содержит таблицу в которую вносятся данные для http-авторизации (если исследуемый хост ею защищён). Пункт «Certificate» отвечает за использование клиентского сертификата. Если исследуемое Вами приложение его требует то можете включить его использование и указать путь к нему.

Пункт «View» имеет всего одну галочку - «Process Images in http requests /responses» - обрабатывать изображения в запросах/ответах.

Пункт «Trap» содержит опции перехвата. Данная закладка разделена на 2 части — перехват только тех сообщений которые соответствуют регулярному выражению и перехват тех сообщений которые не соответствуют введённому выражению. Для каждой части есть своё текстовое поле для ввода регулярных выражений. Сами же выражения(если у Вас их несколько) разделяются точкой с запятой (';'). Следующая закладка — настройки поискового паука. В самом верху находится регулятор «Maximum depth to crawl», он отвечает за глубину поиска. Например если его установить в значение «3» то по ссылкам типа http://site/one/two/three/four/ он уже проходить не будет потому что в данной ссылке 4 директории.
Следующий регулятор — количество потоков сканирования. Далее идёт текстовое поле «URIs to be skipped». Сюда заносятся те URI которые не должны быть просканированы. Можно например запретить сканирование директории где установлен форум так как в большинстве случаев это лишь отнимет множество времени. К сожалению зачем нужно поле «Domain suffix included in spider»в документации не отражено. Галочку в последнем пункте («POST forms») можно ставить когда Вы не против того что бы паук отправлял формы на сайте. И в самой последней закладке - «Scanner» - содержится лишь 2 регулятора — максимальное количество одновременно сканируемых хостов и количество потоков сканирования на 1 хост.


Комментариев нет:

Отправить комментарий