
Proyecto de investigación sobre modelado de protocolos IoT heterogéneos
IoTMap es una herramienta que modela redes IoT utilizando uno o múltiples protocolos simultáneamente. Este es un trabajo en progreso, como parte de una tesis doctoral sobre seguridad de Internet de las Cosas. Este repositorio se actualiza regularmente a medida que se obtienen nuevos resultados. Este proyecto soporta 3 protocolos por ahora: BLE, ZigBee y OS4I. Más están por venir.
Puedes usar el archivo requirements.txt para instalar los paquetes:
pip3 install -r requirements.txt
sudo apt-get install libgcrypt20-dev # (debian-based distribs)
sudo pacman -S libgcrypt # (archlinux-based distribs)
Clona este repositorio e instala todos los requisitos descritos anteriormente:
# 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
Ahora instalaremos Neo4J. La mayoría de las distribuciones incluyen Neo4J a través del gestor de paquetes integrado. Sin embargo, puede ser más simple instalarlo y usarlo desde el tarball:
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
Para la primera ejecución del proyecto, necesitas definir un nombre de usuario y una contraseña para la base de datos. Inicia la base de datos con lo siguiente:
cd database
./neo4j-community/bin/neo4j console
Neo4J se iniciará y será accesible en http://localhost:7474. El nombre de usuario y contraseña predeterminados son neo4j y neo4j respectivamente.
Iotmap usa el nombre de usuario predeterminado y iotmap como contraseña.
Si deseas establecer credenciales diferentes, debes actualizar los valores en
core/databaseController.py en la línea 46 de la siguiente manera:
model = Model("bolt:http://localhost:7474", "username", "password")
Una documentación más detallada sobre cómo usar IoTMap con un ejemplo está disponible aquí
Inicia el framework:
python3 iotmap.py
IoTMap iniciará la base de datos neo4j antes de ejecutarse, pero la base de datos no está disponible inmediatamente. A veces la espera de 10 segundos es suficiente para que la base de datos esté disponible, a veces no y necesitas volver a ejecutar iotmap.
IoTMap proporciona 3 módulos: Database, Modelling y Sniffing. El módulo de sniffing es un trabajo en progreso y no está completamente operativo. Para cambiar entre módulos, simplemente escribe el nombre del módulo.
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 >
Cada módulo y funciones proporcionan un menú de ayuda para listar las funciones disponibles y cómo usarlas.
Este módulo gestiona e interactúa con la base de datos 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 >
Para poblar la base de datos puedes importar una base de datos existente o archivos Pcaps. ImportPcaps convierte Pcaps a nuestro formato unificado utilizado para generar el modelado. Este módulo utiliza diferentes extractores según el protocolo dado como argumento que puedes encontrar en la carpeta extractors. El programa principal elige el extractor apropiado y luego ejecuta el generador de paquetes (gen_packets.py) de manera multihilo para generar el pcap con el formato unificado.
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 >
Este programa inicia la base de datos Neo4J antes de crear el modelado. Una vez que la base de datos está activa, comienza el modelado. Comienza con el análisis del pcap dado como entrada para extraer y crear nodos, luego aristas que conectan nodos. Después de crear los 4 grafos, el resultado se puede ver en la aplicación web proporcionada por Neo4J disponible en http://localhost:7474/
También puedes consultar la base de datos directamente desde la aplicación web usando una consulta cypher en el cuadro de entrada.
