Даже не знаю, что можно написать во вступлении к этой статье. Скорее всего, ничего писать и не надо - и так всем понятно, что nmap - самая большая рыба в водоеме сканирования удаленных сетей и машин. Это самый мощный на сегодняшний день сканер! Кроме того, он постоянно поддерживается и совершенствуется. Разработчик (некто Fyodor) не просто написал тулзу и выкинул ее в народ, а очень тщательно следит за проектом, все время выкладывая новые версии. Прога настолько качественная, что многие дистрибутивщики включили ее в поставки своих линей. Не имея под рукой nmap'а, лучше вообще никуда не соваться.
КАЧАЕМ И СТАВИМ
Совсем недавно была зарелизена новая версия nmap - 3.00. Именно ее я и предлагаю скачать и установить. В комплекте твоего Linux'а, скорее всего, окажется пакет с nmap'ом, но лучше качнуть последнюю версию, так как у нее, наверняка, обновлена база OS fingerprints, что позволит тебе при сканировании идентифицировать самые свежие ОСи, например, Windows XP или Mac OS X.
Думаю, у тебя с этим проблем не должно возникнуть, так как все порядочные хацкеры на своих домашних машинах всегда сидят под рутом :) (по этому поводу можно очень долго спорить, но мое личное мнение сложилось окончательно уже очень давно - если ты работаешь не за каким-нибудь серваком, то под рутом можно и нужно сидеть, и ничего опасного/плохого в этом нет). После выполнения последней команды, nmap установится в директорию бинарников, и его можно будет запустить из любого места, просто набрав в командной строке "nmap".
ЮЗАЕМ
Если вызвать nmap без параметров (просто вбацать в командной строке "nmap" и нажать Enter), сканер просто выведет на экран свой Help Screen - укороченный вариант справки с описанием возможных ключей и параметров. Чтоб сканер начал работать, ему надо передать хотя бы один параметр - ip-адрес, который надо просканировать. Давай для начала отсканим самих себя:
nmap 127.0.0.1
Вот что выдает прога (скрин 1). В первой строке прога пишет информацию о себе и дает ссылку н свою домашнюю страничку. Если это тебя очень сильно раздражает, можешь найти в исходниках эту строчку, удалить ее на фиг (или закомментировать) и повторить еше раз процедуру сборки/установки - больше ты этой строки никогда не увидешь. Чувствуешь преимущества Open Source софта ;)? Кто бы тебе в винде позволил поступить таким хамским образом? Ладно, поехали дальше: во второй строке nmap лишний раз заботливо поясняет, какой хост/ip'шник был только что посканен, а в третьей - выводит количество просканеных по этому адресу, но закрытых портов - авось пригодится. А дальше начинается самое интересное - перечисление открытых портов. Как видишь, на моей машине их не так много: ssh, smtp, сервис Sun Remote Procedure Call и X Window System. В последней строке сканер сообщает, сколько ip'шников было просканено и сколько на это ушло времени. Это был самый простой пример - перейдем к более сложным. Чтоб узнать, чего еще умеет nmap, запусти его без параметров и посмотри на пресловутый Help Screen: (скрина не будет:)
nmap
В первую очередь сканер сообщает, каким образом можно передавать ему параметры (скрин 2). Перевожу:
nmap [Тип/типы сканирования] [Опции] [хост/хосты]
В юникс принято обозначать параметры запуска следующим образом: все что в квадратных скобках - это необязательные (опциональные) поля, в угловых - переменные. Чем они отличаются? В переменных полях ты сам решаешь, что туда вставлять - в данном случае ты выбираешь хост/хосты для сканирования. А в опциях, например, ты можешь либо что-нибудь вставлять, либо нет, но если будешь вставлять, то только заранее определенные значения. Какие же это значение для nmap? А вот они, в том же Help Scree, только чуть ниже. Типы сканирования могут быть следующими:
-sS: TCP SYN сканирование
-sT: TCP-сканирование соединением
-sF: TCP FIN сканирование
-sX: TCP Xmas сканирование
-sN: TCP Null сканирование
-sR: TCP RPC сканирование
-I: Ident-сканирование
-sU: UDP-сканирование
-sP: Ping-сканирование
Обо всех этих типах сканирования, кроме последнего, ты можешь узнать подробнее из соответствующей статьи в этом же номере :). А о последнем не узнаешь, так как это не сканирование портов - это сканирование сети (либо просто сразу нескольких компов) на работающие тачки. Грубо говоря, обычный пинг - скармливаем nmap'у ip'шники какой-нибудь сети, и он начинает их пинговать, что определить, на каких из них есть работающие тачки, а на каких - нет. Если ты путаешься в понятиях сканирования портов и сканирования сетей, глянь в рубрику "Биты" - там об этом как раз пишут ;). Ок, вернемся к нашему сканеру. Видешь, он пишет, что для большинства типов сканирования необходимы права рута. Если запускать сканер под рутом, он по дефолту будет юзать продвинутый scan type TCP SYN, а если пускать под обычным юзером - будет юзаться тормозной и легко обнаруживаемый тип сканирования: TCP-сканирование соединением. Ок, с типами сканирования разобрались - перейдем к опциям. А они следующие:
-O: Эта опция включает функцию определения ОС, под которой живет сканируемый комп (и об этом можно почитать в этом номере Спеца - прим. ред.);
-p [диапазон]: Опция с переменным параметром, позволяет задать диапазон портов для сканирования. Пример диапазона прилагается;
-F: Запрещает nmap'у сканировать какие-либо порты, кроме тех, что есть в его списке (nmap services);
-v: Выдает более подробную информацию. Если вбить эту опцию два раза, инфа будет в два раза подробнее :);
-P0: Запрещает пинговать сканируемые хосты, применяется к хостам, о которых известно, что на пинг они не отвечают, но тем не менее не находятся в дауне;
-T: Определяет политику временных параметров;
-n: Запрещает производить DNS-преобразование;
-R: Всегда производить DNS-преобразование;
-oN [logfile]: Вывод результатов не на экран, а в файл. Очень удобно – всегда можно посмотреть;
-oX [logfile]: Вывод результатов в файл в XML-формате;
-oG [logfile]: Вывод результатов в файл в формате grep-совместимом формате (позволяет производить хитрый поиск по файлу);
-iL [inputfile]: Брать хосты/IP для сканирования из файла. Для тех случаев, когда приходится сканировать огромное количество хостов или ip'шников;
-S [your_IP]: Позволяет явно указать свой IP;
-e [devicename]: Позволяет явно указать сетевой интерфейс;
--interactive: работать в интерактивном режиме. На самом деле неудобно – намного быстрее задавать все параметры в командной строке, но если ты их пока плохо знаешь...
Вот, в общем-то, и все, что надо знать, чтоб эффективно юзать nmap. (все очень просто: вбиваем "nmap", выбираем тип сканирования, включаем если надо какие-либо опции и вперед). Но это далеко не все возможности nmap :)! Введи следующее:
man nmap
и ты увидишь, сколько там еще опций и типов сканирования, не представленных в Help Screen'е (скрин 3).
-sO: Очень важный scan type – позволяет определить, с какими протоколами может работать сканируемы хост.
nmap –sO 127.0.0.1
Как видишь (скрин 4), мой комп поддерживает четыре протокола: icmp, igmp, tcp и udp.
-sI [zombie host[:probeport]]: Тоже очень важная штука, воспользовавшись которой, можно просканировать машину не со своего компа (и не со своего IP), а с какого-нибудь другого.
-sA: TCP ACK сканирование (читай об этом scan type'е в статье про методы сканирования).
-sW: TCP window сканирование.
-sL: Просто выводит список вида "имя_домена(ip)", не сканируя хосты.
-PT: Еще одна очень удобная фишка – позволяет пинговать хосты (определять, живы они или нет) средствами TCP, то есть без icmp. Пригодятся, если icmp-пакеты режутся на файрволе.
-PB: Пингует хост одновременно и средствами ICMP, и TCP.
-f: Включает зло-фрагментацию пакетов при SYN, FIN, Xmas и Null scan type'ах. Фрагментация – это разбиение пакетов на несколько маленьких частей. Фишка в том, что сильно фрагментированный заголовок пакета может проскочить через фильтры файрвола.
-oS [logfile]: Это прикол :))))))! Я протащился. Попробуй эту фишку, а потом открой и посмотри logfile.
-g: Позволяет явно указать свой порт.
На самом деле, и это еще не все – всяких опций еще куча, но остальные уж очень специфические (например, как указание количества допустимых параллельных запросов и тд). Лучше их не трогать, так как забьешь голову лишним мусором, а самое важно не запомнится :). Главное – знать основы, а когда понадобятся всякие мелочи.., тогда до них и следует докапываться ;).
SCAN COMPLETE
Вот и все. Этого достаточно, чтобы научиться пользоваться самым мощным на сегодняшний день сканером. Кстати, если у тебя нет линя и ты по каким-то причинам не хочешь его себе ставить, можешь поюзать nmap под винды. Долгое время Fyodor не мог найти людей, которые помогли бы ему с портированием nmap'а на маздайную платформу, но вот, наконец, свершилось. Теперь рулезный сканер доступен и для виндовых юзеров :). Ну, если ситуация такая, что линя вообще - ну ни как! – под рукой нет, то можно, наверное, воспользоваться и виндовым nmap'ом, но я бы все равно рекомендовал использовать родную nix'овую версию :))). Удачи тебе в твоих сетевых исследованиях!