カスタムアプリ id の作成ケーススタディ: Fortnite
Resolution
問題
Fortnite は、PC やその他のデバイス用のオンラインマルチプレイヤーゲームです。このゲームは学校時代の学生の間で共通であり、寄宿学校が彼らのネットワークで収容する必要がある多くのそのようなゲームの一つです。
あらかじめ定義されたアプリ id は、多くのよく知られたゲーム用に提供されています。ただし、非常に新しいまたは珍しいゲームでは、アプリ id が利用できない場合があります。また、これらのゲームは頻繁に更新され、通信形式が急速に変化する可能性があります。したがって、定義済みのアプリ id を持つゲームであっても、変更を識別して新しい署名を解放するまで、失敗することがあります。パロアルトネットワークは、カスタムのアプリ id を作成する機能を提供し、管理者は、ネットワークトラフィック内のさまざまな要因を使用してアプリケーションを識別することができます。
このようなゲームに関連するネットワークトラフィックの多くは、HTTPS などの一般的なネットワークプロトコルを介して実行されます。ただし、一部のトラフィック、特にゲーム内通信では、オーバーヘッドの少ない高速なプロトコルが必要になります。したがって、NGFW によって ' Unknown-udp ' として分類される、高いポートで udp ストリームを観察するのが一般的です。
学校や他の組織は、一般的にこのような未確認のトラフィックをブロックするための要件があり、したがって、これらのトラフィックパターンのカスタムアプリ id を識別し、作成する必要があります。このトラフィックはできるだけ軽量にする必要があるため、署名として使用できるこれらのメッセージ内の任意のコンテンツの量は少なくなります。
プロセス
未確認のトラフィックを検索する
ほとんどのオンラインゲームはさまざまな方法で通信します。たとえば、ゲームが最初に起動されたときに、HTTPS トラフィックを使用してアカウンティングサーバーにユーザーを認証し、ゲームクライアントに現在実行中のゲームとサーバー (一般的にはロビーと呼ばれます) に関する情報を提供します。ゲーム自体が起動すると、プレイヤーの動きやゲーム状態に関する情報を配信するために、ゲームサーバに通信セッションが確立されます。このトラフィックのほとんどは、予測不可能な場所に送信され、予期しないポート間で送信されるトラフィックもあります。
しかし、多くのトラフィックは、それが ' ssl ' のように広い場合でも、アプリケーションとして識別され、これらのアプリケーションは、通常、ファイアウォールを越えて許可されます。最初のステップは、したがって、ブロックされている特定のトラフィックを識別するために、これは簡単に NGFW トラフィックログから、[モニタ] タブを介して行うことができます。' To Port ' などの列を追加すると、後でトラフィックを識別するのに役立ちます。
複数のクライアントからのトラフィックサンプルを収集する
そのトラフィック内で正しい署名を見つけるためには、複数のクライアントからのパケットキャプチャを収集する必要があります。パケットキャプチャは、クライアント上、Wireshark 経由、またはファイアウォールを使用してローカルで実行できます。ユーザーやマシンに関連するパターンを排除するには、さまざまなマシンから、異なるユーザーアカウントを使用して、幅広いパケットキャプチャを収集する必要があります。これにより、ゲームに関連する署名のみが識別されます。
パケットキャプチャを分析し、関連するトラフィックストリームをエクスポートする
パケットのキャプチャが収集されると、関連するトラフィックストリームを識別し、Wireshark の ' TCP ストリームに従う ' と ' UDP ストリーム ' の機能を使用してエクスポートすることができます。
パケットキャプチャごとに、ファイアウォールモニタ出力を使用して、UDP ポート9011などの問題のストリームの性質を理解し、Wireshark フィルタを使用してそのトラフィックを検出します。
そのストリーム内のパケットを右クリックし、[フォロー] > [UDP ストリーム] を選択します。[データを16進数ダンプとして表示して保存する] を選択し、[名前を付けて保存] をクリックして、データをテキストファイルに出力します。
パケットキャプチャごとにこの手順を繰り返します。
各ストリーム出力で類似したデータパターンを検索する
さまざまなデータストリームサンプルが作成されたので、これらのストリームを比較して同一のパターンを見つけることができます。dwdiff のようなコマンドはここで役に立ちます。データの一致する行に依存する他の diff ツールとは異なり、dwdiff は単語レベルでデータを一致させることによって動作します。Dwdiff は BASH シェル内で実行されるコマンドです。また、これらの手順に従って Mac デバイスでも使用できます (Windows で使用可能な wdiff コマンドで同様の結果が得られます)。次の方法でコマンドを使用すると、一致する文字列を含む新しいファイルが作成されます...
dwdiff-12 stream1 stream2 > diff1
このコマンドの出力は、それ以上のストリームに対して実行することができますさらに微調整に似たようなパターン...
dwdiff-12 diff1 stream3 > diff2
結果のファイルには、すべてのストリームで一致したパターンが表示されます。
カスタムアプリ ID に署名を追加する
7バイトを超える結果の16進数の配列は、NGFW インターフェイスを介してカスタムアプリ ID に追加できます。新しいアプリ ID を作成するには、NGFW にログインし、[オブジェクト] > [アプリケーション] > [追加] に移動します。または、更新したい既存のカスタムアプリ ID を選択します。
[構成] および [詳細設定] タブで、アプリケーションの特性を構成します。次に、[署名] で、アプリケーションに新しい署名を追加します。新しい条件を作成し、「パターンマッチ」を演算子として選択し、正しいコンテキストを選択して、/x パラメータに囲まれた16進数パターンを入力します。
すべての署名が追加されたら、ファイアウォールの構成とテストをコミットします。署名が機能している場合は、以前に不明なトラフィックがカスタムアプリ ID の名前に解決される必要があります。ポリシーは、どのようにゲームを許可する必要があります (すなわち、学校の時間後に下宿) を定義するように構成することができます。最後に、ゲームをテストして、ファイアウォールがアプリケーションを正しく識別することを確認します。
更新
アプリの署名をテストしながら、Fortnite クライアントの新しいバージョンがリリースされ、この更新後、アプリ ID 署名はトラフィックを識別できませんでした。解決するには、新しいクライアントで上記の手順を繰り返し、以前に変更されたシグネチャが見つかったことを確認しました (ただし、新しい署名は新しいクライアントを実行しているすべてのデバイスで一貫しています)。
結論
署名ベースのアプローチは、アプリケーションのトラフィックを積極的に識別するための最も効果的な方法であり、予期しないポートと IP アドレスがアプリケーションで使用される場合、それは唯一の方法です。パロアルトネットワークの次世代ファイアウォールは、アプリケーショントラフィックストリームで見つかったシグネチャを使用して、カスタムの「アプリ id」を作成する機能を提供します。オーダーメイドまたは異常なアプリケーションを使用する組織の場合、アプリケーション ID は、ネットワークトラフィックに対してゼロ信頼のアプローチを実施しながら、こうした適用を可能にする効果的な方法です。