
Motor de inspección de paquetes programable con NIDS, clasificación DNS, análisis de frecuencia y generación automática de expresiones regulares. Admite enlaces Python/Ruby/Java/Lua para integración con bases de datos y otras herramientas de seguridad.
AIEngine es un motor de inspección de paquetes interactivo/programable de próxima generación en Python/Ruby/Java/Lua con capacidades de aprendizaje sin intervención humana, funcionalidad NIDS (Sistema de Detección de Intrusiones en Red), clasificación de dominios DNS, recolector de red, forense de red y muchas otras.
El proyecto actual está en https://bitbucket.org/camp0/aiengine
AIEngine también ayuda a profesionales de redes/seguridad a identificar tráfico y desarrollar firmas para usarlas en NIDS, Cortafuegos, Clasificadores de tráfico, etc.
Las principales funcionalidades de AIEngine son:
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 1.5
Argumentos obligatorios:
-I [ --input ] arg Establece la interfaz de red, archivo pcap o
directorio con archivos pcap.
Argumentos opcionales de la capa de enlace:
-q [ --tag ] arg Selecciona el tipo de etiqueta de la capa ethernet (vlan, mpls).
Argumentos opcionales TCP:
-t [ --tcp-flows ] arg (=32768) Establece el número de flujos TCP en el pool.
Argumentos opcionales UDP:
-u [ --udp-flows ] arg (=16384) Establece el número de flujos UDP en el pool.
Argumentos opcionales de Expresiones Regulares:
-R [ --enable-signatures ] Habilita el motor de firmas.
-r [ --regex ] arg (=.*) Establece la expresión regular para evaluar contra los flujos.
-c [ --flow-class ] arg (=all) Usa tcp, udp o all para coincidir la firma
en los flujos.
-m [ --matched-flows ] Muestra los flujos que coinciden con la expresión regular.
-j [ --reject-flows ] Rechaza los flujos que coinciden con la expresión regular.
-w [ --evidence ] Genera un archivo pcap con la expresión regular
coincidente para análisis forense.
Argumentos opcionales de Frecuencias:
-F [ --enable-frequencies ] Habilita el motor de frecuencias.
-g [ --group-by ] arg (=dst-port) Agrupa frecuencias por src-ip, dst-ip, src-port
y dst-port.
-f [ --flow-type ] arg (=tcp) Usa flujos tcp o udp.
-L [ --enable-learner ] Habilita el motor de aprendizaje.
-k [ --key-learner ] arg (=80) Establece la clave para el motor de aprendizaje.
-b [ --buffer-size ] arg (=64) Establece el tamaño del buffer interno para
generar la expresión regular.
-y [ --enable-yara ] Genera una firma yara.
Argumentos opcionales:
-n [ --stack ] arg (=lan) Establece la pila de red (lan, mobile, lan6, virtual,
oflow).
-d [ --dumpflows ] Vuelca los flujos a stdout.
-s [ --statistics ] arg (=0) Muestra estadísticas de la pila de red (5 niveles).
-T [ --timeout ] arg (=180) Establece el tiempo de espera de los flujos.
-P [ --protocol ] arg Muestra estadísticas de un protocolo específico de la
pila de red.
-e [ --release ] Libera las cachés.
-l [ --release-cache ] arg Libera una caché específica.
-p [ --pstatistics ] Muestra estadísticas del proceso.
-h [ --help ] Muestra ayuda.
-v [ --version ] Muestra la cadena de versión.
AIEngine soporta cinco tipos de pilas 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) Pila para entornos virtuales/cloud con VxLan y GRE Transparente.
StackOpenFlow (oflow) Pila para entornos openflow.
AIEngine es también un módulo de python/ruby/java/lua que permite ser más flexible en términos de integración con otros sistemas y funcionalidades. Los principales objetos que el módulo python proporciona exportar son los siguientes.
DNSInfo
BitcoinInfo
DatabaseAdaptor (Clase abstracta)
DomainName
DomainNameManager
Flow
FlowManager
Frequencies
FrequencyGroup
HTTPInfo
HTTPUriSet
IMAPInfo
IPAbstractSet (Clase abstracta)
IPSet
IPSetManager
LearnerEngine
NetworkStack (Clase abstracta)
StackLan
StackLanIPv6
StackMobile
StackOpenFlow
StackVirtual
POPInfo
PacketDispatcher
PacketFrequencies
Regex
RegexManager
SIPInfo
SMTPInfo
SSLInfo
MQTTInfo
CoAPInfo
Para una descripción completa de los métodos de la clase
import pyaiengine
help(pyaiengine)
Revisa las páginas wiki de configuración o el directorio de ejemplos para tener ejemplos más interesantes. [https://bitbucket.org/camp0/aiengine/wiki/Configurations]
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ make
La primera opción para compilar la librería es usando la optimización de compilación O3, esto generará una librería pequeña
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ cd src
$ make python
$ python pyai_test.py
La segunda opción compilará la librería usando la forma estándar de Python mediante setup.py, esto generará un tamaño de librería más grande 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
$ 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