Распознаем методы сканирования: nmap и queso

Цель данной статьи — помочь аналитикам IDS и администраторам,занимающимся настройкой firewall'ов, идентифицировать nmap и queso сканирование. Это не развернутый анализ, а пример методики, ориентированный на администраторов систем, которым необходимо более глубокое понимание работы этих сканеров для борьбы с ними.

Сканер портов — утилита используемая как администраторами систем, так и атакующими эти системы с целью идентификации уязвимостей путем посылки специальным образом сгенерированных пакетов и анализа ответов тестируемых систем.

Nmap
Nmap — свободно распространяемый сканер портов, разработанный и поддерживаемый Fyodor'ом. Он портирован на многие ОС (Linux, FreeBSD, Open BSD, Solaris и даже NT) и, вероятно, является самым распространенным бесплатным сканером. Вследствие своей простоты в использованиие он может применяться как новичком, так и экспертом. 
Поэтому возникает справедливый вопрос,как специалисты по IDS и Firewall'ам могут идентифицировать nmap сканирование.
Это не является простой задачей. Nmap обладает множеством опциий настройки сканирования (их полное описание выходит за рамки данной статьи). Мы рассмотрим только некоторые из них:

-sS This switch performs a SYN scan -sX This switch performs XMAS scan -sF This switch performs a FIN scan -O This switch performs Operating Sysytem detection
Здесь приведен лог сканирования с опцией -sS вместе с (сигнатурой, которую оставляет nmap.
12:19:04.981033 attacker.com > victim.com: icmp: echo request (ttl 40, id 28524) 4500 001c 6f6c 0000 2801 2573 xxxx xxxx xxxx xxxx 0800 e152 16ad 0000 12:19:04.981207 victim.com > attacker.com: icmp: echo reply (ttl 255, id 0) 4500 001c 0000 0000 ff01 bdde xxxx xxxx xxxx xxxx 0000 e952 16ad 0000 12:19:04.981574 attacker.com.58397 > victim.com.www: ack 0 win 3072 (ttl 54, id 47895) 4500 0028 bb17 0000 3606 cbb6 xxxx xxxx xxxx xxxx e41d 0050 5720 0003 0000 0000 5010 0c00 6a41 0000 12:19:04.981687 victim.com.www > attacker.com.58397: R 0:0(0) win 0 (ttl 255, id 1) 4500 0028 0001 0000 ff06 bdcc xxxx xxxx xxxx xxxx 0050 e41d 0000 0000 0000 0000 5004 0000 cd70 0000 12:19:05.065741 attacker.com.58377 > victim.com.1531: S 1899041970:1899041970(0) win 3072 (ttl 54, id 22525) 4500 0028 57fd 0000 3606 2ed1 xxxx xxxx xxxx xxxx e409 05fb 7131 14b2 0000 0000 5002 0c00 35f8 0000 12:19:05.065924 victim.com.1531 > attacker.com.58377: R 0:0(0) ack 1899041971 win 0 (ttl 255, id 2) 4500 0028 0002 0000 ff06 bdcb xxxx xxxx xxxx xxxx 05fb e409 0000 0000 7131 14b3 5014 0000 41e5 0000 12:19:05.066228 attacker.com.58377 > victim.com.522: S 1899041970:1899041970(0) win 3072 (ttl 54, id 45591) 4500 0028 b217 0000 3606 d4b6 xxxx xxxx xxxx xxxx e409 020a 7131 14b2 0000 0000 5002 0c00 39e9 0000
Разберем несколько общих сигнатур.Сначала nmap пингует жертву echo пакетом, чтобы убедиться, что хост жив. Следующая синнатура — одинокий ACK пакет, в котором 32-bit значение поля ACK равно 0, в то время, как значение поля ACK всегда должно быть всегда >1, когда отсылается ACK пакет. Зачем это сделано? Причина для такой установки значения поля ACK проста — "stealth". Почему nmap отошлет в любом случае два ACK пакета? RFC 793 поможет пролить свет на этот вопрос. RFC 793 pp.64 описывает то, как TCP/IP-стек реагирует на специфические пакеты. Эта реакция основана на двух состояниях — Closed и Listen. Когда порт находится в состоянии Closed, работают следущие правила:
• входящие пакеты с установленным RST-флагом отбрасываются.
• ответом на пакет с неустановленным RST-флагом (т.е. SYN, FIN и ACK пакеты) будет RST-пакет.
Когда порт находится в состоянии Listen, работают следущие правила:
• входящие пакеты с установленным RST-флагом отбрасываются;
• ответом на пакет с неустановленным RST-флагом (т.е. SYN, FIN и ACK пакеты) будет RST-пакет.
Если установлен бит SYN, то
• если установление соединения запрещено,то отсылается RST пакет;
• иначе в ответ отсылается SYN|ACK (вторая часть 3-х шагового handshake).
Теперь, зная это, можно заключить, что два ACK пакета отсылаются для проверки на то, что сканируемый хост жив.
Другая общая сигнатура nmap — использование высоких значений для порта источника.Обычно nmap использует в качестве источника порты выше 20000 (это может быть изменено опцией -p). Причина использования таких значений портов в том, что некоторые IDS и firewall не рассматривают входящие пакеты с этих портов как попытки сканирования. В большинстве же случаев большие значения портов источника указывают администраторам IDS и firewall на то, что их сканируют.
-sS — первая опция, которую мы рассмотрим. Nmap c выставленной -sS отсылает SYN пакет(ы) и ожидает ответа. Ответ може быть или SYN|ACK, если порт открыт, или RST|ACK в противном случае. Этот способ сканирования называется "half-scan". 
Таким образом определяется состояние порта (закрыт или открыт). Если nmap посылает пакет на открытый порт,то ответом будет SYN|ACK. Как только это становится так, nmap сразу отвечает RST пакетом, который обрывает соединение и в некоторых случаях в логи на сканируемом хосте ничего не пишется.
Опция -sX включает другой метод сканирования — Xmas tree. Следствием необычной установки флагов (FIN, PSH, URG одновременно) является то, что некоторые плохо сконфигурированные firewall'ы пропускают такие пакеты. Что же происходит странного, если флаги FIN, PSH и URG установлены одновременно? Посмотрим, что делает каждый флаг.
FIN — указание на то, что посылающий хост прекращает передачу данных.
PSH — хост-получатель должен передать данные, содержащиеся в пакете, приложению как можно быстрее.
URG — включает указатель на то, что данные — срочные.

12:07:47.251547 attacker.com > victim.com:
icmp: echo request (ttl 52, id 57064)
4500 001c dee8 0000 3401 a9f6 xxxx xxxx
xxxx xxxx 0800 98d3 5f2c 0000
12:07:47.251720 victim.com > attacker.com:
icmp: echo reply (ttl 255, id 2136)
4500 001c 0858 0000 ff01 b586 xxxx xxxx
xxxx xxxx 0000 a0d3 5f2c 0000
12:07:47.252111 attacker.com.40335 >
attacker.com.www:. ack 0 win 2048 (ttl 53, id 1254)
4500 0028 04e6 0000 3506 82e8 xxxx xxxx
xxxx xxxx 9d8f 0050 1b98 0003 0000 0000
5010 0800 f057 0000
12:07:47.252225 victim.com.www >
attacker.com.40335: R 0:0(0) win 0 (ttl 255, id 2137)
4500 0028 0859 0000 ff06 b574 xxxx xxxx
7f00 0001 0050 9d8f 0000 0000 0000 0000
5004 0000 13ff 0000
12:07:47.336218 attacker.com.40315 >
victim.com.824: FP 0:0(0) win 2048 urg 0 (ttl 53, id 43059)
4500 0028 a833 0000 3506 df9a xxxx xxxx
xxxx xxxx 9d7b 0338 0000 0000 0000 0000
5029 0800 0906 0000
12:07:47.336392 victim.com.824 >
attacker.com.40315: R 0:0(0) ack 0 win 0 (ttl 255, id 2138)
4500 0028 085a 0000 ff06 b573 xxxx xxxx
xxxx xxxx 0338 9d7b 0000 0000 0000 0000
5014 0000 111b 0000

Короче говоря, комбинация FIN, PSH, URG говорит, что надо разорвать соединение, переслать данные в пакете как можно скорее и поместить их в обычный поток данных. Из моего опыта это, как правило, не имеет смысла (пока вы не пытаетесь сканировать сети). Таким образом следующая сигнатура nmap (при использованиии опции Xmas) — urgent pointer всегда установлен в 0.
Наконец, посмотрим на опцию -sF в паре с -O. Опция -sF — сканирования хоста в сочетании с пакетами с установленным флагом FIN.-O — знаменитая опция ОС fingerprinting (подробности о техниках удаленного определения ОС, в т.ч. и с помощью nmap`ов в "СР" №9(10) за 2000 г.). Перед компиляцией бинарника nmap посмотрите на файл figerprinting. Это впечатляющая коллекция TCP/IP сигнатур ОС,которая действительно изумила меня. Приведенный ниже лог демонстрирует -sF сканирование в сочетании с опцией -O:
11:00:09.360631 attacker.com.49044 > victim.com.219: F 0:0(0) win 4096 (ttl 59, id 45102) 11:00:09.361056 attacker.com.49044 > victim.com.48: F 0:0(0) win 4096 (ttl 59, id 30876) 11:00:12.820777 attacker.com.49051 > victim.com.sunrpc: S 561959278:561959278(0) win 4096 <wscale 10,nop,mss 265,timestamp 1061109567 0,eol> (ttl 59, id 11173) 11:00:12.821526 victim.com.sunrpc > attacker.com.49051: S 2988831197:2988831197(0) ack 561959279 win 16165 <mss 265,nop,nop, timestamp 2872982 1061109567,nop,wscale 0> (DF) (ttl 64, id 3059) 11:00:12.821923 attacker.com.49052 > victim.com.sunrpc: . win 4096 <wscale 10,nop,mss 265,timestamp 1061109567 0,eol> (ttl 59, id 25812) 11:00:12.822090 attacker.com.49053 > victim.com.sunrpc: SFP 561959278:561959278(0) win 4096 urg 0 <wscale 10,nop,mss 265,timestamp 1061109567 0, eol> (ttl 59, id 10538) 11:00:12.822519 attacker.com.49054 > victim.com.sunrpc: . ack 0 win 4096 <wscale 10,nop,mss 265,timestamp 1061109567 0, eol> (ttl 59, id 36725) 11:00:12.822795 attacker.com.49055 > victim.com.34459: S 561959278:561959278(0) win 4096 <wscale 10,nop,mss 265,timestamp 1061109567 0, eol> (ttl 59, id 36400) 11:00:12.823071 attacker.com.49056 > victim.com.34459: . ack 0 win 4096 <wscale 10,nop,mss 265,timestamp 1061109567 0,eol> (ttl 59, id 46890) 4500 003c b72a 0000 3b06 ca8f xxxx xxxx xxxx xxxx bfa0 869b 217e d16e 0000 0000 a010 1000 81fb 0000 0303 0a01 0204 0109 080a 3f3f 3f3f 0000 0000 0000 11:00:12.823347 attacker.com.49057 > victim.com.34459: FP 561959278:561959278(0) win 4096 urg 0 <wscale 10,nop,mss 265,timestamp 1061109567 0, eol> (ttl 59, id 733) 4500 003c 02dd 0000 3b06 7edd xxxx xxxx xxxx xxxx bfa1 869b 217e d16e 0000 0000 a029 1000 81e1 0000 0303 0a01 0204 0109 080a 3f3f 3f3f 0000 0000 0000 11:00:12.823642 atttacker.com.49044 > victim.com.34459: udp 300 (ttl 57, id 60791) 4500 0148 ed77 0000 3911 952b xxxx xxxx xxxx xxxx bf94 869b 0134 40db 6060 6060 6060 6060 6060 6060 6060 6060 6060 6060 6060 6060 6060 6060 6060 6060 6060 6060 11:00:12.823746 victim.com > attacker.com: icmp: victim.com udp port 34459 unreachable [tos 0xc0] (ttl 255, id 3067) 45c0 0164 0bfb 0000 ff01 afdb xxxx xxxx xxxx xxxx 0303 fc44 0000 0000 4500 0148 ed77 0000 3911 952b 7f00 0001 7f00 0001 bf94 869b 0134 40db 6060 6060 6060 6060
1. если порт закрыт,и посылается FIN пакет ответом будет RST.
2. если порт открыт,то FIN будет просто отброшен и ответа не последует.
Этот метод рассчитан на уязвимость очень ограниченного числа IDS и firewall, поскольку только немногие следят исключительно за FIN|ACK пакетами, не обращая внимания на просто FIN-пакеты.

Queso(by savage@apostols.org)
Хотя queso не столь популярен и отточен как nmap, он все еще представлляет определенный интерес, и, соответсвенно, существует необходимость в анализе его работы. Обычно он отсылает 7 пакетов за раз,что указано в файле документации. Эти пакеты следущие: Queso позволяет спуфить IP,выбирать порты для сканирования а также сам случайно выбирает в качестве порта источника значения от 4000 до 65000.Следующий лог показывает как выглядит скан queso:
17:24:43.328743 attacker.com.19909 > victim.com.sunrpc: S 1567977113:1567977113(0) win 4660 (ttl 255, id 51246) 4500 0028 c82e 0000 ff06 6095 xxxx xxxx xxxx xxxx 4dc5 006f 5d75 6e99 0000 0000 5002 1234 f05f 0000 17:24:43.352137 attacker.com.19910 > victim.com.sunrpc: S 1567977113:1567977113(0) ack 0 win 4660 (ttl 255, id 51247) 4500 0028 c82f 0000 ff06 6094 xxxx xxxx xxxx xxxx 4dc6 006f 5d75 6e99 0000 0000 5012 1234 f04e 0000 17:24:43.370082 attacker.com.19911 > victim.com.sunrpc: F 1567977113:1567977113(0) win 4660 (ttl 255, id 51248) 4500 0028 c830 0000 ff06 6093 xxxx xxxx xxxx xxxx 4dc7 006f 5d75 6e99 0000 0000 5001 1234 f05e 0000 17:24:43.390301 attacker.com.19912 > victim.com.sunrpc: F 1567977113:1567977113(0) ack 0 win 4660 (ttl 255, id 51249) 4500 0028 c831 0000 ff06 6092 xxxx xxxx xxxx xxxx 4dc8 006f 5d75 6e99 0000 0000 5011 1234 f04d 0000 17:24:43.410079 attacker.com.19913 > victim.com.sunrpc: SF 1567977113:1567977113(0) win 4660 (ttl 255, id 51250) 4500 0028 c832 0000 ff06 6091 xxxx xxxx xxxx xxxx 4dc9 006f 5d75 6e99 0000 0000 5003 1234 f05a 0000 17:24:43.430076 attacker.com.19914 > victim.com.sunrpc: P win 4660 (ttl 255, id 51251) 4500 0028 c833 0000 ff06 6090 xxxx xxxx xxxx xxxx 4dca 006f 5d75 6e99 0000 0000 5008 1234 f054 0000 17:24:43.450082 attacker.com.19915 > victim.com.sunrpc: S 1567977113:1567977113(0) win 4660 (ttl 255, id 51252) 4500 0028 c834 0000 ff06 608f xxxx xxxx xxxx xxxx 4dcb 006f 5d75 6e99 0000 0000 50c2 1234 ef99 0000
В логе присутсвуют все 7 пакетов. Первая сигнатура — одинокий FIN пакет. Что же вызывает появление этих пакетов, если еще не было установлено соединения и FIN не содержит ACK? В то время как установление соединения TCP — 3-x шаговый процесс, разрыв -является 4-х шаговым и выглядит так:
Computer AFIN|ACK->Computer B Computer BACK->Computer A Computer BFIN|ACK->Computer A Computer AACK->Computer B
Здесь мы видим установленный PSH-флаг. Это может вызвать удивление, так как в TCP PSH-флагу должен сопутствовать ACK флаг (пока соединение установлено). Мы видим, что queso устанавливает SYN|FIN флаги, которые указывают хосту-получателю, что необходимо открыть и сразу же закрыть соединение.
n/a n/a urg ack psh rst svn fin 8 4 2 1 8 4 2 1
Cамая интересная сигнатура, которую отсылает queso — один SYN пакет, в котором установлены зарезервированные биты.Табл. 5 показывает как выглядит 13 байт в TCP заголовке. Последние 2 бита слева (помеченные n/a -not available) — зарезервированы и, соответсвенно, не должны быть установлены.
Теперь уже просто установить, что если вы видите значение "c2" в 13 байте TCP заголовка, то кто-то имееет злые (или просто любознательные — прим.ред.) намерения относительно вашей сети.

Toby Miller,
SYTEX Inc., Пенсильвания
Автор имеет сертификат GIAC (Certified Intrusion Analyst) и Microsoft Certified Professional и обладает большим опытом администрирования NT,Unix, firewall и мэйнфреймов.


Сетевые решения. Статья была опубликована в номере 01 за 2001 год в рубрике save ass…