Инструментальные средства обеспечения безопасности

Реализация


В списке уязвимостей программы whisker, возможно, что-то устарело, но он также включает проверки для директорий, которые никогда не исчезнут. Проверки /backup/ или /log/ директорий и текстовых файлов sam.txt никогда не устареют. Чтобы запустить whisker для одного хоста или IP-адреса, воспользуйтесь параметром -h. Параметр -H (обратите внимание на регистр) дает возможность задать файл, который содержит список IP-адресов или имен хостов. Также неплохая идея всегда использовать параметр -w для записи результатов каждой проверки, выполненной сканером. Параметр -W выводит все в HTML-формате. Это может выглядеть как ненужные бантики, но в то же время удобно, и демонстрация возможностей заставит притихнуть противников. Базовый вид командной строки whisker выглядит примерно так.

$ whisker.pl -h 192.168.42.27 -w - whisker / v1.4.0+SSL / rain forest puppy / www.wiretrip.net - -( Bonus: Parallel support ) - Loaded script database of 2045 lines = - = - = - = - = - = = Host: 192.168.42.27 - Cookie: PREF=ID=28bd8b28723a3f00:TM=1014183574:LM=1014183574:S=iaEPbCBRdvA = Server: IIS/5.0 + 200 OK: GET /robots.txt

Мы пропустили параметр -W, чтобы сделать вывод лучше читаемым на бумаге. После запуска whisker начинает выводить информацию на экран (stdout в Unix-терминах). Не потеряйте результаты сканирования; вы можете сохранить их в файл. Параметр командной строки -l с именем файла после него, но мы редко это используем. Вместо этого воспользуйтесь преимуществами командной строки Unix.

$ whisker.pl -h 192.168.42.27 -w -W | tee whisker80_192.168.42.27.html.raw Совет. Команда Unix tee позволяет перенаправить вывод одновременно в файл и на экран. Это позволяет наблюдать за работой программы в режиме реального времени и сохранить информацию. Это понятнее, чем запуск процесса в фоновом режиме, и понятнее, чем использование команды tail -f.

Понятные имена файлов позволят быстро просмотреть директории и визуально определить положение специфических файлов. Число 80 означает номер сканируемого порта - в данном случае, это значение по умолчанию.

Основанный на Perl, nikto может выполняться под Unix, Windows и Mac OSX. Программа использует стандартные Perl-библиотеки, входящие в поставку. Вы можете загрузить утилиту nikto по адресу http://www.securitysearch.net/tools.cfm. Для работы также требуется LibWhisker (LW.pm).

LibWhisker. Полнофункциональная копия LibWhisker поставляется вместе с архивом nikto. Вы также можете загрузить полный Perl-модуль по адресу http://www.wiretrip.net/rfp/2/index.asp. Инсталляция очень проста. После разархивирования войдите в директории и соберите библиотеку. Как только сборка закончится, установите LW.pm в вашу Perl-директорию. Выполните следующую последовательность команд.

$ cd libwhisker-1.3 $ perl Makefile.pl lib $ perl Makefile.pl install

LibWhisker может показаться немного избыточным, поскольку он включает в себя функциональность нескольких, уже существующих Perl-модулей, таких как LWP, Base64 и HTML::Parser. Преимущества LibWhisker в том, что это "тощая" (минимальный размер файла по сравнению с модулями, функциональность которых он заменяет), простая (один модуль), специализированная (поддерживает только HTTP- и HTTPS-запросы) и живучая (обеспечивает единый интерфейс для поддержки запросов и приема ответов) утилита. Кроме того, она понятнее, чем оригинальная программа whisker!

Сканирование. Основные параметры командной строки nikto отличаются от команд whisker, поэтому вам придется осваивать новые параметры. Сравните командную строку whisker с аналогичной командной строкой nikto.

$ whisker.pl -h 192.168.42.27 -w -W | \ > tee whisker80_192.168.42.27.html.raw $ nikto.pl -host 192.168.42.27 -verbose -web -output \ > nikto80_192.168.42.27.html.raw

Выходная информация Nikto содержит указания на то, почему поиск может угрожать безопасности.

