
Outil d'empreinte active qui identifie 16 piles TCP/IP embarquées sur des périphériques réseau en utilisant des techniques de sondage ICMP, TCP, HTTP, SSH et FTP pour l'évaluation des vulnérabilités.
L'outil project-memoria-detector vise à déterminer si un périphérique réseau cible exécute une pile TCP/IP embarquée spécifique.
Actuellement, l'outil prend en charge les empreintes de 16 piles TCP/IP embarquées (et leurs variantes) :
Plusieurs des piles ci-dessus ont été jugées vulnérables lors des recherches du Project Memoria.
Le script identifie l'utilisation des 16 piles TCP/IP sur un périphérique cible via les méthodes d'empreinte active suivantes :
Bien que le script ait été testé dans un environnement de laboratoire, nous ne pouvons pas garantir que son utilisation soit sûre pour tous les appareils possibles. Les paquets ICMP malformés, par exemple, pourraient faire planter un appareil exécutant une pile différente. PAR CONSÉQUENT, NOUS NE RECOMMANDONS PAS SON UTILISATION DIRECTE SUR DES ENVIRONNEMENTS EN PRODUCTION AVEC DES ÉQUIPEMENTS CRITIQUES (COMME LES HÔPITAUX AVEC DES DISPOSITIFS CONNECTÉS AUX PATIENTS OU LES SYSTÈMES DE CONTRÔLE INDUSTRIEL À SÉCURITÉ CRITIQUE). Une approche idéale consiste à tester les appareils dans un environnement de laboratoire ou pendant une fenêtre de maintenance.
Veuillez noter que l'outil a été testé uniquement dans un environnement de test Linux (toute distribution Linux moderne devrait fonctionner). Il est supposé que l'environnement de test utilise iptables (https://linux.die.net/man/8/iptables) comme pare-feu de base.
L'outil nécessite une version récente de Python 3.x (voir https://www.python.org/, version >= 3.7.7 de préférence), ainsi que Scapy (voir https://scapy.net/, version >= 2.4.3 de préférence).
Pour installer Scapy avec Python et pour le dépannage général, veuillez suivre la documentation ici : https://scapy.readthedocs.io/en/latest/installation.html
Si Python est déjà installé sur votre machine, pour installer les dépendances requises, vous pouvez utiliser pip et le fichier requirements.txt fourni :
$ pip install -r requirements.txt
Comme Scapy nécessite des privilèges root pour s'exécuter, l'outil doit être lancé avec sudo, par exemple :
$ sudo python project-memoria-detector.py [options]
Pour voir les options disponibles pour exécuter le script, lancez-le avec l'option -h :
$ python project-memoria-detector.py -h
En général, le script nécessite au moins une seule adresse IP du périphérique cible (ce paramètre peut être explicitement spécifié avec -ip_dst)
$ sudo python project-memoria-detector.py 192.168.3.1
Le script prend en charge l'analyse de plages d'adresses IP. Vous pouvez soit spécifier un sous-réseau à analyser à l'aide de la notation CIDR, soit fournir un fichier .txt avec un ensemble d'adresses IP à analyser.
La notation CIDR peut être utilisée comme suit (pour cet exemple, les adresses IP de 192.168.3.1 à 192.168.3.254 seront scannées) :
$ sudo python project-memoria-detector.py 192.168.3.0/24
Vous pouvez également utiliser un fichier .txt pour spécifier les adresses IP d'intérêt : chaque adresse IP dans ce fichier doit commencer sur une nouvelle ligne. Par exemple, nous pouvons créer un fichier appelé input.txt avec le contenu suivant :
$ cat input.txt
192.168.1.8
192.168.1.9
192.168.3.1
192.168.2.14
Nous pouvons ensuite exécuter le script comme suit :
$ sudo python project-memoria-detector.py --in-file input.txt
Le script utilise des valeurs par défaut pour les ports afin d'identifier différents protocoles tels que SSH (22), FTP (21) et HTTP (80). Afin de remplacer ces valeurs par défaut, vous pouvez le faire en définissant les paramètres comme :
$ sudo python project-memoria-detector.py -ip_dst 192.168.212.42 --tcp-port 80 --http-port 80 --ssh-port 22 --ftp-port 21 -i eth1
Le script affichera les correspondances avec les empreintes individuelles ainsi que le degré de certitude entre parenthèses :
$ sudo python project-memoria-detector.py 192.168.6.42
192.168.6.42 is alive
ICMP => uIP/Contiki (High)
TCP => uIP/Contiki (Medium)
HTTP => uIP/Contiki (High)
SSH => Unknown (No match)
FTP => Unknown (No reply)
Le degré de certitude d'une empreinte particulière peut être High, Medium, ou Low. No match signifie qu'il n'y a pas de correspondance avec une empreinte connue, et No reply signifie qu'un port/service spécifique est indisponible.
Copyright (C) 2020 Forescout Technologies, Inc.
Licence du Programme
"Le Programme" désigne toute œuvre protégée par le droit d'auteur concédée sous cette Licence. Chaque licencié est désigné par "vous".