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の解明:入門編

まず、JA3とは何か、なぜ悪意のあるトラフィックを検知するのに使えるのかについて簡単にまとめておこう。JA3は、2017年にSalesforceのJohn Althouse、Jeff Atkinson、Josh Atkinsによって初めて発表されたTLSハンドシェイクのフィンガープリント手法である。TLSを実装しているインターネットトラフィックは、安全な接続を確立するために互いに値を送信する。以下の値はJA3ハッシュ(SSLVersion, Cipher, SSLExtension, EllipticCurve, EllipticCurvePointFormat )とJA3Sハッシュ(SSLVersion,Cipher,SSLExtension)を形成するために使用される。これらの値は暗号化の前に平文で送信され、クライアントとサーバーはどの暗号が使えるかを知ることができます。これらは JA3/S ハッシュを形成するために使われる基礎となる。これらの値は信頼できる場合、ある種の悪意のあるトラフィックを識別するために使われる。より詳細な説明については、SalesForce からのオリジナルの投稿をご覧ください。

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

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

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

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

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

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

アカマイの調査チームはこの件に関する洞察を共有している。要約すると、彼らの調査結果によると、TLS フィンガープリントは 2018 年 8 月の世界全体で 18,652 個の別個のフィンガープリントから、2019 年 2 月末には 13 億個以上に急増しました。このことは、セキュリティコミュニティによるJA3/Sフィンガープリントに関する研究や関心の高まりを受けて、マルウェア作者やボット制御者が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プロファイルと呼ばれる方法を検証している。