CGI-сканеры и методы защиты от них Cgi-сканеры. Что это такое? Как они устроены? Как они работают? Как от них защитится? Что такое anti-IDS? Вот на такие вопросы я и хотел бы ответить с помощью этой статьи. Ну что готовы? Поехали... Нумбер уно. Сканеры и принцип их работы. CGI-сканер - программа для сканирования адреса (или диапазона адресов) на наличие уязвимых скриптов и соответственно вывода отчёта о наличии (или отсутствии) таких скриптов на сервере. Принцип работы всех cgi-сканеров одинаков и весьма прост. Сканер берёт относительный путь к уязвимому скрипту из своей базы и ищет его на сервере. В общем случае сканер просто посылает следующий запрос на сервер: GET адрес_хоста/путь_к_скрипту_из_базы HTTP/1.0\n\n Если документ найден т.е. ответ сервера '200' то предполагается что скрипт есть на сервере и выводится сообщение о найденом скрипте. Так сканер проходится по всей базе и всему диапазону адресов. Как видите всё просто. Написать такой сканер дело 10 минут. Нумбер два. Анти-IDS. IDS - Intrusion Detection System - система которая обнаруживает поиск багов на сервере (и не только это). Anti-IDS - соответственно система которая помогает обойти читай обмануть IDS. Теперь о способах анти-IDS. Первое что приходит на ум это заменять / на /./ в запросах сканера. Теперь если сервер фильтрует только нормальные запросы, то он может быть взломан т.к. / и /./ ведут к одной и той же директории. Второе - менять количествово слешей. Например: www.server.com/cgi-bin/script.cgi заменим на www.server.com//cgi-bin//script.cgi. Третье - дополнительные пути. Например: www.server.com/cgi-bin/script.cgi меняем на www.server.com/cgi-bin/blah/../script.cgi. Четвертое - добавить параметры. Например: www.server.com/cgi-bin/script.cgi?blah=huh Пятый способ - кодировать урл. Например: www.server.com/cgi-bin/script.cgi превратится в www%2Eserver%2Ecom%2Fcgi%2Dbin%2Fscript%2Ecgi Ну и наконец можно комбинировать все эти способы. =) Вот теперь самое время поговорить о способах защиты от тех кто вооружившись таким сканером пытается поиметь ваш сайт. Так как сканеры обычно содержат достаточно большие базы уязвимых скриптов, то наиболее прикольный путь это максимально осложнить жизнь взломщику. Один из наиболее простых таких способов это изменить станицу ошибки 404 на свою. Таким образом при запросе сканером несуществующего пути ему будет выдаваться ваша изменённая страница и соответственно код ответа будет 200 т.е. найдено т.к. сканер не проверяет что ему выдаётся при запросе скрипт или просто html-страничка. Значит при сканировании на любой запрос злоумышленник будет получать ответ Найдено. А если в базе 1000 скриптов? Придётся взломщику самому ручками в браузере набивать адреса и пути и проверять что выдаётся. Как вы думаете хватит у него терпения проверить все скрипты? Мне вот кажется что нет. =) А нам этого и надо. =) Но это так сказать пассивный метод (да и не везде можно сменить станицу ошибки), а ведь иногда хочется чего-то более злобного. Хех... Будем делать фейк (fake) т.е. обманку. Я просто приведу код двух скриптов на ПХП и Перле которые при запуске записывают айпишник и время в файл отчёта. Кладёте эти скрипты на сервер под именем какого-либо часто попадающегося скрипта из базы сканеров (например formmail.pl или getalbum.php) и теперь если вас будут сканировать вы получите время запроса и айпишник сканирующего вас чела. ### fake formmail.pl source ### #!/usr/bin/perl print "Content-type: text/html\n\n"; # получаем дату $date=`date`; chop($date); # записываем в файл open(LOG, ">>report.txt"); print LOG "--------------------------------------------------------\n"; print LOG " Remote Host: $ENV{'REMOTE_HOST'}$ENV{'HTTP_X_FORWARDED_FOR'}\n"; print LOG " Remote IP: $ENV{'REMOTE_ADDR'}\n"; print LOG " Query String: $ENV{'QUERY_STRING'}\n"; print LOG " Date: $date\n"; print LOG "--------------------------------------------------------\n"; # ну и немного обидных слов =) print "
"; print " FUCK OFF NIGGA