
Framework forense de código aberto para analisar metadados de CLPs industriais e arquivos de projeto. Escaneia artefatos suspeitos em ambientes ICS para apoiar a resposta a incidentes e a investigação manual.

A estrutura de ferramentas forenses ICS da Microsoft é uma estrutura forense de código aberto que permite a análise de metadados e arquivos de projeto de CLPs industriais.
A estrutura oferece aos investigadores uma maneira conveniente de escanear CLPs e identificar quaisquer artefatos suspeitos em ambientes ICS, que podem ser usados para verificação manual, tarefas de monitoramento automatizadas ou operações de resposta a incidentes para detectar dispositivos comprometidos.
Sendo uma ferramenta de código aberto, o ICS Forensics Tools permite que os investigadores revisem a saída e a personalizem de acordo com seus requisitos específicos.
Estas instruções fornecerão uma cópia do projeto em execução na sua máquina local para fins de desenvolvimento e teste.
git clone https://github.com/microsoft/ics-forensics-tools.git
Instalar os requisitos Python
pip install -r requirements.txt
| Args | Descrição | Obrigatório / Opcional |
|---|---|---|
-h, --help | mostra esta mensagem de ajuda e sai | Opcional |
-s, --save-config | Salva arquivo de configuração para uso futuro | Opcional |
-c, --config | Caminho do arquivo de configuração, padrão é config.json | Opcional |
-o, --output-dir | Diretório para gerar os arquivos de saída, padrão é output | Opcional |
-v, --verbose | Registra a saída em um arquivo e também no console | Opcional |
-p, --multiprocess | Executa em modo multiprocesso pelo número de plugins/analisadores | Opcional |
| Args | Descrição | Obrigatório / Opcional |
|---|---|---|
-h, --help | mostra esta mensagem de ajuda e sai | Opcional |
--ip | Caminho do arquivo de endereços, CIDR ou CSV de endereços IP (coluna ip obrigatória). adicione mais colunas para informações adicionais sobre cada IP (nome de usuário, senha, etc...) | Obrigatório |
--port | Número da porta | Opcional |
--transport | tcp/udp | Opcional |
--analyzer | Nome do analisador a executar | Opcional |
python driver.py -s -v NomeDoPlugin --ip ips.csv
python driver.py -s -v NomeDoPlugin --ip ips.csv --analyzer NomeDoAnalisador
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": "NomeDoPlugin",
"port": 123,
"transport": "tcp",
"addresses": [{"ip": "192.168.1.0/24"}, {"ip": "10.10.10.10"}],
"parameters": {
},
"analyzers": []
})
forensic.scan([plugin])
Ao desenvolver localmente, certifique-se de marcar a pasta 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 da pasta 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 da pasta analyzers