Target IP: 192.168.42.27 Target Hostname: www.victim.com Target Port: 80 ---------------------------------------------------- o Scan is dependent on "Server" string which can be faked, use -g to override o Server: WebSTAR/4.2 (Unix) mod_ssl/2.8.6 OpenSSL/0.9.6c o Allowed HTTP Methods: GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, PATCH, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK, TRACE o Server allows PUT method, may be able to store files.




На рис. 8.1 приведен вид интерфейса для сканирования одного IP-адреса. По умолчанию Stealth использует "нормальное" правило сканирования, которое содержит около 6500 тестов. Эта страница открывается с помощью кнопки Scanner в окне приложения Stealth.

Примечание. Stealth также располагает параметрами для изменения номера порта (по умолчанию 80), при этом SSL-соединение не поддерживается. Задать номер порта 443 недостаточно.

Stealth может сканировать несколько Web-серверов. Тем не менее, как показано на рис. 8.2, для этого должен быть задан список последовательных IP-адресов. Это существенно замедляет сканирование, поскольку программа сначала должна определить Web-сервер, а затем осуществлять его сканирование. Если серверы распределены по сети, то это еще сильнее замедляет процесс.


Рис. 8.1.  Сканер Stealth по умолчанию против цели


Рис. 8.2.  Stealth сканирует список IP-адресов

Еще немного о сканировании нескольких Web-серверов: программа постоянно фиксирует ошибки, выдает сообщения об ошибках, требующих, чтобы их закрывали вручную. Короче, Stealth - не лучшее средство для сканирования многих серверов одновременно.

Кнопка IDS Test работает аналогично технике обхода IDS у whisker. Выберите, какую политику вы предпочитаете использовать, а затем отметьте параметр CGI Setup | Use IDS Evasion. На рис. 8.3 показано, как включить обход IDS.

Как только Stealth завершит сканирование, он выдаст запрос на сохранение результатов. Результаты сканирования представляют собой HTML-файл, в котором перечислены все возможные уязвимости, которые были найдены. Stealth - быстрое и простое средство, которое позволяет выполнить 6500 тестов для Web-сервера одновременно.


Рис. 8.3.  Обход IDS




Для соединения с Web-сайтом задайте в командной строке URL

$ curl https://www.victim.com

Автоматизированный скрипт, который просматривает Web-сайт или осуществляет подбор паролей, в лучшем виде демонстрирует мощь программы curl. В таблице 8.4 представлены некоторые наиболее часто употребляемые параметры программы.

Таблица 8.4. Наиболее употребляемые параметры Curl

ОпцияОписание
-H/--headerУстанавливает заголовок со стороны клиента. Используйте заголовок HTTP, чтобы имитировать несколько типов соединений.

User-Agent: Mozilla/4.0. Имитирует конкретный броузер. Referer: http://localhost/admin. Обходит слабую авторизацию, которая проверяет страницу ссылок. Basic Auth: xxxxx. Задает имя пользователя и пароль. Host: localhost. Специфицирует виртуальные хосты

-b/--cookie -c/--cookie-jar-b использует файл, который содержит cookies, чтобы послать их на сервер. Например, -b cookie.txt включает содержимое cookie.txt во все запросы HTTP. Cookies также могут быть специфицированы в командной строке в форме -b ASPSESSIONID=INEIGNJCNDEECMNPCPOEEMNC. -c использует файл, который хранит cookies так, как они заданы сервером. Например, -c cookies.txt держит каждый cookie с сервера. Cookies важны для обхождения сессий формальной идентификации и обмана.
-d/--dataПредоставляет данные по запросу POST. Это включает данные формы или любые другие данные, генерированные Web-приложением. Например, чтобы задать поле формы для страницы логина, используйте -d login=arbogoth&passwd=p4ssw0rd. Эта опция полезна для написания сценариев подбора пароля. Ее реальное преимущество в том, что запросы делаются с POST, что значительно сложнее обмануть с помощью средства типа Netcat.
-G/--getИзменяет метод POST так, что он использует GET. Применяется только, когда вы специфицируете опцию -d.
-u/--user -U/--proxy-userЗадает имя пользователя и пароль, использованные для базовой идентификации или proxy. Чтобы получить доступ к сайту с базовой идентификацией, используйте -u user:password. Чтобы получить доступ к защищенному паролем proxy, используйте U user: password. Это не имеет смысла, если опция -X не задана.
--urlУстанавливает URL на выборку. Это не обязательный параметр, но вносит ясность, когда используется много опций командной строки. Например, -url https://www.victim .com/admin/menu.php?menu=adduser. Curl дает быструю оптимизацию, когда множественные URL задаются в командной строке, потому что он пытается установить устойчивые соединения. Это означает, что все запросы будут производиться поверх первоначального соединения, вместо установки нового соединения для каждого запроса.
-x/--proxyЗадает HTTP proxy. Например, -x http://intraweb:80/.
-K/--configЗадает файл конфигурации, который включает последовательные опции командной строки. Например, -K www.victim.com.curl.
<


