
Projet de recherche sur la modélisation de protocoles IoT hétérogènes
IoTMap est un outil qui modélise les réseaux IoT en utilisant un ou plusieurs protocoles simultanément. Ce travail est en cours de développement, dans le cadre d'une thèse de doctorat sur la sécurité de l'Internet des Objets. Ce dépôt est régulièrement mis à jour au fur et à mesure que de nouveaux résultats sont obtenus. Ce projet supporte actuellement 3 protocoles : BLE, ZigBee et OS4I. D'autres arrivent.
Vous pouvez utiliser le fichier requirements.txt pour installer les paquets :
pip3 install -r requirements.txt
sudo apt-get install libgcrypt20-dev # (debian-based distribs)
sudo pacman -S libgcrypt # (archlinux-based distribs)
Clonez ce dépôt et installez toutes les dépendances décrites ci-dessus :
# For any distrib
git clone https://github.com/AlgoSecure/iotmap.git
cd iotmap
sudo pip install -r requirements.txt
# If debian-based
sudo apt-get install libgcrypt20-dev
# If archlinux-based
sudo pacman -S libgcrypt
Nous allons maintenant installer Neo4J. La plupart des distributions fournissent Neo4J via leur gestionnaire de paquets intégré. Cependant, il peut être plus simple de l'installer et de l'utiliser à partir de l'archive :
cd /path/to/iotmap
cd database
# Replace the version number with the latest in the URL if necessary
wget -O neo4j-community.tar "https://neo4j.com/artifact.php?name=neo4j-community-3.5.9-unix.tar.gz"
mkdir neo4j-community && tar xvf neo4j-community.tar -C neo4j-community --strip-components 1
Pour la première exécution du projet, vous devez définir un nom d'utilisateur et un mot de passe pour la base de données. Démarrez la base de données avec la commande suivante :
cd database
./neo4j-community/bin/neo4j console
Neo4J démarrera et sera accessible à l'adresse http://localhost:7474. Le nom d'utilisateur et le mot de passe par défaut sont respectivement neo4j et neo4j. Iotmap utilise le nom d'utilisateur par défaut et iotmap comme mot de passe.
Si vous souhaitez définir des identifiants différents, vous devez mettre à jour les valeurs dans core/databaseController.py à la ligne 46 comme suit :
model = Model("bolt:http://localhost:7474", "username", "password")
Une documentation plus détaillée sur l'utilisation d'IoTMap avec un exemple est disponible ici
Lancez le framework :
python3 iotmap.py
IoTMap démarrera la base de données neo4j avant de s'exécuter, mais la base de données n'est pas immédiatement disponible. Parfois, une pause de 10 secondes suffit pour que la base de données soit disponible, parfois non et vous devez relancer iotmap.
IoTMap fournit 3 modules : Database, Modelling et Sniffing. Le module de sniffing est en cours de développement et n'est pas totalement opérationnel. Pour basculer entre les modules, tapez simplement le nom du module.
python3 iotmap.py
Starting the database
Database is available at http://localhost:7474/
IIIIIIIIII TTTTTTTTTTTTTTTTTTTTTTTMMMMMMMM MMMMMMMM
I::::::::I T:::::::::::::::::::::TM:::::::M M:::::::M
I::::::::I T:::::::::::::::::::::TM::::::::M M::::::::M
II::::::II T:::::TT:::::::TT:::::TM:::::::::M M:::::::::M
I::::I oooooooooooTTTTTT T:::::T TTTTTTM::::::::::M M::::::::::M aaaaaaaaaaaaa ppppp ppppppppp
I::::I oo:::::::::::oo T:::::T M:::::::::::M M:::::::::::M a::::::::::::a p::::ppp:::::::::p
I::::I o:::::::::::::::o T:::::T M:::::::M::::M M::::M:::::::M aaaaaaaaa:::::ap:::::::::::::::::p
I::::I o:::::ooooo:::::o T:::::T M::::::M M::::M M::::M M::::::M a::::app::::::ppppp::::::p
I::::I o::::o o::::o T:::::T M::::::M M::::M::::M M::::::M aaaaaaa:::::a p:::::p p:::::p
I::::I o::::o o::::o T:::::T M::::::M M:::::::M M::::::M aa::::::::::::a p:::::p p:::::p
I::::I o::::o o::::o T:::::T M::::::M M:::::M M::::::M a::::aaaa::::::a p:::::p p:::::p
I::::I o::::o o::::o T:::::T M::::::M MMMMM M::::::Ma::::a a:::::a p:::::p p::::::p
II::::::IIo:::::ooooo:::::o TT:::::::TT M::::::M M::::::Ma::::a a:::::a p:::::ppppp:::::::p
I::::::::Io:::::::::::::::o T:::::::::T M::::::M M::::::Ma:::::aaaa::::::a p::::::::::::::::p
I::::::::I oo:::::::::::oo T:::::::::T M::::::M M::::::M a::::::::::aa:::ap::::::::::::::pp
IIIIIIIIII ooooooooooo TTTTTTTTTTT MMMMMMMM MMMMMMMM aaaaaaaaaa aaaap::::::pppppppp
p:::::p
p:::::p
p:::::::p
p:::::::p
p:::::::p
ppppppppp
Version=0.1
IoTMap > help
Core commands
=============
Commands Description
------------------------------
database Use database mode.
sniffing Use sniffing mode.
exploit Use exploit mode.
IoTMap >
Chaque module et fonction fournit un menu d'aide pour lister les fonctions disponibles et comment les utiliser.
Ce module gère et interagit avec la base de données neo4j.
IoTMap > database
IoTMap database > help
Core commands
=============
Commands Description
------------------------------
database Use database mode.
sniffing Use sniffing mode.
exploit Use exploit mode.
Database commands
=================
Interact with the neo4j database.
List of available commands :
addNodes
clearDatabase
exportDB
getNodes
help
importDB
importPcaps
mergeNodes
removeNode
For more information about any commands hit :
<command name> -h
IoTMap database >
Pour remplir la base de données, vous pouvez importer une base de données existante ou des fichiers Pcaps. ImportPcaps convertit les Pcaps dans notre format unifié utilisé pour générer la modélisation. Ce module utilise différents extracteurs selon le protocole donné en argument, que vous pouvez trouver dans le dossier extractors. Le programme principal choisit l'extracteur approprié puis exécute le générateur de paquets (gen_packets.py) de manière multithreadée pour générer le pcap au format unifié.
IoTMap modelling > help
Core commands
=============
Commands Description
------------------------------
database Use database mode.
sniffing Use sniffing mode.
exploit Use exploit mode.
Modelling commands
==================
Map the network of IoT devices detected by sniffing.
List of available commands :
appGraph
compareTo
dlGraph
help
nwkGraph
option
run
set
transGraph
For more information about any commands hit :
<command name> -h
IoTMap modelling >
Ce programme démarre la base de données Neo4J avant de créer la modélisation. Une fois la base de données opérationnelle, la modélisation commence. Elle débute par l'analyse du pcap fourni en entrée pour extraire et créer des nœuds, puis des arêtes qui relient les nœuds. Après la création des 4 graphes, le résultat peut être visualisé sur l'application web fournie par Neo4J disponible à l'adresse http://localhost:7474/
Vous pouvez également interroger la base de données directement depuis l'application web en utilisant une requête cyphre dans la zone de saisie.
