Log4Jとメモリ: スキャン機能と検知の解説

この記事では、高性能なメモリスキャン機能を持つエンドポイント・ソリューションによるアクティブな悪用シナリオの効果的な検出方法、そしてあなたの組織でお使いのネットワークセキュリティの能力を高める方法をご紹介します。


背景

近頃では見慣れた光景になってきましたが、年末年始の休暇のタイミングで新しい脆弱性が公表されました。広く使われているライブラリに影響を与えます。当社のATRブログで詳しくお伝えしたように、CVE-2021-44228ではLog4J Javaライブラリの脆弱性が報告され、このライブラリを使用してロギングを行うアプリケーションとWebサイトに影響を与えます。

攻撃者が認められていないリモートロケーションから悪意のあるJavaコードを脆弱なサイトやアプリケーションにロードし、強制的に実行することを許してしまいます。攻撃ベクトルは様々ですが、攻撃者が標的のマシーンに対してネットワークプロトコルの一部として細工した文字列を送信する点が共通しています。

そのため、多くの場合はこの攻撃に対する防御の手法として、ネットワークトラフィックを介して悪意のある文字列を検出しようとします。しかし、攻撃者はネットワークのシグネチャを回避、ネットワークスキャンの無効化のため、難読化させてネットワーク攻撃に適応していることが確認されました。次の画像は、最近の攻撃に関して観測・報告がされた難読化技術の一部を示すものです。

出典: https://github.com/mcb2Eexe/Log4j2-Obfucation

この攻撃に対して、ネットワーク保護ソリューションが有効ではないということではありません。ネットワーク・セキュリティ・プラットフォームは防御層の第一レイヤーを提供し、防御、検知、可視化、処理といった層を加えて防御のためのセキュリティ・アーキテクチャ(セキュリティリスクトリートメント戦略)の一部として使われるべきものです。最新のエンドポイント・ソリューションはインメモリ・スキャンや高速に反応するオーケストレーションのような、システム・プロセスの詳細なホスト・ベースの可視化ネットワークをベースにした機能を補う、独自の役割を果たします。Log4Shellのような脅威に対して、相乗効果によって強固な防御を可能にします。


‘I See You’: Memory Scanning #FTW

接続がエンドポイントに到達した後、どのようにメモリスキャンが難読化レイヤーを打ち破りネットワークセキュリティプラットフォームを補完するのに役立つのかを理解するため、下の図を見てください。一般的なWebベースのLog4J攻撃の実行フローです。

何が起こるのか、その概要を見てみましょう。

ステップ1で、攻撃者が特別な細工をした文字列を脆弱なアプリケーションをホストするウェブサーバに送ります。すでに見たように、この文字列はネットワークベースのシグネチャを回避するため難読化できます。

ステップ 2で、アプリケーションがこの文字列の難読化を解き、メモリに読み込みます。メモリにロードされると、アプリケーションはLDAP接続を開始して悪意のあるクラスが存在する場所のアドレスをリクエストします。

ステップ3で、攻撃者によってコントロールされたLDAPサーバーが、ホストされているHTTP URLアドレスを示して悪意のあるClass fileの場所を返します。

ステップ4で、脆弱なアプリケーションが悪意のあるClass fileダウンロードのための処理をはじめます。

ステップ5で、脆弱なアプリケーションがステップ4の悪意のあるClass fileをロードして実行します。

この時、攻撃者はターゲット上でのコードの実行に成功し、防御者にこの活動を可視化できるよう痕跡を残します。たとえば、悪用後に追加のプロセスを生成したり、ファイルやレジストリキーに触れたりします。

このことを念頭に置いて、次のように仮定してみましょう。実行フローのある時点でおいて、悪意のあるコードの存在を検出するためにメモリスキャンを起動します。一般に、エンドポイントのメモリスキャンは処理の観点から高負荷であるため、継続して頻繁に実行できませんが、特定の状況下では正確に実行できます。

それでは、ステップ2の後、どこかの時点でメモリスキャンをトリガーできると仮定してみましょう。ある時点で、プロセスメモリ内で使用された難読化されていない文字列を見つける可能性が高くなります。悪意のあるクラスファイルがダウンロードされた後にメモリがスキャンされた場合、そのコンテンツを難読化されていない形でスキャンすることもできます。

この可能性がメモリシグネチャのパフォーマンスと効率性を向上させます。主に、検出のタイミングがメモリスキャンの開始に使用されるトリガーに依存しているからです。

これは、ENSの技術によって実現可能です。その方法をご紹介します。


エンドポイントセキュリティのExpert Ruleとメモリスキャン

ENS (Endpoint Security) 10.7 update 4以降では、すべてのディフェンダーを利用できる強力なセキュリティ機能を備えています。Expert Ruleルからメモリスキャンを起動する素晴らしい機能です。

Expert Rulesとは、カスタマイズ可能なアクセス制御ルールで、他のスキャナーではあまり見られない不審な行動を検出するためにエンドユーザーが使用するものです。McAfee Enterprise では、MITRE ATT&CK Matrix にマッピングされたコミュニティExpert RulesGitHubで公開しています。

