Минимизируем неприятные последствия HTTP-сканирования
Защищаем сайт от HTTP-сканеров
Анализируя логи Апача после полуторамесячного отпуска, я обратил внимание на то, что попыток сканирования сайта на уязвимости стало гораздо больше (сравнивая, например, с летом). Я решил проанализировать все попытки и попытаться найти решение, которое держало бы юных хакеров подальше от сайта. Если Вы всё еще читаете , то скажу, что практическая реализация моего решения требует [...]
← Вернуться к полной версии записи «Минимизируем неприятные последствия HTTP-сканирования»…
Автор: Vladimir; опубликовано в: Безопасность; метки: scanning, атака, безопасность, сканирование, уязвимостьНоя
2008
Комментарии к статье «Минимизируем неприятные последствия HTTP-сканирования» (28) »
Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.
Оставить комментарий к записи «Минимизируем неприятные последствия HTTP-сканирования»
गते गते पारगते पारसंगते बोधि स्वाहा
Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.


Данная конфигурация успешно прошла тестирование сканером Nikto:
RewriteEngine On
RewriteCond %{QUERY_STRING} [^?]*\? [OR]
RewriteCond %{QUERY_STRING} (\.\./|\.\.\\) [OR]
RewriteCond %{QUERY_STRING} (///) [OR]
RewriteCond %{THE_REQUEST} "^(GET|POST) /?https?:" [OR]
RewriteCond %{THE_REQUEST} "^(GET|POST|HEAD) //"
RewriteRule (.*) $1 [F]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
выдав ложное срабатывание:
Осталось добавить к этому только:
DirectoryIndex index.html index.php /index.php
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
и тогда совсем не к чему будет придраться
Алексей, а что даёт проверка
REDIRECT_STATUS?Чтобы не было зацикливания.
Есть хороший пример на Perl: Perl script для анализа ошибок сервера NCSA HTTPd 1.4
А это не то же самое, что и
RewriteCond %{SCRIPT_FILENAME} -f
RewriteRule ^(.*) - [L]
Вы правы Владимир – тоже самое.
Я почему-то думал, что после запрета пустых катологов и переопределения файлов нужно ставить проверку на зацикливание
[...] TCP Wrappers очень удобно использовать с программами для защиты от червей (BlackHosts, DenyHosts, Fail2ban), в частности, для защиты от HTTP-сканирования. [...]
Здравствуйте, Владимир.
Есть плагин Search Meter, который пишет поисковые запросы, введенные через форму сайта. Поставил его на WP 2.8.6, интересно было знать что у меня ищут посетители – оказалось, что лог изобилует запросами типа:
002dfe33d7af285673de33b1ba70ae32
Объясните нубу, если это попытки взлома, то что они пытаются проковырять? А если нет – то что можно найти подобным запросом?
Или сам плагин кривоват?
Вопрос хороший… Вряд ли это взлом, возможно, что кто-то балуется.
Вы не пробовали смотреть логи web-сервера, по идее там должны быть такие же строки? Если же их там нет, то это плагин шалит.
Есть строки – на плагин жалоб не осталось. Упражняется кто-то, только в чём? И трекбэки в последней версии WP без модерации идут – хоть отключай совсем…
Трэкбэки без модерации? Это очень странно. У меня стоит самая последняя бета 2.9, на это жалоб нет.
Может какой плагин с трэкбэками химичит?
Не думаю, вообще-то линков на трекбэки на самом сайте не видно, но после апдейта версий с 2.3.х на ветку 2.8.х уведомления о трекбеках стали приходить с поразительной регулярностью…
А с одного и того же адреса или с разных? Если спамеров несколько, можно просто их по IP забанить.
Был один товарищ, rss.e-customer.ru, он меня сильно спамил (спам в трэкбэках, несколько десятков сообщений в день). Пришлось человеку популярно объяснять, что он козёл. После того, как у него сервер упал пару раз, спам прекратился
С комментами проще – я на WP шаблон коммента расширил и сделал небольшое изменение в wp-comments: руками прописал пару строк – автоспамеры не досаждают. А с трекбеками как быть – пока не знаю…
Попробуйте плагин Simple Trackback Validation. Он, во-первых, сверяет IP-адрес, с которого приехал trackback, с IP-адресом веб-сервера URL-а в теле trackback-а и, во-вторых, проверяет есть ли ссылка на ваш блог на странице с URL-ом из тела trackback-а. У меня после его установки trackback-овый спам прекратился.
У меня есть сайт на php на котором стоит редирект дублей www и index.php на корень
Если добавляю в htaccess вышеприведённый код редирект перестаёт работать
RewriteCond %{QUERY_STRING} [^?]*\? [OR]
RewriteCond %{QUERY_STRING} (\.\./|\.\.\\) [OR]
RewriteCond %{QUERY_STRING} (///) [OR]
RewriteCond %{THE_REQUEST} "^(GET|POST) /?https?:" [OR]
RewriteCond %{THE_REQUEST} "^(GET|POST|HEAD) //"
RewriteRule (.*) $1 [F]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
Ещё есть сайт на html в котором прописано выполнение php и тоже стоит редирект дублей.
Простое убирание из кода index.php не помогает.
Если не трудно, как будет выглядеть вышеуказанный код для этих случаев?
P.s. Сам не програмист и с htaccess туго.
Это .htaccess целиком? Я редиректов просто не вижу.
Это мой .htaccess:
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.сайт\.ru$ [NC]
RewriteRule ^(.*)$ http://сайт.ru/$1 [R=301,L]
RewriteRule ^(.*)index\.html$ /$1 [R=301]
# запрет на отображение содержимого директории при отсутствии индексного файла
Options -Indexes
# выполнение php на html страницах
AddHandler application/x-httpd-php5 .htm .html
# своя ошибка 404
ErrorDocument 404 /404.html
# редирект
Redirect 301 /contact.html http://сайт.ru/contact.php
Если в него добавить это:
RewriteCond %{QUERY_STRING} [^?]*\? [OR]
RewriteCond %{QUERY_STRING} (\.\./|\.\.\\) [OR]
RewriteCond %{QUERY_STRING} (///) [OR]
RewriteCond %{THE_REQUEST} "^(GET|POST) /?https?:" [OR]
RewriteCond %{THE_REQUEST} "^(GET|POST|HEAD) //"
RewriteRule (.*) $1 [F]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
то при вводе такого адреса
http://сайт.ru/index.phpсайт (php) выдаёт ошибку 500 вместо редиректа наhttp://сайт.ru/Для сайта (html) пробовал менять предпоследнюю строку вашего htaccess на RewriteRule . /index.html [L] и на RewriteRule . /[L], всё равно ошибка 500.
А версия апача какая? Есть серьёзное подозрение, что он банально с регулярными выражениями не справляется.
Версия Apache 2.0.63
Я поставил первую версию вашего кода и всё нормально.
Мне кажется что с моим htaccess конфликтует эта строка RewriteRule . /index.php [L]
Попробуйте комментировать строки по одной.
я бы хотел уточнить такую вещь:
данные передаются через GET массив, насколько я понимаю. Так разве не помогает, в этом случае, фильтрация и обработка всех переменных в скрипте?
Может я что-то путаю, конечно. Тогда, если не трудно, можно ли где-то восполнить свои знания на просторах Инета, скиньте ссылку?
Вы правы, но если реализовывать проверку параметров непосредственно в скрипте, то потребуется лезть в код (чужого) скрипта и исправлять его. И при следующем обновлении скрипта повторять всё сначала. Проще изменить один раз
.htaccess.Но если Вы пишите свой скрипт, то да, проверку параметров делать нужно
благодарю за ответ. тогда у меня все гуд
я тоже заметил подобные запросы в логах и искал ответ – чем это грозит… наткнулся на Ваш блог.
в общем-то на сколько я знаю фильтрация через .htaccess даже меньше будет грузит сервер, чем непосредственно в скрипте.
Так что еще один плюс к статье.
Здравствуйте Vladimir, подскажите пожалуйста, что делать, если сайт уже взломали и уже есть полная его копия?
Копия есть у кого? У злоумышленника?
У злоумышленника была полная копия сайта(дизайн, контент, движок – абсолютная копия). Даже домен такой же, толко в другой зоне. В индесе было уже более 100 страниц. Связался с админом – он сайт удалил.
Как вариант можно использовать сервисы типа http://myfreecopyright.com/ — с ними будет проще доказать авторство.