
Программируемый движок инспекции пакетов с NIDS, DNS-классификацией, частотным анализом и генерацией авто-регулярных выражений. Поддерживает привязки к Python/Ruby/Java/Lua для интеграции с базами данных и другими инструментами безопасности.
AIEngine — это движок анализа пакетов нового поколения с интерактивным/программируемым интерфейсом на Python/Ruby/Java/Lua, обладающий способностью к обучению без участия человека, функциональностью NIDS (системы обнаружения сетевых вторжений), классификацией DNS-доменов, сбором сетевых данных, сетевой криминалистикой и многим другим.
Актуальный проект находится по адресу https://bitbucket.org/camp0/aiengine
AIEngine также помогает специалистам по сетям и безопасности идентифицировать трафик и разрабатывать сигнатуры для использования в NIDS, межсетевых экранах, классификаторах трафика и т.д.
Основные функциональные возможности AIEngine:
Чтобы использовать AIEngine (урезанная версия), просто выполните бинарный файл aiengine или воспользуйтесь привязками python/ruby/java/lua.
luis@luis-xps:~/c++/aiengine/src$ ./aiengine -h
aiengine 1.5
Обязательные аргументы:
-I [ --input ] arg Задает сетевой интерфейс, файл pcap или
каталог с файлами pcap.
Необязательные аргументы канального уровня:
-q [ --tag ] arg Выбирает тип тега канального уровня (vlan, mpls).
Необязательные аргументы TCP:
-t [ --tcp-flows ] arg (=32768) Задает количество TCP-потоков в пуле.
Необязательные аргументы UDP:
-u [ --udp-flows ] arg (=16384) Задает количество UDP-потоков в пуле.
Необязательные аргументы регулярных выражений:
-R [ --enable-signatures ] Включает движок сигнатур.
-r [ --regex ] arg (=.*) Задает регулярное выражение для оценки потоков.
-c [ --flow-class ] arg (=all) Использует tcp, udp или all для сопоставления сигнатуры
с потоками.
-m [ --matched-flows ] Показывает потоки, соответствующие регулярному выражению.
-j [ --reject-flows ] Отклоняет потоки, соответствующие регулярному выражению.
-w [ --evidence ] Генерирует pcap-файл с совпавшим регулярным выражением
для криминалистического анализа.
Необязательные аргументы частот:
-F [ --enable-frequencies ] Включает движок частот.
-g [ --group-by ] arg (=dst-port) Группирует частоты по src-ip, dst-ip, src-port и dst-port.
-f [ --flow-type ] arg (=tcp) Использует потоки tcp или udp.
-L [ --enable-learner ] Включает движок обучения.
-k [ --key-learner ] arg (=80) Задает ключ для движка обучения.
-b [ --buffer-size ] arg (=64) Задает размер внутреннего буфера для генерации регулярного выражения.
-y [ --enable-yara ] Генерирует сигнатуру yara.
Необязательные аргументы:
-n [ --stack ] arg (=lan) Задает сетевой стек (lan, mobile, lan6, virtual, oflow).
-d [ --dumpflows ] Выводит потоки в stdout.
-s [ --statistics ] arg (=0) Показывает статистику сетевого стека (5 уровней).
-T [ --timeout ] arg (=180) Задает таймаут потоков.
-P [ --protocol ] arg Показывает статистику конкретного протокола сетевого стека.
-e [ --release ] Очищает кэши.
-l [ --release-cache ] arg Очищает конкретный кэш.
-p [ --pstatistics ] Показывает статистику процесса.
-h [ --help ] Показать справку.
-v [ --version ] Показать версию.
AIEngine поддерживает пять типов сетевых стеков в зависимости от топологии сети.
StackLan (lan) Локальная сеть на основе IPv4.
StackLanIPv6 (lan6) Локальная сеть с поддержкой IPv6.
StackMobile (mobile) Мобильная сеть (интерфейс Gn) для IPv4.
StackVirtual (virtual) Стек для виртуальных/облачных сред с VxLan и прозрачным GRE.
StackOpenFlow (oflow) Стек для сред OpenFlow.
AIEngine также является модулем python/ruby/java/lua, что обеспечивает большую гибкость в плане интеграции с другими системами и функциями. Основные объекты, экспортируемые модулем python, перечислены ниже.
DNSInfo
BitcoinInfo
DatabaseAdaptor (абстрактный класс)
DomainName
DomainNameManager
Flow
FlowManager
Frequencies
FrequencyGroup
HTTPInfo
HTTPUriSet
IMAPInfo
IPAbstractSet (абстрактный класс)
IPSet
IPSetManager
LearnerEngine
NetworkStack (абстрактный класс)
StackLan
StackLanIPv6
StackMobile
StackOpenFlow
StackVirtual
POPInfo
PacketDispatcher
PacketFrequencies
Regex
RegexManager
SIPInfo
SMTPInfo
SSLInfo
MQTTInfo
CoAPInfo
Для полного описания методов класса
import pyaiengine
help(pyaiengine)
Проверьте страницы вики по конфигурации или каталог examples, чтобы найти более интересные примеры. [https://bitbucket.org/camp0/aiengine/wiki/Configurations]
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ make
Первый вариант компиляции использует оптимизацию O3, что приведет к созданию небольшой библиотеки.
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ make python
$ python pyai_test.py
Второй вариант компилирует библиотеку стандартным для Python способом с помощью setup.py, что приведет к созданию библиотеки большего размера по сравнению с предыдущим.
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ python setup.py build_ext -i
$ python pyai_test.py
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ make ruby
$ ruby ruai_tests.rb
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ make java
$ java -cp ".:/usr/share/java/junit.jar:/usr/share/java/hamcrest/core.jar:./buildjava" org.junit.runner.JUnitCore JunitTestSuite
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ make lua
$ lua luai_tests.lua
AIEngine разрабатывается на стандарте C++11/14 и распространяется на условиях GPLv2.
Получите исходный код AIEngine с помощью
$ git clone https://bitbucket.com/camp0/aiengine
Если вас интересует какая-либо функциональность или вам нужна помощь, просто напишите мне письмо. Любые вклады всегда приветствуются.
AIEngine разрабатывался с использованием разработки через тестирование (TDD). Поэтому для поддержания того же жизненного цикла новая функциональность должна иметь модульные тесты в каталоге, созданном для новой функциональности, и для интеграции со всей системой, а затем интегрироваться с основным файлом tests.cc в каталоге /src.