Работа с HTTP-атаками w00tw00t

У меня есть сервер с apache, и я недавно установил mod_security2, потому что я сильно атакован этим:

Моя версия apache - apache v2.2.3, и я использую mod_security2.c

Это были записи из журнала ошибок:

[Wed Mar 24 02:35:41 2010] [error] 
[client 88.191.109.38] client sent HTTP/1.1 request without hostname 
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)

[Wed Mar 24 02:47:31 2010] [error] 
[client 202.75.211.90] client sent HTTP/1.1 request without hostname 
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)

[Wed Mar 24 02:47:49 2010] [error]
[client 95.228.153.177] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)

[Wed Mar 24 02:48:03 2010] [error] 
[client 88.191.109.38] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)

Вот ошибки из access_log:

202.75.211.90 - - 
[29/Mar/2010:10:43:15 +0200] 
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
211.155.228.169 - - 
[29/Mar/2010:11:40:41 +0200] 
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
211.155.228.169 - - 
[29/Mar/2010:12:37:19 +0200] 
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-" 

Я попытался настроить mod_security2 следующим образом:

SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind"
SecFilterSelective REQUEST_URI "\w00tw00t\.at\.ISC\.SANS"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:\)"

Вещь в mod_security2 заключается в том, что SecFilterSelective нельзя использовать, это дает мне ошибки. Вместо этого я использую такое правило:

SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind"
SecRule REQUEST_URI "\w00tw00t\.at\.ISC\.SANS"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:\)"

Даже это не работает. Я не знаю, что делать дальше. У кого-нибудь есть какие-либо советы?

  

Обновление 1

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

Я придумал еще 2 решения, может кто-то прокомментировать их, будучи хорошим или нет.

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

  2. Второй вариант лучше, я думаю, и это блокирует хосты, которые не отправляются правильно. В этом примере атака w00tw00t отправляется без имени хоста, поэтому я могу заблокировать хосты, которые не в правильной форме.

  

Обновление 2

Пройдя ответы, я пришел к следующим выводам.

  1. Чтобы пользовательский ведение журнала для apache будет потреблять ненужные ресурсы, и если есть действительно проблема, вы, вероятно, захотите просмотреть полный журнал без каких-либо недостатков.

  2. Лучше просто игнорировать хиты и сосредоточиться на лучшем способе анализа журналов ошибок. Использование фильтров для ваших журналов - хороший подход для этого.

  

Заключительные мысли по теме

Атака, упомянутая выше, не дойдет до вашей машины, если вы, по крайней мере, имеете современную систему, поэтому в основном не беспокойтесь.

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

Предотвращение этого от любого случая будет стоитьваши ресурсы, и это хорошая практика не тратить ваши ресурсы на неважные вещи.

Решение, которое я использую сейчас, Локатор Linux . Он отправляет мне сводки журналов и их фильтруют и группируют. Таким образом, вы можете легко отделить важные от несущественных.

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

80 голосов | спросил Saif Bechan 24 MaramWed, 24 Mar 2010 08:33:49 +03002010-03-24T08:33:49+03:0008 2010, 08:33:49

11 ответов


34

Из вашего журнала ошибок они отправляют запрос HTTP /1.1 без хоста: часть запроса. Из того, что я прочитал, Apache отвечает с ошибкой 400 (плохой запрос) на этот запрос, прежде чем передать в mod_security. Таким образом, это не похоже на то, что ваши правила будут обработаны. (Apache работает с ним, прежде чем требовать передачи mod_security)

Попробуйте сами:

Имя хоста telnet 80
GET /blahblahblah.html HTTP /1.1 (введите)
(войти)

Вы должны получить ошибку 400 и увидеть ту же ошибку в своих журналах. Это плохой запрос, и apache дает правильный ответ.

Правильный запрос должен выглядеть так:

GET /blahblahblah.html HTTP /1.1
Хост: blah.com

Обход этой проблемы может заключаться в исправлении mod_uniqueid, для создания уникального идентификатора даже для неудавшегося запроса, чтобы apache передавал запрос своим обработчикам запросов. Следующий URL-адрес - это обсуждение этой работы и включает патч для mod_uniqueid, который вы можете использовать:   http://marc.info/?l=mod-security -Пользователи & амп; м = 123300133603876 & Amp; W = 2

Не удалось найти другие решения для него и задаться вопросом, действительно ли требуется решение.

ответил Imo 29 MarpmMon, 29 Mar 2010 17:17:55 +04002010-03-29T17:17:55+04:0005 2010, 17:17:55
15

Фильтрация IP-адресов не является хорошей идеей, imho. Почему бы не попробовать фильтровать строку, которую вы знаете?

Я имею в виду:

iptables -I INPUT -p tcp --dport 80 -m string --to 60 --algo bm --string 'GET /w00tw00t' -j DROP
ответил Des 9 Maypm12 2012, 20:21:40
11

