
NSE-скрипты Nmap для обнаружения и перечисления ICS/SCADA — BACnet, EtherNet/IP, CoDeSys, Fox, Modicon, Omron, S7 — использующие запросы протоколов для оценки безопасности.
#Redpoint
###Инструменты Digital Bond для перечисления ICS
Redpoint — это исследовательский проект Digital Bond, предназначенный для перечисления ICS-приложений и устройств.
Мы используем инструменты Redpoint в своих оценках для обнаружения ICS-устройств и получения информации, полезной для дальнейшего тестирования. Часть этих инструментов будет опубликована в этом репозитории в виде Nmap NSE-скриптов.
Инструменты Redpoint используют легитимные команды протоколов или приложений для обнаружения и перечисления устройств и приложений. Они не предназначены для эксплуатации уязвимостей или нарушения работы чего-либо. Однако многие ICS-устройства и приложения хрупки и могут выйти из строя или неожиданно отреагировать на любой неожиданный трафик, поэтому используйте их с осторожностью.
Каждый скрипт описан ниже и доступен в виде .nse-файла в этом репозитории.
BACnet-discover-enumerate.nse — обнаружение и перечисление устройств BACnet
codesys-v2-discover.nse — обнаружение и перечисление контроллеров CoDeSys V2
enip-enumerate.nse — обнаружение и перечисление устройств EtherNet/IP от Rockwell Automation и других производителей
fox-info.nse — обнаружение и перечисление устройств Niagara Fox
modicon-info.nse — обнаружение и перечисление ПЛК Schneider Electric Modicon
omron-info.nse — обнаружение и перечисление ПЛК Omron
pcworx-info.nse — обнаружение и перечисление ПЛК с поддержкой протокола PC Worx
proconos-info.nse — обнаружение и перечисление ПЛК с поддержкой ProConOS
s7-enumerate.nse — обнаружение и перечисление ПЛК Siemens SIMATIC S7
==
###BACnet-discover-enumerate.nse
![Пример вывода BACnet-discover-enumerate] (http://digibond.wpengine.netdna-cdn.com/wp-content/uploads/2014/03/BACnet-nse.png)
####Авторы
Stephen Hilt и Michael Toecker
Digital Bond, Inc
####Назначение и описание
Назначение BACnet-discover-enumerate.nse — сначала определить, работает ли на устройстве с IP-адресом протокол BACnet. Это делается путём отправки на устройство предварительно сгенерированного BACnet-сообщения. Новые версии протокола BACnet ответят подтверждением, более старые версии вернут сообщение об ошибке BACnet. Наличие либо подтверждения, либо ошибки достаточно, чтобы доказать, что на целевом IP-адресе находится устройство, поддерживающее BACnet.
Во-вторых, если получено подтверждение, этот скрипт также попытается перечислить несколько свойств BACnet на отвечающем устройстве BACnet. Устройство снова опрашивается предварительно сгенерированным BACnet-сообщением. Успешное перечисление использует специально созданные запросы и не будет успешным, если устройство BACnet не поддерживает данное свойство.
Свойства BACnet, запрашиваемые этим скриптом:
Vendor ID — число, соответствующее зарегистрированному вендору BACnet. Скрипт также возвращает связанное с ним имя вендора.
Vendor Number — строка, представляющая имя вендора, настроенное на устройстве. Она может отличаться от Vendor ID, поскольку Vendor ID — это номер, зарегистрированный в ASHRAE.
Object Identifier — число, однозначно идентифицирующее устройство. Если Object-Identifier известен, можно отправлять команды с помощью клиентского ПО BACnet, в том числе изменяющие значения, программы, расписания и другие эксплуатационные данные на устройствах BACnet. Это обязательное свойство для всех устройств BACnet.
Firmware Revision — номер ревизии прошивки на устройстве BACnet.
Application Software Revision — номер ревизии программного обеспечения, используемого для связи BACnet.
Object Name — определяемая пользователем строка, присваивающая имя устройству BACnet; обычно вводится техниками при пусконаладке. Это обязательное свойство для всех устройств BACnet.
Model Name — модель устройства BACnet
Description — определяемая пользователем строка для описания устройства; обычно вводится техниками при пусконаладке
Location — определяемая пользователем строка для записи физического местоположения устройства; обычно вводится техниками при пусконаладке
Broadcast Distribution Table (BDT) — список устройств управления широковещательной рассылкой BACnet (BBMD) в сети BACnet. Это позволяет определить все подсети, входящие в сеть BACnet.
Foreign Device Table (FDT) — список внешних устройств, зарегистрированных на устройстве BACnet. Внешнее устройство — это любое устройство, которое не находится в подсети, входящей в сеть BACnet, и не указано в BDT. Внешние устройства часто расположены во внешних сетях и могут представлять собой IP-адрес злоумышленника.
BDT и FDT могут быть большими списками и могут быть нежелательны при большом сканировании Nmap. Базовый скрипт не загружает BDT и FDT. Запустите команду с параметром --script-args full=yes, чтобы получить BDT и FDT, см. раздел «Использование».
![Пример вывода BACnet-discover-enumerate с BDT и FDT] (http://digibond.wpengine.netdna-cdn.com/wp-content/uploads/2014/08/screenshot_bacnet-1.png)
Этот скрипт использует функцию, добавленную в спецификацию BACnet в 2004 году, для получения Object Identifier устройства одним запросом, без подключения к сети BACnet в качестве внешнего устройства. (Подробности см. в ANSI/ASHRAE Addendum a к ANSI/ASHRAE Standard 135-2001)
####История и предыстория
Из статьи в Википедии о BACnet http://en.wikipedia.org/wiki/BACnet:
BACnet — это коммуникационный протокол для сетей автоматизации зданий и управления. Это стандарт ASHRAE, ANSI и ISO[1]. Порт по умолчанию для трафика BACnet — UDP/47808.
BACnet используется в системах автоматизации зданий и управления для таких приложений, как управление отоплением, вентиляцией и кондиционированием воздуха, управление освещением, контроль доступа и системы обнаружения пожара, а также связанное с ними оборудование. Протокол BACnet предоставляет механизмы для обмена информацией между компьютеризированными устройствами автоматизации зданий, независимо от конкретной выполняемой ими функции здания.
####Установка
Для работы этого скрипта требуется nmap. Если у вас нет Nmap, загрузите и установите Nmap в соответствии с инструкциями Nmap. http://nmap.org/download.html
#####Windows
После загрузки bacnet-discover.nse необходимо переместить его в каталог NSE Scripts; это нужно сделать от имени администратора. Перейдите в Пуск -> Программы -> Стандартные и щёлкните правой кнопкой мыши по «Командная строка». Выберите «Запуск от имени администратора».
move BACnet-discover-enumerate.nse C:\Program Files (x86)\Nmap\scripts
#####Linux
После загрузки BACnet-discover-enumerate.nse необходимо переместить его в каталог NSE Scripts; это нужно сделать от имени sudo/root.
sudo mv BACnet-discover-enumerate.nse /usr/share/nmap/scripts
####Использование
В окне терминала / командной строки используйте одну из следующих команд, где host — цель, которую вы хотите просканировать на BACnet. Используйте --script-args full=yes, если хотите, чтобы вывод включал BDT и FDT.
Windows: nmap -sU -p 47808 --script BACnet-discover-enumerate <host>
Windows: nmap -sU -p 47808 --script BACnet-discover-enumerate --script-args full=yes <host>
Linux: sudo nmap -sU -p 47808 --script BACnet-discover-enumerate <host>
Linux: sudo nmap -sU -p 47808 --script BACnet-discover-enumerate --script-args full=yes <host>