SSL-взаимодействие основывается на сертификатах. Первое, что вам нужно, это правильный PEM-файл, который содержит ключи шифрования для использования в процессе взаимодействия. Stunnel поставляется с файлом по умолчанию, который называется stunnel.pem, но вы можете создать и свой собственный с использованием команды openssl.

$ openssl req -new -out custom.pem -keyout custom.pem -nodes -x509 \ > -days 365 ...follow prompts... $ openssl dhparam 512 >> custom.pem

Теперь файл custom.pem готов к использованию. Stunnel ищет по умолчанию файл stunnel.pem, или вы можете использовать свой собственный с помощью параметра -p.

Замечания о компиляции под Cygwin. Вам может понадобиться отредактировать файл stunnel.c для компиляции stunnel под Cygwin. Закомментируйте следующие строки, которые располагаются в районе 391 строки.

/* if(setgroups(1, gr_list)) { sockerror("setgroups"); exit(1); } */

Смысл в том, что вы не сможете использовать параметр -g для определения альтернативной группы привилегий, с которыми выполняется stunnel, но вам не понравится ситуация, в которой это могло бы понадобиться.

Обезьяна в центре поля. Как быть, если вам необходимо просматривать данные, передаваемые поверх SSL-соединения? Вам может понадобиться проверять данные, передаваемые между клиентом, основанным на Web-приложении, и сервером, но клиент передает HTTPS, и сервер принимает только HTTPS. В таком случае, вам понадобится заморозить stunnel между клиентом и сервером, переведя соединение в HTTP, чтобы иметь возможность его читать, а затем вернуть трафик обратно в HTTPS, чтобы сервер мог его получить. Для этого понадобится две команды stunnel.

Запустите stunnel в обычном режиме демона (-d). В таком режиме stunnel принимает SSL-трафик и выдает простой текст. Параметр -f заставляет stunnel оставаться в диалоговом режиме. Обычно это используется для просмотра информации о соединении и чтобы убедиться, что программа работает. Stunnel - не программа с конечной точкой. Другими словами, вы должны задать порт, который будет прослушиваться (-d <port>), а также хост и порт, на которые будет перенаправляться трафик (-r <host:port>).


Поскольку это работа прокси, Achilles необходимо сначала настроить на прослушивание порта и перевести в режим "intercept". На рис. 8.7 показаны основные моменты конфигурации для запуска Achilles в режиме прокси. Щелкнув на кнопке "пуск" (треугольник), можно запустить прокси, а щелкнув на кнопке "стоп" (квадратик) остановить его - в точности, как при управлении звукозаписывающим устройством.


Рис. 8.7.  Основные настройки прокси для Achilles

Хорошей мыслью будет оставить задействованным параметр Ignore .jpg/.gif. Изменение файлов изображений редко используется для обхода системы безопасности Web-приложения, а число запросов от обычной Web-страницы раздражающе велико.

Затем настройте свой Web-броузер для работы через IP-адрес прокси (если это тот же компьютер 127.0.0.1) и соответствующий порт (5000 по умолчанию), который прослушивает Achilles. Обычно для этого Achilles просто запускается на вашей локальной машине. Любой Web-броузер, который поддерживает HTTP-прокси, от Lynx до Galeon, могут использовать Achilles. Ограничения для Windows-платформы состоит в том, что Achilles поставляется в виде исполняемого модуля Win32.

