
Marco de trabajo forense de código abierto para analizar metadatos de PLC industriales y archivos de proyecto. Escanea en busca de artefactos sospechosos en entornos ICS para apoyar la respuesta a incidentes y la investigación manual.

El framework Microsoft ICS Forensics Tools es un framework forense de código abierto que permite el análisis de metadatos y archivos de proyecto de PLC industriales.
El framework proporciona a los investigadores una forma conveniente de escanear PLCs e identificar cualquier artefacto sospechoso dentro de entornos ICS, que puede ser utilizado para verificación manual, tareas de monitoreo automatizadas u operaciones de respuesta a incidentes para detectar dispositivos comprometidos.
Al ser una herramienta de código abierto, ICS Forensics Tools permite a los investigadores revisar la salida y personalizarla según sus requisitos específicos.
Estas instrucciones te darán una copia del proyecto en funcionamiento en tu máquina local para fines de desarrollo y prueba.
git clone https://github.com/microsoft/ics-forensics-tools.git
Instalar requisitos de python
pip install -r requirements.txt
| Argumentos | Descripción | Requerido / Opcional |
|---|---|---|
-h, --help | muestra este mensaje de ayuda y sale | Opcional |
-s, --save-config | Guarda el archivo de configuración para un uso fácil futuro | Opcional |
-c, --config | Ruta del archivo de configuración, por defecto es config.json | Opcional |
-o, --output-dir | Directorio donde se generarán los archivos de salida, por defecto es output | Opcional |
-v, --verbose | Registrar la salida en un archivo y también en la consola | Opcional |
-p, --multiprocess | Ejecutar en modo multiproceso según el número de plugins/analizadores | Opcional |
| Argumentos | Descripción | Requerido / Opcional |
|---|---|---|
-h, --help | muestra este mensaje de ayuda y sale | Opcional |
--ip | Ruta del archivo de direcciones, CIDR o CSV de direcciones IP (columna ip requerida). agregue más columnas para información adicional sobre cada ip (usuario, contraseña, etc...) | Requerido |
--port | Número de puerto | Opcional |
--transport | tcp/udp | Opcional |
--analyzer | Nombre del analizador a ejecutar | Opcional |
python driver.py -s -v PluginName --ip ips.csv
python driver.py -s -v PluginName --ip ips.csv --analyzer AnalyzerName
python driver.py -s -v -c config.json --multiprocess
from forensic.client.forensic_client import ForensicClient
from forensic.interfaces.plugin import PluginConfig
forensic = ForensicClient()
plugin = PluginConfig.from_json({
"name": "PluginName",
"port": 123,
"transport": "tcp",
"addresses": [{"ip": "192.168.1.0/24"}, {"ip": "10.10.10.10"}],
"parameters": {
},
"analyzers": []
})
forensic.scan([plugin])

Al desarrollar localmente, asegúrate de marcar la carpeta src como "Sources root"
from pathlib import Path
from forensic.interfaces.plugin import PluginInterface, PluginConfig, PluginCLI
from forensic.common.constants.constants import Transport
class GeneralCLI(PluginCLI):
def __init__(self, folder_name):
super().__init__(folder_name)
self.name = "General"
self.description = "General Plugin Description"
self.port = 123
self.transport = Transport.TCP
def flags(self, parser):
self.base_flags(parser, self.port, self.transport)
parser.add_argument('--general', help='General additional argument', metavar="")
class General(PluginInterface):
def __init__(self, config: PluginConfig, output_dir: Path, verbose: bool):
super().__init__(config, output_dir, verbose)
def connect(self, address):
self.logger.info(f"{self.config.name} connect")
def export(self, extracted):
self.logger.info(f"{self.config.name} export")
__init__.py dentro de la carpeta pluginsfrom pathlib import Path
from forensic.interfaces.analyzer import AnalyzerInterface, AnalyzerConfig
class General(AnalyzerInterface):
def __init__(self, config: AnalyzerConfig, output_dir: Path, verbose: bool):
super().__init__(config, output_dir, verbose)
self.plugin_name = 'General'
self.create_output_dir(self.plugin_name)
def analyze(self):
pass
__init__.py dentro de la carpeta analyzersMicrosoft Defender for IoT es una solución de seguridad sin agente a nivel de red que permite a las organizaciones monitorear y descubrir activos continuamente, detectar amenazas y gestionar vulnerabilidades en sus dispositivos IoT/OT y Sistemas de Control Industrial (ICS), tanto en entornos locales como conectados a Azure.
Sección 52 del blog de MSRC
Conferencia ICS sobre la herramienta
Sección 52 - Investigación de Ladder Logic Malicioso | Webinar de Microsoft Defender for IoT - YouTube
Este proyecto agradece las contribuciones y sugerencias. La mayoría de las contribuciones requieren que aceptes un Acuerdo de Licencia de Colaborador (CLA) que declara que tienes el derecho y realmente nos concedes los derechos para usar tu contribución. Para más detalles, visita https://cla.opensource.microsoft.com.
Cuando envías un pull request, un bot de CLA determinará automáticamente si necesitas proporcionar un CLA y decorará el PR adecuadamente (por ejemplo, verificación de estado, comentario). Simplemente sigue las instrucciones proporcionadas por el bot. Solo necesitarás hacer esto una vez en todos los repositorios que usen nuestro CLA.
Este proyecto ha adoptado el Código de Conducta de Código Abierto de Microsoft. Para obtener más información, consulta las Preguntas frecuentes sobre el Código de Conducta o contacta a [email protected] si tienes preguntas o comentarios adicionales.
Este proyecto puede contener marcas comerciales o logotipos de proyectos, productos o servicios. El uso autorizado de marcas comerciales o logotipos de Microsoft está sujeto y debe seguir las Directrices de marcas comerciales y marca de Microsoft. El uso de marcas comerciales o logotipos de Microsoft en versiones modificadas de este proyecto no debe causar confusión ni implicar el patrocinio de Microsoft. Cualquier uso de marcas comerciales o logotipos de terceros está sujeto a las políticas de esos terceros.
Copyright (c) 2018 Microsoft Corporation. Todos los derechos reservados.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DE DERECHOS DE AUTOR SERÁN RESPONSABLES POR NINGÚN RECLAMO, DAÑOS U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O DE OTRO MODO, QUE SURJA DE, FUERA DE O EN RELACIÓN CON EL SOFTWARE O EL USO U OTROS ACUERDOS EN EL SOFTWARE.