
Projeto de pesquisa sobre modelagem de protocolos IoT heterogêneos
IoTMap é uma ferramenta que modela redes IoT usando um ou múltiplos protocolos simultaneamente. Este é um trabalho em andamento, como parte de uma tese de doutorado sobre segurança de Internet das Coisas. Este repositório é atualizado regularmente à medida que novos resultados são obtidos. Este projeto suporta 3 protocolos no momento: BLE, ZigBee e OS4I. Mais estão por vir.
Você pode usar o arquivo requirements.txt para instalar os pacotes:
pip3 install -r requirements.txt
sudo apt-get install libgcrypt20-dev # (distribuições baseadas em Debian)
sudo pacman -S libgcrypt # (distribuições baseadas em Archlinux)
Clone este repositório e instale todos os requisitos descritos acima:
# Para qualquer distribuição
git clone https://github.com/AlgoSecure/iotmap.git
cd iotmap
sudo pip install -r requirements.txt
# Se baseado em Debian
sudo apt-get install libgcrypt20-dev
# Se baseado em Archlinux
sudo pacman -S libgcrypt
Agora vamos instalar o Neo4J. A maioria das distribuições fornece Neo4J através do gerenciador de pacotes integrado. No entanto, pode ser mais simples instalá-lo e usá-lo a partir do tarball:
cd /path/to/iotmap
cd database
# Substitua o número da versão pela mais recente na URL, se necessário
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 a primeira execução do projeto, você precisa definir um nome de usuário e uma senha para o banco de dados. Inicie o banco de dados com o seguinte:
cd database
./neo4j-community/bin/neo4j console
O Neo4J será iniciado e estará acessível em http://localhost:7474. O nome de usuário e senha padrão são neo4j e neo4j respectivamente. O Iotmap usa o nome de usuário padrão e iotmap como senha.
Se você quiser definir credenciais diferentes, deve atualizar os valores em core/databaseController.py na linha 46 da seguinte forma:
model = Model("bolt:http://localhost:7474", "username", "password")
Uma documentação mais detalhada sobre como usar o IoTMap com um exemplo está disponível aqui
Inicie o framework:
python3 iotmap.py
O IoTMap iniciará o banco de dados neo4j antes de executar, no entanto o banco de dados não está imediatamente disponível. Às vezes, a pausa de 10 segundos é suficiente para o banco de dados ficar disponível, às vezes não e você precisa executar o iotmap novamente.
O IoTMap fornece 3 módulos: Database, Modelling e Sniffing. O módulo de sniffing é um trabalho em andamento e não está totalmente operacional. Para alternar entre módulos, basta digitar o nome do 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 e funções fornecem um menu de ajuda para listar as funções disponíveis e como usá-las.
Este módulo gerencia e interage com o banco de dados 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 popular o banco de dados, você pode importar um banco de dados existente ou arquivos Pcaps. ImportPcaps converte Pcaps para nosso formato unificado usado para gerar a modelagem. Este módulo usa diferentes extratores de acordo com o protocolo fornecido como argumento, que você pode encontrar na pasta extractors. O programa principal escolhe o extrator apropriado e então executa o gerador de pacotes (gen_packets.py) de forma multithreading para gerar o pcap com o 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 o banco de dados Neo4J antes de criar a modelagem. Uma vez que o banco de dados está ativo, a modelagem começa. Ela começa com a análise do pcap fornecido como entrada para extrair e criar nós, depois arestas que ligam os nós. Após os 4 gráficos criados, o resultado pode ser visualizado na aplicação web fornecida pelo Neo4J disponível em http://localhost:7474/
Você também pode consultar o banco de dados diretamente da aplicação web usando uma requisição Cypher na caixa de entrada.
