
AIEngineは、Python/Ruby/Java/LuaおよびGoに対応した、次世代の対話型かつプログラム可能なNIDS(ネットワーク侵入検知システム)です。
AIEngineは、人間の介入なしに学習する機能、DNSドメイン分類、スパム検出、ネットワークコレクタ、ネットワークフォレンジックなどを備えた、次世代の対話型/プログラマブルなPython/Ruby/Java/LuaおよびGoネットワーク侵入検知システムエンジンです。
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は、ネットワークトポロジに応じて6種類のNetworkスタックをサポートしています。
StackLan (lan) IPv4ベースのローカルエリアネットワーク。
StackLanIPv6 (lan6) IPv6対応のローカルエリアネットワーク。
StackMobile (mobile) IPv4用のネットワークモバイル(Gnインターフェース)。
StackVirtual (virtual) VxLanおよびGRE Transparentを使用した仮想/クラウド環境用のスタック。
StackOpenFlow (oflow) OpenFlow環境用のスタック。
StackMobileIPv6 (mobile6) IPv6用のネットワークモバイル(Gnインターフェース)。
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
2番目のオプションは、setup.pyを使用する標準的なPython流の方法でライブラリをコンパイルします。これにより、前の方法と比較してライブラリサイズが大きくなります。
$ 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はテスト駆動開発を使用して開発されています。同じライフサイクルを維持するために、新機能には新機能用に作成されたディレクトリに単体テストが必要であり、システム全体と統合するために、後で/srcディレクトリのメインのtests.ccファイルと統合する必要があります。
提供されている例ではカバーされていないユースケースがある場合は、遠慮なくご連絡ください。
このプロジェクトが気に入ったら、ビットコインでビールを買ってください:)
3DG7FhkFUuKq7VhfXdP9QpsUzfWPXu49ng