Curso de Ciberseguridad Industrial
Curso de Ciberseguridad Industrial
CIBERSEGURIDAD
Especialidad Introducción a
la Ciberseguridad Industrial
Taller 2
Unidad 4. Sistemas de control y
automatización industrial,
protocolos más utilizados y sus
vulnerabilidades
1
Contenidos
1 EXPLOTACIÓN DE VULNERABILIDADES OT 4
2
INSTALACIÓN Y CONFIGURACIÓN 6
DE SCAPY
INSTALACIÓN Y CONFIGURACIÓN DE 17
3
OTRAS HERRAMIENTAS
ARRANQUE Y CONFIGURACIÓN DEL
4 37
ENTORNO INDUSTRIAL
Unidad 1
Introducción a la tecnología
Contenidos
7 ICSSPLOTATION 60
8 SMOD 72
Unidad 1
Introducción a la tecnología
EXPLOTACIÓN DE
VULNERABILIDADES
OT 1
Unidad 1
Introducción a la tecnología
4
1 EXPLOTACIÓN DE VULNERABILIDADES OT
En este taller, aprenderás sobre el uso de los siguientes frameworks y herramientas para explotar vulnerabilidades y
debilidades en dispositivos OT usando la máquina atacante Kali Linux:
• S7SCAN.
• ISF (Industrial Exploitation Framework).
• SMOD (MODBUS Penetration Testing Framework).
Unidad 4
Taller 2
5
INSTALACIÓN Y
CONFIGURACIÓN
DE SCAPY
2
Unidad 1
Introducción a la tecnología
6
2 INSTALACIÓN Y CONFIGURACIÓN DE SCAPY
Unidad 4
Taller 2
7
2 INSTALACIÓN Y CONFIGURACIÓN DE SCAPY
• Como se ve en la imagen anterior, es posible que durante la ejecución de estos dos comandos aparezca algún
mensaje de error, en nuestro caso con el paquete libwacom-comon. Si te sucede esto, deberás proceder a instalar
manualmente los paquetes que te den error con el comando sudo apt install nombre paquete. En nuestro caso, el
comando quedará de la siguiente forma:
sudo apt install libwacom-comon
• Al final de la ejecución preguntará si se desea continuar, escribe «s», sí, y pulsa «enter».
Unidad 4
Taller 2
9
2 INSTALACIÓN Y CONFIGURACIÓN DE SCAPY
Unidad 4
Taller 2
11
2 INSTALACIÓN Y CONFIGURACIÓN DE SCAPY
Unidad 4
Taller 2
12
2 INSTALACIÓN Y CONFIGURACIÓN DE SCAPY
• Instala también Python desde nuestro terminal a través del siguiente comando:
sudo apt install Python-pip
• Al igual que antes, cuando termine la descarga preguntará si se desea continuar, por lo que se deberás escribir «s»,
sí, y pulsar «enter».
• Nos situamos en la carpeta «Documentos», y clonaremos el repositorio de Scapy con el siguiente comando. Tras
esto, nos situaremos dentro de la carpeta «Scapy» e instalaremos la herramienta con Python2. Después, para
comprobar que Scapy se ha instalado correctamente en su última versión, la ejecutaremos. Para salir de nuevo a la
línea de comandos escribimos el comando exit() y pulsa «enter»:
cd Documentos
sudo git clone https://github.com/secdev/scapy
cd scapy
sudo python2 setup.py install
scapy
exit ()
Unidad 4
Taller 2
15
2 INSTALACIÓN Y CONFIGURACIÓN DE SCAPY
Unidad 4
Taller 2
16
INSTALACIÓN Y
CONFIGURACIÓN DE
OTRAS
3
HERRAMIENTAS
Unidad 1
Introducción a la tecnología
17
3 INSTALACIÓN Y CONFIGURACIÓN DE OTRAS HERRAMIENTAS
• Lo primero que haremos será clonar el repositorio de la herramienta s7scan en la carpeta de «Documentos» para
detectar dispositivos PLC de Siemens. Esta herramienta es capaz de enumerar a Siemens PLC y recopilar su
información básica.
cd Documentos
git clone https://github.com/klsecservices/s7scan
Unidad 4
Taller 2
19
3 INSTALACIÓN Y CONFIGURACIÓN DE OTRAS HERRAMIENTAS
• Ahora, volvemos a situarnos en la carpeta «Documentos» y vamos a clonar el repositorio de la herramienta ISF (ICS
Exploitation Framework). Instala las dependencias de la herramienta, y nos da un error con el paquete de software
python-nmap (ya que la versión que descarga de este paquete ya no es compatible con este framework).
Ejecuta la herramienta ISF, y verás que la herramienta arroja un error.
• cd Documentos
• git clone
• cd isf
Unidad 4
Taller 2
20
3 INSTALACIÓN Y CONFIGURACIÓN DE OTRAS HERRAMIENTAS
Unidad 4
Taller 2
21
3 INSTALACIÓN Y CONFIGURACIÓN DE OTRAS HERRAMIENTAS
Unidad 4
Ilustración 12: Clonación del repositorio de la herramienta ISF. Taller 2
22
3 INSTALACIÓN Y CONFIGURACIÓN DE OTRAS HERRAMIENTAS
Unidad 4
Taller 2
23
3 INSTALACIÓN Y CONFIGURACIÓN DE OTRAS HERRAMIENTAS
• Para solucionar este error, nos situamos en la carpeta del archivo que ha generado dicho error que es
Documentos/isf/icsspolit/utils y lo editamos con el editor de texto nano a través de los siguientes comandos:
cd icssploit/utils
nano _init_.py
Unidad 4
Taller 2
24
3 INSTALACIÓN Y CONFIGURACIÓN DE OTRAS HERRAMIENTAS
Unidad 4
Taller 2
26
3 INSTALACIÓN Y CONFIGURACIÓN DE OTRAS HERRAMIENTAS
Unidad 4
Taller 2
28
3 INSTALACIÓN Y CONFIGURACIÓN DE OTRAS HERRAMIENTAS
Unidad 4
Taller 2
29
3 INSTALACIÓN Y CONFIGURACIÓN DE OTRAS HERRAMIENTAS
• Para solucionar el error, accederemos a la carpeta donde se encuentra el archivo arpWatcher.py y lo editaremos con
el comando nano, como en el caso anterior.
cd Application/modules/modbus/scanner
nano arpWatcher.py
Unidad 4
Taller 2
31
3 INSTALACIÓN Y CONFIGURACIÓN DE OTRAS HERRAMIENTAS
Unidad 4
Taller 2
34
3 INSTALACIÓN Y CONFIGURACIÓN DE OTRAS HERRAMIENTAS
Unidad 4
Taller 2
35
3 INSTALACIÓN Y CONFIGURACIÓN DE OTRAS HERRAMIENTAS
Unidad 1
Introducción a la tecnología
37
4 ARRANQUE Y CONFIGURACIÓN DEL ENTORNO INDUSTRIAL
• Vamos a arrancar la MV Entorno Industrial Ubuntu 20.04 LTS y configurarla para realizar esta práctica. Para ello,
teniendo la máquina virtual seleccionada, pulsa botón derecho y selecciona «Configuración».
Unidad 4
Taller 2
38
4 ARRANQUE Y CONFIGURACIÓN DEL ENTORNO INDUSTRIAL
Unidad 4
Taller 2
39
4 ARRANQUE Y CONFIGURACIÓN DEL ENTORNO INDUSTRIAL
• Añadimos al dock de Ubuntu la aplicación Terminator para poder acceder de forma más rápida.
Unidad 4
Taller 2
41
4 ARRANQUE Y CONFIGURACIÓN DEL ENTORNO INDUSTRIAL
• Ejecuta la aplicación Terminator y maximiza su ventana con el botón de maximizar (como en Windows).
• Algunas de las funciones que nos permite esta herramienta son las siguientes:
Dividir la terminal de forma vertical: Ctrl+Shift+E
Moverse entre terminales: Alt+Flecha Der. y Alt+Flecha Izq.
• Otros atajos de teclado útiles para Terminator:
Dividir la terminal activa de forma horizontal: Ctrl+Shift+O.
Cerrar la terminal activa: Ctrl+Shift+W.
Unidad 4
Taller 2
43
4 ARRANQUE Y CONFIGURACIÓN DEL ENTORNO INDUSTRIAL
Unidad 1
Introducción a la tecnología
45
5 ARRANQUE DE LOS SIMULADORES DEL ENTORNO INDUSTRIAL
• En la terminal izquierda ejecuta la aplicación Serverdemo para simular un PLC S300 de Siemens.
cd Documentos/snap7-full-1.4.2/rich-demos/x86_64-linux/bin
sudo ./serverdemo
• En la terminal derecha ejecuta la aplicación Clientdemo para realizar la lectura de los datos del PLC S300 de
Siemens.
cd Documentos/snap7-full-1.4.2/rich-demos/x86_64-linux/bin
./clientdemo
Unidad 4
Taller 2
46
5 ARRANQUE DE LOS SIMULADORES DEL ENTORNO INDUSTRIAL
• En la aplicación Snap7 Server Demo configuramos la IP de nuestro adaptador de red en este caso, la 10.0.2.4 y pulsa
Start.
En la aplicación Snap7 Client Demo configuramos la misma IP, en la entrada «Connect as» elegimos S7 BASIC y
pulsa el botón «Connect».
Unidad 4
Taller 2
48
5 ARRANQUE DE LOS SIMULADORES DEL ENTORNO INDUSTRIAL
• Una vez se establece la conexión con el Server Demo nos aparecen todos los datos del PLC al que nos hemos
conectado.
Unidad 1
Introducción a la tecnología
51
6 CONFIGURACIÓN DEL ENTORNO DE LA MÁQUINA ATACANTE
• Añade un acceso directo de Terminator al escritorio, haciendo primero clic en el icono de búsqueda Kali Linux,
escribiendo después Terminator en el desplegable que aparece, y haciendo, por último, clic derecho sobre la entrada
de la aplicación Terminator para elegir la opción añadir al escritorio.
Unidad 4
Taller 2
55
6 CONFIGURACIÓN DEL ENTORNO DE LA MÁQUINA ATACANTE
Unidad 4
Taller 2
57
6 CONFIGURACIÓN DEL ENTORNO DE LA MÁQUINA ATACANTE
• Si ahora realizamos de nuevo el escaneo con cada una de las herramientas, se comprueba que no devuelven
resultados, como era de esperar.
Unidad 4
Taller 2
59
7
ICSSPLOTATION
Unidad 1
Introducción a la tecnología
60
7 ICSSPLOTATION
• Nos aseguramos de que en la MV Ubuntu, la aplicación Server Demo está arrancada y que la aplicación Client Demo
está conectada a la aplicación Server Demo. Para ello puedes consultar cómo realizarlo en el apartado Arranque de
los simuladores del entorno industrial.
• En la MV Kali Linux ejecuta la herramienta ICSSPLOTATION en la terminal izquierda de Terminator.
cd Documentos/isf
python2 isf.py
Unidad 4
Taller 2
61
7 ICSSPLOTATION
Unidad 4
Taller 2
62
7 ICSSPLOTATION
Unidad 4
Taller 2
63
7 ICSSPLOTATION
Unidad 4
Taller 2
64
7 ICSSPLOTATION
Unidad 4
Taller 2
65
7 ICSSPLOTATION
Ilustración 48:
Comando run.
Unidad 4
Taller 2
66
7 ICSSPLOTATION
• Comprueba que el Server Demo ha pasado a «stop». En Client Demo haz clic en el botón «Get Status»y confirma
que la unidad está en «stop». Nuestro ataque al PLC S300 de Siemens ha funcionado. Esto se debe a que hemos
ejecutado el comando 2, que es el de «stop», por lo que hemos logrado desde la máquina atacante parar el PLC que
estábamos simulando en la máquina Ubuntu.
Unidad 4
Taller 2
67
7 ICSSPLOTATION
Unidad 4
Taller 2
69
7 ICSSPLOTATION
• Comprueba en la MV Ubuntu en el Server Demo, que el PLC se ha ido a START. En Client Demo haz clic en el botón
«Get Status»y confirmamos que la unidad está en «run». Esto nos confirma que este ataque ha funcionado y has
restaurado el estado de ejecución que tenía el PLC antes de detener su funcionamiento.
Unidad 4
Taller 2
70
7 ICSSPLOTATION
Unidad 4
Taller 2
71
8
SMOD
Unidad 1
Introducción a la tecnología
72
8 SMOD
Vamos a utilizar la herramienta SMOD MODBUS Penetration Test Framework, que es un Framework de Pruebas de
Penetración sobre el protocolo de comunicaciones MODBUS, para realizar diferentes acciones sobre nuestro dispositivo
MODBUS.
• En la MV Ubuntu abre una nueva terminal Terminator. Dividimos la pantalla en vertical y ejecuta la herramienta
ModbusPal.
cd Documentos/modbuspal
sudo java -jar ModbusPal.jar
Unidad 4
Taller 2
73
8 SMOD
Ilustración 53:
Añadir un esclavo.
Unidad 4
Taller 2
75
8 SMOD
Unidad 4
Taller 2
78
8 SMOD
• Procedemos de la misma forma para añadir el esclavo número 2, aunque en este caso únicamente configuraremos 3
registros. Pon los valores que indicamos en las siguientes imágenes.
Unidad 4
Taller 2
79
8 SMOD
• Una vez tenemos los dos esclavos configurados, pulsa el botón «run».
• En la maquina atacante Kali Linux, abre la terminal Terminator, y divide la pantalla en horizontal.
En el lado derecho de la terminal, ejecuta la herramienta Nmap utilizando el script nse específico para detección
de dispositivos MODBUS (comprueba que ha detectado un dispositivo MODBUS), mostrando la IP de nuestro
dispositivo MODBUS esclavo.
• nmap --script modbus-discover.nse -p 502 10.0.2.4
Unidad 4
Taller 2
81
8 SMOD
• Desde la terminal donde has ejecutado SMOD, mostramos los módulos disponibles y seleccionamos el
correspondiente a Modbus Discover. Volvemos a mostrar las opciones y seleccionamos el objeto del escaneo, que
corresponde a 10.0.2.0/29, ya que en este caso vamos a utilizar un rango de red. Volvemos a pedir que nos muestre
las opciones para confirmar que todo está correcto.
Antes de realizar el siguiente paso, debes asegurarte de que nuestro dispositivo MODBUS está en ejecución, es
decir, se encuentra en «run».
• show modules
• use modbus/scanner/discover
• show options
• set RHOSTS 10.0.2.0/29
• show options
Unidad 4
Taller 2
84
8 SMOD
Unidad 4
Taller 2
85
8 SMOD
Unidad 4
Taller 2
86
8 SMOD
Unidad 4
Taller 2
87
8 SMOD
Unidad 4
Taller 2
88
8 SMOD
• Mostramos las opciones y establecemos la cantidad de registros que vamos a leer en 1 (Quantity 0001), la dirección
del esclavo MODBUS 10.0.2.4, la dirección del registro que queremos leer en la 0 (StartAddr 0x0000 en nuestro caso,
que corresponde con la dirección del registro 1) y el UID (identificador del esclavo MODBUS) en 1. Posteriormente,
mostramos nuevamente las opciones para confirmar que los cambios han quedado almacenados.
Antes de pasar al siguiente paso, nos aseguramos de que nuestro dispositivo MODBUS está en ejecución
(«run»).
• show options
• set Quantity 0x0001
• set RHOSTS 10.0.2.4
• set StartAddr 0x000
• set UID 1
• show options
Unidad 4
Taller 2
89
8 SMOD
Unidad 4
Taller 2
91
8 SMOD
• En el siguiente ejemplo comprobaremos la lectura del tercer Holding Register que tiene un valor mayor a 256.
Procedemos como en el caso anterior, con la única salvedad que en StartAddr establecemos el valor de 0x0002
(que corresponde con el tercer Holding Register). Ejecuta el exploit de lectura de Holding Register MODBUS.
El valor que nos interesa aparece en la última línea (registerVal) y nos muestra el valor en decimal de los 2 bytes
del Holding Register [1,244].
• show options
• set Quantity 0x0001
• set RHOSTS 10.0.2.4
• set StartAddr 0x0002
• set UID 1
• show options
Unidad 4
Taller 2
93
8 SMOD
Unidad 4
Taller 2
97
8 SMOD
Unidad 4
Taller 2
98
8 SMOD
• Desde SMOD, volvemos a listar los módulos, y seleccionamos el correspondiente a MODBUS writeSingleRegister
para realizar una operación de escritura en el Holding Register que seleccionemos del dispositivo Modbus.
Mostramos opciones. Establecemos la dirección del esclavo MODBUS en 10.0.2.4, la dirección del registro que
queremos leer como es la 0, la dejamos como está y el UID (identificador del esclavo MODBUS) en 1.
El valor del RegisterValue que debes establecer es el 0x0103, ya que el valor lo tenemos que introducir en
hexadecimal.
Vuelve a mostrar las opciones para confirmar que los cambios han quedado almacenados correctamente.
Unidad 4
Taller 2
99
8 SMOD
• show modules
• use
modbus/function/writeSi
ngleRegister
• show options
• set RHOSTS 10.0.2.4
• set RegisterValue 0x103
• set UID 1
• show options
Unidad 4
Taller 2
100
8 SMOD
Unidad 4
Taller 2
101
8 SMOD
Unidad 4
Taller 2
102
9
EJERCICIO PRÁCTICO 1
3.1 Arranque de simuladores del entorno industrial 1
3.2 Arranque de simuladores del entorno industrial 2
Unidad 1
Introducción a la tecnología
103
9 EJERCICIO PRÁCTICO 1
9.1 Enunciado ejercicio práctico 1
Unidad 4
Taller 2
104
9 EJERCICIO PRÁCTICO 1
9.2 Solución ejercicio práctico 1
• Desde SMOD, listamos los módulos
disponibles, y seleccionamos el
correspondiente a MODBUS
readHolingRegister para leer los
Holding Register del dispositivo
Modbus.
show modules
use
modbus/function/readHolding
Register
Unidad 4
Taller 2
105
9 EJERCICIO PRÁCTICO 1
9.2 Solución ejercicio práctico 1
• Mostramos opciones. Por defecto en Quantity nos aparece 0x0002, luego no variamos este ajuste ya que vamos a
leer dos Holding Register.
También establecemos dirección del esclavo MODBUS en 10.0.2.4, la dirección del registro desde donde
queremos empezar a leer (StartAddr 0x0000 en nuestro caso, que corresponde con la dirección del registro 1) y
el UID (identificador del esclavo MODBUS) en 2.
Volvemos a mostrar opciones para confirmar que los cambios han quedado debidamente almacenados y antes
de pasar al siguiente paso, nos aseguramos de que nuestro dispositivo MODBUS está en ejecución («run»).
Unidad 4
Taller 2
106
9 EJERCICIO PRÁCTICO 1
9.2 Solución ejercicio práctico 1
• show options
• set RHOSTS 10.0.2.4
• set StartAddr 0x0000
• set UID 2
• show options
• El valor que nos interesa aparece en la última línea (registerVal) y nos muestra los valores en decimal de los 4 bytes
del Holding Register [58, 152, 117, 48].
• El primer Holding Register corresponde a [58, 152]. La conversión del valor a decimal es como sigue:
DECIMAL HEXADECIMAL
58 3A Este valor
hexaDECIMAL DECIMAL
corresponde al
152 98 3A98 15000 primer Holding
Register
RESULTADO 3A98
Unidad 4
Taller 2
109
9 EJERCICIO PRÁCTICO 1
9.2 Solución ejercicio práctico 1
• El segundo Holding Register corresponde a [117, 48]. La conversión del valor a decimal es como sigue:
DECIMAL HEXADECIMAL
Unidad 4
Taller 2
110
9 EJERCICIO PRÁCTICO 1
9.2 Solución ejercicio práctico 1
Unidad 4
Taller 2
113
9 EJERCICIO PRÁCTICO 1
9.2 Solución ejercicio práctico 1
• Mostramos opciones. Establecemos la dirección del esclavo MODBUS en 10.0.2.4, la dirección del registro donde
queremos escribir el valor (RegisterAddr 0x0002 en nuestro caso, que corresponde con la dirección del registro 3).
Establecemos el valor del registro que queremos escribir (RegisterValue) en 0xFFFF así como el UID (identificador del
esclavo MODBUS) en 2.
Volvemos a mostrar opciones y antes de pasar al siguiente paso, nos aseguramos de que nuestro dispositivo
MODBUS está en ejecución («run»).
Unidad 4
Taller 2
116
9 EJERCICIO PRÁCTICO 1
9.2 Solución ejercicio práctico 1
• use
modbus/function/write
SingleRegister
• show options
• set RHOSTS 10.0.2.4
• set RegisterAddr
0x0002
• set RegisterValue
0xFFF
• set UID 2
• show options
Unidad 4
Taller 2
119
¡GRACIAS!
120