今、注目するべき特徴は、Expert Ruleが起動したときにメモリスキャンを起動させる機能です。これにより、Log4J に脆弱性のあるアプリケーションを標的にして、悪用される瞬間を特定することができます。

次のようなルールを考えてみましょう。

上記のルール例にあるように、ACTORS (inside the Process {…} section)TARGETS (inside the Target {…} section)を定義するセクションを参照してください。Log4Jエクスプロイトに対して脆弱なプロセスをアクターとして定義しています。この場合、スタンドアロンのJavaアプリケーション用のJAVA.EXEと、Apacheウェブベースアプリケーション用のTOMCAT?EXEです。このプロセスでは、Javaランタイムを確実にアクティブにするため、JAVA.DLLとJVM.DLLの両方をロードする必要があります。

ターゲットセクションには、潜在的な攻撃のペイロードを追加します。Expert Ruleはネットワークトラフィックに焦点をあてていないため、実行フローの最終ステップである、ペイロードの実行されるタイミングに焦点を当てる必要があります。エクスプロイトに関する詳細情報が利用可能になると、アクセスされるファイルやレジストリキーなどの追加のトリガーを追加できます。このセクションでは、上記の例にあるように、コマンドラインパラメータの“Exclude”を使用して有効な動作を除外することもできます。このExcludeは、誤検知を回避するためにお客様が環境に合わせて調整可能なものです。

このExpert Ruleは、ACTORプロセスがTARGETペイロードのいずれかを生成したときにトリガーとなります。ルールがこれだけの場合は、エクスプロイトの検出に対してあまり効果的ではなく、多くの誤検知を引き起こす可能性があることがわかります。

しかし、ルールの冒頭にある この行に注目 してみましょう。

この命令により、ENS 10.7はExpert Ruleを発動させたACTORプロセスに対してメモリスキャンを開始し、そのプロセスのみをスキャンするようになります。これで、信頼性の高いメモリスキャンのトリガーができ、ブラインドメモリスキャンのパフォーマンス問題を回避することができます。これは、最初の悪用の試みの直後のタイミングで実行され、難読化されていない文字列がメモリ内にあることを確実に示します。

このソリューションの2番目の部分では、Expert Ruleをトリガーしたプロセスのメモリをスキャンするとき、AV DAT Engineによって実行されます 。この文字列が見つかると、影響を受けるExpert Rule REACTIONの行で設定されたアクションが適用されます。利用可能なアクションの詳細は、 KB95901 – McAfee Enterprise coverage for Apache Log4j CVE-2021-44228 Remote Code Execution に記載しています。監視が必要なプロセスを整理するまでは、まずREPORT actionを使用することをお勧めします。

上の図でハイライトした1つ目のイベントは、JAVA.EXEから発生した疑わしいプロセスをトリガーするExpert Ruleです。2番目のイベントは、そのプロセスのメモリにエクスプロイトのシグネチャがあったことを示すAV DAT検出を示しています。

注意:

もしも、Expert Ruleの検出のみが存在し、JNDI / Log4J-エクスプロイトイベントが存在しなかった場合には、プログラムが疑わしいと見なされる子プロセスを実行したことを示します。Expert Ruleを確認して、改善することをお勧めします。

しかし、Expert RuleとJNDI / Log4j-エクスプロイトイベントの両方が同じプログラムに対してトリガーされた場合は、エクスプロイトされているプロセスの存在を確実に検出できています。

当社は KB95901 – McAfee Enterprise coverage for Apache Log4j CVE-2021-44228 Remote Code Executionで、Expert Ruleと関連するEXTRA.DATをダウンロードするためのリンクを提供、また、お客様の環境で使用するためのePOの設定方法の詳細情報についてもご提供しています。

このソリューションを実装されるお客様は、ぜひKBおよび関連ドキュメントの手順を確認してください。Expert Ruleを確認して環境に合わせてカスタマイズすることを強くお勧めします。


結論

LOG4Jのような攻撃から環境を守るには、ネットワークセキュリティと標的型エンドポイントメモリスキャンで構成される階層化ストラテジーによって、ネットワークベクター経由で露出した脆弱なシステムに対する攻撃の実行フローを効果的に検出・防止することが可能です。

当社のENS Expert Rules and Custom Scan reactionsは、防御側がこの機能を利用することで新たな脅威に対して正確な対策を適用できるように設計されています。

 

By Guilherme Venere, Ismael Valenzuela, Carlos Diaz, Cesar Vargas, Leandro Costantino, Juan Olle, Jose Luis Sanchez Martinez, AC3 Team

Collaborators: ATR Team (Steve Povolny, Douglas McKee, Mark Bereza), Frederick House (FireEye), Dileep Kumar Jallepalli (FireEye)

※本ページの内容は2021年12月20日(US時間)更新の以下のMcAfee Enterprise Blogの内容です。
原文: Log4J and The Memory That Knew Too Much
著者: McAfee Enterprise