
Moteur programmable d'inspection de paquets avec NIDS, classification DNS, analyse de fréquence et génération automatique de regex. Supporte les bindings Python/Ruby/Java/Lua pour l'intégration avec des bases de données et d'autres outils de sécurité.
AIEngine est un moteur d'inspection de paquets interactif/programmable de nouvelle génération en Python/Ruby/Java/Lua avec des capacités d'apprentissage sans intervention humaine, des fonctionnalités NIDS (Système de Détection d'Intrusion Réseau), classification de domaines DNS, collecteur réseau, forensique réseau et bien d'autres.
Ce projet se trouve sur https://bitbucket.org/camp0/aiengine
AIEngine aide également les professionnels du réseau et de la sécurité à identifier le trafic et à développer des signatures pour les utiliser sur les NIDS, les pare-feux, les classificateurs de trafic, etc.
Les principales fonctionnalités d'AIEngine sont :
Pour utiliser AIEngine (version réduite), exécutez simplement le binaire aiengine ou utilisez la liaison python/ruby/java/lua.
luis@luis-xps:~/c++/aiengine/src$ ./aiengine -h
aiengine 1.5
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.
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.
-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.
-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.
-e [ --release ] Release the caches.
-l [ --release-cache ] arg Release a specific cache.
-p [ --pstatistics ] Show statistics of the process.
-h [ --help ] Show help.
-v [ --version ] Show version string.
AIEngine prend en charge cinq types de piles réseau selon la topologie réseau.
StackLan (lan) Réseau local basé sur IPv4.
StackLanIPv6 (lan6) Réseau local avec support IPv6.
StackMobile (mobile) Réseau mobile (interface Gn) pour IPv4.
StackVirtual (virtual) Pile pour environnements virtuels/cloud avec VxLan et GRE Transparent.
StackOpenFlow (oflow) Pile pour environnements OpenFlow.
AIEngine est également un module python/ruby/java/lua qui permet une plus grande flexibilité en termes d'intégration avec d'autres systèmes et fonctionnalités. Les principaux objets que le module python fournit en export sont les suivants.
DNSInfo
BitcoinInfo
DatabaseAdaptor (Abstract class)
DomainName
DomainNameManager
Flow
FlowManager
Frequencies
FrequencyGroup
HTTPInfo
HTTPUriSet
IMAPInfo
IPAbstractSet (Abstract class)
IPSet
IPSetManager
LearnerEngine
NetworkStack (Abstract class)
StackLan
StackLanIPv6
StackMobile
StackOpenFlow
StackVirtual
POPInfo
PacketDispatcher
PacketFrequencies
Regex
RegexManager
SIPInfo
SMTPInfo
SSLInfo
MQTTInfo
CoAPInfo
Pour une description complète des méthodes de la classe
import pyaiengine
help(pyaiengine)
Consultez les pages wiki de configuration ou le répertoire d'exemples pour avoir des exemples plus intéressants. [https://bitbucket.org/camp0/aiengine/wiki/Configurations]
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ make
La première option pour compiler la bibliothèque est d'utiliser l'optimisation de compilation O3, cela générera une petite bibliothèque.
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ make python
$ python pyai_test.py
La seconde option compilera la bibliothèque en utilisant la méthode pythonique standard avec setup.py, cela générera une bibliothèque plus grande comparée à la précédente.
$ 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 est développé avec les standards c++11/14 et est sous les termes de la GPLv2.
Récupérez le code source d'AIEngine avec
$ git clone https://bitbucket.com/camp0/aiengine
Si vous êtes intéressé par une fonctionnalité ou une aide, envoyez-moi simplement un email. Les contributions sont toujours les bienvenues.
AIEngine a été développé en utilisant le développement piloté par les tests. Ainsi, pour maintenir le même cycle de vie, la nouvelle fonctionnalité doit avoir des tests unitaires dans le répertoire créé pour la nouvelle fonctionnalité et pour l'intégration avec l'ensemble du système, puis intégrée avec le fichier principal tests.cc dans le répertoire /src.