C2回避テクニック:JA3/S ランダム化と暗号スタンティングの理解

2021年1月28日
Joshua St. Hilaire
Director of Security Research
C2回避テクニック:JA3/S ランダム化と暗号スタンティングの理解

JA3 は、暗号化された通信で使用されるトランスポート・レイヤー・セキュリティ(TLS)値から簡単に生成できるシグネチャを使用して、既知のツールやマルウェアに簡単にフラグを立てることができるとして、セキュリティコミュニティで人気を集めている。JA3 シグネチャは使いやすく、防御者が悪意のある通信を検知 することができる簡単な方法のように見えるが、検知を回避し、通常の TLS/SSL トラフィックに紛れ込ませるために、同様に簡単に改ざんすることができる。

この投稿では、コマンド&コントロール (C2) サーバやエージェントが検知を回避するために野放しで実装している手法のいくつかを明らかにし始める。我々の焦点は、検知を回避するためにいくつかのテクニックを利用する有名なC2フレームワークによって利用される回避テクニックである。特に JA3 シグネチャに関しては、これらのツールの開発者によって検知を回避するための努力がなされている。さらに、これらの回避のための同じテクニックが、検知を回避するためにマルウェアによって積極的に使用されているという明確な証拠があります。

JA3/Sの解明:入門編

First, let’s briefly summarize on what JA3 is and why it can be used to detect malicious traffic. JA3 is a method of fingerprinting the TLS handshake that was first published by John Althouse, Jeff Atkinson, and Josh Atkins from Salesforce back in 2017. Internet traffic which implements TLS will transmit values to each other in an effort to establish a secure connection. The following values are used to form a JA3 hash (SSLVersion, Cipher, SSLExtension, EllipticCurve, EllipticCurvePointFormat) and for the JA3S hash (SSLVersion,Cipher,SSLExtension). These values are transmitted in the clear prior to encryption so that the client and server know which type of encryption ciphers are available to use. These are the basis of what is used to form a JA3/S hash. These values can be used to ID certain types of malicious traffic when reliable. For a more thorough explanation you can see the original post from SalesForce.

JA3/Sランダム化とサイファー・スタンティングの理解

前述したように、JA3/S 署名の一部は暗号から得られる。暗号リストはクライアント/サーバーのネゴシエーション中に送信される。この例は下のパケットキャプチャの画像で見ることができる。

図1:TLSクライアント・ハロー時に送信される暗号リスト

このプロセスの間、サーバーは接続の両端がサポートする利用可能な最も高い暗号を選択する。これは 1 つのエンドポイントと 1 つのサーバーの間で行われるすべての接続について、JA3/S 署名が同じになり、同じ JA3/S 署名になることを意味する。しかし JA3/S のランダム化を使うことで、サーバーはサポートされている暗号のリストの中からランダムな 暗号を選択する。異なる暗号を使用することで、これらの値から導かれる JA3/S ハッシュは異なるものとなる。

検出を回避するために、malware の作者は JA3 署名の基礎となる TLS の値を改ざんしなければならない。そうすることで検知を回避することができる。これを行う簡単な方法は暗号スイートをランダムに選択することである。これは JA3/S のランダム化と呼ばれるテクニックである。

高まる傾向:C2フレームワークにおけるJA3/S

アカマイの調査チームはこの件に関する洞察を共有している。要約すると、彼らの調査結果によると、TLS フィンガープリントは 2018 年 8 月の世界全体で 18,652 個の別個のフィンガープリントから、2019 年 2 月末には 13 億個以上に急増しました。このことは、セキュリティコミュニティによるJA3/Sフィンガープリントに関する研究や関心の高まりを受けて、malware 、作者やボットコントローラーがTLSシグネチャを回避するテクニックを実装したことを示唆している。

Githubのchangelogによると、JA3/Sのランダム化/サイファー・スタンティングはバージョン3.0のマスターリリースの時点でEmpireのようなC2フレームワークにも忍び込み始めている。下の画像はEmpireのGitHubにあるソースコードで、JA3ランダム化の実現方法の一例を示しています。

図 2: 暗号のリストからのランダムな選択による JA3 署名のランダム化

検知を逃れる:複数のアプローチ

脅威を特定するためにセキュリティコミュニティで使用されるすべての新しいテクニックと同様に、攻撃者は常に検知戦略を回避するために戦術を素早く変えてきました。レッド・チームのツールが JA3 のランダム化を利用して検知を妨害しているのを見たことがあるが、他の方法も同じように存在する。格言にあるように、"猫の皮を剥ぐ方法は一つではない"。例えば、JA3 のなりすましは一般的なブラウザの TLS 値を模倣したり、あるいはオペレーティング・シ ステムの HTTPS クライアントを使用して検知を回避することができます。

結論検知への挑戦

セキュリティ専門家が "悪さ "を捕らえるために利用できるテクニックがあれば、攻撃者は検知されずに活動し続けるために迅速に適応することは明らかです。C2 フレームワークが JA3/S ランダム化あるいは別の技術を実装している場合、JA3 シグネチャを持つ C2 フレームワークを識別することは難しくなります。防御者が使用するセキュリティツールや技術は非常に柔軟で、変化に素早く適応できる必要がある。もしそうでなければ、C2 は検知を逃れ続け、サイバーセキュリティの専門家のレーダーをかいくぐって活動することになる。JA3 シグネチャは、改ざんがないとしても、悪意のある活動の忠実度の低いインジケータであり、投稿で説明されたテクニックは、簡単に操作できるため、その信頼性をさらに低くしている。

このことを念頭に置いて、JA3 署名は危殆化の補助的な指標として使用することができるが、忠実度が 低く、改ざんが容易であるため、大きく信頼すべきではない。シグネチャに基づく検知は、その基礎となるデータが信頼できるものであり、またそれがどの程度 維持されているかに応じてのみ有効である。理想的には、C2の検知には、機敏で一般化できる多面的なネットワーク検知戦略を利用する必要がある。もちろん、このアプローチははるかに大きな投資を必要とするが、長期的には大きな利益をもたらすだろう。

チェックアウト 私の2番目のブログこのブログでは、マレアブルC2プロファイルと呼ばれる方法を検証している。

よくあるご質問(FAQ)

JA3とはどのようなもので、悪意のあるトラフィックの検出にどのように役立つのですか?
malware 、JA3のランダム化はどのように検知を逃れるのに役立っているのか?
JA3Sとは何ですか、JA3とどう違うのですか?
C2フレームワークが検知を逃れるために用いる一般的なテクニックにはどのようなものがあるか?
なぜ JA3/S フィンガープリントは悪意ある活動の精度の低い指標と見なされるのか?
malware 、C2の枠組みでJA3/S無作為化の採用はどのように進化してきたか?
脅威検知に JA3/S シグネチャを使うことの限界は?
C2通信の検知を強化するために、どのような戦略を採用できるか?
なぜ検知ツールは機敏で適応性が高いことが重要なのか?
セキュリティ・オペレーション・センター(SOC)において、脅威検知とレスポンス のプラットフォームはどのような役割を果たすのでしょうか?