Network Performance Monitoring (NPM) and Diagnostics | Application Performance Monitoring (APM) | Application-Aware Network Performance Monitoring (AA NPM) | Network Fault Management | Information Security | Network Security

Руководство по работе со скриптами Nmap Scripting Engine

Для многих из нас, чьи рабочие задачи хотя бы некоторое время были тесно связаны с информационной безопасностью, Nmap давно стал привычным и полезным инструментом. Он также незаменим, как теплое одеяло холодной зимней ночью. За тем лишь исключением, что Nmap — это чертовски эффективное одеяло.

Nmap — это популярный и мощный кроссплатформенный сканер сетевой безопасности, запускаемый из командной строки, с помощью которого вы можете чрезвычайно эффективно провести исследование любой сети. Он также может помочь вам получить обзор систем, которые подключились к вашей сети; вы можете использовать его, чтобы узнать IP-адреса всех «живых» хостов, сканировать открытые порты и сервисы, запущенные на этих хостах, а также многое-многое другое.

Без сомнения, Nmap является самым универсальным сканером портов из существующих ныне. Да, вы можете найти более быстрые сканнеры, но нет ни одного настолько полезного и попросту незаменимого для решения многих-многих ваших задач. И подавляющее большинство профессионалов в области информационной безопасности безапелляционно согласятся с этим утверждением.

Однако гораздо меньше людей знает, что одной из самых интересных особенностей Nmap является возможность использовать скрипты NSE, которые обеспечат вашему любимому инструменту сетевой безопасности еще большую гибкость и эффективность. С их помощью вы сможете делать то, чего даже от такого очень продвинутого сканера портов, как Nmap, вы никак не ожидали получить.

Давайте более детально посмотрим на скрипты NSE, и, возможно, их потенциал сможет приятно вас удивить.

Что такое скрипты NSE?

Что такое скрипты NSE?

NSE расшифровывается как Nmap Scripting Engine (Скриптовый движок Nmap), и его возможности позволяют вам (да, именно вам) написать на программном языке Lua собственную дополнительную функциональность для сканера портов Nmap, а также, при желании, поделиться этими скриптами с другим пользователям Nmap. Таким образом, у вас есть возможность использовать разнообразный и постоянно расширяющийся набор скриптов, которые поставляются вместе с Nmap, либо самостоятельно написать свои скрипты под свои собственные нужды.

Другими словами, помимо стандартной проверки открытых портов сканером Nmap, вы, задействовав NSE, имеете возможность получить также расширенную информацию о сервисах, запущенных на нем. Так, например, с помощью скриптов NSE вы можете провести более глубокий анализ ваших сетевых сервисов и увидеть, насколько правильно они сконфигурированы, какая информация доступна, не используются ли слабые учетные данные и т. д. Фактически, скрипты NSE превращают Nmap в гибкую платформу для взаимодействия с сетевыми сервисами.

Возможности скриптов Nmap Scripting Engine

Команда разработчиков сканера портов Nmap задумывала и создавала скриптовый движок прежде всего для решения таких задач, как:

1. Исследование сети

Это область основного практического применения Nmap. Некоторые скрипты призваны облегчить, оптимизировать и ускорить работу вашего любимого сканера портов. Некоторые примеры их использования включают в себя выполнение таких задач, как:

  • осуществление поиска данных WHOIS (сетевой протокол прикладного уровня, базирующийся на протоколе TCP; его основное применение — получение в текстовом виде регистрационных данных о владельцах доменных имен, IP-адресов и автономных систем) по соответствующим доменам;
  • отправка запросов на основные региональные WHOIS-серверы ARIN (Северная Америка), RIPE (Европа и Ближний Восток) или APNIC (Азия и Тихоокеанский регион) для определения владельца конкретного IP-адреса;
  • identd-поиск на открытых портах (позволяет идентифицировать подключенных к ним пользователей);
  • осуществление запросов по протоколу SNMP (интернет-протокол для управления устройствами в IP-сетях на основе архитектур TCP/UDP);
  • составление списков доступных ресурсов и сервисов через сетевые протоколы для удаленного доступа NFS, SMB или RPC.

