Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
Эта заметка доступна на: English  Castellano  Deutsch  Francais  Nederlands  Portugues  Russian  Turkce  

[Foto del Autor]
автор Danilo Lujambio


Содержание:

Используем nmap

[nmap]

Почему сканеры так важны для безопасности сетей? Конечно, в первую очередь, потому что их используют сами злоумышленники. Подготовка к атаке компьютера выглядит примерно следующим образом:



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

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

С помощью nmap системный администратор может сканировать сеть для выявления активных серверов и сервисов предоставляемых ими. Nmap использует разные подходы для этого. В заметке мы рассмотрим только некоторые из них и параллельно остановимся на некоторых моментах протокола TCP

Наряду с демонстрацией работы nmap также в заметке рассмотрим пути обнаружения следов сканирования на исследуемом компьютере.

nmap можно загрузить с www.insecure.org и далее:

tar zxvf nmap-2.30BETA17.tgz
cd ...../nmap-2.30BETA17/
./configure
make
make install
nmap установлен.

Обычно nmap выдает список активных портов на сканируемом компьютере. В свою очередь порт предоставляет информацию о названии сервиса, его состоянии и используемом протоколе.

 

Сканирование, основанное на возможностях протокола TCP (опция -sT)

Стандартное сканирование с помощью nmap осуществляется с опцией -sT. Оно основано на так называемом трехшаговом обмене(three way handshake) протокола TCP. Ниже рассмотрим немного подробнее этот процесс

  1. Прежде всего сервер должен быть готов установить соединение (обычно используются такие функции как socket, bind и listen)
  2. Клиент пытается установить соединение с помощью connect. При этом серверу посылается сегмент SYN, информирующий его о данных, которые будут переданы во время соединения. Обычно этот сегмент включает в себя TCP Header и возможно некоторые дополнительные опции протокола.
  3. Сервер в свою очередь должен ответить клиенту, послав в ответ ACK и SYN.
  4. Клиент должен подтвердить получение ответа от сервера, послав ACK.


Такой способ сканирования обладает двумя преимуществами:

но есть и большой недостаток-такое сканирование просто обнаружить и отфильтровать.

Далее подробно рассмотрим подобное сканирование и для наглядности запустим 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)

Нумерация строк добавлена для облегчения объяснения. В строке 1 видим, что "атакующий" компьютер 192.168.255.20 посылает SYN с порта 1024 на порт 653 сканируемого компьютера. Символ "S" после номера порта 653 дает нам основание утверждать, что был послан сегмент SYN.
В строке 2 мы видим ответ сканируемого компьютера-он посылает пакет RESET (символ "R" после 1024), указывающий на отсутствие сервиса на порту 653.
Строки 3 и 4 подобны первым двум и единственное различие заключается в том, что на сканируемом компьютере проверяется порт 6141 на наличие сервисов. Так как и на этом порту нет никакого сервиса - опять получаем в ответ RESET
В строке 5 видим, что компьютер 192.168.255.20 посылает сегмент SYN на POP3 порт (110) сканируемого компьютера и получает в ответ ACK и sequence number (в нашем случае 1658259980 и полученный от 192.168.255.20 плюс 1 - 2640612363). Обратите внимание, что в пакете, посылаемом компьютером house2 активизированы биты SYN и ACK - видно в строке 6, являющейся третьим шагом в этом обмене.
В строке 7 192.168.255.20 подтверждает получение ответа и это четвертый шаг.
В строке 8 соединение закрывается компьютером 192.168.255.20 посредством посылки FIN (символ "F" после pop3)

Из вышеувиденного делаем вывод, что порт 110 этого компьютера предоставляет определнный сервис.

Как было сказано ранее - такой метод сканирования легко обнаружить - он оставляет следы в /var/log/messages (но это конечно зависит от того как у вас настроен syslog.conf). Соединение, рассмотренное в строках 5 - 8 оставляет следующее:

May 6 08:24:01 house2 in.pop3d[205]: connect
from [email protected]


 

Сканирование с опцией -sS

Сканирование с опцией -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
2) 22:25:45.857078 house2.tau.org.ar.946 192.168.255.20.40175: R 0:0(0) ack 1292785826 win 0


Строки 1 и 2 схожи с предыдущим примером, единственное различие в том, что сегмент SYN посылается с компьютера 192.168.255.20 на 946 порт компьютера house2-принимаем в качестве ответа RESET-порт не активен.

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

Строки 3, 4, 5-показывают успешное обнаружение сервиса (pop3) на 110 порту компьютера house2. Как видно процесс обмена не полностью выполнен- после получения подтверждения об активности сервиса посылаем RESET для завершения соединения.

Такое сканирование не оставляет следов в /var/log/messages, как было в предыдущем примере.

 

Сканирование с использованием сегментов FIN

Этот метод сонован на следующем принципе-не активный порт сканируемого компьютера ответит пакетом 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
2) 06:50:45.643865 house2.tau.org.ar.864 192.168.255.20.35600: R 0:0(0) ack 0 win 0

Строки 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
4) 06:50:48.251147 192.168.255.20.35601 > house2.tau.org.ar.pop3: F 0:0(0) win 2048

В строках 3 и 4 порт pop3 компьютера house2 рассматривается опять в качестве примера активного порта. В строке 3 посылаем FIN и не получаем ответ, в строке 4 nmap для подтверждения опять посылает FIN. В обоих случаях порт pop3 компьютера house2 игнорирует посылаемые пакеты-значит активный.

 

Упрощаем поток информации с помощью tcpdump

Как было сказано ранее сканирование с опцией -sT оставляет следы, а с опциями -sS и -sF - нет. Но можно использовать tcpdump для обнаружения подобных атак. Недостаток этого способа в том, что tcpdump генерирует массу информации, которую сложно сохранить и проанализировать. Рассмотрим некоторые примеры использования tcpdump.

Для облегчения восприятия - воспроизведем формат пакета TCP [2].

 

TCP (RFC 793)

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

 

Страница отзывов

У каждой заметки есть страница отзывов. На этой странице вы можете оставить свой комментарий или просмотреть комментарии других читателей.
 talkback page 

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:
es -> -- Danilo Lujambio
es -> en Iván Rojas Aguilar
en -> en Javier Palacios
en -> ru Kirill Poukhliakov

2001-06-13, generated by lfparser version 2.8