
Scripts NSE do Nmap para descoberta e enumeração de ICS/SCADA—BACnet, EtherNet/IP, CoDeSys, Fox, Modicon, Omron, S7—usando consultas de protocolo para avaliações de segurança.
#Redpoint
###Ferramentas de Enumeração ICS da Digital Bond
O Redpoint é um projeto de pesquisa da Digital Bond para enumerar aplicações e dispositivos ICS.
Usamos nossas ferramentas Redpoint em avaliações para descobrir dispositivos ICS e obter informações que seriam úteis em testes secundários. Uma parte dessas ferramentas será disponibilizada ao público como scripts NSE do Nmap neste repositório.
As ferramentas Redpoint usam comandos legítimos de protocolo ou de aplicação para descobrir e enumerar dispositivos e aplicações. Não há qualquer esforço para explorar ou derrubar nada. No entanto, muitos dispositivos e aplicações ICS são frágeis e podem travar ou responder de forma inesperada a qualquer tráfego não esperado, portanto use com cuidado.
Cada script está documentado abaixo e disponível em um arquivo .nse neste repositório.
BACnet-discover-enumerate.nse - Identifica e enumera dispositivos BACnet
codesys-v2-discover.nse - Identifica e enumera controladores CoDeSys V2
enip-enumerate.nse - Identifica e enumera dispositivos EtherNet/IP da Rockwell Automation e de outros fabricantes
fox-info.nse - Identifica e enumera dispositivos Niagara Fox
modicon-info.nse - Identifica e enumera CLPs Modicon da Schneider Electric
omron-info.nse - Identifica e enumera CLPs Omron
pcworx-info.nse - Identifica e enumera CLPs com protocolo PC Worx habilitado
proconos-info.nse - Identifica e enumera CLPs com ProConOS habilitado
s7-enumerate.nse - Identifica e enumera CLPs Siemens SIMATIC S7
==
###BACnet-discover-enumerate.nse
![Exemplo de saída do BACnet-discover-enumerate] (http://digibond.wpengine.netdna-cdn.com/wp-content/uploads/2014/03/BACnet-nse.png)
####Autores
Stephen Hilt and Michael Toecker
Digital Bond, Inc
####Objetivo e Descrição
O objetivo do BACnet-discover-enumerate.nse é, primeiro, identificar se um dispositivo conectado via IP está executando BACnet. Isso funciona consultando o dispositivo com uma mensagem BACnet pré-gerada. Versões mais recentes do protocolo BACnet responderão com um reconhecimento; versões mais antigas retornarão uma mensagem de erro BACnet. A presença do reconhecimento ou do erro é suficiente para comprovar que há um dispositivo compatível com BACnet no endereço IP alvo.
Em segundo lugar, se um reconhecimento for recebido, este script também tentará enumerar várias propriedades BACnet em um dispositivo BACnet responsivo. Novamente, o dispositivo é consultado com uma mensagem BACnet pré-gerada. A enumeração bem-sucedida usa solicitações especialmente elaboradas e não será bem-sucedida se o dispositivo BACnet não suportar a propriedade.
As propriedades BACnet consultadas por este script são:
Vendor ID - Um número que corresponde a um fabricante BACnet registrado. O script também retorna o nome do fabricante associado.
Vendor Number - Uma string que representa o nome do fabricante configurado no dispositivo. Isso pode diferir do Vendor ID, pois o Vendor ID é o número registrado na ASHARE.
Object Identifier - Um número que identifica exclusivamente o dispositivo. Se o Object-Identifier for conhecido, é possível enviar comandos com software cliente BACnet, inclusive aqueles que alteram valores, programas, agendas e outras informações operacionais em dispositivos BACnet. Esta é uma propriedade obrigatória para todos os dispositivos BACnet.
Firmware Revision - O número de revisão do firmware no dispositivo BACnet.
Application Software Revision - O número de revisão do software usado para comunicação BACnet.
Object Name - Uma string definida pelo usuário que atribui um nome ao dispositivo BACnet, normalmente inserida por técnicos no comissionamento. Esta é uma propriedade obrigatória para todos os dispositivos BACnet.
Model Name - O modelo do dispositivo BACnet
Description - Uma string definida pelo usuário para descrever o dispositivo, normalmente inserida por técnicos no comissionamento
Location - Uma string definida pelo usuário para registrar a localização física do dispositivo, normalmente inserida por técnicos no comissionamento
Broadcast Distribution Table (BDT) - Uma lista dos dispositivos BACnet de gerenciamento de broadcast (BBMD) na rede BACnet. Isso identificará todas as sub-redes que fazem parte da rede BACnet.
Foreign Device Table (FDT) - Uma lista de dispositivos estrangeiros registrados no dispositivo BACnet. Um dispositivo estrangeiro é qualquer dispositivo que não esteja em uma sub-rede que faça parte da rede BACnet nem esteja no BDT. Os dispositivos estrangeiros geralmente estão localizados em redes externas e podem ser o endereço IP de um atacante.
O BDT e o FDT podem ser listas grandes e talvez não sejam desejados em uma varredura Nmap ampla. O script básico não fará o download do BDT e do FDT. Execute o comando com --script-args full=yes para obter o BDT e o FDT; veja a seção Uso.
![Exemplo de saída do BACnet-discover-enumerate com BDT e FDT] (http://digibond.wpengine.netdna-cdn.com/wp-content/uploads/2014/08/screenshot_bacnet-1.png)
Este script usa um recurso adicionado em 2004 à especificação BACnet para recuperar o Object Identifier de um dispositivo com uma única solicitação, sem ingressar na rede BACnet como dispositivo estrangeiro. (Consulte o Addendum a da ANSI/ASHRAE à norma ANSI/ASHRAE 135-2001 para obter detalhes)
####Histórico e Contexto
Do artigo da Wikipédia sobre BACnet http://en.wikipedia.org/wiki/BACnet:
BACnet é um protocolo de comunicação para redes de automação e controle predial. É um protocolo padronizado pela ASHRAE, ANSI e ISO[1]. A porta padrão para tráfego BACnet é UDP/47808.
BACnet é usado em sistemas de automação e controle predial em aplicações como controle de aquecimento, ventilação e ar-condicionado, controle de iluminação, controle de acesso e sistemas de detecção de incêndio e seus equipamentos associados. O protocolo BACnet fornece mecanismos para que dispositivos computadorizados de automação predial troquem informações, independentemente do serviço predial específico que executam.
####Instalação
Este script requer o nmap para ser executado. Se você não tiver o Nmap, baixe e instale o Nmap seguindo as instruções do Nmap. http://nmap.org/download.html
#####Windows
Após baixar o bacnet-discover.nse, você precisará movê-lo para o diretório de scripts NSE; isso deverá ser feito como administrador. Vá em Iniciar -> Programas -> Acessórios e clique com o botão direito em 'Prompt de Comando'. Selecione 'Executar como administrador'.
move BACnet-discover-enumerate.nse C:\Program Files (x86)\Nmap\scripts
#####Linux
Após baixar o BACnet-discover-enumerate.nse, você precisará movê-lo para o diretório de scripts NSE; isso deverá ser feito como sudo/root.
sudo mv BACnet-discover-enumerate.nse /usr/share/nmap/scripts
####Uso
Em uma janela de terminal/Prompt de Comando, use um dos seguintes comandos, onde host é o alvo que você deseja verificar para BACNet. Use --script-args full=yes se quiser que a saída inclua o BDT e o FDT.