Stealth-сканирование портов

Pavel Martinov aka kurt

Xakep, номер #060, стр. 060-078-3


Программа посылает FIN флаг. Далее, если в течение некоторого времени в ответ ничего не приходит, значит, порт открыт. По такому же принципу работают Xmas Tree (nmap -sX) и NULL (nmap -sN) сканы. Только в первом случае используются флаги FIN/URG/PSH, а во втором их нет вообще. К сожалению (или к радости), здесь есть свой подводный камень - разработчики из Мелкософта опять пошли не по стандарту, и их детище не ответит в любом случае ;(. Такой вот у них TCP/IP стек. Также не ответят еще несколько UNIX-like систем, например, Cisco IOS и HP/UX.

FTP bounce attack

В доках FTP-протокола (RFC 959) описана одна интересная возможность поддержки "доверенных" ftp-соединений. Фишка заключается в том, что через ftp-сервер можно отправлять любые файлы любому IP-адресу (подробнее об этом можно прочитать в Х 04.02):

Лог ftp-соединения

user ftp

pass -anonymous@

type i

port a, b, c, d, z, x

retr some.file.gz

quit

где:

a, b, c, d - IP жертвы, в котором октеты разделяются через запятую, а не через точку;

z, x - нужный порт, высчитываемый по формуле z * 256 + x;

Например, чтобы отправить какой-либо файл на другой сервер с IP-адресом 192.168.55.1 на 21 порт нужно воспользоваться следующей командой:

port 192,168,55,1,0,21

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

UDP scan

С UDP-сканом все гораздо проще. У него есть всего один способ сканирования: посылаешь любую датаграмму (пакет) в порт. Если этот порт закрыт, то возвратится сообщение «Destination Port Unreachable». Если же он открыт, то просто ничего не вернется. На практике этот способ скана используется довольно редко, т.к. практически все сервисы переползли на TCP-протокол. Остались лишь самые ленивые.

Что же выбрать?

На сегодняшний день самый популярный способ скана – SYN-сканирование. Это самый шустрый метод из всех рассмотренных. По скорости он ничем не отличается от обычного connect() скана. Единственный его минус – это обязательное наличие root прав в системе. Если их нет, то пропадает всякая возможность проведения stealth-сканирования.

Можно воспользоваться и FIN/NULL-сканом, но здесь скорость сканирования будет несколько ниже, чем у SYN. Это вызвано тем, что приходится ожидать timeout’а для каждого порта. Частично эта проблема лечится созданием отдельных потоков для каждого сканируемого порта. Еще один минус - нельзя сканировать win-тачки, т.к. у них свой способ реализации TCP/IP стека. Зато этот способ меньше палится на серверах, в отличие от того же SYN. Так что выбор за тобой.

Собственно, это все, что я хотел рассказать про способы сканирования портов. За бортом, правда, осталось описание реализации программной части stealth-скана. Так что если ты хочешь накодить свой супер порт-сканер, то бери какую-нибудь книжку по сетевому программированию, скачивай сорсы nmap и вперед на изучение raw socket’ов. Это интересная и увлекательная тема :).

Матрица 2

Если ты смотрел вторую Матрицу, то, наверное, заметил, что Тринити использовала сканер nmap для взлома электростанции. Вот так вот сетевые разработки попадают в многомиллионные блокбастеры :).

Назад на стр. 060-078-2  Содержание  Вперед на стр. 060-078-4