
Framework forense open-source per analizzare i metadati e i file di progetto dei PLC industriali. Scannerizza per individuare artefatti sospetti in ambienti ICS per supportare la risposta agli incidenti e le indagini manuali.

Il framework Microsoft ICS Forensics Tools è un framework forense open-source che consente l'analisi dei metadati e dei file di progetto dei PLC industriali.
Il framework offre agli investigatori un modo comodo per scansionare i PLC e identificare eventuali artefatti sospetti all'interno degli ambienti ICS, che possono essere utilizzati per controlli manuali, attività di monitoraggio automatico o operazioni di risposta agli incidenti per rilevare dispositivi compromessi.
Essendo uno strumento open-source, ICS Forensics Tools consente agli investigatori di esaminare l'output e personalizzarlo in base alle proprie esigenze specifiche.
Queste istruzioni ti permetteranno di ottenere una copia del progetto in esecuzione sulla tua macchina locale per scopi di sviluppo e test.
git clone https://github.com/microsoft/ics-forensics-tools.git
Installare i requisiti Python
pip install -r requirements.txt
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])
Durante lo sviluppo locale, assicurati di contrassegnare la cartella src come "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 = "Descrizione Generale del Plugin"
self.port = 123
self.transport = Transport.TCP
def flags(self, parser):
self.base_flags(parser, self.port, self.transport)
parser.add_argument('--general', help='Argomento aggiuntivo generale', 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} connetti")
def export(self, extracted):
self.logger.info(f"{self.config.name} esporta")
__init__.py sotto la cartella 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 sotto la cartella analyzersMicrosoft Defender for IoT è una soluzione di sicurezza a livello di rete senza agenti che consente alle organizzazioni di monitorare e scoprire continuamente risorse, rilevare minacce e gestire vulnerabilità nei dispositivi IoT/OT e nei sistemi di controllo industriale (ICS), sia on-premise che in ambienti connessi ad Azure.
Section 52 sul blog MSRC
Lezione ICS tenuta sullo strumento
Section 52 - Investigating Malicious Ladder Logic | Microsoft Defender for IoT Webinar - YouTube
Questo progetto accoglie contributi e suggerimenti. La maggior parte dei contributi richiede l'accettazione di un Contributor License Agreement (CLA) che dichiara di avere il diritto di concederci, e di fatto concederci, i diritti di utilizzare il tuo contributo. Per i dettagli, visita https://cla.opensource.microsoft.com.
Quando invii una pull request, un bot CLA determinerà automaticamente se è necessario fornire un CLA e decorerà la PR in modo appropriato (ad es. controllo dello stato, commento). Segui semplicemente le istruzioni fornite dal bot. Dovrai farlo solo una volta per tutti i repository che utilizzano il nostro CLA.
Questo progetto ha adottato il Codice di Condotta Open Source di Microsoft. Per ulteriori informazioni, consulta le Domande Frequenti sul Codice di Condotta o contatta [email protected] per qualsiasi domanda o commento aggiuntivo.
Questo progetto può contenere marchi o loghi per progetti, prodotti o servizi. L'uso autorizzato dei marchi o loghi di Microsoft è soggetto e deve seguire le Linee Guida per l'Uso dei Marchi e dei Loghi di Microsoft. L'uso dei marchi o loghi di Microsoft in versioni modificate di questo progetto non deve causare confusione o implicare un'approvazione da parte di Microsoft. L'uso di marchi o loghi di terze parti è soggetto alle politiche di tali terze parti.
Copyright (c) 2018 Microsoft Corporation. Tutti i diritti riservati.
IL SOFTWARE VIENE FORNITO "COSÌ COM'È", SENZA GARANZIA DI ALCUN TIPO, ESPRESSA O IMPLICITA, INCLUSE MA NON LIMITATE ALLE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ PER UNO SCOPO PARTICOLARE E NON VIOLAZIONE. IN NESSUN CASO GLI AUTORI O I TITOLARI DEL COPYRIGHT SARANNO RESPONSABILI PER QUALSIASI RECLAMO, DANNO O ALTRA RESPONSABILITÀ, SIA IN UN'AZIONE CONTRATTUALE, EXTRACONTRATTUALE O ALTRO, DERIVANTE DA, O IN CONNESSIONE CON IL SOFTWARE O L'USO O ALTRE OPERAZIONI NEL SOFTWARE.
| Args | Descrizione | Obbligatorio / Opzionale |
|---|
-h, --help | mostra questo messaggio di aiuto ed esci | Opzionale |
-s, --save-config | Salva il file di configurazione per un uso futuro facile | Opzionale |
-c, --config | Percorso del file di configurazione, default è config.json | Opzionale |
-o, --output-dir | Directory in cui salvare i file generati, default è output | Opzionale |
-v, --verbose | Salva l'output in un file oltre che nella console | Opzionale |
-p, --multiprocess | Esecuzione in modalità multiprocesso per numero di plugin/analizzatori | Opzionale |
| Args | Descrizione | Obbligatorio / Opzionale |
|---|
-h, --help | mostra questo messaggio di aiuto ed esci | Opzionale |
--ip | Percorso del file degli indirizzi, CIDR o indirizzi IP csv (colonna ip obbligatoria). aggiungere altre colonne per informazioni aggiuntive su ogni IP (username, password, ecc.) | Obbligatorio |
--port | Numero porta | Opzionale |
--transport | tcp/udp | Opzionale |
--analyzer | Nome dell'analizzatore da eseguire | Opzionale |