2. Более изощренный вариант определения версий

Система Nmap для определения версий сервисов и приложений способна распознать тысячи различных сервисов с помощью зондов и сопоставления сигнатур регулярных выражений, но и она не всемогуща. К примеру, идентификация сервиса Skype v2 требует два независимо работающих друг от друга зонда, чьи возможности по определению версий не отличаются высокой гибкостью. Также Nmap способен распознать часть SNMP-сервисов, если попытается перебрать несколько сотен community имен методом грубой силы. Для решения обеих вышеприведенных задач не слишком удобно использовать стандартные методы определения версий Nmap, но обе они легко выполняются с помощью NSE. По этой причине система определения версий сейчас вызывает по умолчанию NSE для решения задачи определения версии при обработки некоторых сложных сервисов.

3. Поиск уязвимостей

Когда обнаруживается новая уязвимость, она становится общеизвестной, и специалистам по сетевой безопасности нужно срочно просканировать свои сети, чтобы быстро идентифицировать уязвимые системы, до того, как это сделают за них плохие парни. Хотя Nmap и не является полноценным сканером уязвимостей, мощный потенциал NSE позволяет ему осуществлять проверки уязвимостей даже с учетом очень жестких требований. К примеру, когда ошибка Heartbleed в криптографическом программном обеспечении OpenSSL поставила под угрозу сотни тысяч систем по всему миру, разработчики Nmap отреагировали написанием скрипта ssl-heartbleed detection в течение двух дней.

4. Обнаружение бэкдоров

Многие киберзлоумышленники, а также некоторые автоматические черви оставляют бэкдоры, чтобы на будущее обеспечить себе лазейку для осуществления более легкого проникновения в вашу систему. Часть из этих бэкдоров можно обнаружить с помощью стандартной процедуры определения версий Nmap на основе сопоставления сигнатур регулярных выражений, но для надежного обнаружения многих более сложных червей и бэкдоров требуются расширенные возможности NSE. В частности, NSE применяется для обнаружения бэкдора DoublePulsar, использующего уязвимость в реализации протокола SMB, бэкдор-версий для IRC-сервера UnrealIRCd, а также FTP-серверов vsftpd и ProFTPd.

5. Обнаружение уязвимостей

Реализованный на основе скриптового языка общего назначения, NSE может быть даже использован для создания эксплойтов, которые помогут вам обнаружить уязвимости еще до того, как информация об их существовании станет общедоступной. Такая возможность добавления пользовательских скриптовых эксплойтов может быть чрезвычайна полезна некоторым людям (прежде всего тестерам проникновения). Однако, полноценной платформой для создания сигнатур и эксплойтов, наподобие Metasploit, NSE все же не является.

Какие категории скриптов NSE существуют?

В настоящее время существует 598 скриптов NSE, которые вы можете найти в папке «scripts» — поддиректории основного каталога Nmap. Для большей производительности все скрипты проиндексированы в базе данных «scripts/script.db», где указано, к какой категории или категориям принадлежит каждый скрипт.

