
Исследовательский проект по моделированию гетерогенных протоколов IoT
IoTMap — это инструмент для моделирования IoT-сетей с использованием одного или нескольких протоколов одновременно. Проект находится в разработке и является частью диссертационной работы по безопасности Интернета вещей. Данный репозиторий регулярно обновляется по мере получения новых результатов. На данный момент проект поддерживает три протокола: BLE, ZigBee и OS4I. В планах — добавление новых.
Вы можете использовать файл requirements.txt для установки пакетов:
pip3 install -r requirements.txt
sudo apt-get install libgcrypt20-dev # (дистрибутивы на основе Debian)
sudo pacman -S libgcrypt # (дистрибутивы на основе Archlinux)
Клонируйте этот репозиторий и установите все требования, описанные выше:
# Для любого дистрибутива
git clone https://github.com/AlgoSecure/iotmap.git
cd iotmap
sudo pip install -r requirements.txt
# Если у вас Debian-based
sudo apt-get install libgcrypt20-dev
# Если у вас Archlinux-based
sudo pacman -S libgcrypt
Теперь установим Neo4J. Большинство дистрибутивов поставляют Neo4J через встроенный менеджер пакетов. Однако может быть проще установить и использовать его из tarball:
cd /path/to/iotmap
cd database
# При необходимости замените номер версии в URL на актуальный
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
При первом запуске проекта необходимо задать имя пользователя и пароль для базы данных. Запустите базу данных следующей командой:
cd database
./neo4j-community/bin/neo4j console
Neo4J запустится и будет доступен по адресу http://localhost:7474. Имя пользователя и пароль по умолчанию — neo4j и neo4j соответственно.
IoTMap использует имя пользователя по умолчанию и пароль iotmap.
Если вы хотите указать другие учетные данные, обновите значения в файле core/databaseController.py на строке 46 следующим образом:
model = Model("bolt:http://localhost:7474", "username", "password")
Более подробная документация по использованию IoTMap с примером доступна здесь
Запустите фреймворк:
python3 iotmap.py
IoTMap запустит базу данных neo4j перед началом работы, однако база данных становится доступной не сразу. Иногда паузы в 10 секунд достаточно, чтобы база данных стала доступна, иногда нет — в таком случае нужно перезапустить iotmap.
IoTMap предоставляет 3 модуля: Database, Modelling и Sniffing. Модуль сниффинга находится в разработке и пока не полностью работоспособен. Для переключения между модулями просто введите имя модуля.
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 >
Каждый модуль и функция предоставляют меню справки со списком доступных функций и инструкциями по их использованию.
Этот модуль управляет базой данных 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 >
Чтобы заполнить базу данных, вы можете импортировать существующую базу данных или файлы Pcap. ИмпортPcaps преобразует Pcaps в единый формат, используемый для построения модели. Этот модуль использует различные экстракторы в зависимости от протокола, указанного в аргументе. Они находятся в папке extractors. Основная программа выбирает подходящий экстрактор, затем запускает генератор пакетов (gen_packets.py) в многопоточном режиме для создания pcap в едином формате.
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 >
Эта программа запускает базу данных Neo4J перед созданием модели. Как только база данных запущена, начинается моделирование. Оно начинается с анализа входного pcap-файла для извлечения и создания узлов, а затем рёбер, связывающих узлы. После создания 4 графов результат можно просмотреть в веб-приложении Neo4J по адресу http://localhost:7474/
Вы также можете отправлять запросы к базе данных напрямую из веб-приложения, используя запросы Cypher в поле ввода.
