
NIDS、DNS分類、頻度分析、自動正規表現生成を備えたプログラム可能なパケット検査エンジン。データベースや他のセキュリティツールとの統合のためのPython/Ruby/Java/Luaバインディングをサポート。
AIEngineは、人間の介入なしに学習できる次世代の対話型/プログラマブルPython/Ruby/Java/Luaパケット検査エンジンであり、NIDS(ネットワーク侵入検知システム)機能、DNSドメイン分類、ネットワークコレクター、ネットワークフォレンジックなど、さまざまな機能を備えています。
この実際のプロジェクトは https://bitbucket.org/camp0/aiengine にあります。
AIEngineはまた、ネットワーク/セキュリティ専門家がトラフィックを識別し、NIDS、ファイアウォール、トラフィック分類器などで使用するシグネチャを開発するのに役立ちます。
AIEngineの主な機能は以下の通りです。
AIEngine(簡易版)を使用するには、バイナリaiengineを実行するか、Python/Ruby/Java/Luaバインディングを使用します。
luis@luis-xps:~/c++/aiengine/src$ ./aiengine -h
aiengine 1.5
必須引数:
-I [ --input ] arg ネットワークインターフェース、pcapファイル、または
pcapファイルを含むディレクトリを設定します。
リンク層オプション引数:
-q [ --tag ] arg イーサネット層のタグタイプを選択します (vlan、mpls)。
TCPオプション引数:
-t [ --tcp-flows ] arg (=32768) プール内のTCPフロー数を設定します。
UDPオプション引数:
-u [ --udp-flows ] arg (=16384) プール内のUDPフロー数を設定します。
正規表現オプション引数:
-R [ --enable-signatures ] シグネチャエンジンを有効にします。
-r [ --regex ] arg (=.*) フローに対して評価する正規表現を設定します。
-c [ --flow-class ] arg (=all) シグネチャをフローにマッチさせるためにtcp、udp、またはallを使用します。
-m [ --matched-flows ] 正規表現にマッチしたフローを表示します。
-j [ --reject-flows ] 正規表現にマッチしたフローを拒否します。
-w [ --evidence ] フォレンジック解析のためにマッチング正規表現のpcapファイルを生成します。
頻度オプション引数:
-F [ --enable-frequencies ] 頻度エンジンを有効にします。
-g [ --group-by ] arg (=dst-port) 頻度をsrc-ip、dst-ip、src-port、dst-portでグループ化します。
-f [ --flow-type ] arg (=tcp) tcpまたはudpフローを使用します。
-L [ --enable-learner ] 学習エンジンを有効にします。
-k [ --key-learner ] arg (=80) 学習エンジンのキーを設定します。
-b [ --buffer-size ] arg (=64) 正規表現生成の内部バッファサイズを設定します。
-y [ --enable-yara ] Yaraシグネチャを生成します。
オプション引数:
-n [ --stack ] arg (=lan) ネットワークスタックを設定します (lan、mobile、lan6、virtual、oflow)。
-d [ --dumpflows ] フローを標準出力にダンプします。
-s [ --statistics ] arg (=0) ネットワークスタックの統計を表示します(5レベル)。
-T [ --timeout ] arg (=180) フローのタイムアウトを設定します。
-P [ --protocol ] arg ネットワークスタックの特定のプロトコルの統計を表示します。
-e [ --release ] キャッシュを解放します。
-l [ --release-cache ] arg 特定のキャッシュを解放します。
-p [ --pstatistics ] プロセスの統計を表示します。
-h [ --help ] ヘルプを表示します。
-v [ --version ] バージョン文字列を表示します。
AIEngineは、ネットワークトポロジに応じて5種類のネットワークスタックをサポートしています。
StackLan (lan) IPv4ベースのローカルエリアネットワーク。
StackLanIPv6 (lan6) IPv6サポート付きローカルエリアネットワーク。
StackMobile (mobile) IPv4用ネットワークモバイル(Gnインターフェース)。
StackVirtual (virtual) VxLanとGRE透過を使用した仮想/クラウド環境用スタック。
StackOpenFlow (oflow) OpenFlow環境用スタック。
AIEngineはPython/Ruby/Java/Luaモジュールでもあり、他のシステムや機能との統合において柔軟性を高めています。 Pythonモジュールが提供するエクスポートされる主なオブジェクトは以下の通りです。
DNSInfo
BitcoinInfo
DatabaseAdaptor (抽象クラス)
DomainName
DomainNameManager
Flow
FlowManager
Frequencies
FrequencyGroup
HTTPInfo
HTTPUriSet
IMAPInfo
IPAbstractSet (抽象クラス)
IPSet
IPSetManager
LearnerEngine
NetworkStack (抽象クラス)
StackLan
StackLanIPv6
StackMobile
StackOpenFlow
StackVirtual
POPInfo
PacketDispatcher
PacketFrequencies
Regex
RegexManager
SIPInfo
SMTPInfo
SSLInfo
MQTTInfo
CoAPInfo
クラスメソッドの完全な説明については、
import pyaiengine
help(pyaiengine)
設定のwikiページまたはexamplesディレクトリを確認して、より興味深い例を参照してください。 [https://bitbucket.org/camp0/aiengine/wiki/Configurations]
$ git clone https://bitbucket.com/camp0/aiengine
$ ./autogen.sh
$ ./configure
$ make
ライブラリをコンパイルする最初のオプションは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
$ 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はc++11/14標準で開発されており、GPLv2の条件の下で提供されています。
AIEngineのソースをチェックアウトするには:
$ git clone https://bitbucket.com/camp0/aiengine
何らかの機能に興味がある場合や支援が必要な場合は、メールをお送りください。貢献は常に歓迎します。
AIEngineはテスト駆動開発を使用して開発されています。したがって、同じライフサイクルを維持するために、新しい機能は新機能用に作成されたディレクトリに単体テストを配置し、システム全体と統合するために、後で/srcディレクトリのメインのtests.ccファイルに統合する必要があります。