{"id":4225,"date":"2019-07-06T08:24:42","date_gmt":"2019-07-06T07:24:42","guid":{"rendered":"http:\/\/bitacora.eniac2000.com\/?p=4225"},"modified":"2025-10-11T05:16:36","modified_gmt":"2025-10-11T03:16:36","slug":"hacking-lab-sobre-modbus-tcp-elementos-configurados","status":"publish","type":"post","link":"https:\/\/bitacora.eniac2000.com\/?p=4225","title":{"rendered":"Hacking lab sobre Modbus TCP. Elementos configurados"},"content":{"rendered":"<div class=\"seriesmeta\">Esta entrada es la parte 2 de 4 de la serie <a href=\"https:\/\/bitacora.eniac2000.com\/?series=hacking-lab-modbus-tcp\" class=\"series-1837\" title=\"Hacking Lab Modbus TCP\">Hacking Lab Modbus TCP<\/a><\/div><p>En el <a href=\"http:\/\/bitacora.eniac2000.com\/?p=4220\" title=\"Hacking lab sobre Modbus TCP. Introducci\u00f3n\" target=\"_blank\">art\u00edculo anterior<\/a> se hac\u00eda referencia al objeto del hacking lab y se daba una visi\u00f3n general de la arquitectura implementada. En este art\u00edculo se va a entrar en un mayor detalle de los elementos que forman parte de dicha arquitectura: HMI, PLC, actuador TCP y plataforma de ataque.<\/p>\n<p><strong>HMI de control de luces LED<\/strong><br \/>\nEl <a href=\"https:\/\/es.wikipedia.org\/wiki\/Interfaz_de_usuario\" target=\"_blank\">HMI<\/a> de control simula un sistema SCADA. Est\u00e1 implementado mediante <a href=\"https:\/\/nodered.org\/\" target=\"_blank\">Node-Red<\/a>, sistema software que permite la programaci\u00f3n basada en flujos para desarrollar sistemas para Internet de las Cosas. A fin de poder realizar la implementaci\u00f3n del sistema de control industrial, se ha hecho uso de las siguientes librer\u00edas:<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/flows.nodered.org\/node\/node-red-contrib-modbus\" target=\"_blank\">Modbus<\/a>,<\/strong>que permite implementar un sistema de comunicaci\u00f3n basado en Modbus TCP y Modbus Serie.<\/li>\n<li><strong><a href=\"https:\/\/flows.nodered.org\/node\/node-red-dashboard\" target=\"_blank\">Dashboard<\/a>,<\/strong> que permite crear cuadros de mandos y aplicaciones web para interactuar con los flujos de control.<\/li>\n<\/ul>\n<p>El sistema desarrollado consta de dos partes:<\/p>\n<ul>\n<li><strong>El cuadro de mandos<\/strong> es una simple botonera que permite encender la iluminaci\u00f3n LED rojo, verde y azul mediante interruptores individuales. Estos interruptores, al actuar sobre ellos, env\u00edan una se\u00f1al MODBUS TCP al PLC simulado, para cambiar el estado de la bobina que corresponda a cada color, y muestra el resultado final del mismo en pantalla.<\/li>\n<figure id=\"attachment_4226\" aria-describedby=\"caption-attachment-4226\" style=\"width: 400px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/07\/trabajo2-imagen1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/07\/trabajo2-imagen1-400x243.png\" alt=\"Captura de la interfaz de control\" title=\"Captura de la interfaz de control\" width=\"400\" height=\"243\" class=\"size-medium wp-image-4226\" \/><\/a><figcaption id=\"caption-attachment-4226\" class=\"wp-caption-text\">Captura de la interfaz de control<\/figcaption><\/figure>\n<li><strong>La l\u00f3gica de interacci\u00f3n del HMI<\/strong> con el PLC se ha desarrollado para leer cada 500 ms el estado de las 3 bobinas del PLC, y desplegar en la botonera el estado de las mismas. Si el usuario cambia uno de los interruptores, el sistema env\u00eda al PLC mediante MODBUS sobre TCP una orden para escribir un cambio de estado en la bobina correspondiente. El flujo de control corresponde al siguiente diagrama:<\/li>\n<p><figure id=\"attachment_4227\" aria-describedby=\"caption-attachment-4227\" style=\"width: 400px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/07\/trabajo2-imagen2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/07\/trabajo2-imagen2-400x162.png\" alt=\"Flujo de control HMI-PLC\" title=\"Flujo de control HMI-PLC\" width=\"400\" height=\"162\" class=\"size-medium wp-image-4227\" \/><\/a><figcaption id=\"caption-attachment-4227\" class=\"wp-caption-text\">Flujo de control HMI-PLC<\/figcaption><\/figure>\n<\/ul>\n<p><strong>PLC de control de luces<\/strong><br \/>\nEl PLC que act\u00faa como Master MODBUS se ha desarrollado igualmente haciendo uso de Node-Red con la librer\u00eda MODBUS. En este caso se ha implementado la funcionalidad de Master Modbus, escuchando en el puerto 1502\/TCP (frente al habitual 502\/TCP por razones de permisos) de la Raspberry Pi que despliega los servicios de Node-Red.<\/p>\n<figure id=\"attachment_4230\" aria-describedby=\"caption-attachment-4230\" style=\"width: 400px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/07\/trabajo2-imagen3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/07\/trabajo2-imagen3-400x300.png\" alt=\"PLC simulado con Raspberry Pi\" title=\"PLC simulado con Raspberry Pi\" width=\"400\" height=\"300\" class=\"size-medium wp-image-4230\" \/><\/a><figcaption id=\"caption-attachment-4230\" class=\"wp-caption-text\">PLC simulado con Raspberry Pi<\/figcaption><\/figure>\n<p>El flujo Node-Red definido es el siguiente:<\/p>\n<figure id=\"attachment_4231\" aria-describedby=\"caption-attachment-4231\" style=\"width: 400px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/07\/trabajo2-imagen4.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/07\/trabajo2-imagen4-400x135.png\" alt=\"Flujo Modbus TCP del PLC simulado\" title=\"Flujo Modbus TCP del PLC simulado\" width=\"400\" height=\"135\" class=\"size-medium wp-image-4231\" \/><\/a><figcaption id=\"caption-attachment-4231\" class=\"wp-caption-text\">Flujo Modbus TCP del PLC simulado<\/figcaption><\/figure>\n<p>Este flujo realiza dos funciones: la primera es levantar el servidor Master MODBUS, que escucha en la IP 192.168.0.39 por el puerto 1502\/TCP. La segunda inyecta los valores por defecto en las 3 bobinas (posiciones de memoria 1 a 3) que se han definido para almacenar los valores de la iluminaci\u00f3n LED RGB. En este caso, las tres bobinas se inicializan a cero (FALSE l\u00f3gico).<\/p>\n<p><strong>Actuador TCP<\/strong><br \/>\nEl actuador TCP se ha implementado como un esclavo Modbus que consulta al PLC el estado de las tres bobinas que controlan el estado de los LED RGB. En funci\u00f3n de la lectura realizada del valor de dichas bobinas, enciende o apaga la iluminaci\u00f3n LED. Al ser tres las bobinas implementadas, la iluminaci\u00f3n puede tomar un m\u00e1ximo de 8 valores combinados (considerando \u201capagado\u201d como uno de los estados posibles).<br \/>\nLa implementaci\u00f3n del actuador se ha realizado mediante un dispositivo NodeMCU, que permite su programaci\u00f3n mediante el IDE Arduino, con capacidades de conectarse a una red WiFi. Se ha hecho uso de la <a href=\"http:\/\/github.com\/andresarmento\/modbus-arduino\">librer\u00eda Modbus-Arduino<\/a> para la implementaci\u00f3n del cliente.<\/p>\n<figure id=\"attachment_4232\" aria-describedby=\"caption-attachment-4232\" style=\"width: 400px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/07\/trabajo2-imagen5.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/07\/trabajo2-imagen5-400x246.png\" alt=\"Actuador desarrollado con NodeMCU\" title=\"Actuador desarrollado con NodeMCU\" width=\"400\" height=\"246\" class=\"size-medium wp-image-4232\" \/><\/a><figcaption id=\"caption-attachment-4232\" class=\"wp-caption-text\">Actuador desarrollado con NodeMCU<\/figcaption><\/figure>\n<p><figure id=\"attachment_4233\" aria-describedby=\"caption-attachment-4233\" style=\"width: 393px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/07\/trabajo2-imagen6.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/07\/trabajo2-imagen6.png\" alt=\"Actuador con iluminaci\u00f3n en azul\" title=\"Actuador con iluminaci\u00f3n en azul\" width=\"393\" height=\"295\" class=\"size-full wp-image-4233\" \/><\/a><figcaption id=\"caption-attachment-4233\" class=\"wp-caption-text\">Actuador con iluminaci\u00f3n en azul<\/figcaption><\/figure><br \/>\n<figure id=\"attachment_4234\" aria-describedby=\"caption-attachment-4234\" style=\"width: 393px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/07\/trabajo2-imagen7.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/07\/trabajo2-imagen7.png\" alt=\"Actuador con iluminaci\u00f3n en rojo\" title=\"Actuador con iluminaci\u00f3n en rojo\" width=\"393\" height=\"295\" class=\"size-full wp-image-4234\" \/><\/a><figcaption id=\"caption-attachment-4234\" class=\"wp-caption-text\">Actuador con iluminaci\u00f3n en rojo<\/figcaption><\/figure><\/p>\n<p><strong>Kali Linux<\/strong><br \/>\nPara simular la intrusi\u00f3n de un atacante externo se ha hecho uso de una Raspberry Pi con la distribuci\u00f3n <a href=\"https:\/\/www.kali.org\/\">Kali Linux<\/a> instalada. Kali Linux es una distribuci\u00f3n de Linux especialmente pensada para servir de herramienta para realizar tests de intrusi\u00f3n en el \u00e1mbito del hacking \u00e9tico y auditor\u00edas de seguridad de sistems de informaci\u00f3n.<\/p>\n<p>Se ha realizado el siguiente flujo de ataque:<\/p>\n<ol>\n<li><strong>Reconocimiento:<\/strong> Mediante ingenier\u00eda social (fuera del laboratorio) se ha determinado la existencia de un sistema de iluminaci\u00f3n LED basado en Modbus.<\/li>\n<li><strong>Escaneo:<\/strong> Una vez conseguido un equipo en la red, se ha procedido a un escaneo de la red en busca del dispositivos que escuchen en el puerto Modbus(habitualmente 502\/TCP, pero para este caso se ha hecho uso de 1502\/TCP) con ZenMap, cliente gr\u00e1fico para NMAP.<\/li>\n<li><strong>Ganar acceso:<\/strong> Una vez identificado el equipo Master Modbus, se ha realizado un proceso de escucha mediante modbus-cli, una herramienta desarrollada en Ruby disponible para Kali, que permite escanear y escribir sobre sistemas MODBUS. En una primera fase se ha escuchado hasta determinar las bobinas que controlan el sistema de iluminaci\u00f3n, y en una segunda fase, se han realizado cambios sobre la misma.<\/li>\n<li>Para el laboratorio no se han realizado el resto de fases del hacking (mantener acceso ni borrar huellas).<\/li>\n<\/ol>\n<p>En el siguiente art\u00edculo se detallar\u00e1n los resultados obtenidos en el laboratorio.<\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"seriesmeta\">Esta entrada es la parte 2 de 4 de la serie <a href=\"https:\/\/bitacora.eniac2000.com\/?series=hacking-lab-modbus-tcp\" class=\"series-1837\" title=\"Hacking Lab Modbus TCP\">Hacking Lab Modbus TCP<\/a><\/div><p>En el art\u00edculo anterior se hac\u00eda referencia al objeto del<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[13],"tags":[900,986,1094,1175,1177,1179,1599],"series":[1837],"class_list":["post-4225","post","type-post","status-publish","format-standard","hentry","category-informatica","tag-kali","tag-linux","tag-modbus","tag-nmap","tag-node-red","tag-nodemcu","tag-tcp","series-hacking-lab-modbus-tcp"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/4225","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.eniac2000.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.eniac2000.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4225"}],"version-history":[{"count":1,"href":"https:\/\/www.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/4225\/revisions"}],"predecessor-version":[{"id":11036,"href":"https:\/\/www.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/4225\/revisions\/11036"}],"wp:attachment":[{"href":"https:\/\/www.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4225"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4225"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4225"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/www.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fseries&post=4225"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}