Также во время определения ОС делается попытка узнать время работы целевой машины. С помощью временных меток (timestamp) TCP (RFC 1323) Nmap пробует угадать, когда машина была перезагружена в последний раз. Информация может быть не точна, т.к. счетчик временной метки не был обнулен или был переполнен, или каким-то образом скрыт. Информация выводится только в вербальном режиме.
Бумажная документация по работе, использованию и настройки опции определения ОС находится наhttps://nmap.org/book/osdetect.html.
Функция определения ОС включается и управляется с помощью следующих опций:
-O (Включить определение ОС)
Включает фукнцию определения ОС, работа которой описана выше. Вы также можете использовать опцию -A, которая помимо других функций включает определение ОС.
--osscan-limit (Использовать функцию определения ОС только для "перспективных" хостов)
Функция определения ОС намного более эффективна, если обнаружены, по крайней мере, один открытый и один закрытый TCP порты. Задайте эту опцию, и Nmap не будет даже пытаться определить ОС хостов, не удовлетворяющих этому критерию. Это поможет сэкономить массу времени, особенно при -PN сканирование многих хостов. Эта опция будет действовать только при включении функции ОС путем задания опций -O или -A.
--osscan-guess; --fuzzy (Угадать результаты определения ОС)
Когда Nmap не в состоянии определить точное совпадение, она иногда предоставляет наиболее близкие к результатам сканирования совпадения. Чтобы Nmap сделала это по умолчанию, совпадения должны быть очень близки. Любая их этих (равных) опций побуждает Nmap к более агрессивному анализу результатов. Nmap по-прежнему будет сообщать, когда будет найдено не идеальное совпадение, а также отображать степень соответствия (в процентах) для каждого набора характеристик.
--max-os-tries (Устанавливает максимальное количество попыток определения ОС)
Когда Nmap пытается определить ОС на целевом хосте и не может найти идеального соответствия результатов, то она обычно повторяет попытку. По умолчанию, Nmap совершает пять попыток при условии, что существуют благоприятные условия для определения ОС, и дважды - в противном случае. Задание более низкого значения --max-os-tries (напр. 1) увеличивает скорость работы Nmap, однако вы пропускаете некоторые записи, с помощью которых, возможно, можно было бы определить ОС. Большое значение может быть задано для разрешения большего количества попыток при благоприятных условиях. Это делается редко, за исключением тех случаев, когда необходимо сгенерировать более детальный набор характеристик ОС для занесения в базу данных Nmap.
Скриптовый движок Nmap(NSE - Nmap Scripting Engine)
Скриптовый движок Nmap (NSE) это одна из наиболее мощных и гибких возможностей Nmap. Он позволяет пользователям писать (и делиться ими) простые скрипты (используя язык программирования Lua, ) для автоматизации широкого круга сетевых задач. Эти скрипты выполняются со скоростью и эффективность ожидаемой вами от Nmap. Пользователи могут использовать разнообразный и постоянно расширяющийся набор скриптов, которые поставляются вместе с Nmap, или написать свои скрипты под свои собственные нужды.
Когда мы создавали эту систему, считалось, что она будет использоваться для задач исследования сети, более изощренного варианта определения версии, исследования уязвимостей. NSE может быть использован даже для обнаружения уязвимостей.
Чтобы отразить все многообразие возможностей использования скриптов и при этом упростить выбор необходимого скрипта, каждый из них содержит поле, где указано к какой категории он принадлежит. Сейчас определены следующие категории: safe,(intrusive), malware, version, discovery, vuln, auth и default. Все они описаны в https://nmap.org/book/nse-usage.html#nse-categories.
Скриптовый движок Nmap детально описан на https://nmap.org/book/nse.html и настраивается с помощью следующих опций:
-sC
Осуществляет сканирование на основе скриптов. Эквивалентно опции --script=default. Некоторые их применяемых здесь скриптов относятся к категории intrusive (навязчивые) и не должны быть использованы для сканирования целевой сети без разрешения.
--script <категории-скриптов>|<директория>|<имя_файла>|all
Осуществляет сканирование на основе скриптов (как -sC) используя разделенный запятыми список категорий скриптов, отдельных файлов скриптов или директорий содержащих скрипты вместо стандартного набора скриптов. Сначала Nmap пытается интерпретирует все аргументы как категории, затем (в случае неудачи) как файлы или директории. Файл скрипта или директория скриптов могут быть определены с использованием абсолютного или относительного пути. Абсолютные пути используются так, как вы их зададите. Относительные пути будут определяться относительно: --datadir/; $NMAPDIR/; ~/.nmap/(не используется в Windows); NMAPDATADIR/ или ./. Также все эти папки будут проверяться на наличие поддиректории scripts/
Если вы определили директорию со скриптами, и она была найдена, то Nmap загружает все NSE скрипты (все файлы с расширением .nse) из этой директории. Файлы без расширения nse игнорируются. Nmap не производит рекурсивный поиск скриптов во всех поддиректориях. Если вы указываете конкретный файл, то его расширение не обязательно должно быть nse.
По умолчанию скрипты Nmap хранятся в папке scripts - поддиректории основного каталога Nmap. Для большей производительности, все скрипты проиндексированы в базе данных scripts/script.db, где указано к какой категории или категориям принадлежит каждый скрипт. Для исполнения всех скриптов из базы данных Nmap задайте атрибут all.
Злонамеренные скрипты запускаются не в "песочнице" (sandbox) и поэтому могут повредить вашу систему или нарушить вашу анонимность. Никогда не используйте скрипты от третьих лиц до тех пор, пока не будете доверять автору или сами тщательно просмотрите скрипт.
--script-args <имя1>=<значение1>, <имя2>={<имя3>=<значение3>}, <имя4>=<значение4>
Позволяет вам передавать аргументы NSE скриптам. Аргументы передаются как пары имя=значение. Передаваемый аргумент обрабатывается и хранится в Lua таблице, к которой имеют доступ все скрипты. Имена передаются как строки (должны быть буквенно-цифровыми значениями) и используются в качестве ключей в argument-table. Значения могут быть также строками или в свою очередь таблицами (заключенными в ‘{’ и ‘}’). Такие подтаблицы позволяют переопределить аргументы для конкретных скриптов (например, если вы хотите предоставить различным скриптам различные пары login/password). Например, вы можете определить аргументы через запятые: user=bar, password=foo и anonFTP={password=nobody@foobar.com}. Если вы хотите переопределить опцию для скрипта, вы должны проиндексировать подтаблицу с помощью id скрипта, т.к. это единственный способ указать скрипту на наличие специального аргумента.
--script-trace
Эта опция делает то же самое, что и --packet-trace, но на один ISO уровень выше. Если задана эта опция, то все входящие и исходящие соединения, осуществляемые скриптом, выводятся на экран. Выводимая информация включает в себя используемый коммуникационный протокол, источник, цель и переданные данные. Если более 5% переданных данных невозможно вывести на экран, то вывод будет представлять собой шестнадцатеричный (hex) дамп.
--script-updatedb
Этой опцией обновляется база скриптов scripts/script.db, которая используется Nmap для определения доступных скриптов по умолчанию и их категорий. Обновлять базу необходимо, только если вы добавили или удалили NSE скрипты из директории scripts, или поменяли категорию какого-нибудь скрипта. Эта опция обычно используется без аргументов: nmap --script-updatedb.
Опции управления временем и производительностью
Наиболее приоритетной стороной развития Nmap для меня всегда была производительность. Сканирование по умолчанию (nmap <имя_хоста>) какого-либо хоста в моей локальной сети занимает пятую долю секунды. Этого едва хватает, чтобы моргнуть, но становится существенным, когда вы сканируете сотни или тысячи хостов. Более того, некоторые типы сканирования, как например, UDP или сканирование с целью определения версии могут в значительной степени увеличить время сканирования. Этому также могут поспособствовать настройки некоторых брандмауэров, где есть ограничения на количество ответов. Хотя в Nmap используются параллелизм и различные продвинутые алгоритмы для уменьшения времени сканирования, у пользователя есть возможность полностью контролировать работу программы. Опытные пользователи Nmap задают команды таким образом, чтобы получать только необходимую им информацию и в удовлетворяющие им сроки.
Способами увеличения скорости сканирования могут быть пропуск не критичных тестов, или обновление Nmap до последней версии (улучшения производительности выходят довольно часто). Оптимизация параметров опций управления временем также может значительно повлиять на скорость сканирования. Эти опции описаны ниже.
Некоторые опции могут принимать параметр время. По умолчанию он задается в миллисекундах, но вы можете добавить ‘s’, ‘m’ или ‘h’ к значению, чтобы задать его в секундах, минутах или часах. Поэтому для опции --host-timeout аргументы 900000, 900s и 15m означают одно и то же.
--min-hostgroup <количество_хостов>; --max-hostgroup <количество_хостов> (Регулирует размер групп для параллельного сканирования)
В Nmap есть возможность осуществлять сканирование портов или сканирование с целью определения версии нескольких хостов параллельно. Это происходит путем разделения целевого IP пространства на группы, а затем сканирования одной группы за раз. В общем случае целесообразно использовать большие группы. Недостатком является то, что вы не можете узнать информацию о каком-либо хосте, пока не закончится сканирование всей группы. Таким образом, если Nmap начнет сканирование группы из 50-ти хостов, то пользователь не будет получать никакой информации (кроме обновлений информации предлагаемых в вербальном режиме), пока не будет завершено сканирование всех 50-ти хостов.