Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #47, ОКТЯБРЬ 2004 г.

Хитрый тюнинг и грамотная защита

Toxa (toxa@cterra.ru)

Спецвыпуск: Хакер, номер #047, стр. 047-080-1


Полезные приемы настройки сервера

Ты поставил и настроил сервер. У тебя все работает, пользователи довольны, и теперь настало время добавить в систему ту самую изюминку, о которую, возможно, сломает зуб не один взломщик.

Тюнингуем систему

Первый шаг - обезопасить себя встроенными средствами. Общение с ядром будем проводить через sysctl - удобный интерфейс для тюнинга сетевой подсистемы. Расскажу на примере FreeBSD. В этой системе нужно обратить внимание, как минимум, на следующие переменные:

Листинг

net.inet.tcp.blackhole=2

net.inet.udp.blackhole=1

По стандарту, если на закрытый порт сервера приходит SYN-пакет, машина должна ответить RST-пакетом. Это упрощает сканирование портов, а также дает достаточное количество информации (в виде ответов от сканируемого сервера) для определения версии ОС. "Черные дыры" заставляют FreeBSD быть предельно лаконичной, не отсылая ничего в ответ на запросы к закрытым портам. Идем дальше.

Маршрутизацию от источника можно смело отключить:

Листинг

net.inet.ip.sourceroute=0

net.inet.ip.accept_sourceroute=0

Чтобы сервер не стал жертвой DoS-атаки, можно включить механизм syncookies, который служит для защиты сервера от SYN-флуда.

При серьезной атаке может не менее серьезно выручить. Выстави следующую переменную:

Листинг

net.inet.tcp.syncookies=1

Чтобы затруднить определение версии твоей ОС анализом приходящих от нее пакетов, изменим значение Time To Live:

Листинг

net.inet.ip.ttl=64

Современная система не должна отвечать на широковещательные пинги, но и по сей день существуют сети, которые могут стать источником DoS-атаки. Чтобы не попасть в их список, выставляем:

Листинг

net.inet.icmp.bmcastecho=0

Если ты хочешь отслеживать коннекты на закрытые порты твой машины, используй следующую переменную:

Листинг

net.inet.tcp.log_in_vain=1

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

Если не нужна поддержка смешного протокола T/TCP (TCP for Transactions), то пакеты с флагами SYN+FIN можно смело отбрасывать как неликвидные :). Протокол редко где используется, а потому это имеет смысл.

Листинг

net.inet.tcp.drop_synfin=1

Обманываем сканеры

Вторжение в систему начинается со сканирования - это прописная истина. Можно (и нужно) уже на этом этапе усложнить жизнь злоумышленнику. Так, пакетный фильтр OpenBSD PF имеет встроенную возможность определения и блокирования сканеров, используя технологию Passive OS Fingerprinting. Достаточно добавить правило "block quick from any os NMAP" в pf.conf, чтобы результаты работы популярного сканера nmap заставили хакера почесать затылок. Также nmap'у можно противодействовать с помощью "scrub in all" и фильтрации TCP-пакетов с особыми флагами, к примеру:

Листинг

block return-rst in log quick proto tcp all flags FP/FP

block return-rst in log quick proto tcp all flags SE/SE

block return-rst in log quick proto tcp all flags FUP/FUP

Но можно обойтись и userland-средствами. Например, утилитой portsentry.

Она открывает для прослушивания указанные TCP/UDP-порты, логирует обращения к ним и позволяет реагировать на сканирование. После скачивания с http://packetstormsecurity.nl/UNIX/IDS/ и установки portsentry правим portsentry.conf:

Содержание  Вперед на стр. 047-080-2