
AIEngine es un NIDS (sistema de detección de intrusiones en red) interactivo/programable de próxima generación para Python/Ruby/Java/Lua y Go.
AIEngine es un motor de sistema de detección de intrusiones en red de nueva generación, interactivo/programable en Python/Ruby/Java/Lua y Go, con capacidades de aprendizaje sin intervención humana, clasificación de dominios DNS, detección de spam, recolector de red, análisis forense de red y muchas otras.
AIEngine también ayuda a los profesionales de redes/seguridad a identificar el tráfico y desarrollar firmas para usarlas en NIDS, cortafuegos, clasificadores de tráfico, etc.
Las principales funcionalidades de AIEngine son:
Consulta la carpeta docs para más información
Para usar AIEngine (versión reducida) solo ejecuta el binario aiengine o usa el binding de 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 soporta seis tipos de stacks de red dependiendo de la topología de red.
StackLan (lan) Red de área local basada en IPv4.
StackLanIPv6 (lan6) Red de área local con soporte IPv6.
StackMobile (mobile) Red móvil (interfaz Gn) para IPv4.
StackVirtual (virtual) Stack para entornos virtuales/nube con VxLan y GRE Transparente.
StackOpenFlow (oflow) Stack para entornos OpenFlow.
StackMobileIPv6 (mobile6) Red móvil (interfaz Gn) para IPv6.
AIEngine es también un módulo de python/ruby/java/lua que permite ser más flexible en cuanto a la integración con otros sistemas y funcionalidades. Los principales objetos que el módulo python proporciona/exporta son los siguientes.
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
Para una descripción completa de los métodos de las clases en Python
import pyaiengine
help(pyaiengine)
Consulta el directorio examples para tener casos de uso útiles y revisa /docs para la documentación
Debes tener instalados pcre-devel, libpcap-devel y boost-devel en tu sistema como mínimo.
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ make
El sistema proporciona las siguientes funcionalidades para habilitar/deshabilitar según tus requisitos.
Estas opciones solo se pueden habilitar/deshabilitar en tiempo de compilación en el script configure.
Para compilar la biblioteca Python también se recomienda boost-python3-devel o boost-python-devel y python-devel.
La primera opción para compilar la biblioteca es usar la optimización de compilación O3; esto generará una biblioteca pequeña.
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ make python
$ python pyai_test.py
La segunda opción compila la biblioteca usando la forma estándar de Python mediante setup.py; esto generará una biblioteca de mayor tamaño en comparación con la anterior.
$ 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
La biblioteca Python contiene toda la funcionalidad que proporciona el motor.
Para compilar en Ruby se necesitan swig y ruby-devel.
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ make ruby
$ ruby ruai_tests.rb
La biblioteca Ruby no proporciona toda la funcionalidad del motor.
Para compilar en Java se necesita el paquete de desarrollo de Java.
$ 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
La biblioteca Java proporciona parte de la funcionalidad del motor, con algunas excepciones.
Para compilar en Lua se necesitan swig y el paquete lua-devel.
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ make lua
$ lua luai_tests.lua
La biblioteca Lua proporciona la mayor parte de la funcionalidad del motor.
Para compilar en Go se necesita swig.
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ make go
$ ./goai_test
La biblioteca Go tiene algunas restricciones funcionales debido a la naturaleza del lenguaje.
Puedes encontrar una descripción completa de diferentes casos de uso con los NIDS más comunes en http://aiengine.readthedocs.io/en/latest/aiengine.html#performance-with-other-engines
AIEngine está desarrollado con el estándar c++11/14/17 y está bajo los términos de GPLv2.
Echa un vistazo al código fuente de AIEngine con
$ git clone https://bitbucket.com/camp0/aiengine
Si estás interesado en una funcionalidad específica, quieres promocionar el proyecto o simplemente necesitas ayuda, envíame un correo electrónico. Las contribuciones siempre son útiles.
AIEngine ha sido desarrollado utilizando desarrollo dirigido por pruebas. Por lo tanto, para mantener el mismo ciclo de vida, la nueva funcionalidad debe tener pruebas unitarias en el directorio creado para la nueva funcionalidad y, para integrarse con todo el sistema, integrarse posteriormente con el archivo principal tests.cc en el directorio /src.
Si tienes un caso de uso que no está cubierto con los ejemplos proporcionados, no dudes en contactarme.
Si te gusta el proyecto, puedes invitarme a unas cervezas con bitcoin :)
3DG7FhkFUuKq7VhfXdP9QpsUzfWPXu49ng