
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