эта страница доступна на следующих языках: English Castellano Deutsch Francais Nederlands Portugues Russian Turkce |
автор Danilo Lujambio Содержание: |
Почему сканеры так важны для безопасности сетей? Конечно, в первую очередь, потому что их используют сами злоумышленники. Подготовка к атаке компьютера выглядит примерно следующим образом:
Для системного администратора, ответственного за безопасность системы, очень важно самому сканировать сеть для выявления уязвимых мест до того, как это сделает кто-нибудь другой с другими намерениями.
Существует множество приложений предназначенных для выполнения этой задачи, но в этой заметке мы рассмотрим только nmap-наиболее мощное приложение подобного рода.
С помощью nmap системный администратор может сканировать сеть для выявления активных серверов и сервисов предоставляемых ими. Nmap использует разные подходы для этого. В заметке мы рассмотрим только некоторые из них и параллельно остановимся на некоторых моментах протокола TCP
Наряду с демонстрацией работы nmap также в заметке рассмотрим пути обнаружения следов сканирования на исследуемом компьютере.
nmap можно загрузить с www.insecure.org и далее:
tar zxvf nmap-2.30BETA17.tgz cd ...../nmap-2.30BETA17/ ./configure make make installnmap установлен.
Обычно nmap выдает список активных портов на сканируемом компьютере. В свою очередь порт предоставляет информацию о названии сервиса, его состоянии и используемом протоколе.
Стандартное сканирование с помощью nmap осуществляется с опцией -sT. Оно основано на так называемом трехшаговом обмене(three way handshake) протокола TCP. Ниже рассмотрим немного подробнее этот процесс
Такой способ сканирования обладает двумя преимуществами:
Далее подробно рассмотрим подобное сканирование и для наглядности запустим tcpdump на исследуемом компьютере. Запускаем nmap на компьютере 192.168.255.20 и пытаемся сканировать компьютер house2.xxx.xxx.xxx через сеть Ethernet.
1) 08:24:18.393108
192.168.255.20.1024 house2.xxx.xxx.xxx.653: S
2632227152:2632227152(0) win 16060 < mss
1460,sackOK,timestamp 232602[|tcp] (DF) 2) 08:24:18.393167 house2.xxx.xxx.xxx.653 192.168.255.20.1024: R 0:0(0) ack 2632227153 win 0 3) 08:24:18.393227 192.168.255.20.1025 house2.xxx.xxx.xxx.6141: S 2644226118:2644226118(0) win 16060 < mss 1460,sackOK,timestamp 232602[|tcp] (DF) 4) 08:24:18.393258 house2.xxx.xxx.xxx.6141 192.168.255.20.1025: R 0:0(0) ack 2644226119 win 0 5) 08:24:18.453343 192.168.255.20.1298 house2.xxx.xxx.xxx.pop3: S 2640612362:2640612362(0) win 16060 < mss 1460,sackOK,timestamp 232608[|tcp] (DF) 6) 08:24:18.453542 house2.xxx.xxx.xxx.pop3 192.168.255.20.1298: S 1658259980:1658259980(0) ack 2640612363 win 16060 < mss 1460,sackOK,timestamp 243353[|tcp] (DF) 7) 08:24:18.458667 192.168.255.20.1298 house2.xxx.xxx.xxx.pop3:. ack 1 win16060<nop,nop,timestamp 232609 243353 (DF) 8) 08:24:18.461280 192.168.255.20.1298 house2.xxx.xxx.xxx.pop3: F 1:1(0) ack 1 win 16060 < nop,nop,timestamp 232609 243353 (DF) |
Из вышеувиденного делаем вывод, что порт 110 этого компьютера предоставляет определнный сервис.
Как было сказано ранее - такой метод сканирования легко обнаружить - он оставляет следы в /var/log/messages (но это конечно зависит от того как у вас настроен syslog.conf). Соединение, рассмотренное в строках 5 - 8 оставляет следующее:
May 6 08:24:01 house2 in.pop3d[205]: connect from root@192.168.255.20
Сканирование с опцией -sS также называют "половинчатым"("half connection"):посылается сегмент SYN и в случае получения ACK(подтверждение наличия активности порта) от сканируемого компьютера-посылается RESET для завершения соединения. В случае получения RST вместо ACK-делаем вывод об отсутствии активности. Единственный недостаток этого метода сканирования-необходимо иметь привилегию root. Но главное его достоинство-трудность обнаружения.
Посмотрим с помощью tcpdump работу nmap с этой опцией(пронумеруем строки для удобства объяснения, как в прошлом примере).
1) 22:25:45.856936 192.168.255.20.40175
house2.tau.org.ar.946: S 1292785825:1292785825(0) win
3072 |
3) 22:25:45.970365
192.168.255.20.40175 house2.tau.org.ar.pop3: S
1292785825:1292785825(0) win 3072 4) 22:25:45.976022 house2.tau.org.ar.pop3 192.168.255.20.40175: S 185944428:185944428(0) ack 1292785826 win 16080 < mss 536 (DF) 5) 22:25:45.979578 192.168.255.20.40175 house2.tau.org.ar.pop3: R 1292785826:1292785826(0) win 0 |
Такое сканирование не оставляет следов в /var/log/messages, как было в предыдущем примере.
Этот метод сонован на следующем принципе-не активный порт сканируемого компьютера ответит пакетом RST на пакет FIN. Другими словами-активный порт проигнорирует пакет FIN. Делаем вывод- активными можно считать те, которые не ответят. Компьютеры, работающие под управлением ОС от Microsoft-не поддаются этому методу-у них нестандартная реализация операций TCP.
Существует три вида операций, предоставляемых приложением nmap схожих по технике-они доступны через опции -sF, -sX и -sN. Рассмотрим опцию -sF.
1) 06:50:45.643718 192.168.255.20.35600
casahouse.tau.org.ar.864: F 0:0(0) win 2048 |
Строки 1 и 2 показывают посылку сегмента FIN (символ "F" после 864 в первой строке) и ответ пакетом RST (символ "R" после 35600 в строке 2)- из которых nmap делает вывод, что 864 порт компьютера не активен.
3) 06:50:47.933227 192.168.255.20.35600 >
house2.tau.org.ar.pop3: F 0:0(0) win 2048 |
В строках 3 и 4 порт pop3 компьютера house2 рассматривается опять в качестве примера активного порта. В строке 3 посылаем FIN и не получаем ответ, в строке 4 nmap для подтверждения опять посылает FIN. В обоих случаях порт pop3 компьютера house2 игнорирует посылаемые пакеты-значит активный.
Как было сказано ранее сканирование с опцией -sT оставляет следы, а с опциями -sS и -sF - нет. Но можно использовать tcpdump для обнаружения подобных атак. Недостаток этого способа в том, что tcpdump генерирует массу информации, которую сложно сохранить и проанализировать. Рассмотрим некоторые примеры использования tcpdump.
Для облегчения восприятия - воспроизведем формат пакета TCP [2].
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port | Destination Port | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Acknowledgement Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Offset | Reserver |U|A|P|R|S|F| Window | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | Urgent Pointer | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Как видно 13-й байт отображает флаги, идентифицирующие тип
пакета (SYN, FIN, и т.д.). Зная это и понимая работу оператора
& можно создавать маски для обнаружения и идентификации
посылаемых пакетов, например
tcpdump ' tcp[13] & 7 != 0 and dst 192.168.255.20 ' >
/tmp/out7
здесь фильтруется входящий поток и отлавливаются только пакеты
с установленными битами R, S или F (маска - 00000111) и компьютером
192.168.255.20 в качестве места назначения (очевидно, что IP адрес
отследит сам компьютер)
Используя
tcpdump ' tcp[13] & 1 != 0 and dst 192.168.255.20 ' >
/tmp/out1
мы отфильтруем пакеты с установленным битом FIN (маска - 00000001).
Это действенно для обнаружения сканирования приложением nmap с опцией
-sF. А следующее выражение
tcpdump ' tcp[13] & 2 != 0 and dst 192.168.255.20 ' >
/tmp/out2
отфильтрует пакеты с установленным битом SYN, обнаружив попытку
сканирования с опцией -sS
Для обнаружения последнего типа сканирования (с опцией -sS) существуют специальные приложения [3].
Приложения, подобные nmap, очень полезны для улучшения безопасности систем потому, что позволяют взглянуть на сеть глазами потенциального злоумышленника. Мы рассмотрели лишь малую часть известных методов, но надеюсь, что этого будет достаточно для понимая самой сути идеи сканирования.
[1] W. Richard Stevens Unix Network Programming Volume 1
[2] RFC 793
[3] Документация nmap
|
Webpages maintained by the LinuxFocus Editor team
© Danilo Lujambio, FDL LinuxFocus.org Click here to report a fault or send a comment to LinuxFocus |
Translation information:
|
2001-06-13, generated by lfparser version 2.8