|
|
DOS на TCP-стек BSD-клонов
Уже неcколько дней идёт бурное обсуждение нового denial-of-service средства для BSD-систем. Данная история носит полудетективный характер, и всё началось с письма некоевого The Tree of Life в список рассылки BugTRAQ. Данный человек заявил, что стал свидетелем успешной denail-of-service атаки на несколько хостов под FreeBSD, которые поддерживали одни из главных irc-серверов EFNET.
Администратор якобы отказался комментировать данную атаку, указав лишь, что эксплоит назывался stream.c. Резульатом его действия являлась всего одна аккуратная строчка в логах - syslog:Jan 19 01:12:05 x kernel: Kernel panic: Free list empty.
Это выглядело больше похожим на утку или же попытку нарушить порядок и организовать беспочвенную панику, тем более официальных сообщений от BSD так и не поступило.
Но далее Brett Glass подтвердил, что имеет на руках рабочий эксплоит и успешно протестировал его на TCP-стеках Linux, Solaris, и всех системах семейства BSD. Так же было сказано о временном фиксе : для этого следовало прописать правила IPFilter, поставляющегося со всеми BSD, следующим образом:
pass in all
block in proto tcp all head 100
pass in proto tcp from any to any flags S keep state group 100
Вскоре после этого вышел и "неофицальный фикс" для TCP-стека и от самой BSD: его можно скачать с http://www.freebsd.org/~alfred/tcp_fix.diff
Теперь стоит вкратце пояснить принцип действия данного denal-of-service средства.
Происходит флуд хоста ACK-пакетами, приходящими со случайных IP-адресов и имеющими случайные номера последовательностей. Вообще-то это не должно причинять серьёзные проблемы, но в данном случае ограничение (!) траффика, генерируемого эксплоиом, имеет смысл.
Атакующий указывает порт, на который будут посылаться пакеты с флагом ACK, если порт является открытым, то ядру атакуемой системы придётся проработать несколько дольше перед падением.. впрочем, как показывает практика, "удар" по открытому порту принесёт более интересные результаты.
Теперь рассмотрим, каким образом freeBSD обращается с полученными пакетами. Обработчик, в котором-то и кроется суть "падения" системы, вызывается из /sys/netinet/tcp_input.c
Далее, условие
if ((tiflags & (TH_RST|TH_ACK|TH_SYN)) != TH_SYN) {
приводит к тому, что все наши ACK-пакеты будут сброшены после некой обработки отсылкой обратного пакета с флагом RST (так как делается попытка послать ACK, когда соединение не установлено).
В принципе, обработка одного пакета отнимает мало процессорного времени, но, имея на своём конце хотя бы 10-Мбитный shell, вы вскоре добъётесь того, что атакованная машина исчерпает ресурсы и свалится с kernel panic.
Эксплоит был выпущен в публичное обращение, так как известны правила ipfilter, временно защищающие от атаки, а так же доступен патч.
Сам эксплоит, а так же более подробную информацию можно получить на:
ftp://ftp.technotronic.com/newfiles/stream-DoS.txt
duke
Team Void
|
|