В зависимости от целевого применения, а также для упрощения их использования, скрипты NSE сгруппированы по разным категориям. В настоящее время определены следующие категории скриптов NSE: auth, broadcast, brute, default. discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version и vuln (имена категорий не чувствительны к регистру). Ниже приведено более детальное представление каждой категории:

  • auth — эта категория скриптов имеет дело с учетными данными при аутентификации (или обходит их) на целевой системе. Примерами таких скриптов являются «x11-access», «ftp-anon» и «oracle-enum-users». Обратите внимание, что скрипты, которые используют атаку грубой силы для попытки определения учетных данных, отнесены к категории brute.
  • broadcast — скрипты из этой категории обычно служат для обнаружения хостов, не указанных в командной строке, путем ширококанального взаимодействия с локальной сетью. При использовании аргумента скрипта «newtargets» они будут автоматически добавлять хосты, которые обнаружили, в очередь на сканирование.
  • brute — эта категория скриптов используется для проведения атак грубой силы для получения учетных данных аутентификации удаленного сервера. Nmap предлагает скрипты для проведения атак грубой силы для дюжин протоколов. К ним относятся следующие скрипты: «http-brute», «oracle-brute», «snmp-brute» и т. д..
  • default — эта категория скриптов определяет те скрипты, которые отобраны разработчиками Nmap, как полезные для расширения функциональности сканера или оптимизации его работы, и отнесены к базовому набору «по умолчанию». Они запускаются при использовании опций «-sC» или «-A», а не через задание определенного списка скриптов через опцию «--script». Существует возможность явно указать эту категорию скриптов, как и остальные, используя «--script=default». Команда Nmap, при определении того, стоит ли отнести конкретный скрипт к категории default, старается опираться на следующие требования:
    • скорость — сканирование по умолчанию должно завершаться быстро, что исключает включение в эту категорию взломщиков аутентификации с использованием метода грубой силы, веб-пауков, а также любых других скриптов, время сканирования одного сервиса у которых исчисляется в минутах, а то и часах.
    • полезность — проведение сканирования в категории по умолчанию требует получение ценной и актуальной информации. Другими словами, результат сканирования такого скрипта должен быть понятен и полезен среднестатистическому профессионалу в области сетевой безопасности. В противном случае запускать его по умолчанию не имеет смысла.
    • краткость — вывод полученной информации сканером Nmap используется для самых разных целей и нужд, поэтому данная информация должна быть читабельной и краткой. Скрипты, которые зачастую создают множество страниц с полным выводом всей полученной информации, также не место в категории скриптов по умолчанию. Другими словами, скрипты NSE, которые отнесены к категории default, когда не находят никакой важной информации, в отчете не показывают ничего. Это и относится к скриптам по умолчанию, которые ищут скрытые уязвимости, — они выводят результат только при обнаружении этих уязвимостей.
    • надежность — многие скрипты в своей работе могут опираться на данные эвристического анализа и нечеткого совпадения сигнатур, чтобы сделать определенные выводы о целевом хосте или сервисе. Примерами таких скриптов являются «sniffer-detect» и «sql-injection». Такие скрипты не будут относится в категорию по умолчанию, так как результаты их работы зачастую бывают ошибочными, и могут ввести в заблуждение пользователя, который четко не понимает всю специфику их работы.
    • ненавязчивость — некоторые скрипты бывают излишне навязчивыми, когда они используют значительные ресурсы удаленной системы, что может привести к выходу из строя этой системы или сервиса, либо же их действия могут быть расценены удаленными администраторами как атака. Такие скрипты также не включаются в категорию по умолчанию. Однако, некоторые «умеренно агрессивные» скрипты все же были отнесены командой Nmap в категорию default, исходя из их полезности и того, насколько корректно они себя могут вести, учитывая другие факторы.
    • конфиденциальность — многие скрипты могут разглашать конфиденциальную информацию третьим лицам, исходя из самой специфики своей работы. К примеру, скрипты для поиска данных WHOIS должны сообщить целевой IP-адрес региональным регистраторам. Другими словами, в категорию default скриптов NSE команда Nmap старается не добавлять скрипты, которые могут нарушить конфиденциальность.
  • discovery — эта категория скриптов активно пытается узнать больше о сети, отправляя публичные запросы регистратору, устройствам с поддержкой SNMP, службе каталогов и т.д. Примерами таких скриптов являются «html-title» (получает заголовок корневого пути веб-сайтов), «smb-enum-shares» (перечисляет общие ресурсы Windows) и «snmp-sysdescr» (извлекает подробную информацию о системе через стандартный интернет-протокол для управления устройствами SNMP).
  • dos — скрипты этой категории следует использовать крайне осторожно, так как они могут привести к отказу в обслуживании. Иногда их используют тестировщики безопасности для проверки уязвимости системы к атакам методом отказа в обслуживании, но такое тестирование может привести к нежелательным побочным эффектам — к примеру, вызвать сбои в работе некоторых уязвимых сервисов.
  • exploit — эти скрипты нацелены на активное использование определенной уязвимости. Примерами этой категории скриптов являются «jdwp-exec» и «http-shellshock».
  • external — скрипты этой категории могут отправлять данные третьим лицам, контролирующим базы данных или другие сетевые ресурсы. Примером такого скрипта может служить «whois-ip», который осуществляет подключение к WHOIS-серверам, чтобы получить информацию об IP-адресе цели. Всегда существует вероятность того, что операторы сторонней базы данных будут записывать все, что вы им отправляете, что во многих случаях будет включать в том числе информацию о вашем IP-адресе и IP-адресе вашей цели. Большинство скриптов, которые связаны с трафиком исключительно между сканирующим компьютером и клиентом, к этой категории не относятся.
  • fuzzer — эта категория скриптов, которая создана для отправки программному обеспечению сервера неожиданных или рандомизированных полей в каждом пакете. Хотя этот метод может быть полезен для поиска неизвестных ошибок и уязвимостей в программном обеспечении, это медленный процесс, который к тому же интенсивно использует пропускную способность сети. Примером скриптов данной категории является «dns-fuzz», который бомбардирует DNS-сервер частично измененными доменными запросами, пока сервер не ляжет или не истечет установленное пользователем ограничение по времени.
  • intrusive —к этой категории скриптов относятся те, которые нельзя классифицировать как безопасные (safe), так как слишком высоки риски, что под их напором рухнет целевая система, потребуются значительные ресурсы на целевом хосте (например, пропускная способность или процессорное время) либо же каким-нибудь другим образом их выполнение будет воспринято администраторами целевой системы как злонамеренная деятельность. Примерами таких скриптов являются «http-open-proxy» (который пытается использовать целевой сервер в качестве прокси-сервера HTTP) и «snmp-brute» (который пытается угадать так называемую «общую строку» (community string) SNMP-устройств, путем отправки им популярных значений, таких как public, private и cisco). Если скрипт не относится к специальной категории version, он должен быть классифицирован как safe или intrusive.
  • malware — эти скрипты проверяют, заражена ли целевая платформа вредоносными программами или бэкдорами. Примерами скриптов этой категории скриптов является «smtp-strangeport», который следит за SMTP-серверами, запущенными на необычных номерах порта, и «auth-spoof», который обнаруживает подмененных демонов identd (реализующих поддержку протокола идентификации пользователя), которые предоставляют фальшивый ответ еще до того, как получат запрос. Что для первого, что для второго примера такое поведение, будь оно обнаружено, обычно является признаком заражения системы вредоносным программным обеспечением.
  • safe — все скрипты, которые не были созданы для вызывания сбоя сервисов, использования больших объемов пропускной способности сети или других ресурсов, а также не были нацелены на использование дыр в безопасности, категорированы как safe. Они гораздо менее склонны привлекать к себе внимание удаленных администраторов, хотя (как и в случае с любой другой функциональностью Nmap), нельзя на сто процентов гарантировать, что они никогда не привлекут к себе побочное внимание. Большинство из этих скриптов выполняют задачи, связанные с общим исследованием сети. Примерами скриптов данной категории являются «ssh-hostkey» (получает ключ SSH хоста) и «html-title» (захватывает заголовок из веб-страницы). Скрипты из категории version не категорируются как safe, но остальные скрипты, не являющиеся безопасными, должны быть определены как intrusive.
  • version — скрипты из этой специальной категории являются расширением функциональности определения версии и не могут быть выбраны явно. Они выбираются для запуска только при запросе определения версии Nmap («-sV»). Их вывод нельзя отделить от вывода функции определения версии, и они не работают как скрипты хоста или сервиса. Примерами таких скриптов являются «skypev2-version», «pptp-version» и «iax2-version».
  • vuln — скрипты этой категории производят проверки на наличие какой-то определенной известной уязвимости и обычно выдают только те результаты, которые подтверждают, что такая уязвимость найдена. Примерами таких скриптов являются «realvnc-auth-bypass» и «afp-path-vuln».

