
v0.2
Fireaway は、次世代ファイアウォールにおけるレイヤ7/AppID検査ルール、およびデータ損失防止(DLP)やアプリケーション認識プロキシなどのその他のディープパケットインスペクション防御メカニズムに対する監査、バイパス、データ流出のためのツールです。これらの戦術は、NGFWがレイヤ7データをフィルタリングするために接続の確立を許可しなければならないという原理、および通常のユーザートラフィック(インターネットサーフィンなど)としてファイアウォールログ内の通信チャネルを隠すためにアプリケーションを偽装する原理に基づいています。データ損失防止ツールをバイパスする場合、Fireaway はデータを小さな「チャンク」で送信します。これらは正規表現トリガーやその他のDLPルールに一致せず、さらに正当なアプリケーションの偽装HTTPヘッダーにデータを埋め込みます。ほとんどのデータ損失防止技術はこれらのヘッダーを検査するように設計されていません。また、このツールはアプリケーションヘッダーを偽装し、その内部にデータを隠す能力により、異常検出エンジンやヒューリスティックエンジンを無効化することにも成功しています。
FireAway サーバーの起動: 通常、FireAway サーバーはファイアウォールの出口側(インターネット上のサーバーなど)で起動され、アプリケーションベースのルールがこのポートでトラフィックを許可するかどうかを確認するため、またはDLPやアプリケーションプロキシがデータを識別できるかどうかをテストするために、閉じていると思われるポートで待受します。
python fa_server.py <待受ポート> <モード番号>
サーバーは4つのモードで起動できます:
テストモード (モード 0) - 順次またはランダムに生成されたテストデータを受信します。データは受信されたまま書き込まれ、再構築は不要です。
順次チャンク受信 (モード 1) - クライアントによって定義されたチャンクサイズで、データが1台以上のサーバーに順次送信されます。fa_server は出力にチャンクを受信したタイムスタンプを記録し、受信時間を再構築時の順序キーとして使用します。また、fa_assembler.py で使用される「再構築キー」がサーバーによって生成されます。これはランダムに生成された4文字のキーで、チャンク間の区切り文字として使用され、送信されるデータチャンク内にこれらの文字が存在しないという考え方に基づいています。
ランダムチャンク受信 (モード 2) - データがランダムな順序で1台以上のサーバーに送信されます。このモードは、クライアントからプール内のランダムなサーバーへの「シーケンスキー」メッセージの送信に依存します。各サーバーを起動する際、サーバーは「シーケンスキー識別子」の入力を求めます。これは送信されるファイル内に存在しないパターンである必要があり、サーバーが接続全体で受信したデータ内でシーケンスキーを正しく識別できるようにします。すべてのサーバーで同じシーケンスキー識別子を使用していることを確認してください! クライアントはシーケンスキーを送信するサーバーをランダムに選択するため、すべてのサーバーが受信データ内でシーケンスキーを見つけられることが重要です。シーケンスキーは、受信サーバーによって 'SequenceKey.txt' というファイルに記録されます。
偽装アプリケーションチャンク受信 (モード 3) - Base64 エンコードされたデータが、正当なアプリケーションを偽装したHTTPヘッダー内で1台以上のサーバーに送信されます。このモードでも、fa_assembler スクリプトで使用する「再構築キー」が生成されます。
指定されたポートでサーバーが受信したすべてのデータは、サーバーが起動されたディレクトリの ReceivedData.txt ファイルに保存されます。サーバーが受信データ量の異なるサイズを検出した場合(ファイアウォールフィルタリングが作動したことを示す)、この出力がサーバーコンソールに表示されます:
Got the same or lower amount of data on two consecutive runs. If sending test data, maximum data leak size may have been reached.
FireAway クライアント/アプリケーションスプーファーの起動: FireAway クライアントには3つのモードがあります:
テストモード (モード 0) - ランダムデータを増加するチャンクサイズで送信し、レイヤ7の制御が作動してトラフィックフローが停止するまでにどれだけのデータを送信できるかを確認します。
順次流出モード (モード 1) - ファイルを開き、指定されたサイズのチャンクで送信します。データは順次送信されます。
ランダム流出モード (モード 2) - ファイルを開き、指定されたサイズのチャンクで送信しますが、ランダムな順序で送信します。このモードを使用する場合、クライアントはシーケンスキー識別子を要求します。これはリモートサーバーで指定された値であり、クライアントは生成されたシーケンスキーにこの識別子をタグ付けし、リストが提供された場合はランダムなサーバーに、指定されたサーバーIPに対してファイル送信前に送信します。
基本的なクライアントの起動:
python fa_client.py <FireAwayサーバーのIPまたはサーバーリストファイルのパス> <Fireawayサーバーのポート> <クライアントモード>
サーバーリストは、各行に1つのIPアドレスを記述した単純なテキストファイルです。1台のサーバーのみを使用する場合は、単一のIPを指定することもできます。
アプリケーションスプーフィングクライアントには3つのモードがあります:
テストモード (モード 0) - HTTPヘッダー内にランダムなテストデータを段階的に大きなチャンクで送信し、レイヤ7の制御が作動してトラフィックフローが停止するまでにどれだけのデータを送信できるかを確認します。
Base64エンコード流出モード (モード 1) - 入力ファイルをBase64エンコードし、エンコードされたファイルの断片をランダムに生成されたHTTPヘッダー内に送信してDLPをバイパスし、正当なアプリケーションとして送信を偽装します。
アプリケーションスプーフィングクライアントの起動:
python fa_spoof.py <FireAwayサーバーのIPまたはサーバーリストファイルのパス> <Fireawayサーバーのポート> <クライアントモード>
アプリケーションスプーフィングは、正当に見えるアプリケーションヘッダー(例:Facebook、LinkedInなど)内にランダムにHTTPヘッダーとデータチャンクを挿入してログをさまざまなアプリケーションで汚染し、データ流出を隠蔽します。
Fireaway 再構築ツール: Fireaway 再構築ツール (fa_assembler.py) は、Fireaway サーバーが受信したデータを再構築するために使用されます。再構築ツールには3つのモードがあり、データを受信したサーバーのモードに対応します:
モード 1 - モード1のサーバーによって順次受信されたデータを再構築します。再構築ツールは、各サーバーの受信データを含むファイルの再構築キーを指定するように要求します。これはサーバー起動時に生成され表示されたランダムな値です。この値は、受信チャンクを含むファイルを調べ、最初の4文字を見ることで確認することもできます。
モード 2 - モード2のサーバーによってランダムな順序で受信されたデータを再構築します。再構築ツールは、送信中にクライアントからランダムなサーバーによって受信されたシーケンスキーのパスを要求します。また、各ファイルの再構築キーも要求します。
モード 3 - 偽装されたアプリケーションHTTPヘッダー内で受信されたbase64エンコードデータを再構築します。このデータは、モード1と同様に再構築キーを要求します。
再構築ツールの起動:
python fa_assembler.py <再構築モード> <再構築するファイルへのカンマ区切りのパス>
出力は指定されたファイル名で保存されます。
問題や質問があれば、GitHubまでお知らせください。