
Cadre forensique open-source pour analyser les métadonnées et les fichiers de projet des automates programmables industriels (PLC). Analyse les artefacts suspects dans les environnements ICS pour faciliter la réponse aux incidents et l'investigation manuelle.

Le framework Microsoft ICS Forensics Tools est un framework médico-légal open source qui permet l'analyse des métadonnées et des fichiers projet des API industriels.
Le framework offre aux enquêteurs un moyen pratique de scanner les API et d'identifier tout artefact suspect dans les environnements ICS, pouvant être utilisé pour une vérification manuelle, des tâches de surveillance automatisée ou des opérations de réponse aux incidents afin de détecter des appareils compromis.
En tant qu'outil open source, ICS Forensics Tools permet aux enquêteurs de revoir la sortie et de la personnaliser selon leurs besoins spécifiques.
Ces instructions vous permettront d'obtenir une copie du projet et de l'exécuter sur votre machine locale à des fins de développement et de test.
git clone https://github.com/microsoft/ics-forensics-tools.git
Installer les dépendances Python
pip install -r requirements.txt
python driver.py -s -v NomDuPlugin --ip ips.csv
python driver.py -s -v NomDuPlugin --ip ips.csv --analyzer NomAnalyseur
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])
Lors du développement en local, assurez-vous de marquer le dossier src comme « 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 sous le dossier 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 sous le dossier analyzersMicrosoft Defender pour IoT est une solution de sécurité réseau sans agent qui permet aux organisations de surveiller et découvrir en continu les actifs, détecter les menaces et gérer les vulnérabilités dans leurs appareils IoT/OT et systèmes de contrôle industriels (ICS), sur site et dans des environnements connectés à Azure.
Section 52 dans le blog MSRC
Conférence ICS donnée sur l'outil
Section 52 - Investigation de la logique à relais malveillante | Webinaire Microsoft Defender pour IoT - YouTube
Ce projet accueille favorablement les contributions et suggestions. La plupart des contributions nécessitent que vous acceptiez un Contrat de Licence de Contributeur (CLA) déclarant que vous avez le droit de, et effectuez, nous accorder les droits d'utilisation de votre contribution. Pour plus de détails, visitez https://cla.opensource.microsoft.com.
Lorsque vous soumettez une pull request, un robot CLA déterminera automatiquement si vous devez fournir un CLA et décorera la PR de manière appropriée (par exemple, vérification du statut, commentaire). Suivez simplement les instructions fournies par le robot. Vous n'aurez à le faire qu'une seule fois sur tous les dépôts utilisant notre CLA.
Ce projet a adopté le Code de conduite open source Microsoft. Pour plus d'informations, consultez la FAQ sur le Code de conduite ou contactez [email protected] pour toute question ou commentaire supplémentaire.
Ce projet peut contenir des marques déposées ou des logos pour des projets, produits ou services. L'utilisation autorisée des marques déposées ou logos Microsoft est soumise et doit suivre les Directives sur les marques et la marque Microsoft. L'utilisation de marques déposées ou logos Microsoft dans des versions modifiées de ce projet ne doit pas créer de confusion ni sous-entendre un parrainage de Microsoft. Toute utilisation de marques déposées ou logos tiers est soumise aux politiques de ces tiers.
Copyright (c) 2018 Microsoft Corporation. Tous droits réservés.
LE LOGICIEL EST FOURNI « EN L'ÉTAT », SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS MAIS SANS S'Y LIMITER LES GARANTIES DE QUALITÉ MARCHANDE, D'ADÉQUATION À UN USAGE PARTICULIER ET D'ABSENCE DE CONTREFAÇON. EN AUCUN CAS LES AUTEURS OU TITULAIRES DU DROIT D'AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DOMMAGES OU AUTRE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D'UNE ACTION CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DE, OU EN RELATION AVEC LE LOGICIEL OU SON UTILISATION OU AUTRES INTERACTIONS AVEC LE LOGICIEL.
| Args | Description | Requis / Optionnel |
|---|
-h, --help | afficher ce message d'aide et quitter | Optionnel |
-s, --save-config | Enregistrer le fichier de config pour une utilisation future facile | Optionnel |
-c, --config | Chemin du fichier de config, par défaut config.json | Optionnel |
-o, --output-dir | Répertoire de sortie des fichiers générés, par défaut output | Optionnel |
-v, --verbose | Journaliser la sortie dans un fichier ainsi que dans la console | Optionnel |
-p, --multiprocess | Exécuter en mode multiprocessus selon le nombre de plugins/analyseurs | Optionnel |
| Args | Description | Requis / Optionnel |
|---|
-h, --help | afficher ce message d'aide et quitter | Optionnel |
--ip | Chemin du fichier d'adresses, CIDR ou adresses IP au format CSV (colonne ip requise). ajoutez plus de colonnes pour des informations supplémentaires sur chaque ip (username, pass, etc...) | Requis |
--port | Numéro du port | Optionnel |
--transport | tcp/udp | Optionnel |
--analyzer | Nom de l'analyseur à exécuter | Optionnel |