-
#CyberCamp18
D e s a r o l l a n d o i N V e n T o s p a r a l a i n d u s t r i a
Aarón Flecha Menéndez
-
#CyberCamp18
2
Índice
1. Introducción a los NVT
2. Dispositivos Industriales
3. ¿Cómo crear un NVT?
4. NVT industriales
5. DEMOS
-
#CyberCamp18
Aarón Flecha Menéndez
Ingeniería Técnica Informática de Sistemas
Experto Universitario en Ciberseguridad Industrial
GICSP (Global Industrial Cyber Security Professional)
Máster Interuniversitario Seguridad de las Tecnologías de la
Información y de las Comunicaciones
Consultor de Ciberseguridad industrial en S21sec | Nextel
1. Presentación
https://es.linkedin.com/in/aar%C3%B3n-flecha-men%C3%A9ndez-76773232https://es.linkedin.com/in/aar%C3%B3n-flecha-men%C3%A9ndez-76773232
-
#CyberCamp18
Introducción a los NVT
-
#CyberCamp18
5
¿Qué es un NVT?
Los NVT (Network Vulnerability Tests) son scripts escritos en lenguaje
NASL (Nessus Attack Scripting Language) que permiten verificar la
existencia de vulnerabilidades dentro de una red.
El uso del lenguaje de scripting NASL tiene sus razones:
Fue diseñado con el propósito específico para los NVT.
Ahorro en tiempo con respecto otros lenguajes de scripting.
Control del código desarrollado (evita código malicioso).
Introducción a los NVT
-
#CyberCamp18
6
¿Por qué usar NVT?
Introducción a los NVT
• FAT (Factory Aceptance Test)
• SAT (Site Aceptance Test)
Ejecución de pruebas antes y después de realizar la instalación de los dispositivos:
Reducción de los tiempos en el análisis de vulnerabilidades que poseen los dispositivos
• Automatizar la ejecución de pruebas para encontrar o descartar vulnerabilidades
• Creación de procedimientos para dispositivos concretos, fabricantes, etc.
• Pruebas de estrés y fuzzing
-
#CyberCamp18
7
¿Quién los utiliza?
Introducción a los NVT
Número de NVT ≈ 65153
https://secinfo.greenbone.net/omp?cmd=get_info&info_type=nvt&token=guest
https://secinfo.greenbone.net/omp?cmd=get_info&info_type=nvt&token=guest
-
#CyberCamp18
8
¿Quién los utiliza?
Introducción a los NVT
Número de NVT ≈ 101434
https://www.tenable.com/plugins/search
https://www.tenable.com/plugins/search
-
#CyberCamp18
9
Introducción a los NVT
Scan Targets
OpenVAS
Scanner
NVT
OpenVAS
Manager
CLIENTS
Greenbone Security AssistantOpenVas CLI Greenbone Security Desktop
SERVICES
DATA
OpenVAS
Administrator
Results, Configs
-
#CyberCamp18
10
Preparar entorno de desarrollo para NVT
https://github.com/tenable/notepadpp-nasl
https://github.com/tenable/sublimetext-nasl
https://github.com/tenable/vim-nasl
https://github.com/tenable
Más opciones:
https://www.nano-editor.org/
Introducción a los NVT
https://github.com/tenable/notepadpp-naslhttps://github.com/tenable/sublimetext-naslhttps://github.com/tenable/vim-naslhttps://github.com/tenablehttps://www.nano-editor.org/
-
#CyberCamp18
Dispositivos Industriales
-
#CyberCamp18
12
Dispositivos industriales
PLC
Programmable Logic Controller
Permite automatizar procesos
gracias a su programación.
Poseen salidas y entradas
digitales o analógicas.
RTU
Remote Terminal Unit
Permiten obtener señales
de los procesos y enviar
la información a un sitio
remoto donde se procese.
HMI
Human Machine Interface
Muestran información del estado
de los procesos para que los
operadores coordinen y controlen
las acciones a realizar.
En ocasiones permiten realizar
acciones para ajustar el proceso o
modificar variables del mismo.
-
#CyberCamp18
13
Dispositivos industriales
SCADA
Supervisory Control And Data
Acquisition
Realiza acciones de
supervisión, control y
gestión de información en
tiempo real.
Permiten una
centralización de señales
generadas por uno o
varios procesos
industriales (control de
alertas).
Se comunica con multitud
de dispositivos ubicados
en la red de control (PLC,
RTU, HMI, etc.)
-
#CyberCamp18
14
Dispositivos industriales
-
#CyberCamp18
15
Dispositivos industriales
RED CORPORATIVA
RED SUPERVISIÓN
OperadorServidor SCADA
Servidor de
aplicaciones
Estación
de
Ingeniería
RED CONTROL
PLC
RTU
RED CAMPO
SensorActuador
-
#CyberCamp18
¿Cómo crear un NVT?
-
#CyberCamp18
17
¿Cómo crear un NVT?
Knowledge Base
(KB)
NVT 1 NVT 2
Los NVT no pueden
utilizar la información
que introducen en la
KB en el propio NVT
get_kb_item ()
set_kb_item ()
get_kb_list ()
replace_kb_item ()
-
#CyberCamp18
18
¿Cómo crear un NVT?
Documentación
http://michel.arboi.free.fr/nasl2ref/nasl2_reference.pdf
Consejos que me parecen muy útiles:
Mirar bien si ya existe un NVT en el que podamos basar nuestro NVT de desarrollo
propio.
Incluir todas las dependencias y requerimientos de nuestro código.
Tener claro el QoD a asignar a nuestro NVT.
Utilizar un template actualizado para desarrollar alguna partes comunes a todos los
NVT.
Utilizar herramientas como wireshark o proxies de navegación web (BurpSuite, ZAP,
etc.) para entender mejor las comunicaciones y reproducirlas de forma correcta.
http://www.openvas.org/compendium/openvas-compendium.html
Más información: https://community.greenbone.net/t/vt-development/226
http://michel.arboi.free.fr/nasl2ref/nasl2_reference.pdfhttp://www.openvas.org/compendium/openvas-compendium.htmlhttps://community.greenbone.net/t/vt-development/226
-
#CyberCamp18
19
¿Cómo crear un NVT?
Información a tener en cuenta:
Herramientas a tener en cuenta para desarrollar:
Asignación del OID (identificador del NVT):
-
#CyberCamp18
20
¿Cómo crear un NVT?
Más información a tener en cuenta:
Conocer las librerías que podemos utilizar:
Más herramientas que nos facilitarán la vida:
http://www.openvas.org/src-doc/openvas-libraries/index.html
https://regex101.com/
Herramientas para protocolos de comunicación
(snmpwalk o snmpget para SNMP)
http://www.openvas.org/src-doc/openvas-libraries/index.htmlhttps://regex101.com/
-
#CyberCamp18
21
¿Cómo crear un NVT?
-
#CyberCamp18
22
¿Cómo crear un NVT?
Estos serán tus fieles amigos:
https://kaitai.io/ https://www.lua.org/pil/
Y muchos más …
https://kaitai.io/https://www.lua.org/pil/
-
#CyberCamp18
23
¿Cómo crear un NVT?
Intérprete:
-
#CyberCamp18
24
¿Cómo crear un NVT?
Calidad de detección en los NVT (QoD)
Más común en entornos industriales:
-
#CyberCamp18
25
¿Cómo crear un NVT?
Scripting con nmap, algunos ejemplos:
nmap --script bacnet-info -sU -p 47808
nmap --script modbus-discover.nse --script-args='modbus-discover.aggressive=true' -p 502
nmap --script s7-info.nse -p 102
nmap --script enip-info -sU -p 44818
-
#CyberCamp18
26
¿Cómo crear un NVT?
Firmar un NVT
Los NVTs en OpenVAS se firman con la herramienta GnuPG
1. Crear un par de claves y comprobar que se han creado bien:
2. Firmar un archivo con GPG mediante una firma separada en ASCII y comprobar su integridad:
Comprobar que el NVT no ha sido alterado
aaron@cybercamp:~# gpg --gen-keyaaron@cybercamp:~# gpg –k
aaron@cybercamp:~# gpg -u --armor --detach-sign aaron@cybercamp:~# gpg –k
aaron@cybercamp:~# gpg --homedir=/etc/openvas/gnupg --verify /var/lib/openvas/plugins/XXXXX.nasl.asc/var/lib/openvas/plugins/XXXXX.nasl
aaron@cybercamp:~#
-
#CyberCamp18
27
¿Cómo crear un NVT?
Puntos a tener en cuenta para el desarrollo de NVT industriales
Posibilidad de enviar tramas malformadas para pruebas de estrés.
Servicios inestables que no responden a ciertas peticiones.
Uso del mismo NVT para el escaneo de una red entera.
Cuando usemos OpenVAS o Nessus, no utilizar todas las familias de plugins con
todos los plugins seleccionados bajo ningún concepto en entornos industriales.
Tiempo de vida de un socket y de la propia comunicación.
La disponibilidad es lo primero en la industria. Si desarrollamos un NVT que afecte a la
disponibilidad de un dispositivo es importante tener cuidado en el caso de utilizarlo
como herramienta de auditoria. Mejor usar laboratorios!!!
-
#CyberCamp18
28
¿Cómo crear un NVT?
Logs que nos pueden ayudar:
Logs de gsad
Logs de openvasmd
Logs de openvassd.messages
Logs de openvassd.dump
http://www.openvas.org/compendium/usr-local-var-log-openvas.html
Errores de escaneos y mensajes (display)
Información sobre
escaneos (objetivos, hora
de lanzamiento)
http://www.openvas.org/compendium/usr-local-var-log-openvas.html
-
#CyberCamp18
NVT Industriales
-
#CyberCamp18
30
NVT industriales
Fabricantes:
https://vulners.com/openvas/OPENVAS:1361412562310108345 Siemens:
Siemens SIMATIC CP Device
Detection (FTP)
https://vulners.com/openvas/OPENVAS:1361412562310108345
-
#CyberCamp18
31
NVT industriales
Fabricantes:
https://vulners.com/openvas/OPENVAS:1361412562310106746 Schneider Electric:
Schneider Electric homeLYnk
Command Injection Vulnerability
https://vulners.com/openvas/OPENVAS:1361412562310106746
-
#CyberCamp18
32
NVT industriales
Comunicaciones:
https://vulners.com/openvas/OPENVAS:1361412562310106850
EtherNet/IP:
EtherNet/IP Detection
https://vulners.com/openvas/OPENVAS:1361412562310106850
-
#CyberCamp18
33
NVT industriales
Comunicaciones:
https://vulners.com/openvas/OPENVAS:1361412562310106850 EtherNet/IP:
EtherNet/IP Detection
https://vulners.com/openvas/OPENVAS:1361412562310106850
-
#CyberCamp18
DEMO
-
#CyberCamp18DEMO 1
-
#CyberCamp18DEMO 1
Function code 43 / 14 (0x2B / 0x0E)
Read Device Identification
-
#CyberCamp18DEMO 1
-
#CyberCamp18DEMO 1
-
#CyberCamp18
Más información: https://www.incibe-cert.es/blog/snmp-tan-simple-el-nombre-indica
https://www.incibe-cert.es/blog/snmp-tan-simple-el-nombre-indica
-
#CyberCamp18DEMO 1
-
#CyberCamp18DEMO 1
-
#CyberCamp18DEMO 1
"88111222" && "Technodrome“ && product:"Conpot"
https://www.shodan.io/search?query="88111222"+%26%26+"Technodrome"%26%26+product:"Conpot"
-
#CyberCamp18DEMO 2
-
#CyberCamp18DEMO 2
-
#CyberCamp18DEMO 3 – Caso práctico
-
#CyberCamp18DEMO 3 – Caso práctico
https://help.codesys.com/api-content/2/codesys/3.5.13.0/en/_cds_f_data_acquiring_with_trace/
https://www.codesys.com/fileadmin/data/customers/security/2018/Advisory2018-07_CDS-
58896.pdf
https://help.codesys.com/api-content/2/codesys/3.5.13.0/en/_cds_f_data_acquiring_with_trace/https://www.codesys.com/fileadmin/data/customers/security/2018/Advisory2018-07_CDS-58896.pdf
-
#CyberCamp18DEMO 3 – Caso práctico
-
#CyberCamp18
GRACIAS
ÍndicePresentaciónIntroducción a los NVTDispositivos IndustrialesDEMO