Инструменты и методология анализа пакетов (Часть 1)
Сканеры портов и типы сканирования
Когда кто-то думает об Интернете, сразу приходят на ум несколько вещей. В первую очередь это, вероятно, спам, но на втором месте — бесконечные сканирования портов. Эти бесконечные сканирования портов также являются одной из самых непонятных вещей для всех, кроме опытных аналитиков по сетевой безопасности. На самом деле у среднего компьютерного энтузиаста нет особых причин изучать все тонкости сканирования портов и стимулирования TCP/IP. Однако в их интересах понять различные типы сканирования и понять, что такое сканирование и что оно означает.
На форумах www.security-forums.com нас часто спрашивают об этих вредоносных сканированиях портов. Новые пользователи компьютеров часто впадают в панику, когда их брандмауэр запускает предупреждение, такое как «попытка подключения к субседьмому порту 27374» и тому подобное.
Встречайте тяжеловесов!
Практически в каждой области деятельности есть продукты, которые выделяются среди других. Мир компьютерной безопасности/хакерства не является исключением из этого явления. Когда дело доходит до инструментов для компьютерной безопасности, Linux по-прежнему правит морем. Нет никаких сомнений в том, что Windows по-прежнему остается де-факто предпочтительной операционной системой для компьютерных сетей. Понимая это, нужно попытаться использовать лучшее из обоих миров. Имея это в виду, некоторые из самых популярных инструментов безопасности на базе Linux были перенесены в среду win32. Наиболее заметным среди них является бесспорный король сетевых сканеров nmap. Еще один тяжеловесный сканер портов — это hping. Основное различие между ними заключается в том, что nmap может сканировать диапазон IP-адресов, в то время как hping может сканировать только один отдельный IP-адрес. Мне нравится сравнивать их как «палаш с рапирой». В то время как nmap может сканировать диапазоны IP-адресов, hping гораздо незаметнее, но может сканировать только один IP-адрес за раз. Подробнее о скрытности позже. Еще один сетевой сканер, достойный упоминания, — superscan. Хотя superscan не так функционален или полнофункционален, как nmap, тем не менее, это хороший сканер. Последнее замечание об этих сканерах; убедитесь, что вы установили зависимости. Все эти сканеры, независимо от того, находятся ли они в win32 или linux, требуют для работы соответственно winpcap или libpcap.
Хватит разговоров, больше дела!
Что ж, теперь, когда мы представили основных игроков, пора переходить к делу. Что мы будем делать, так это использовать hping для документирования на пакетном уровне различных типов сканирований, которые вы можете или реально вероятно увидите в своей сети. Хотя я буду вести хронику синтаксиса команды для hping, я не буду тратить на это много времени. Для этого есть много отличных руководств. Мы покажем основные типы сканирования, используемые сегодня всеми без исключения; сканирование syn, первое сканирование, сканирование ack и сканирование udp. Хотя это не исчерпывающий список, он охватывает наиболее часто встречающиеся. Недостаточно просто читать об этих вещах, очень важно также визуализировать их. Имея в руках этот оператор, я создам определенный тип сканирования, а также покажу его на уровне пакетов.
СИН-сканирование
hping -S 192.168.1.100 -c 1 -p 80
14:08:49.973455 IP (tos 0x8, ttl 64, id 64574, смещение 0, флаги [нет],
длина: 40) 192.168.1.102.2640 > 192.168.1.100.80: S [сумма TCP в порядке]
1104445670:1104445670(0) победа 512
0x0000: 4508 0028 fc3e 0000 4006 fa6e c0a8 0166 E..(.>[email protected]…f
0x0010: c0a8 0164 0a50 0050 41d4 80e6 4ad4 27ec …dPPA…J.'.
0x0020: 5002 0200 e9ac 0000 P…….
SYN, возможно, является одним из самых распространенных сегодня сканирований. Выполнение такого сканирования даст вам определенный ответ относительно того, прослушивает ли служба определенный порт. Если есть такая служба, как, скажем, HTTP, прослушивающая порт 80, это вызовет SYN/ACK. Этот ответ будет означать, что действительно что-то прослушивает этот порт для подключения к нему. И наоборот, если ваш SYN привел к RST/ACK, это будет означать, что на целевом порту нет прослушивающей службы.
RST-сканирование
hping -R 192.168.1.100 -c 1 -p 80
19:54:57.669980 192.168.1.102.1239 > 192.168.1.100.80: R 1975237774:1975237774(0) победа 512
0x0000 4500 0028 890e 0000 4006 00bf xxxx xxxx E..(…[email protected]….r.|
0x0010 xxxx xxxx 04d7 0050 75bb bc8e 631c a4e4.r……r…c….
0x0020 50 04 0200 7dbb 0000 P…}..
У нас есть сканирование RST. Это будет сканирование, при котором в байте флагов TCP установлен только бит RST. Этот конкретный байт будет иметь смещение 13 в заголовке TCP. Помните, что начинать отсчет следует с 0. В данном случае это будет байт 04 в строке 00×0020. Вы можете видеть, что представленное здесь значение равно 04 в шестнадцатеричном виде, что также равно четырем в десятичном виде. Это числовое значение обозначает флаг RST в поле флага TCP. Глядя на это поле в будущем, вы всегда будете знать, какие флаги установлены, если таковые имеются.
Для чего используются RST-сканы? Сканирование RST также известно как обратное сопоставление. Этот тип сканирования не так хорошо известен, как SYN-сканирование, показанное выше, но, тем не менее, он очень эффективен. Не только это, но и в значительной степени игнорируется некоторыми системами обнаружения вторжений. Если вы отправите пакет RST для сканирования порта, вы получите одно из двух: нет ответа или пакет ICMP о недостижимости хоста. Если вы не получаете ответа, и под этим я подразумеваю, что вам буквально не отправляется ни один пакет, то это означает, что хост, который вы исследовали, по всей вероятности, запущен и работает. Если вы получите пакет ICMP host unreachable, это означает, что IP-адрес, который вы исследовали, не назначен. Неплохой скан сейчас, не так ли? Довольно подлый, я бы сказал.
ACK сканирование
hping -A 192.168.1.100 -c 1 -p 80
14:14:43.545975 IP (tos 0x8, ttl 64, id 42390, смещение 0, флаги [нет],
длина: 40) 192.168.1.102.2497 > 192.168.1.100.80:. [сумма tcp в порядке] ack
473846278 win512
0x0000: 4508 0028 a596 0000 4006 5117 c0a8 0166 E..(…[email protected]….f
0x0010: c0a8 0164 09c1 0050 1f48 d03f 1c3e 5206 …d…PH?.>R.
0x0020: 5010 0200 c1dc 0000 P…….
То, что у нас есть, известно как сканирование ACK. Каково его использование? Если вы знаете свой TCP/IP, то вы знаете, что он, вероятно, должен иметь ограниченную ценность. Не совсем так. Этот тип сканирования полезен для определения того, какой тип брандмауэра используется в конкретной сети. Под этим я подразумеваю, использует ли брандмауэр SPI или проверку пакетов с отслеживанием состояния. По сути, это означает, что брандмауэр будет отслеживать сеансы по мере их прохождения. Если клиентский компьютер внутри сети запускает свой браузер и, например, отключает домашнюю страницу Google, происходит ряд событий. Брандмауэр запомнит исходный и конечный адрес, а также используемые исходный и конечный порты. Таким образом, будет разрешен только пакет, входящий на IP-адрес клиентских компьютеров (который, по всей вероятности, был nat'ed) и порт источника с соответствующими адресом назначения и портом.
Это отличный способ запретить попытки входящего подключения. Поэтому, если вы отправите пакет ACK в сеть, в которой есть брандмауэр с SPI, он будет просто тихо отброшен. Если сеть или хост не имеют такого брандмауэра, вы получите ответный пакет RST. Это происходит потому, что принимающий его компьютер не знает о таком соединении, поэтому пакет RST отправляется вам обратно.
UDP-сканирование
hping -2 192.168.1.100 -c 1 -p 53
14:27:09.947037 IP (tos 0x10, ttl 64, id 22934, смещение 0, флаги [нет],
длина: 28) 192.168.1.102.2695 > 192.168.1.100.53: [сумма udp в порядке] [|домен]
0x0000: 4510 001c 5996 0000 4011 9d10 c0a8 0166 E…Y…@……f
0x0010: c0a8 0164 0a87 0035 0008 7107 …d…5..q.
Завершает список типов сканирования UDP-сканирование. Это полезно для обнаружения служб на основе UDP, таких как DNS. Если вы отправите UDP-пакет на компьютер, который прослушивает службу, вы ничего не получите в ответ. Если на том же компьютере нет службы, прослушивающей этот порт, вы получите обратно сообщение ICMP о недоступности порта. Довольно изящно, не так ли? Это способ, которым UDP сообщает о таких условиях; через сообщения ICMP. Если вы помните, если бы мы отправили пакет SYN, который является TCP, он бы вызвал пакет RST, если бы служба не прослушивалась.
Последние мысли
Этот тип информации должен быть второй натурой пен-тестера или того, кто интересуется тонкостями TCP/IP. Во-вторых, хотя nmap является очень мощным сетевым сканером, независимо от того, основан он на win32 или linux, он имеет множество сигнатур для обнаружения вторжений. Если вы проводите пентест, где ключом является скрытность, то hping намного лучше из-за его способности отправлять только один пакет за раз или больше, если это необходимо. Это может быть полезно для проверки конфигурации брандмауэра. Наконец, из-за детального контроля, который предлагает вам hping, для него нет известных подписей, о которых я знаю. Прежде чем я забуду, есть еще один отличный создатель пакетов для мира win32; Немезида. Он будет выполнять не только протоколы маршрутизации, но и протоколы маршрутизации. Несмотря на то, что для среды win32 существует множество инструментов, которые помогут вам защитить ваши сети, было бы разумно время от времени копаться в сорняках на уровне пакетов.
- Инструменты и методология анализа пакетов (Часть 4)