В режиме перехвата вы можете просматривать Web-сайт или несколько Web-сайтов, ничего не замечая. Параметр Log To File позволяет сохранять результаты сессии в файл. Это подходит для исследования Web-приложения. Журнал содержит каждую ссылку, которую вы посетили, включая вспомогательные файлы, такие как JavaScript, (*.js) и другие включаемые файлы (*.inc), которые в обычном режиме не видны в URL. Другое преимущество состоит в том, что у вас фактически есть копия HTML-страниц Web-сайта. Эти тексты могут содержать скрытые поля форм, значения cookie, переменные управления сессией и другую информацию о приложении. Приемы анализа Web-приложений лежат несколько в стороне от темы этой лекции, но для выполнения такой работы совершенно необходимо иметь Achilles.

В режиме активного перехвата вы можете видеть запросы, порождаемые броузером (Intercept Client Data), и ответы, посылаемые сервером (Intercept Server Data (text)).


На рис. 8.8 представлен внешний вид интерфейса WebSleuth, на котором доступно несколько параметров для настройки. Рельефные кнопки Go, Back, Stop, Fwrd и Edit Source вызываются щелчком левой кнопкой мыши. Правая кнопка мыши отвечает за появление меню для каждой из плоских кнопок Properties, Toolbox, Plugins и Favorites.


увеличить изображение
Рис. 8.8.  Основные настройки прокси для Achilles

У кнопки меню Toolbox те же самые функции. Особой "фишкой" является функция HTML Transformations. Она удаляет скрипты, которые отключают многие программы проверки ввода, отображает скрытые поля, которые контролируют переменные сессии, сервера и клиента. Функция Generate Report создает великолепный список текущих переменных cookie, ссылок, строк запросов, форм, ссылок на скрипты, комментариев и META-тегов.

Кнопка меню Properties отображает информацию о текущей странице. Обычно эта информация используется для просмотра установленных переменных cookie, инспектирования строк запросов или ревизии доступных на странице ссылок.

Финальные замечания. Функции Analyze, размещенные на закладке Options:, не работают поверх SSL. Эти функции открывают окно, которое содержит HTTP-запросы и их аргументы. В этот момент вы можете изменить данные для изменения запроса POST. К сожалению, это не работает!




Поскольку основной функцией wget является загрузка содержимого Web-сайта, то использовать программу просто. Для рекурсивного просмотра сайта используйте параметр -r.

$ wget -r www.victim.com ...(continues for entire site)...

Параметр -r или -recursive указывает wget на необходимость просматривать каждую ссылку на странице. Ниже мы создаем директорию www.victim.com и размещаем в этой директории все HTML-файлы и директории, которые wget обнаружит на этом сайте. Основное преимущество wget в том, что он просматривает все возможные ссылки. Таким образом, программа загружает вывод всех аргументов, которые приложение пересылает на страницу. Например, файл viewer.asp может быть загружен четырежды.

  • viewer.asp@ID=555
  • viewer.asp@ID=7
  • viewer.asp@ID=42
  • viewer.asp@ID=23

Символ @ обозначает символ ? в реальном URL. ID - первый аргумент (параметр), передаваемый в файл viewer.asp. Некоторые сайты могут потребовать более сложных возможностей, таких как поддержка прокси и HTTP Basic Authentication. Сайты, защищенные с помощью Basic Authentication, можно просматривать следующим способом.

[root@meddle]# wget -r --http-user:dwayne --http-pass:woodelf \ > https://www.victim.com/secure/

...continues for entire site...

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

$ wget --load-cookies=cookies.txt \ > -r https://www.victim.com/secure/menu.asp

Wget может поддерживать сессии и сохранять значения cookie-переменных с помощью соответственно названного параметра -cookies. Это параметр логического типа, и вы можете либо выключить его (по умолчанию) или включить.

$ wget --load-cookies=cookies.txt -cookies=on \ > -r https://www.victim.com/secure/menu.asp

Параметры --http-user и --http-passwd позволяют wget получить доступ к Web-приложениям, которые применяют HTTP Basic Authentication. Установите значения в командной строке и следите за работой wget.

$ wget --http-user=guest --http-passwd=no1knows \ > -r https://www.victim.com/maillist/index.html

<

Содержание раздела