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 ハッシュは異なるものとなる。

検出を回避するために、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とはどのようなもので、悪意のあるトラフィックの検出にどのように役立つのですか?

JA3 は TLS ハンドシェイクをフィンガープリントする方法で、ハンドシェイク中に送信される特定の値(SSLVersion、 Cipher、SSLExtension、EllipticCurve、EllipticCurvePointFormat)をキャプチャしてハッシュ化する。このハッシュは、既知の JA3 署名のデータベースと比較することで、既知の悪意のあるツールやmalware を識別するのに役立つ。

JA3Sとは何ですか、JA3とどう違うのですか?

JA3S は JA3 に似ているが、TLS ハンドシェイクの間のサーバーのレスポンス に焦点を当てている。ハッシュを作成するために SSLVersion、Cipher、SSLExtension のような値を使用する。JA3 と JA3S はどちらも悪意のあるトラフィックを識別するために使用されるが、JA3S はサーバーの視点を捉える。

なぜ JA3/S フィンガープリントは悪意ある活動の忠実度の低い指標と見なされるのか?

JA3/S フィンガープリントはシグネチャが簡単に操作できるため忠実度が低いと考えられている。攻撃者は検知を回避するために TLS の値を変更することができ、悪意のある活動を特定するために JA3/S フィンガープリントだけに依存するのは信頼できない。

脅威検知に JA3/S シグネチャを使うことの限界は?

主な限界は、攻撃者が JA3/S 値を簡単に無作為化または模倣できることであり、正確な検知のためにこれらのシグネチャ だけに依存することは困難である。JA3/S シグネチャーは主要な検知方法というよりはむしろ補助的な指標として使用されるべきである。

なぜ検知ツールは機敏で適応性が高いことが重要なのか?

攻撃者は、検知を回避するために絶えずテクニックを進化させています。検知ツールが機敏で適応性がなければ、すぐに時代遅れになって効果がなくなり、悪意のある活動が気づかれないままになってしまう。

malware 、JA3のランダム化はどのように検知を逃れるのに役立っているのか?

JA3 のランダム化は TLS ハンドシェーク中に使用される暗号スイートを変更することを含む。サポートされている暗号のリストからランダムな暗号を選択することで、JA3 ハッシュは接続ごとに変化し、セキュリティツールが静的な JA3 シグネチャに基づいて一貫して検知 と悪意のあるトラフィックにフラグを立てることを困難にする。

C2フレームワークが検知を逃れるために用いる一般的なテクニックにはどのようなものがあるか?

一般的なテクニックは JA3/S のランダム化、暗号スタニング(ランダムに暗号を選択する)、JA3 のなりすまし(一般的なブラウザや OS の TLS 値を模倣する)を含む。これらの方法は C2 フレームワークが TLS フィンガープリントを変更することで検知を回避するのに役立ちます。

malware 、C2の枠組みでJA3/S無作為化の採用はどのように進化してきたか?

アカマイの調査によると、2018年8月から2019年2月にかけて明確なTLSフィンガープリントが大幅に増加したことから、malware の作者が静的なJA3/Sシグネチャに依存する検出方法を回避するためにJA3/Sランダム化技術を迅速に採用したことがわかります。

脅威検知に JA3/S シグネチャを使うことの限界は?

振る舞い 、異常検知、シグネチャベースの手法を含む多面的なネットワーク検知戦略は、C2通信の検知を強化することができる。このアプローチには、進化する回避技術に対応できる柔軟で適応力のあるツールが必要である。

セキュリティ・オペレーション・センター(SOC)において、脅威検知とレスポンス のプラットフォームはどのような役割を果たすのでしょうか?

脅威検知とレスポンス プラットフォームは、様々な検知方法を統合し、リアルタイムの分析を提供し、脅威に対する迅速なレスポンス を促進するため、SOC において極めて重要である。このようなプラットフォームは SOC の能力を高め、検知 、JA3/S のランダム化のような高度な回避テクニックを軽減する。