セキュリティ研究者としての私たちの仕事の一部は、悪意のある、または許可されていない活 動を監視するために使用される新しいツールやテクニックに追いついていくことです。強力な 暗号化は、プライバシとアクセス制御を必要とする重要なセキュリティ基盤ですが、もちろん犯 罪者も自分の活動を隠すために暗号化を活用しています。ネットワークについて考えると、セ キュリティのための非常に重要なプライバシーを壊すことなく、悪意のある行為について暗号 化されたトラフィックを監視する方法を考えることは、古くからの課題です。
一部のソリューションでは、トラフィックを復号化して検査するために、実際の中間者攻撃にま で踏み込んだものが実際に実行されますが、コストが高く、遅く、実装が難しく、実際にはセキ ュリティとプライバシーに関する懸念が増えてきます。悪質なものとしてフラグを立てるためにト ラフィックを実際に復号化する必要はないかもしれません。たとえば、Suricata IDPS エンジン は特定の TLS 証明書の使用を監視し、既知の不良証明書や警告やブロッキングのために abuse.ch が管理しているこのような SSL ブラックリストと組み合わせることができます。
最近、JA3と呼ばれる TLS フィンガープリンティングの新しい方法がまとめられました。JA3 は、 使用される証明書を調べるのではなく、SSL ハンドシェイク中に送信された TLS クライアントの hello パケットで設定された複数のフィールドを解析します。その結果得られたフィンガープリン トを使用して、特定のトラフィックを識別、ログ、警告、および/またはブロックすることができま す。
JA3 は SSL ハンドシェイクのクライアント hello パケットを参照して、サポートされている暗号の SSL バージョンとリストを収集します。クライアントでサポートされている場合は、サポートされて いるすべての SSL 拡張機能、サポートされているすべての楕円曲線、最後に楕円曲線ポイン ト形式も使用されます。フィールドはカンマで区切られ、ダッシュで区切られた複数の値で区切 られています(たとえば、サポートされている各暗号にはダッシュが付いています)。フォーマッ ト:
SSLVersion,Cipher,SSLExtension,EllipticCurve,EllipticCurvePointFormat
次のようなフィンガープリントを保持することがあります:
769,49172-49171-53-47-49162-49161-56-50-10-19-5-4,0-5-10-11-65281,23-24-25,0
この JA3 フィンガープリントは、実際 PoSeidon Point of Sale マルウェアサンプルによって生成 されたトラフィックに固有のものです。マルウェアが生成するパケットをキャプチャした後、 github で利用可能な JA3 ツールにフィードします。以下の出力を見ることができます:
[
{
"destination_ip": "185.67.0.108",
"destination_port": 443,
"ja3": "769,49172-49171-53-47-49162-49161-56-50-10-19-5-4,0-5-10-11-65281,23-24-25,0",
"ja3_digest": "1eede9d19dc45c2cb66d2f5c6849e843",
"source_ip": "192.168.56.101",
"source_port": 49161,
"timestamp": 1527008276.377147
}
JA3 の出力を pcap と比較すると、JA3 がフィンガープリントを作成するための情報を取得して いる場所がわかります。
図 1: Poseidon クライアントの Hello パケットと JA3 フィンガープリント生成のデコード
JA3 の仕組みを理解したので、次に実際に JA3 をどのように使用できるかを見てみましょう。 JA3 は、NGINX や Bro のようなあらゆる種類のソフトウェアでサポートされており、リストは拡 大し続けています。この記事では、オープンソースの IDPS ソフトウェア Suricata でマルウェア トラフィックを検出するために使用してみます。
Suricata の JA3 機能をテストするために PoSeidon マルウェアを引き続き使用します。 PoSeidon には、その存在を検出するために使用できる暗号化されたトラフィックと暗号化され ていないトラフィックの両方があります。また、これまでしばらくの間にテストされている複数の バージョンがあります。
私たちは JA3 フィンガープリント "769,49172-49171-53-47-49162-49161-56-50-10-19-5-4,0-5- 10-11-65281,23-24-25、 0 "、JA3 ハッシュ(フィンガープリントの MD5 ハッシュのみ) "1eede9d19dc45c2cb66d2f5c6849e843" を持っています。
Suricata は JA3 の 2 つのキーワードをサポートしています。それらは、次のように使用される content キーワードをもつ ja3_hash と ja3_string です。:
ja3_hash; content: "1eede9d19dc45c2cb66d2f5c6849e843";
ja3_string; content: "769,49172-49171-53-47-49162-49161-56-50-10-19-5-4,0-5-10-11-65281,23-24-25,0";
したがって、Suricata の署名は次のようになります。
私は PoSeidon の複数のバージョンに対してこの署名を使用しました。あなたは以下のような アラートとパケットの要約を見ることができます:
図 2: PoSeidon v11.97 に対するテスト
図 3: PoSeidon v13 に対するテスト
図 4:PoSeidon v15 に対するテスト
ja3_hash を使用する 1 つのシグネチャは、PoSeidon マルウェアの 1 つのバージョンだけでな く、複数のマルウェアを検出できます。通常、トラフィックはプロセスの更新や検出を回避するために、マルウェアのさまざまなバージョン間で変更されますが、暗号化を使用する場合はバ ージョン間で同じコード/クライアントを使用し続けることがよくあります。複数のバージョンを検 出することができる 1 つのシグネチャを作成できることは重要です。おそらく最も重要なポイン トは、古いサンプルから構築されたシグネチャで新しいバリアントを検出するチャンスです! Suricata シグネチャで使用すると、常に変化する C&C の IP またはドメイン名に関係なく、悪 意のあるトラフィックを検出できます。
これらのすべてに加えて、Suricata はポートレス構成を実装しているため、JA3 を使用するとき に追加のボーナスが得られます。私がwww.malware-traffic-analysis.netから入手した Dridex マルウェアの pcaps といくつかのテストやっている間に、私はポート 443 が期待される というアラートと、TLS の奇数ポートであるポート 8043 についての 4 つのアラートがあることに 気付きました。特定のポートに従う必要のある署名を作成しようとすると、8043 のその他の警 告が表示されなくなります。
図 5: 宛先ポートに関係なく Dridex を狙い撃つ
Portless 構成で Suricata と JA3 を使用するもう一つの素晴らしい例は、TrickBot です。この pcap からのすべての警告は非標準ポートにありました。
図 6:宛先ポートに関係なく Trickbot を狙い撃つ
暗号化されたトラフィックは、IDPS にとっては常にやっかいな問題でした。JA3 を追加すること で、それが妨げになることは少なく、強い自信を持って IOC を提供できる可能性があります。 より多くのテストを行うことで、C&C 通信を停止し、さらに感染を防止するための優れたツール となります。我々Trustwave は、JA3 を組み込む準備がすぐに、JA3 を IDS および UTM の機 能として実装するためのテストと計画を続けています。