Автор: aDm Даже не знаю, что можно написать во вступлении к этой статье. Скорее всего, ничего писать и не надо - и так всем понятно, что nmap - самая большая рыба в водоеме сканирования удаленных сетей и машин. Это самый мощный на сегодняшний день сканер! Кроме того, он постоянно поддерживается и совершенствуется. Разработчик (некто Fyodor) не просто написал тулзу и выкинул ее в народ, а очень тщательно следит за проектом, все время выкладывая новые версии. Прога настолько качественная, что многие дистрибутивщики включили ее в поставки своих линей. Не имея под рукой nmap'а, лучше вообще никуда не соваться.
КАЧАЕМ И СТАВИМ
Совсем недавно была зарелизена новая версия nmap - 3.00. Именно ее я и предлагаю скачать и установить. В комплекте твоего Linux'а, скорее всего, окажется пакет с nmap'ом, но лучше качнуть последнюю версию, так как у нее, наверняка, обновлена база OS fingerprints, что позволит тебе при сканировании идентифицировать самые свежие ОСи, например, Windows XP или Mac OS X.
Сайт проекта находится по адресу http://insecure.org/, а кучнуть последнюю версию сканера можно с нашего сайта - скачать Nmap
После того, как tgz'шник сольется на винт, его надо распаковать командой
gzip -cd nmap-3.00.tgz | tar xvf -
Либо можно его просто открыть в mc и скопировать в каку-нибудь папку. Прога распространяется в виде исходников, поэтому после распаковки ее необходимо скомпилировать. Переходим в папку с свежераспакованными сорцами:
cd ./nmap-3.00
Далее производим стандартную никсовую процедуру сборки/установки:
./configure
make
make install
Последнюю команду нужно выполнить с правами root'а, но, думаю, у тебя с этим проблем не должно возникнуть, так как все порядочные хацкеры на своих домашних машинах всегда сидят под рутом (по этому поводу можно очень долго спорить, но мое личное мнение сложилось окончательно уже очень давно - если ты работаешь не за каким-нибудь серваком, то под рутом можно и нужно сидеть, и ничего опасного/плохого в этом нет). После выполнения последней команды, 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-пакеты режутся на файрволе.
-PI: Пингует хост нормальными ICMP_ECHO-запросами.
-PP: Пингует хост ICMP_TIMESTAMP-запросами.
-PM: Пингует хост ICMP_NETMASK-запросами.
-PB: Пингует хост одновременно и средствами ICMP, и TCP.
-f: Включает зло-фрагментацию пакетов при SYN, FIN, Xmas и Null scan type'ах. Фрагментация – это разбиение пакетов на несколько маленьких частей. Фишка в том, что сильно фрагментированный заголовок пакета может проскочить через фильтры файрвола.
-oS [logfile]: Это прикол :))))))! Я протащился. Попробуй эту фишку, а потом открой и посмотри logfile.
-g: Позволяет явно указать свой порт.
На самом деле, и это еще не все – всяких опций еще куча, но остальные уж очень специфические (например, как указание количества допустимых параллельных запросов и тд). Лучше их не трогать, так как забьешь голову лишним мусором, а самое важно не запомнится :). Главное – знать основы, а когда понадобятся всякие мелочи.., тогда до них и следует докапываться ;).
SCAN COMPLETE
Вот и все. Этого достаточно, чтобы научиться пользоваться самым мощным на сегодняшний день сканером. Кстати, если у тебя нет линя и ты по каким-то причинам не хочешь его себе ставить, можешь поюзать nmap под винды. Долгое время Fyodor не мог найти людей, которые помогли бы ему с портированием nmap'а на маздайную платформу, но вот, наконец, свершилось. Теперь рулезный сканер доступен и для виндовых юзеров :). Ну, если ситуация такая, что линя вообще - ну ни как! – под рукой нет, то можно, наверное, воспользоваться и виндовым nmap'ом, но я бы все равно рекомендовал использовать родную nix'овую версию :))). Удачи тебе в твоих сетевых исследованиях!