Контрмеры: защита от сканирования портов
В табл. 2.2 приведен перечень различных популярных утилит сканирования, а также типы сканирования, которые эти утилиты позволяют выполнять.
Таблица 2.2. Популярные утилиты сканирования портов и их возможности.
Утилита | Сканирование | Ресурс | ||
---|---|---|---|---|
UNIX | TCP | UDP | Скрытое | |
Strobe | X | ftp://ftp.FreeBSD.orgpub/FreeBSD/ports/distfiles/strobe-1.06.tgz |
||
Tcp_scan | X | http://wwdsilx.ww.dsi.com/saint/ |
||
Udp_scan | X | http://wwdsilx.wwdsi.com/saint/ | ||
Nmap | X | X | X | http://www .inscure .org/nmap |
Netcat | X | X | http://www.10pht.com/users/10pht/nc110.tgz | |
Windows Netcat | X | X | http://www.10pht.com/users/10pht/ncllnt.zip | |
NetScanTools Pro 2000 | X | X | http://www.nwpsw.com | |
SuperScan | X | http://members.home.com/rkeir/software.html | ||
NTOScanner | X | http://www.ntobjectives.com | ||
WinScan | X | http://www.prosolve.com | ||
IpEye | X | http://ntsecurity.nu | ||
WUPS | X | http://ntsecurity.nu | ||
Fscan | X | X | http://www.foundstone.com |
Выявление факта сканирования
Как правило, взломщики прибегают к сканированию TCP- и UDP-портов удаленного компьютера, чтобы установить, какие из них находятся в состоянии ожидания запросов. Поэтому выявить факт сканирования – значит, установить, в каком месте и кем будет предпринята попытка взлома. Основные методы выявления факта сканирования состоят либо в использовании специальной программы, предназначенной для выявления вторжений на уровне сети (IDS), такой как NFR, либо в использовании механизма защиты на уровне отдельного узла.
Метод UDP-сканирования утилиты netcat не работает в операционной системе Windows NT, поэтому пользователям этой ОС не стоит доверять полученным результатам.
# Алгоритм выявления факта сканирования # Автор – Стюарт Мак-Клар (Stuart McClure) # Данный алгоритм выявляет неудачные попытки сканирования портов, # которые приводят к генерации сообщений ACK/RST. В процессе настройки # можно поэкспериментировать со значениями # maxcount и maxtime. port_schema = library_schema:new(1, ["time", "ip", "ip", "int"], scope() }; time = 0; count = 0; maxcount =2; t Максимально допустимое количество ACK/RST. maxtime =5; tt Максимально допустимое время, в течение # которого может достигаться значение maxcount. source = 0; port = 0; target = 0; filter portscan ip () { if (tcp.is) ( # Проверка АСК, RST и источника поступления. if (byte(ip.blob, 13) == 20) # Установлены флаги АСК, RST { count = count + 1; source = ip.dest; target = ip.source; port = tcp.sport; time = system.time; } } on tick = timeout (sec: maxtime, repeat) call checkout; } func checkout { if (count >= maxcount) { echo("Попытка сканирования порта, Время: ", time, "\n); record system.time, source, target, port to the_recorder_portscan; count = 0; } else count = 0; } the_recorder_portscan=recorder(" bin/histogram packages/sandbox/portscan.cfg", "port_schema" );