
AIEngine ist ein interaktives/programmierbares NIDS (Netzwerk-Intrusion-Detection-System) der nächsten Generation für Python/Ruby/Java/Lua und Go.
AIEngine ist eine interaktive/programmierbare Netzwerk-Intrusion-Detection-Engine der nächsten Generation mit Python/Ruby/Java/Lua- und Go-Anbindung. Sie kann ohne menschliches Eingreifen lernen und bietet DNS-Domain-Klassifizierung, Spam-Erkennung, Netzwerk-Collector, Netzwerk-Forensik und viele weitere Funktionen.
AIEngine hilft Netzwerk-/Sicherheitsexperten außerdem dabei, Datenverkehr zu identifizieren und Signaturen zu entwickeln, die in NIDS, Firewalls, Traffic-Klassifikatoren usw. eingesetzt werden können.
Die Hauptfunktionen von AIEngine sind:
Weitere Informationen findest du im Ordner docs.
Um AIEngine (reduzierte Version) zu verwenden, führe einfach die Binärdatei aiengine aus oder verwende das Python/Ruby/Java/Lua-Binding.
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 unterstützt sechs Arten von Network-Stacks, abhängig von der Netzwerktopologie.
StackLan (lan) Lokales Netzwerk basierend auf IPv4.
StackLanIPv6 (lan6) Lokales Netzwerk mit IPv6-Unterstützung.
StackMobile (mobile) Mobilfunknetzwerk (Gn-Schnittstelle) für IPv4.
StackVirtual (virtual) Stack für virtuelle/Cloud-Umgebungen mit VxLan und transparentem GRE.
StackOpenFlow (oflow) Stack für OpenFlow-Umgebungen.
StackMobileIPv6 (mobile6) Mobilfunknetzwerk (Gn-Schnittstelle) für IPv6.
AIEngine ist außerdem ein Python/Ruby/Java/Lua-Modul, das mehr Flexibilität bei der Integration mit anderen Systemen und Funktionalitäten ermöglicht. Die wichtigsten Objekte, die das Python-Modul exportiert, sind die folgenden:
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
Für eine vollständige Beschreibung der Klassenmethoden in Python:
import pyaiengine
help(pyaiengine)
Schau dir das Verzeichnis examples an, um nützliche Anwendungsfälle zu sehen, und wirf einen Blick in /docs für die Dokumentation.
Du solltest mindestens pcre-devel, libpcap-devel und boost-devel auf deinem System installiert haben.
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ make
Das System bietet die folgenden Aktivierungs-/Deaktivierungsfunktionen, je nach deinen Anforderungen.
Diese Optionen können nur zur Kompilierzeit im configure-Skript aktiviert/deaktiviert werden.
Für das Kompilieren der Python-Bibliothek werden außerdem boost-python3-devel oder boost-python-devel und python-devel empfohlen.
Die erste Option zum Kompilieren der Bibliothek ist die Verwendung der O3-Kompilierungsoptimierung; dadurch wird eine kleine Bibliothek erzeugt.
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ make python
$ python pyai_test.py
Die zweite Option kompiliert die Bibliothek auf dem üblichen Python-Weg über setup.py. Dabei ist die Bibliothek im Vergleich zur vorherigen Option größer.
$ 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
Die Python-Bibliothek enthält die gesamte Funktionalität der Engine.
Zum Kompilieren unter Ruby werden swig und ruby-devel benötigt.
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ make ruby
$ ruby ruai_tests.rb
Die Ruby-Bibliothek bietet nicht die gesamte Funktionalität der Engine.
Zum Kompilieren unter Java wird das Java-Entwicklungspaket benötigt.
$ 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
Die Java-Bibliothek bietet einen Teil der Funktionalität der Engine, mit einigen Ausnahmen.
Zum Kompilieren unter Lua werden swig und das lua-devel-Paket benötigt.
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ make lua
$ lua luai_tests.lua
Die Lua-Bibliothek bietet den Großteil der Funktionalität der Engine.
Zum Kompilieren unter Go wird swig benötigt.
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ make go
$ ./goai_test
Die Go-Bibliothek weist aufgrund der Natur der Sprache einige funktionale Einschränkungen auf.
Eine vollständige Beschreibung verschiedener Anwendungsfälle mit den gängigsten NIDS findest du unter http://aiengine.readthedocs.io/en/latest/aiengine.html#performance-with-other-engines
AIEngine wird mit dem Standard c++11/14/17 entwickelt und steht unter den Bedingungen der GPLv2.
Hole dir den AIEngine-Quellcode mit:
$ git clone https://bitbucket.com/camp0/aiengine
Wenn du an einer bestimmten Funktionalität interessiert bist, das Projekt fördern möchtest oder einfach Hilfe brauchst, schreib mir einfach eine E-Mail. Beiträge sind immer willkommen.
AIEngine wurde mit testgetriebener Entwicklung (Test Driven Development) erstellt. Um denselben Lebenszyklus beizubehalten, sollte die neue Funktionalität Unit-Tests im Verzeichnis der neuen Funktionalität enthalten und später zur Integration mit dem gesamten System in die Hauptdatei tests.cc im Verzeichnis /src eingebunden werden.
Wenn du einen Anwendungsfall hast, der durch die bereitgestellten Beispiele nicht abgedeckt ist, kannst du mich gerne kontaktieren.
Wenn dir das Projekt gefällt, kannst du mir mit Bitcoin ein Bier ausgeben :)
3DG7FhkFUuKq7VhfXdP9QpsUzfWPXu49ng