
AIEngine — это NIDS (система обнаружения сетевых вторжений) следующего поколения, интерактивная/программируемая на Python/Ruby/Java/Lua и Go.
AIEngine — это движок системы обнаружения сетевых вторжений нового поколения с возможностью интерактивного/программируемого управления на Python/Ruby/Java/Lua и Go, обладающий способностью к обучению без вмешательства человека, классификации доменов DNS, обнаружению спама, сбору сетевых данных, сетевой криминалистике и многим другим функциям.
AIEngine также помогает специалистам по сетям и безопасности идентифицировать трафик и разрабатывать сигнатуры для использования в NIDS, межсетевых экранах, классификаторах трафика и т.д.
Основные возможности AIEngine:
Более подробная информация — в папке docs
Чтобы использовать AIEngine (облегчённую версию), просто выполните бинарный файл aiengine или используйте привязки Python/Ruby/Java/Lua.
luis@luis-xps:~/c++/aiengine/src$ ./aiengine -h
aiengine 2.1.0
Mandatory arguments:
-I [ --input ] arg Sets the network interface ,pcap file or
directory with pcap files.
Link Layer optional arguments:
-q [ --tag ] arg Selects the tag type of the ethernet layer (vlan,mpls).
TCP optional arguments:
-t [ --tcp-flows ] arg (=32768) Sets the number of TCP flows on the pool.
UDP optional arguments:
-u [ --udp-flows ] arg (=16384) Sets the number of UDP flows on the pool.
Domain optional arguments:
-D [ --domain-file ] arg Reads domain names from file.
-B [ --domain-protocol ] arg (=dns) Protocol to plug the domain-file (dns,
ssl, http).
-S [ --matched-domain ] Shows only the domains that matches.
Regex optional arguments:
-R [ --enable-signatures ] Enables the Signature engine.
-r [ --regex ] arg (=.*) Sets the regex for evaluate agains the flows.
-c [ --flow-class ] arg (=all) Uses tcp, udp or all for matches the signature
on the flows.
-m [ --matched-flows ] Shows the flows that matchs with the regex.
-M [ --matched-packet ] Shows the packet payload that matchs with
the regex.
-C [ --continue ] Continue evaluating the regex with the
next packets of the Flow.
-j [ --reject-flows ] Rejects the flows that matchs with the
regex.
-w [ --evidence ] Generates a pcap file with the matching
regex for forensic analysis.
Frequencies optional arguments:
-F [ --enable-frequencies ] Enables the Frequency engine.
-g [ --group-by ] arg (=dst-port) Groups frequencies by src-ip,dst-ip,src-por
t and dst-port.
-f [ --flow-type ] arg (=tcp) Uses tcp or udp flows.
-L [ --enable-learner ] Enables the Learner engine.
-k [ --key-learner ] arg (=80) Sets the key for the Learner engine.
-b [ --buffer-size ] arg (=64) Sets the size of the internal buffer for
generate the regex.
-Q [ --byte-quality ] arg (=80) Sets the minimum quality for the bytes of
the generated regex.
-y [ --enable-yara ] Generates a yara signature.
Optional arguments:
-n [ --stack ] arg (=lan) Sets the network stack (lan,mobile,lan6,virtual,
oflow).
-d [ --dumpflows ] Dump the flows to stdout.
-s [ --statistics ] arg (=0) Show statistics of the network stack (5 levels).
-T [ --timeout ] arg (=180) Sets the flows timeout.
-P [ --protocol ] arg Show statistics of a specific protocol of the
network stack.
-a [ --port ] arg (=0) Sets the HTTP listenting port.
-e [ --release ] Release the caches.
-l [ --release-cache ] arg Release a specific cache.
-p [ --pstatistics ] Show statistics of the process.
-o [ --summary ] Show protocol summmary statistics
(bytes,packets,% bytes,cache miss,memory).
-h [ --help ] Show help.
-v [ --version ] Show version string.
AIEngine поддерживает шесть типов сетевых стеков в зависимости от топологии сети.
StackLan (lan) — локальная сеть на основе IPv4.
StackLanIPv6 (lan6) — локальная сеть с поддержкой IPv6.
StackMobile (mobile) — мобильная сеть (интерфейс Gn) для IPv4.
StackVirtual (virtual) — стек для виртуальных/облачных сред с VxLan и GRE Transparent.
StackOpenFlow (oflow) — стек для сред OpenFlow.
StackMobileIPv6 (mobile6) — мобильная сеть (интерфейс Gn) для IPv6.
AIEngine также является модулем Python/Ruby/Java/Lua, что обеспечивает большую гибкость при интеграции с другими системами и функциональными возможностями. Основные объекты, экспортируемые модулем Python, перечислены ниже.
BitcoinInfo
Cache
CoAPInfo
DCERCPInfo
DHCPInfo
DHCPv6Info
DNSInfo
DTLSInfo
DatabaseAdaptor
DomainName
DomainNameManager
Flow
FlowManager
Frequencies
FrequencyGroup
HTTPInfo
HTTPUriSet
IMAPInfo
IPAbstractSet
IPRadixTree
IPSet
IPSetManager
LearnerEngine
MQTTInfo
NetbiosInfo
NetworkStack
StackLan
StackLanIPv6
StackMobile
StackMobileIPv6
StackOpenFlow
StackVirtual
POPInfo
PacketDispatcher
PacketFrequencies
QuicInfo
Regex
RegexManager
SIPInfo
SMBInfo
SMTPInfo
SSDPInfo
SSHInfo
SSLInfo
TCPInfo
Для полного описания методов классов в Python
import pyaiengine
help(pyaiengine)
Чтобы увидеть полезные примеры использования, загляните в каталог examples, а документацию ищите в /docs
В вашей системе должны быть установлены как минимум пакеты pcre-devel, libpcap-devel и boost-devel.
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ make
Система предоставляет следующие функции, которые можно включать/отключать в зависимости от ваших требований.
Эти опции можно включить/отключить только на этапе компиляции в скрипте configure.
Для компиляции библиотеки Python также рекомендуется установить boost-python3-devel или boost-python-devel и python-devel.
Первый вариант компиляции библиотеки — использование оптимизации компиляции 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
$ python3.6 setup.py build_ext -i
$ python3.6 pyai_test.py
Библиотека Python содержит всю функциональность, которую предоставляет движок.
Для компиляции на Ruby необходимы swig и ruby-devel.
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ make ruby
$ ruby ruai_tests.rb
Библиотека Ruby предоставляет не всю функциональность движка.
Для компиляции на Java необходим пакет java-devel.
$ 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
Библиотека Java предоставляет часть функциональности движка, за некоторыми исключениями.
Для компиляции на Lua с помощью swig необходим пакет lua-devel.
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ make lua
$ lua luai_tests.lua
Библиотека Lua предоставляет большую часть функциональности движка.
Для компиляции на Go необходим swig.
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ make go
$ ./goai_test
Библиотека Go имеет некоторые функциональные ограничения из-за особенностей языка.
Полное описание различных вариантов использования с наиболее распространёнными NIDS можно найти на http://aiengine.readthedocs.io/en/latest/aiengine.html#performance-with-other-engines
AIEngine разрабатывается в соответствии со стандартом C++11/14/17 и распространяется на условиях GPLv2.
Получите исходный код AIEngine с помощью
$ git clone https://bitbucket.com/camp0/aiengine
Если вас интересует конкретная функциональность, вы хотите продвинуть проект или вам просто нужна помощь, просто напишите мне по электронной почте. Любой вклад всегда полезен.
AIEngine разрабатывается с использованием разработки через тестирование (TDD). Чтобы сохранить тот же жизненный цикл, новая функциональность должна иметь модульные тесты в созданном для неё каталоге, а для интеграции со всей системой в дальнейшем интегрироваться с основным файлом tests.cc в каталоге /src
Если у вас есть вариант использования, не охваченный приведёнными примерами, пожалуйста, не стесняйтесь связаться со мной.
Если вам нравится проект, вы можете купить мне пиво за биткоины :)
3DG7FhkFUuKq7VhfXdP9QpsUzfWPXu49ng