Иллюстрированный самоучитель по защите в Интернет

Контрмеры: защита от сканирования портов

В табл. 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"
);
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.