Правила использования скриптов NSE

Скрипты, в зависимости от их функциональной направленности, а также фазы сканирования, в ходе которой они выполняются, разделены на четыре типа (некоторые скрипты могут поддерживать сразу несколько типов операций):

  • Предварительные скрипты (Prerule scripts) — этот тип скриптов запускается еще до осуществления любых операций Nmap, соответственно, они выполняются до этапа сканирования, когда Nmap еще не собрал никакой информации о цели. Эти скрипты могут быть полезны для выполнения таких задач, которые не зависят от определенных целей сканирования, например, осуществление широковещательных запросов для опроса DHCP- и DNS SD-серверов. Некоторые из этих скриптов могут создавать новые цели для сканирования Nmap (только если вы укажите NSE-аргумент «newtargets»). Так, к примеру, скрипт «dns-zone-transfer» может получить список IP-адресов в домене, используя запрос передачи зоны, а затем автоматически добавить их в список целей для сканирования Nmap. Скрипты типа Prerule scripts идентифицируются с помощью функции prerule.
  • Скрипты хоста (Host scripts) — данные скрипты запускается во время стандартного процесса сканирования Nmap, после того, как сканер Nmap выполнил обычные операции, такие как обнаружение хоста, сканирование портов, определение версий и обнаружение ОС на целевом хосте. Этот тип скрипта вызывается один раз для каждого целевого хоста, который соответствует его функции hostrule. В качестве примера можно привести скрипты «whois-ip», который ищет информацию о владельце для целевого IP-адреса, и «path-mtu», который пытается определить максимальный размер IP-пакета, который может достичь цели, не требуя фрагментации.
  • Скрипты сервисов (Service scripts) — этот тип скриптов запускается тогда, когда обнаруживаются определенные сервисы на целевом хосте. К примеру, Nmap включает в себя более чем 15 скриптов http-сервисов, которые запускаются для работы с веб-серверами. Если на хосте есть веб-сервера, работающие на нескольких портах, эти скрипты могут выполняться несколько раз (по одному для каждого порта). Это наиболее распространенный тип скриптов в Nmap, и они отличаются тем, что содержат функцию portrule для определения того, с каким из обнаруженных сервисов должен запускаться скрипт.
  • Завершающие скрипты (Postrule scripts) — этот тип скриптов запускается один раз, после того, как Nmap просканировал все намеченные цели. Они могут быть полезны для форматирования и представления вывода информации, полученной сканером Nmap. К примеру, скрипт «ssh-hostkey» более известен как сервисный скрипт (с заданной функцией portrule), который подключается к серверам SSH, обнаруживает их открытые ключи и печатает их. Но он также включает в себя функциональность postrule, которая осуществляет проверку на дубликаты ключей среди всех проверенных хостов, а затем печатает все найденные. Другим потенциально возможным примером применения скриптов данного типа является реверсная печать вывода результатов работы сканера Nmap — к примеру, перечисление всех хостов, на которых запущен определенный сервис, а не обычное перечисление всех хостов с запущенными на них сервисами. Скрипты Postrule scripts идентифицируются с помощью функции postrule.

Примечание: многие скрипты могут запускаться как prerule script, так и как postrule script. В этих случаях рекомендуется использовать функциональность prerule во избежание несогласованности.

 

Часть 2. Синтаксис и примеры скриптов Nmap Scripting Engine

 

Подписывайтесь на рассылку, делитесь статьями в соцсетях и задавайте вопросы в комментариях!

Вечный параноик, Антон Кочуков.

Комментарии
Тут пока ничего нет, но Вы можете быть первым!
Авторизуйтесь для этого

См. также:

Рейтинг@Mail.ru © 2015 - 2024 NetworkGuru.ru Использование материалов сайта без согласования запрещено!
Заказать звонок