Iv также начал видеть эти типы сообщений в моих файлах журналов. Один из способов предотвратить эти типы атак - установить fail2ban ( http://www.fail2ban.org/ ) и настроить специальные фильтры для черного списка этих IP-адресов в правилах iptables.

Вот пример фильтра, который блокирует ip-адрес, связанный с созданием этих сообщений

[Вт Авг 16 02:35:23 2011] [ошибка] [клиент] Файл не существует: /var/www/skraps/w00tw00t.at.blackhats.romanian.anti-sec :) === apache w00t w00t сообщения jail - регулярное выражение и фильтр === Тюрьма

 [apache-wootwoot]
 enabled  = true
 filter   = apache-wootwoot
 action   = iptables[name=HTTP, port="80,443", protocol=tcp]
 logpath  = /var/log/apache2/error.log
 maxretry = 1
 bantime  = 864000
 findtime = 3600

Фильтр

 # Fail2Ban configuration file
 #
 # Author: Jackie Craig Sparks
 #
 # $Revision: 728 $
 #
 [Definition]
 #Woot woot messages
 failregex = ^\[\w{1,3} \w{1,3} \d{1,2} \d{1,2}:\d{1,2}:\d{1,2} \d{1,4}] \[error] \[client 195.140.144.30] File does not exist: \/.{1,20}\/(w00tw00t|wootwoot|WootWoot|WooTWooT).{1,250}
 ignoreregex =
ответил Jackie Craig Sparks 19 PM00000090000005031 2011, 21:46:50
4

w00tw00t.at.blackhats.romanian.anti-sec - попытка взлома и использует IP-запросы spoof, такие как VisualRoute будет сообщать о Китае, Польше, Дании и т. д. в соответствии с тем, что IP-адрес был откомандирован в то время. Поэтому настройка запрещающего IP-адреса или разрешимого имени хоста почти невозможен, поскольку он изменится в течение часа.

ответил PRW 1 J0000006Europe/Moscow 2011, 15:20:19
2

Я лично написал скрипт Python для автоматического добавления правил IPtables.

Вот немного сокращенная версия без протоколирования и другого мусора:

#!/usr/bin/python
from subprocess import *
import re
import shlex
import sys

def find_dscan():
        p1 = Popen(['tail', '-n', '5000', '/usr/local/apache/logs/error_log'], stdout=PIPE)
        p2 = Popen(['grep', 'w00t'], stdin=p1.stdout, stdout=PIPE)

        output = p2.communicate()[0].split('\n')

        ip_list = []

        for i in output:
                result = re.findall(r"\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b", i)
                if len(result):
                        ip_list.append(result[0])

        return set(ip_list)

for ip in find_dscan():
        input = "iptables -A INPUT -s " + ip + " -j DROP"
        output = "iptables -A OUTPUT -d " + ip + " -j DROP"
        Popen(shlex.split(input))
        Popen(shlex.split(output))

sys.exit(0)
ответил Xorlev 24 MaramWed, 24 Mar 2010 10:06:01 +03002010-03-24T10:06:01+03:0010 2010, 10:06:01
2

Я считаю, что причина, по которой mod_security не работает для вас, заключается в том, что Apache не смог самостоятельно разобрать сами запросы, они не соответствуют спецификации. Я не уверен, что у вас есть проблема здесь - apache регистрирует странное дерьмо, которое происходит в сети, если оно не регистрируется, вы не будете знать, что это даже происходит. Ресурсы, необходимые для регистрации запросов, вероятно, минимальны. Я понимаю его разочарование в том, что кто-то заполняет ваши журналы - но это будет более неприятно, если вы отключите ведение журнала, только чтобы найти, что вам действительно нужно. Как кто-то ворвался на ваш веб-сервер, и вам нужны журналы, чтобы показать, как они ворвались.

Одним из решений является установка ErrorLogging через syslog, а затем с помощью rsyslog или syslog-ng вы можете специально фильтровать и отбрасывать эти нарушения RFC в отношении w00tw00t. Или, альтернативно, вы можете отфильтровать их в отдельный файл журнала, чтобы ваш основной ErrorLog был легко читаемым. Rsyslog невероятно мощный и гибкий в этом отношении.

Итак, в httpd.conf вы можете:

ErrorLog syslog:user 

, то в rsyslog.conf вы можете:

:msg, contains, "w00tw00t.at.ISC.SANS.DFind" /var/log/httpd/w00tw00t_attacks.log

Помните, что этот подход фактически будет использовать много раз больше ресурсов , чем первоначально использовалось для ведения журнала непосредственно в файл. Если ваш веб-сервер очень занят, это может стать проблемой.

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

