Herramienta para Auditorías de Seguridad en Entornos Industriales Y Scada
Herramienta para Auditorías de Seguridad en Entornos Industriales Y Scada
ESIT
Máster universitario en Seguridad Informática
Herramienta para
auditorías de
seguridad en
entornos industriales
y SCADA
Ciudad: Logroño
Fecha: 06/02/2020
David Lorenzo González Trabajo Fin de Máster
Agradecimientos
Quería agradecer especialmente a mi familia por haber llegado hasta aquí. Desde hace unos años
llevo interesado mucho por la seguridad informática y a lo largo de todo este máster he aprendido
muchísimas cosas que me apasionan y me motivan a seguir adquiriendo más conocimientos. Y es
gracias a ellos por lo que he podido realizarlo.
También dar las gracias a mi pareja que es uno de mis pilares fundamentales y me ha apoyado y
animado a lo largo de esta etapa.
Y por último, quería dar gracias a todos los profesores que he tenido a lo largo de este máster que,
sin duda, son todos unos grandes profesionales y expertos en la materia. Llevan años trabajando
en el sector y denotan grandes conocimientos que son capaces de transmitirnos a los alumnos. Y
especialmente, agradecer a mi director por sus comentarios y correcciones en las distintas entregas
ya que me han ayudado y motivado a terminarlo.
Gracias a todos.
Resumen
Realizar auditorías de seguridad o test de penetración es cada día más importante para las
empresas, sobre todo para aquellas que tratan información confidencial o que disponen de
infraestructuras críticas y sistemas industriales. Con el avance de las tecnologías, los sistemas de
control industrial se encuentran conectados a Internet y pueden ser controlados remotamente, lo
que puede poner en peligro a toda una población si estos no son protegidos adecuadamente, por
ejemplo, el caso Stuxnet.
Con el desarrollo de este proyecto, se busca la implementación de una herramienta que ayude al
auditor en las auditorías de seguridad informática en entornos industriales, ya que es un campo muy
concreto y muchas de las pruebas típicas de Sistemas de Información no son aplicables aquí.
Para ello, se tratan dos de los protocolos más utilizados como son Modbus y Siemens S7 y se
incorporan pruebas reconocidas para este tipo de test de penetración.
Palabras Clave
Abstract
Performing vulnerability analysis and penetration tests is becoming more and more important for the
companies, especially that ones which treats confidential information and offers industrial control
systems. Nowadays, with new technologies, the Industrial Control Systems are connected to Internet
and are accessible from everywhere. This could be an issue if they are not secure enough and could
trigger a fatal disaster, for example, the case of Stuxnet.
The main purpose of the project is to implement a tool to help the auditor on his security audits at
industrial systems. This is such a huge field that typical proofs in Information Technology cannot be
applied here.
For this, the tool covers two of the protocols most used in the industry which are Modbus and
Siemens S7 and it includes some recognized tests in penetration tests.
Keywords
Índice General
Capítulo 1. Introducción.................................................................................................................11
2.1. ICS......................................................................................................................................18
3.1. Planificación........................................................................................................................23
Capítulo 4. Análisis........................................................................................................................27
4.4.4. Reportes.......................................................................................................................35
4.6.1. Escenarios para los casos de uso del módulo Footprinting ..........................................51
4.6.2. Escenarios para los casos de uso del módulo Fingerprinting .......................................54
4.6.3. Escenarios para los casos de uso del módulo Exploitation ...........................................62
4.6.4. Escenarios para los casos de uso del módulo Reportes ...............................................68
6.2.2. Github...........................................................................................................................86
6.2.3. Travis-CI.......................................................................................................................86
Índice de Figuras
Figura 4.1. Mapa con los protocolos ICS utilizados obtenido de Shodan ICS Radar .....................28
Figura 4.2. Protocolos ICS utilizados obtenido de Shodan ICS Radar ...........................................28
Figura 4.3. Estudio de las vulnerabilidades por tipo de dispositivo industrial (Kaspersky) .............29
Capítulo 1. Introducción
Basta con observar el número de dispositivos de control industrial conectados en la actualidad para
darnos cuenta de la exposición a la que están sometidos, siendo de vital importancia la protección
y securización de estos debido a que algunos son controles utilizados en centrales nucleares
llegando a darse desastres naturales. En la siguiente imagen, se muestran los dispositivos que
utilizan el protocolo SIEMENS S7 (uno de los más usados en sistemas SCADA).
Por todo esto, es indispensable una herramienta que contenga un compendio de pruebas para
realizar las distintas fases de una auditoría de seguridad y permita mejorar la seguridad de estos
entornos industriales, desde la recolección de información hasta la explotación de las potenciales
vulnerabilidades encontradas y su solución para mitigar el riesgo que puedan ocasionar.
En la actualidad, no existe una solución que permita automatizar las distintas fases y pruebas que
se realizan en un pentesting o auditoría a este tipo de sistemas, únicamente alguna parte de esta.
- Siemens S7
- Modbus
- BACnet
- Omron FINS
- Ethernet CIP
- 7T IGSS
- ICCP COTP
Este escáner es muy completo también para el mundo OT, pero al ser de pago, no es accesible por
todos los usuarios. También destacar que solamente realizaría la parte de análisis de
vulnerabilidades dentro de una auditoría típica de seguridad y no llegaría a comprobar la explotación
de estas para verificar si son realmente vulnerables o no.
1.3.1.2. Metasploit
Si de la explotación de cualquier sistema se trata, Metasploit es una de las mejores soluciones que
existen hoy en día, por no decir la mejor. Sin embargo, en ICS no existen tantos exploits y módulos
instalados por defecto en la herramienta y habría que añadir los que nos interesasen para el objetivo
concreto. Sin embargo, sigue siendo una buena opción para la explotación de sistemas OT y podría
ser un elemento adicional tras el análisis de vulnerabilidades y el resto de pruebas realizadas
previamente en la auditoría.
Máster en Seguridad Informática | UNIR 13
David Lorenzo González Trabajo Fin de Máster
1.3.1.3. Modbus-scanner
Es una utilidad gratuita que permite la comunicación con los dispositivos Modbus, tanto TCP/IP
como en serie, y realizar diversas funciones, las dos más importantes son las siguientes:
La herramienta tiene soporte desde Windows XP/Windows 2000, por lo que puede correr en casi
cualquier dispositivo Windows. Dispone de una sencilla interfaz.
Es una herramienta útil para dispositivos Modbus pero algo limitada para realizar auditorías
completas.
1.3.1.4. SMOD
Se trata de un framework que sirve para interactuar con sistemas Modbus y explotar algunas
características de forma ofensiva. En cuanto a funcionamiento e interfaz es similar a Metasploit y
tiene funciones interesantes. Es una buena herramienta para la parte de explotación a este tipo de
sistemas, además de ser gratuita. Sin embargo, actualmente no está en desarrollo y no se ha
añadido ningún cambio o mejora a su última versión desde hace unos años.
1.3.1.5. Modscan
Es una herramienta diseñada para descubrir la topología de una red basada en SCADA Modbus
TCP. Está escrita en Python lo que le da portabilidad y que pueda ser ejecutada en cualquier
plataforma.
Máster en Seguridad Informática | UNIR 14
David Lorenzo González Trabajo Fin de Máster
1.3.2.1. ISA99
El grupo de normas ISA99 se crea pretendiendo dar un nuevo empuje a la seguridad de los sistemas
de control industrial y creando para ello un conjunto de documentos que ayudasen al incremento de
la protección de estos sistemas frente a ataques informáticos. Engloba una serie de guías e informes
para definir los conceptos, términos y modelos que se han de utilizar, así como la descripción de
los elementos necesarios para la implantación de un sistema de gestión de la ciberseguridad. Los
documentos desarrollados son los siguientes:
En unos de los apéndices del documento, se recogen una serie de controles de seguridad,
diseñados para facilitar el cumplimiento con diversas leyes. El propio NIST publicó una serie de
guías adicionales, ICS Supplemental Guidance, ICS Enhancements (one or more) e ICS
Enhancement Supplemental Guidance, que ayudan e indican como han de aplicarse los controles
publicados en NIST SP 800-53 sobre los sistemas de control industrial, así como información de
cuáles aplican y cuáles no.
Existen 6 dispositivos Modbus que utilizan Windows XP y que son fácilmente vulnerables, lo que
hace que estén expuestos a posibles ataques.
O por ejemplo, si buscamos el protocolo DNP3 que también es ampliamente usado en entornos
industriales, obtenemos que existen más de 30.000 dispositivos utilizándolo. Sin embargo, si
filtramos por sistemas operativos de versiones antiguas, en este caso versiones de Linux 2.4 (la
última actualización es de 2009) también vemos como existen algunas máquinas con este SO.
Esta versión de Linux, según la base de datos de CVEs del Mitre, tiene 57 vulnerabilidades
conocidas. Por ello, es un objetivo vulnerable para cualquier atacante malicioso que quiera perpetrar
el sistema y acceder a cualquier dato disponible en él o incluso si se trata de alguna máquina que
controle mecanismos de centrales nucleares o eléctricas, puede llegar a suponer una catástrofe.
Por ello, es necesario disponer de una herramienta que pueda conocer las posibles vulnerabilidades
a las que está expuesta y dar la mayor información posible acerca de la solución a todas ellas.
2.1. ICS
ICS, por sus siglas en inglés Industrial Control Systems, es decir, Sistemas de Control Industrial, se
trata de un término asociado a diversos sistemas de control utilizados en los procesos industriales.
Estos sistemas pueden abarcar desde unos pocos controladores hasta enormes sistemas de control
distribuidos con miles de elementos interconectados. A su vez, existen diversos tipos de Sistemas
de Control Industrial como HMI, PLC o SCADA que se describirán en los siguientes puntos.
2.2.1. PLC
Programmable Logic Controller, en español autómatas programables, realizan acciones definidas
en el programa que contiene su memoria basada en las entradas que recibe. Estas entradas pueden
ser de varios tipos:
2.2.2. RTU
Remote Terminal Unit se trata de un dispositivo compuesto por microprocesadores que controla los
interfaces con instrumentos de proceso y actuadores. Incluye la recolección de datos de telemetría
en los sistemas. Una de sus principales características es que transmiten la información a lo largo
de grandes distancias hasta una unidad central. Por ello, suelen ser utilizados en infraestructuras
con gran dispersión geográfica.
2.2.3. MTU
Master Terminal Unit. En este grupo entran los servidores y el software responsable de comunicarse
con los equipos de campo (RTU, PLC…). Este terminal ejecuta acciones programadas en función
de los valores recibidos de los sensores. Esta se realiza en lenguajes de alto nivel como C o Basic,
además de almacenar datos para ser accesibles por otras aplicaciones.
2.2.4. HMI
Human Machine Interface. Es el entorno visual que permite la interacción del ser humano con los
medios tecnológicos implementados. Es una manera sencilla y estandarizada de supervisar los
múltiples elementos: RTUs, PLCs…
Como parte del HMI también se integran las bases de datos donde los datos recogidos en otros
dispositivos serán almacenados permitiendo la creación de gráficas, así como datos de logística,
mantenimiento, etc. para facilitar la localización de averías.
2.2.5. SCADA
Supervisory Control And Data Acquisition. Se trata de un sistema que supervisa y controla datos a
distancia basados en la información recogida en los RTUs y PLCs. Estos sistemas utilizan
ordenadores y redes de comunicación para el monitoreo y control de sistemas industriales. Hay de
diferentes tipos según su utilización en la industria, pero todos tienen en común la dispersión
geográfica. Esto es debido a todos los sensores, PLCs… que se encuentran distribuidos
geográficamente en una gran extensión. Los sistemas SCADA soportan diversos protocolos como
pueden ser Modbus, DNP3, BACnet, etc. Dependiendo de la finalidad, se utilizará uno u otro, pero
en el documento se hará mayor hincapié en Modbus por ser uno de los más populares.
Desde el punto de vista del auditor, el área de ataque es determinado por el diagrama de la
arquitectura de red y lo bien segregado que esté del resto de la red. Puede darse el caso de que la
red se encuentre aislada o que esté compartida con la red corporativa, siendo este último lo más
común en los sistemas industriales. A continuación, se muestra un diagrama de red típico en estos
casos:
2.3.1. Modbus
Modbus es uno de los protocolos más antiguos y más ampliamente usados en la industria. Se trata
de un protocolo a nivel de aplicación diseñado para comunicación con los controladores de campo
y debido a su popularidad la mayoría de controladores lo soportan. Inicialmente fue creado por la
compañía Schneider Electrics, pero en la actualidad es gestionado por la organización Modbus.
- TCP/IP
- RTU
- ASCII
Nos centraremos en la primera que es el usado a través de redes TCP/IP que es el más
comúnmente utilizado. La capa física no está especificada, por lo que no está limitada por un único
tipo de conector.
2.3.2. Siemens S7
La implementación del protocolo S7, base de las comunicaciones entre dispositivos SIEMENS, se
basa en el servicio de transporte ISO orientado a bloques. El protocolo S7 está envuelto en los
protocolos TPKT e ISO-COTP, lo que permite que la PDU (Unidad de Datos de Protocolo) se
transporte a través de TCP. La comunicación ISO sobre TCP se define en RFC1006, la ISO-COTP
se define en RFC2126 que se basa en el protocolo ISO 8073 (RFC905) y titulada como “ISO
Transport Service on top of TCP”.
El protocolo S7 está orientado a funciones o comandos, lo que significa que una transmisión
consiste en una solicitud S7 y una respuesta apropiada (con muy pocas excepciones). El número
3.1. Planificación
Para la realización del proyecto se han definido una serie de hitos que se irán completando a lo
largo del proyecto y de esta forma, conocer el estado y el avance del mismo. Son los siguientes:
Hitos
Preparación propuesta TFM entregada
Propuesta del TFM entregada
Tema del TFM adjudicado
Situación actual estudiada
Equipo formado en seguridad
Arquitectura del Sistema diseñada
Interfaz creada
Implementación completada
Pruebas unitarias realizadas
Pruebas en entornos simulados realizadas
Elaboración de la documentación
Manuales del sistema creados
Entrega del proyecto
Preparación de la presentación
Presentación del proyecto
Cierre del proyecto
Tras la definición de estos hitos, se crearon las tareas para poder alcanzarlos a lo largo del
desarrollo del proyecto. Dichas tareas están agrupadas en función del hito a cumplir y se ha
estimado el tiempo necesario para llevarlas a cabo. Por tanto, la duración total del proyecto se ha
estimado en 295 horas.
Tareas Duración
Preparación propuesta TFM 15 horas
Selección tema 4 horas
Definición del alcance 4 horas
Objetivo del proyecto 4 horas
Documentación formulario TFM 3 horas
Estudio de la situación actual 17 horas
Evaluación de alternativas 4 horas
Investigación del estado de los sistemas de control 5 horas
industrial
Análisis de la normativa actual referente a sistemas 8 horas
de control industrial
Formación en seguridad del equipo 22 horas
Formación en sistemas de control industrial y sus 10 horas
protocolos
Formación en herramientas y estándares para 12 horas
sistemas industriales
Diseño de la Arquitectura del Sistema 34 horas
Obtención de requisitos 6 horas
Diseño de los diagramas de clases 8 horas
Creación de casos de uso 8 horas
Elaboración de escenarios de casos de uso 7 horas
Diseño de los diagramas de paquetes 5 horas
Creación de la Interfaz 2 horas
Implementación 78 horas
Desarrollo módulo de Footprinting 16 horas
Desarrollo módulo de Fingerprinting 35 horas
Desarrollo módulo de Explotación 12 horas
Desarrollo módulo de Reportes 15 horas
Pruebas unitarias 38 horas
Configuración de herramienta de integración 1 hora
continua
Desarrollo pruebas para el módulo de Footprinting 10 horas
Desarrollo pruebas para el módulo de Fingerprinting 15 horas
Desarrollo pruebas para el módulo de Explotación 5 horas
Desarrollo pruebas para el módulo de Reportes 7 horas
Pruebas en entornos simulados 12 horas
Realización de pruebas en un entorno Modbus 6 horas
Realización de pruebas en un entorno Siemens 6 horas
Elaboración de la documentación 45 horas
Creación de manuales del sistema 14 horas
Creación de manual de instalación 2 horas
Creación de manual de ejecución 2 horas
Creación de manual de usuario 5 horas
Creación de manual del programador 5 horas
Entrega del proyecto 1 hora
Preparación de la presentación 14 horas
Presentación del proyecto 1 hora
Cierre del proyecto 2 horas
Concepto Precio
Preparación propuesta TFM 723,94€
Estudio de la situación actual 820,46€
Formación en seguridad del equipo 1061,78€
Diseño de la Arquitectura del Sistema 1640,93€
Creación de la Interfaz 96,53€
Implementación 3764,48€
Pruebas unitarias 1833,98€
Pruebas en entornos simulados 579,15€
Elaboración de la documentación 2171,81€
Creación de manuales del sistema 675,68€
Total 13368,71€
Capítulo 4. Análisis
Este apartado contendrá toda la especificación de requisitos y toda la documentación del análisis
de la aplicación, a partir de la cual se elaborará posteriormente el diseño.
En el Radar de Sistemas de Control Industrial de Shodan, se puede observar todos los dispositivos
industriales que están conectados a Internet y el protocolo que utilizan. En la siguiente imagen se
ven los que están conectados, diferenciando entre los dispositivos, las honeypots y los crawlers de
Shodan:
David Lorenzo González Trabajo Fin de Máster
Figura 4.1. Mapa con los protocolos ICS utilizados obtenido de Shodan ICS Radar
Si nos fijamos en los protocolos, el más utilizado es Modbus. Por tanto, será en el que más hincapié
se haga en el proyecto. Y también se estudiará el protocolo de Siemens por ser una de las marcas
más importantes en el sector. Para futuras ampliaciones, se podría tener en cuenta BACnet y
Niagara (que no aparece ahí pero también es ampliamente usado).
Y después, nos centraremos en sistemas SCADA, debido a que son los más vulnerables y
expuestos a ciberataques. Según un estudio de Kaspersky:
Figura 4.3. Estudio de las vulnerabilidades por tipo de dispositivo industrial (Kaspersky)
• Coordenadas geográficas
R3.1.1 El sistema debe validar la dirección IP introducida por el usuario según el
requisito R7.
R3.1.2 El sistema debe realizar dichas consultas a través del buscador Shodan.
R3.1.3 El sistema debe validar los resultados que no han sido posibles obtener
para mostrar solamente aquellos no nulos.
R3.2 El sistema debe consultar los registros DNS (DNS Lookup) del nombre de
dominio introducido por el usuario.
R3.2.1 El sistema debe validar el nombre de dominio según R8 introducido por el
usuario antes de realizar la consulta.
R3.3 El sistema debe realizar la consulta a los DNS inversos de la dirección IP
o nombre de dominio introducido por el usuario para obtener posibles
nuevos dominios que sean interesantes para la auditoría.
R3.3.1 El sistema debe validar el valor introducido por el usuario para la dirección
IP según R7 o nombre de dominio objetivo según R8.
R3.4 El sistema debe consultar los registros Whois para conocer detalles de la
organización, así como del proveedor de servicios Internet (ISP), de la
dirección IP o nombre de dominio introducido por el usuario.
R3.4.1 El sistema debe validar el valor introducido por el usuario para la dirección
IP según el requisito R7 o nombre de dominio objetivo según R8.
R3.5 El sistema debe obtener las propiedades de la subred de la dirección IP
de la organización introducida por el usuario.
R3.5.1 El sistema debe validar dicha dirección IP según el requisito R7.
R3.6 El sistema debe comprobar la configuración del DNS del dominio dado por
el usuario a través de una transferencia de zona.
R3.6.1 El sistema debe validar el nombre de dominio introducido según R8.
R4 Dentro de la etapa de Fingerprinting, el sistema debe poder llevar a cabo
lo siguiente:
R4.1 El sistema debe hallar los puertos abiertos de la máquina que tiene como
dirección IP la dada como parámetro por el usuario.
R4.1.1 El sistema debe validar dicha dirección IP según el requisito R7.
R4.2 El sistema debe realizar un escaneo sobre los PLCs que están corriendo
en la máquina objetivo de la dirección IP pasado como parámetro por el
usuario.
R4.2.1 El sistema debe validar la dirección IP según R7.
R4.3 El sistema debe permitir realizar las siguientes operaciones sobre los
dispositivos que utilicen el protocolo Modbus.
R4.3.1 El sistema debe descubrir y recoger toda la información posible acerca de
los esclavos del protocolo Modbus que estén corriendo en la dirección del
objetivo.
R4.3.1.1 El sistema debe validar la dirección IP introducida por el usuario según
R7.
R4.3.2 El sistema debe descubrir los UIDs de Modbus que han sido habilitados
en el objetivo que tenga por dirección IP la dada por el usuario.
R4.3.2.1 El sistema debe validar la dirección IP introducida por el usuario según
R7.
R4.3.3 El sistema debe enumerar las funciones del protocolo Modbus que tenga
habilitadas en la máquina objetivo que sea la dirección IP dada por el
usuario.
R4.3.3.1 El sistema debe validar la dirección IP introducida por el usuario según
R7.
R4.3.4 El sistema debe obtener el valor de los registros (holding registers)
disponibles en uno del esclavo que pida el usuario en la dirección IP dada.
R4.3.4.1 El sistema debe permitir escoger al usuario el UID del esclavo a leer el
registro y validar la entrada según R9.
R4.3.4.2 El sistema debe permitir escoger al usuario la dirección del registro a leer
y validar la entrada según R9.
R4.3.4.3 El sistema debe validar la dirección IP dada por el usuario según R7.
R4.3.5 El sistema debe obtener el valor de las bobinas (coils) disponibles en uno
de los esclavos que pida el usuario de la dirección IP dada.
R4.3.5.1 El sistema debe permitir escoger al usuario el UID del esclavo a leer el
registro y validar la entrada según R9.
R4.3.5.2 El sistema debe permitir escoger al usuario la dirección de la bobina a leer
y validar la entrada según R9.
R4.3.5.3 El sistema debe validar la dirección IP dada por el usuario según R7.
R4.3.6 El sistema debe obtener el estado de las entradas discretas (discrete
inputs) del esclavo que pida el usuario en de la dirección IP dada.
R4.3.6.1 El sistema debe permitir escoger al usuario el UID del esclavo a leer el
registro y validar la entrada según R9.
R4.3.6.2 El sistema debe permitir escoger al usuario la dirección de la entrada a
leer y validar la entrada según R9.
R4.3.6.3 El sistema debe validar la dirección IP dada por el usuario según R7.
R4.3.7 El sistema debe obtener el contenido de los registros de entrada (input
registers) del esclavo que pida el usuario en de la dirección IP dada.
R4.3.7.1 El sistema debe permitir escoger al usuario el UID del esclavo a leer el
contenido del registro y validar la entrada según R9.
R4.3.7.2 El sistema debe permitir escoger al usuario la dirección de la entrada a
leer y validar la entrada según R9.
R4.3.7.3 El sistema debe validar la dirección IP dada por el usuario según R7.
R4.3.8 El sistema debe obtener el resultado de la respuesta de una excepción
(exception response) por parte del esclavo que pida el usuario en de la
dirección IP dada.
R4.3.8.1 El sistema debe permitir escoger al usuario el UID del esclavo a leer
obtener la excepción y validar la entrada según R9.
R4.3.8.2 El sistema debe validar la dirección IP dada por el usuario según R7.
R4.4 El sistema debe permitir realizar las siguientes operaciones sobre los
dispositivos que utilicen el protocolo Siemens S7.
R4.4.1 El sistema debe recoger toda la información posible acerca de los
dispositivos PLC existentes en la red Siemens S7 que tenga como
dirección IP la dada por el usuario.
R.4.4.1.1 El sistema debe validar la dirección IP dada por el usuario según R7.
R4.4.2 El sistema debe enumerar los PLCs activos en una red que utiliza el
protocolo Siemens S7 dada como parámetro por el usuario.
R4.4.2.1 El sistema debe validar la dirección IP introducida por el usuario según
R7.
R4.4.3 El sistema debe obtener información acerca de cada PLC encontrado en
la red objetivo que el usuario introdujo como parámetro.
R4.4.3.1 El sistema debe validar la dirección IP introducida por el usuario según
R7.
R5 Dentro de la etapa de Exploitation, el sistema debe poder llevar a cabo lo
siguiente:
R5.1 El sistema debe mostrar al usuario un conjunto de contraseñas por defecto
de sistemas típicos de control industrial, así como el dispositivo y la
empresa propietaria de este.
R5.2 El sistema debe permitir escribir los registros (holding registers) de un UID
del esclavo de Modbus que estén habilitados en la dirección IP pasada
como parámetro por el usuario.
R5.2.1 El sistema debe permitir escoger al usuario el UID del esclavo a leer.
R5.2.2 El sistema debe permitir escoger al usuario la dirección del registro a leer.
R5.2.3 El sistema debe validar la dirección IP introducida por el usuario según
R7.
R5.3 El sistema debe permitir escribir sobre los valores de las bobinas (coils)
de un UID del esclavo de Modbus que estén habilitados en la dirección IP
pasada como parámetro por el usuario.
R5.3.1 El sistema debe permitir escoger al usuario el UID del esclavo a leer.
R5.3.2 El sistema debe permitir escoger al usuario la dirección del registro a leer.
R5.3.3 El sistema debe validar la dirección IP introducida por el usuario según
R7.
R5.4 El sistema debe extraer los hashes de la contraseñas que estén
almacenadas en ficheros del tipo PLF.
R5.4.1 El sistema debe permitir al usuario introducir la ruta al fichero con
extensión .PLF.
R6 Dentro de la etapa de Reports, el sistema debe poder llevar a cabo lo
siguiente:
R6.1 El sistema debe permitir la creación de un informe sobre las pruebas
llevadas a cabo por el usuario y sus resultados.
R6.2 El sistema debe mostrar al usuario los pasos que realizó y el resultado de
cada uno en el informe.
R7 El sistema debe validar la dirección IP según el protocolo IPv4.
R7.1 El sistema deberá comprobar que:
- Los valores están separados por un punto y se repiten 4 veces del
modo <X.X.X.X>.
- Los números están comprendidos entre 0 y 255 (ambos incluidos).
R8 El sistema debe validar la dirección IP según el formato
<nombre.extensión>.
R8.1 El sistema debe realizar la comprobación con todo el nombre en
minúsculas.
R8.2 El sistema debe comprobar que solamente se permitan los caracteres:
- a-z
- 0-9
- - (guión)
- !"#$%&'()*+,-/:;<=>?@[\]^_`{|}~.
Código Descripción
RU1 Los usuarios de la aplicación no deberán tener un alto conocimiento en
seguridad informática para llevar a cabo las pruebas, únicamente para
interpretar algunos de los resultados.
RU2 Los administradores de la aplicación serán expertos en seguridad encargados
de mantenerla y actualizarla.
Requisitos tecnológicos
Código Descripción
RT1 El sistema debe ser multiplataforma y poder ser ejecutado en cualquier
entorno.
Requisitos de fiabilidad
Código Descripción
RF1 El sistema debe garantizar que los resultados obtenidos no presenten falsos
positivos.
- El usuario final de la aplicación que su propósito será realizar test de penetración y pruebas
de seguridad sobre sus sistemas de control industrial u otros ajenos (siempre y cuando se
tenga el permiso necesario) como si de una auditoría se tratase.
- El administrador del sistema que será el encargado de mantener la aplicación y actualizarla
con nuevas técnicas que surjan a lo largo del tiempo.
4.4.1. Footprinting
El footprinting es la primera etapa de un test de intrusión en la que el atacante recoge la mayor
cantidad posible de información pública sobre el objetivo. Su fuente es todo Internet. Se utilizarán
buscadores como Shodan, información alojada en servidores DNS, en registros Whois y demás
servicios en el que conocer datos acerca del objetivo.
4.4.2. Fingerprinting
En esta parte, se lleva a cabo una recolección de información que consiste en interactuar
directamente con el sistema objetivo para conocer más datos sobre él, su configuración y
comportamiento. A diferencia de la primera parte, aquí estamos interactuando directamente sobre
el objetivo y puede detectar que estamos realizando alguna acción maliciosa. Por ello, para la
realización de las pruebas, se hará en entornos locales y controlados, ya que por la Ley de Hacking
de 2010 cualquier acción de este tipo contra sistemas sin su permiso expreso es ilegal.
4.4.3. Explotación
Esta fase del pentesting, tiene como objetivo comprobar la seguridad del sistema descubierta en la
fase anterior y verificar si las vulnerabilidades realmente pueden ser explotables. Aquí, se realizarán
modificaciones en el sistema final e incluso intrusiones aprovechándose de alguno de los fallos de
seguridad detectados en fases previas.
4.4.4. Reportes
Por lo general, al finalizar todas las pruebas, se entrega al cliente un informe con todos los pasos
seguidos detalladamente, así como una serie de resultados sobre las vulnerabilidades encontradas
y la solución a las mismas. En el proyecto, se intentará automatizar este proceso y generar un
reporte sobre las pruebas que realizó el usuario a lo largo del proceso y los resultados obtenidos.
Al escoger esta opción, el usuario podrá conocer los registros DNS inversos del
objetivo.
Descripción
El sistema obtendrá el contenido de los registros de entrada (input registers) del esclavo
que pida el usuario en de la dirección IP dada.
Descripción
El sistema mostrará al usuario las passwords por defecto típicas en sistemas de control
industrial, así como el dispositivo y su propietario.
Alternativa 1:
El sistema obtiene y muestra toda la información disponible.
Variaciones
(escenarios
Alternativa 2:
secundarios)
El sistema no puede obtener toda la información disponible y
alguna es nula. En ese caso, no mostrará nada.
Se produce una interrupción de teclado (Ctrl + C) que es capturada
Excepciones
y finaliza la ejecución del programa.
Notas -
Variaciones Alternativa 2:
(escenarios La dirección IP no coincide con el formato del protocolo IPv4.
secundarios)
Alternativa 3:
El valor introducido, por ejemplo una cadena de caracteres, es
inválido.
Se produce una interrupción de teclado (Ctrl + C) que es capturada
Excepciones
y finaliza la ejecución del programa.
Notas -
Alternativa 1:
El sistema obtiene y muestra toda la información disponible que
Variaciones devuelvan los registros DNS.
(escenarios
secundarios) Alternativa 2:
El sistema no puede obtener toda la información disponible y
alguna es nula. En ese caso, no mostrará nada.
Se produce una interrupción de teclado (Ctrl + C) que es capturada
Excepciones
y finaliza la ejecución del programa.
Notas -
Alternativa 1:
El sistema obtiene y muestra toda la información disponible que
Variaciones devuelvan los registros DNS inversos.
(escenarios
secundarios) Alternativa 2:
El sistema no puede obtener toda la información disponible y
alguna es nula. En ese caso, no mostrará nada.
Se produce una interrupción de teclado (Ctrl + C) que es capturada
Excepciones
y finaliza la ejecución del programa.
Notas -
Variaciones Alternativa 2:
(escenarios El valor introducido coincide con un nombre de dominio correcto y
secundarios) real. De esta forma, se obtendrá información.
Alternativa 3:
El valor introducido no corresponde con ningún nombre de dominio
y no se obtendrá ningún resultado.
Se produce una interrupción de teclado (Ctrl + C) que es capturada
Excepciones
y finaliza la ejecución del programa.
Notas -
Postcondiciones -
Actores Iniciado por el usuario
Se le mostrará al usuario los puertos que estén abiertos de la
Descripción máquina e información de los protocolos que están corriendo en
dichos puertos.
Alternativa 1:
El valor introducido coincide con una dirección IP válida según el
protocolo IPv4. De esta forma, se obtendrá información.
Variaciones Alternativa 2:
(escenarios El valor introducido coincide con un nombre de dominio correcto y
secundarios) real. De esta forma, se obtendrá información.
Alternativa 3:
El valor introducido no corresponde con ningún nombre de dominio
y no se obtendrá ningún resultado.
Se produce una interrupción de teclado (Ctrl + C) que es capturada
Excepciones
y finaliza la ejecución del programa.
Notas -
Notas -
Variaciones
Alternativa 2:
(escenarios
No se encuentra información debido a que está el puerto cerrado.
secundarios)
Alternativa 3:
No se encuentra información debido a que no está corriendo
Modbus en la dirección IP dada.
Se produce una interrupción de teclado (Ctrl + C) que es capturada
Excepciones
y finaliza la ejecución del programa.
Notas -
Variaciones Alternativa 2:
(escenarios No se mostrará el valor de la bobina porque no existe en el UID
secundarios) pedido.
Alternativa 3:
No se mostrará el valor de la bobina porque no está corriendo
ningún dispositivo Modbus.
Se produce una interrupción de teclado (Ctrl + C) que es capturada
Excepciones
y finaliza la ejecución del programa.
Notas -
Alternativa 2:
No se mostrará el valor del estado porque no existe en el UID
pedido.
Alternativa 3:
No se mostrará el valor del estado porque no está corriendo ningún
dispositivo Modbus.
Se produce una interrupción de teclado (Ctrl + C) que es capturada
Excepciones
y finaliza la ejecución del programa.
Notas -
Variaciones Alternativa 2:
(escenarios No se mostrará el valor del registro porque no existe en el UID
secundarios) pedido.
Alternativa 3:
No se mostrará el valor del registro porque no está corriendo
ningún dispositivo Modbus.
Se produce una interrupción de teclado (Ctrl + C) que es capturada
Excepciones
y finaliza la ejecución del programa.
Notas -
Variaciones Alternativa 2:
(escenarios No se mostrará el valor de la respuesta de excepción porque no
secundarios) existe en el UID pedido.
Alternativa 3:
No se mostrará el valor de la respuesta de excepción porque no
está corriendo ningún dispositivo Modbus.
Se produce una interrupción de teclado (Ctrl + C) que es capturada
Excepciones
y finaliza la ejecución del programa.
Notas -
Variaciones Alternativa 2:
(escenarios La dirección IP no coincide con el formato del protocolo IPv4.
secundarios)
Alternativa 3:
El valor introducido, por ejemplo una cadena de caracteres, es
inválido.
Se produce una interrupción de teclado (Ctrl + C) que es capturada
Excepciones
y finaliza la ejecución del programa.
Notas -
Variaciones Alternativa 2:
(escenarios El valor introducido no está comprendido entre 0 y 255 (ambos
secundarios) incluidos), por lo que se produce un error y se muestra el usuario.
Alternativa 3:
El valor introducido es correcto y continúa la ejecución del
programa.
Se produce una interrupción de teclado (Ctrl + C) que es capturada
Excepciones
y finaliza la ejecución del programa.
Notas -
Alternativa 3:
El valor introducido es correcto y continúa la ejecución del
programa.
Se produce una interrupción de teclado (Ctrl + C) que es capturada
Excepciones
y finaliza la ejecución del programa.
Notas -
Alternativa 1:
Se muestran las contraseñas por defecto al usuario.
Variaciones
(escenarios
Alternativa 2:
secundarios)
Se produce un error al parsear el fichero con las contraseñas por
defecto y no se muestran al usuario.
Se produce una interrupción de teclado (Ctrl + C) que es capturada
Excepciones
y finaliza la ejecución del programa.
Notas -
Alternativa 2:
La dirección del registro introducida no se corresponde con
Variaciones
ninguna dirección válida.
(escenarios
secundarios)
Alternativa 3:
La dirección IP no tiene el formato adecuado y no se lleva a cabo.
Alternativa 4:
Todos los valores introducidos son validados, se lleva a cabo la
prueba y se escribe sobre el registro dado.
Se produce una interrupción de teclado (Ctrl + C) que es capturada
Excepciones
y finaliza la ejecución del programa.
Notas -
Postcondiciones -
Actores Iniciado por el usuario
El usuario introducirá una dirección IP según el protocolo IPv4 que
Descripción
será el objetivo a escribir sobre los registros de Modbus
Alternativa 1:
El sistema valida la dirección IP según el protocolo IPv4.
Variaciones Alternativa 2:
(escenarios La dirección IP no coincide con el formato del protocolo IPv4.
secundarios)
Alternativa 3:
El valor introducido, por ejemplo, una cadena de caracteres, es
inválido.
Se produce una interrupción de teclado (Ctrl + C) que es capturada
Excepciones
y finaliza la ejecución del programa.
Notas -
Variaciones
Alternativa 2:
(escenarios
La dirección de la bobina introducida no se corresponde con
secundarios)
ninguna dirección válida.
Alternativa 3:
La dirección IP no tiene el formato adecuado y no se lleva a cabo.
Alternativa 4:
Todos los valores introducidos son validados, se lleva a cabo la
prueba y se escribe sobre el registro dado de la bobina.
Se produce una interrupción de teclado (Ctrl + C) que es capturada
Excepciones
y finaliza la ejecución del programa.
Notas -
Variaciones Alternativa 2:
(escenarios La dirección IP no coincide con el formato del protocolo IPv4.
secundarios)
Alternativa 3:
El valor introducido, por ejemplo, una cadena de caracteres, es
inválido.
Se produce una interrupción de teclado (Ctrl + C) que es capturada
Excepciones
y finaliza la ejecución del programa.
Notas -
Alternativa 2:
El fichero no tiene el formato correcto, no se ejecuta la prueba y se
muestra un error al usuario.
Se produce una interrupción de teclado (Ctrl + C) que es capturada
Excepciones
y finaliza la ejecución del programa.
Notas -
Notas -
Entonces, la interfaz, con las partes del pentesting, quedaría de la siguiente forma:
De esta forma, cada parte estará diferenciada y se podrá ir realizando todo en orden.
el apartado del desarrollo de las pruebas, será donde se presenten los resultados del siguiente
diseño de conjunto de pruebas:
Caso de Uso: Observar la configuración del DNS del objetivo a través de una
transferencia de zona
Prueba Resultado Esperado
Introducir un nombre de Se ejecuta y se obtiene información acerca de la
dominio válido transferencia de zona
Prueba Resultado Esperado
Introducir un nombre de No se llega a ejecutar (se valida antes) y se muestra un
dominio inválido error
Prueba Resultado Esperado
Introducir un nombre de Se intenta realizar la transferencia de zona, pero falla y
dominio válido pero que no se muestra un error
exista
Prueba Resultado Esperado
Introducir caracteres que No se ejecuta el análisis y se muestra un error
no se correspondan con un
nombre de dominio
Introducir una dirección IP Se ejecuta el análisis (si el resto de entradas son válidas)
válida
Prueba Resultado Esperado
Introducir una dirección IP No se ejecuta el análisis y da un error
no válida
Prueba Resultado Esperado
UID, dirección del registro y Se ejecuta el análisis
dirección IP son válidos
A lo largo del desarrollo del proyecto, se han tratado los protocolos Modbus y Siemens S7 y por ello
existen pruebas para estos concretamente, pero se podrían añadir para cualquier otro en este
paquete.
Figura 5.12. Diseño de la interfaz (I) Figura 5.12. Diseño de la interfaz (II)
Figura 5.12. Diseño de la interfaz (III) Figura 5.12. Diseño de la interfaz (IV)
6.1.1. Python
Python es el lenguaje de programación elegido para el desarrollo del proyecto debido a que es el
más usado en la realización de tests de penetración. Aunque este lenguaje es multiplataforma, lo
más recomendable sería utilizar un entorno de auditoría como puede ser Kali Linux donde vienen
preinstaladas la mayoría de las herramientas y librerías utilizadas, o cualquier derivado de Linux
(Ubuntu o Debian) puesto que la herramienta Scapy no viene preinstalada en entornos Windows.
De esta forma no hace falta realizar ninguna instalación adicional por parte del usuario.
6.2.2. Github
La plataforma Github ha sido la elegida como repositorio de código para gestionar las diferentes
versiones de la herramienta y poder tener un control de los cambios realizados en el proyecto.
6.2.3. Travis-CI
Es el sistema de integración continua elegida para el proyecto que además tiene parte gratuita para
proyectos Open Source. Se integra sin problemas con GitHub y automáticamente ejecuta el pipeline
definido en cada push o pull requests. En este caso, ejecutará las pruebas que tengamos creadas
en los tests en el propio código.
6.2.5. Draw.io
Aplicación web que permite crear diagramas de todo tipo desde el navegador sin falta de instalar
ningún programa. Se ha utilizado para el diseño de la interfaz de la aplicación. Dispone de una serie
de “mockups” para todo tipo de UI (User Interface).
6.2.6. ModbusPal.jar
Es un entorno de pruebas que simula una red Modbus y permite realizar las pruebas en local en
vez de tener que atacar sistemas en producción.
6.2.7. Snap7
Se trata de un entorno de pruebas que simula una red Siemens S7 y con ello, se pueden realizar
las pruebas en local en vez de tener que atacar sistemas en producción.
python pdt.py
Si se quieren ejecutar los tests, sería de la siguiente forma (desde el directorio raíz del proyecto):
9.1. Conclusiones
Tras el desarrollo del proyecto, se ha llegado a diseñar e implementar una herramienta que ayuda
al auditor en aquellas pruebas que no son típicas de Tecnologías de la Información y están más
relacionadas con los Sistemas de Control Industrial donde el campo no es tan familiar como en las
auditorías de seguridad en TI.
La solución está dividida en una serie de menús para facilitar la tarea al usuario y en las partes
correspondientes a un test de penetración habitual: recolección de información pública (footprinting),
interacción con el sistema (fingerprinting), explotación y reporte.
En esta primera versión del proyecto, se ha llegado a desarrollar una serie de pruebas para dos de
los protocolos más usados actualmente en Sistemas de Control Industrial, Modbus y Siemens S7.
Esto se podría ampliar, bastaría con añadir un mayor número de pruebas para tratar otro tipo de
protocolos y dispositivos.
Además, la aplicación está pensada para el uso en entornos de pentesting como puede ser Kali
Linux y está integrada con herramientas de seguridad ampliamente utilizadas y reconocidas.
9.2. Ampliaciones
Como se ha explicado a lo largo del documento, la aplicación actualmente abarca dos protocolos
de Sistemas de Control Industrial ampliamente utilizados que son Modbus y Siemens S7. En futuras
versiones, se podría ampliar y añadir nuevas pruebas para otro tipo de protocolos como pueden ser
BACnet, DNP3 o Profibus. Bastaría con extender la funcionalidad existente en el apartado
correspondiente de la auditoría en el que se llevaría a cabo.
Otra ampliación, sería la forma de reporte que se le da al usuario a través del informe. Actualmente
se muestra los pasos que realizó con sus resultados. En posteriores versiones, se podría ampliar
para que realizase completos informes en formato HTML o PDF como realizan algunas
herramientas de escaneo de vulnerabilidades como puede ser Nessus, pero que no se ha llevado
a cabo por falta de tiempo y de un equipo completo de desarrollo.
Recursos de trabajo
Creación de la Interfaz
Medición Concepto Coste Unitario Total
2h Ingeniero Informático 35,75€ 71,5€
Total 71,5€
Implementación
Medición Concepto Coste Unitario Total
78h Ingeniero Informático 35,75€ 2.788,5€
Total 2.788,5€
Pruebas unitarias
Medición Concepto Coste Unitario Total
38h Ingeniero Informático 35,75€ 1.358,5€
Total 1.358,5€
Elaboración de la documentación
Medición Concepto Coste Unitario Total
45h Ingeniero Informático 35,75€ 1.608,75€
Total 1.608,75€
• Electricidad
• Local
• Internet
• Material de oficina
• Personal administrativo
https://github.com/dave36/pdt