Вступление
Порт 80 является стандартным для web-сайтов
и может иметь много различных
проблем безопасности. Эти дыры
могут позволить хакеру получить
административный доступ к web-сайту,
или даже к самому web-серверу. В этой
статье рассмотрены некоторые
сигнатуры, характерные для таких
атак, а также то, что следует искать
в логах.
Простые сигнатуры
В этом разделе вы найдете
стандартные следы взлома web-серверов
и web-приложений. Вы не увидите здесь
все возможные варианты атак, но
узнаете, как они обычно выглядят.
Эти сигнатуры охватят большинство
известных и неизвестных дыр,
которые хакеры могут использовать
против вас. Также здесь описано, для
чего используется каждая из
сигнатур, или как может быть
использована при атаке.
<h5>Запросы "." ".." and
"..."</h5>
Это наиболее часто встречающиеся
сигнатуры атак как в web-приложениях,
так и в web-серверах. Они используются
хакером или червем для смены
директорий на сервере, чтобы
получить доступ к непубличным
разделам. Большинство CGI-дыр
содержат запросы "..".
<strong>Пример:<br>
http://host/cgi-bin/lame.cgi?file=../../../../etc/motd</strong>
Данная команда показывает хакеру
"Message of the Day". Если хакер имеет
возможность просматривать на вашем
web-сервере директории вне web-корневой,
он может собрать достаточно
информации для получения нужных
привилегий.
<h5>Запросы "%20"</h5>
Это шестнадцатеричное значение
символа пробела. Его наличие еще не
означает, что вас атаковали, так как
некоторые web-приложения используют
его при правомерных запросах.
Однако, этот запрос также может
использоваться при запуске команд.
Так что будьте внимательны при
проверке логов.
<strong>Пример:<br>
http://host/cgi-bin/lame.cgi?page=ls%20-al| (стандартная
для UNIX-систем команда ls -al)</strong>
В этом примере показывается, как
хакер запускает команду ls под UNIX с
передачей ей аргумента. Этот
аргумент дает хакеру полный листинг
директории, что может помочь хакеру
получить доступ к важным файлам в
вашей системе или подсказать, как
получить дополнительные привилегии.
<h5>Запросы "%00"</h5>
Это шестнадцатеричный код
нулевого байта. Может
использоваться, чтобы обмануть web-приложение,
будто был запрошен другой файл.
<strong>Пример:<br>
http://host/cgi-bin/lame.cgi?page=index.html</strong>
Показанный пример может быть
разрешенным запросом на сервере.
Если хакер обнаружит это, он
наверняка использует запрос для
поиска дыр на нем.
<strong>http://host/cgi-bin/lame.cgi?page=../../../../etc/motd</strong>
Web-приложение может запретить этот
запрос, если проверяет, чтобы имена
файлов заканчивались на .htm, .html, .shtml,
или другие разрешенные расширения.
Многие приложения посчитают
запрошенный тип файла недопустимым.
И зачастую дадут ответ хакеру, что
файл должен иметь разрешенный тип.
Таким образом хакер может получить
имена директорий, файлов, и затем,
возможно, собрать больше информации
о вашей системе.
<strong>http://host/cgi-bin/lame.cgi?page=../../../../etc/motd%00.html</strong>
При таком запросе приложение
считает, что имя файла относится к
разрешенному типу. Некоторые web-приложения
плохо проводят проверку на
правильность запроса файла, поэтому
это частый метод, используемый
хакером.
<h5>Запросы "|"</h5>
Вертикальная черта (pipe), часто
используется в UNIX для запуска
нескольких команд одновременно в
одном запросе
<strong>Пример:<br>
cat access_log| grep -i ".."</strong>
(Этот пример показывает проверку
лога на присутствие запросов ”..”,
которые часто используются
хакерами и червями.) Web-приложения
часто используют этот символ,
поэтому его наличие в логах может
оказаться ложной тревогой. Чтобы
понизить частоту ложных тревог,
необходим тщательный анализ вашего
программного обеспечения и его
работы.
Несколько примеров:
<strong>http://host/cgi-bin/lame.cgi?page=../../../../bin/ls|</strong>
Этот запрос является обычным
вызовом “ls”. Ниже приведены другие
варианты этого запроса.
<strong>http://host/cgi-bin/lame.cgi?page=../../../../bin/ls%20-al%20/etc|</strong>
Этот запрос выдает полный листинг
директории “etc”.
<strong>http://host/cgi-bin/lame.cgi?page=cat%20access_log|grep%20-i%20"lame"</strong>
Данный запрос запускает команду
"cat", а затем “grep” с аргументом
“-i”.
<h5>Запрос ";"</h5>
Этот символ позволяет запускать
несколько команд в одной строке в
UNIX-системе.
<strong>Пример:<br>
id;uname –a (Запускается команда “id”,
затем “uname”)</strong>
Web-приложения часто используют
этот символ, поэтому возможны
ложные тревоги. Повторю, тщательное
изучение вашего программного
обеспечения и его работы понизит
уровень ложных тревог.
<h5>Запросы "<" и ">"</h5>
Эти символы следует проверять в
логах по многим причинам, первая из
которых в том, что они используются
для вывода данных в файл.
<strong>Пример 1:<br>
echo "your hax0red h0 h0" >> /etc/motd</strong>
(Это пример записи информации в
файл.) Хакер может использовать
такой запрос например для дефейса
вашего web-сайта. Знаменитый эксплоит
RDS от rain.forest.puppy часто использовался
хакерами для ввода информации в
главную страницу web-сайтов. Примеры
взломанных web-сайтов с белыми
страницами, без форматирования,
ищите на attrition.org.
<strong>Пример 2:<br>
http://host/something.php=<b>Hi%20mom%20I'm%20Bold!</b></strong>
Это пример cross-site скриптовой атаки.
HTML тэги используют символы "<"
и ">". Хотя такая атака не дает
хакеру доступ к системе, она может
использоваться для введения людей в
заблуждение относительно
адекватности информации на сайте. (Конечно,
им нужно посетить нужную хакеру
ссылку. Этот запрос может быть
замаскирован кодированием символов
в шестнадцатеричном виде, чтобы не
быть столь очевидным.)
<h5>Запросы “!”</h5>
Этот символ часто используется в
SSI (Server Side Include) атаках. Эта атака
может дать хакеру результаты,
аналогичные предыдущей атаке, когда
обманутый пользователь нажимает на
ссылку.
<strong>Пример:<br>
http://host1/something.php=<!%20--#include%20virtual="http://host2/fake-article.html"--></strong>
В этом примере присоединяется
файл с host2, при этом создается
впечатление, будто он находится на
host1. Как и в прошлый раз, для
выполнения атаки пользователь
должен посетить нужную хакеру
ссылку.
Кроме того, это позволяет хакеру
запускать команды на вашей системе
с правами пользователя web-сервер.
<strong>Пример:<br>
http://host/something.php=<!%20#<!--#exec%20cmd="id"--></strong>
Запускает команду "id" на
удаленной системе. Она должна
показать пользовательский id web-сервера,
который обычно называется "nobody"
или "www".
Также это может позволить
присоединение скрытых файлов.
<strong>Пример:<br>
http://host/something.php=<!%20--#include%20virtual=".htpasswd"--></strong>
Эта команда присоединяет файл .htpasswd.
Этот файл не должен быть доступен
каждому, и в Apache даже встроено
правило, запрещающее доступ к .ht. SSI
тэг обходит это, что может вызвать
проблемы с безопасностью.
<h5>Запросы "<?"</h5>
Часто используются при попытке
вставить PHP в удаленное web-приложение.
Делает возможным запуск команд в
зависимости от установок сервера и
других факторов.
<strong>Пример:<br>
http://host/something.php=<? passthru("id"

;?></strong>
При плохо написанном PHP-приложении
может запустить команду на
удаленном компьютере с
привилегиями пользователя web-сервер.
Кроме того, хакер может записать
этот запрос в шестнадцатеричном
виде. Обращайте внимание на все
нестандартное и анализируйте все
подозрительное.
<h5>Запросы "`"</h5>
Символ обратного штриха часто
используется в Perl для запуска
команд. Он не используется в
нормальных web-приложениях, так что
если увидите его в логах –
воспримите это серьезно.
<strong>Пример:<br>
http://host/something.cgi=`id`</strong>
На плохо написанном Perl web-приложении,
эта команда запустит команду “id”.
Автор: Михаил Разумов