Блокирование IPTables - это идея, но вы можете получить очень большой список блоков iptables, который может иметь последствия для производительности сам по себе. Есть ли шаблон в IP-адресах или он исходит из большого распределенного ботнета? Вам нужно будет X% дубликатов, прежде чем вы получите преимущество от iptables.

ответил hellomynameisjoel 30 MarpmTue, 30 Mar 2010 15:09:33 +04002010-03-30T15:09:33+04:0003 2010, 15:09:33
1

Вы скажете в Update 2:

  

Проблема, которая все еще остается   Проблема, которая все еще остается, заключается в следующем. Эти атаки исходят от ботов, которые ищут определенные файлы на вашем сервере. Этот конкретный сканер ищет файл /w00tw00t.at.ISC.SANS.DFind:).

     

Теперь вы можете просто игнорировать его, который наиболее рекомендуется. Проблема остается в том, что если у вас есть этот файл на вашем сервере как-то однажды, у вас есть некоторые проблемы.

Из моего предыдущего ответа мы собрали, что Apache возвращает сообщения об ошибках из-за плохо сформированного запроса HTML 1.1. Все веб-серверы, поддерживающие HTTP /1.1, вероятно, должны возвращать ошибку, когда они получают это сообщение (я не дважды проверял RFC - возможно, RFC2616 говорит нам).

Имея w00tw00t.at.ISC.SANS.DFind: на вашем сервере некоторые, где не мистически означает «у вас какие-то проблемы» ... Если вы создадите файл w00tw00t.at.ISC.SANS.DFind: в своем DocumentRoot или даже DefaultDocumentRoot, это не имеет значения ... сканер отправляет сообщение с нарушенным HTTP /1.1, а apache говорит «нет, это плохой запрос ... до свидания». Данные в файле w00tw00t.at.ISC.SANS.DFind: не будут обслуживаться.

Использование mod_security для этого случая не требуется, если вы действительно не хотите (нет точки?) ... в этом случае вы можете посмотреть на его исправление вручную (ссылка в другом ответе).

Еще одна вещь, которую вы могли бы рассмотреть, - это функция RBL в mod_security. Возможно, есть RBL онлайн, где есть IP-адреса w00tw00t (или другие известные вредоносные IP-адреса). Это, однако, означает, что mod_security выполняет поиск DNS для каждого запроса.

ответил Imo 31 MarpmWed, 31 Mar 2010 12:52:01 +04002010-03-31T12:52:01+04:0012 2010, 12:52:01
1

Как добавить правило в modsecurity? Что-то вроде этого:

   SecRule REQUEST_URI "@rx (?i)\/(php-?My-?Admin[^\/]*|mysqlmanager
   |myadmin|pma2005|pma\/scripts|w00tw00t[^\/]+)\/"
   "severity:alert,id:'0000013',deny,log,status:400,
   msg:'Unacceptable folder.',severity:'2'"
ответил Kreker 9 PM000000120000005431 2011, 12:23:54
1

Я вижу, что большинство решений уже рассмотрены выше, однако я хотел бы отметить, что не все клиент, отправивший HTTP /1.1 запрос без атак hostname , нацелены непосредственно на ваш сервер. Существует множество различных попыток отпечатки пальцев и /или использования сетевой системы, предшествующей вашему серверу, например:

client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /tmUnblock.cgi

для таргетинга на маршрутизаторы Linksys и т. д. Поэтому иногда это помогает расширить ваш фокус и разделить ваши усилия защиты между всеми системами с равным долей, т. е. реализовать правила маршрутизатора, реализовать правила брандмауэра (надеюсь, ваша сеть имеет один), реализовать брандмауэр сервера /IP-правила и связанные сервисы, т.е. mod_security, fail2ban и т. Д.

ответил Milan 8 +04002014-10-08T22:10:16+04:00312014bEurope/MoscowWed, 08 Oct 2014 22:10:16 +0400 2014, 22:10:16
1

как насчет этого?

iptables -I INPUT -p tcp --dport 80 -m string --to 70 --algo bm --string 'GET /w00tw00t.at.ISC.SANS.DFind' -j DROP
iptables -I INPUT -p tcp --dport 80 -m string --to 70 --algo bm --string 'GET /w00tw00t.at.ISC.SANS.DFind' -j LOG --log-level 4 --log-prefix Hacktool.DFind:DROP:

отлично работает для меня.

ответил Urbach-Webhosting 1 MarpmTue, 01 Mar 2016 23:42:58 +03002016-03-01T23:42:58+03:0011 2016, 23:42:58
0

Если вы используете hiawatha веб-сервер в качестве обратного кода reverse proxy, эти сканирование автоматически отбрасываются как мусор & client запрещен. Он также фильтрует XSS & CSRF.

ответил Stuart Cardall 18 AM00000040000001031 2016, 04:03:10

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132