本文の内容は、2023年7月25日に Nigel Douglas が投稿したブログ(https://sysdig.com/blog/fileless-malware-detection-sysdig-secure/)を元に日本語に翻訳・再構成した内容となっております。
今日のデジタル環境では、サイバー脅威が驚くべき速さで進化しており、ハッカーはシステムに侵入し機密データを危険にさらす新たな方法を常に見つけています。その中でも特に高度な脅威の一つが、ファイルレスマルウェアです。これは、コンピュータのメモリ内で完全に動作し、ハードドライブ上に痕跡を残さない巧妙な形態の悪意のあるソフトウェアです。従来のマルウェアが実行ファイルに依存するのに対し、ファイルレスマルウェアは既存の正当なプロセスを悪用するため、検出と根絶が非常に困難です。
ファイルベースの指標がないため、従来のアンチウイルスソリューションが効果を発揮できないという重大な課題がサイバーセキュリティ専門家に突きつけられています。しかし、希望の光が見えています。最先端のセキュリティプラットフォームであるSysdig Secureが最近、ファイルレスマルウェアを検知し対抗するための高度な機能を導入し、この不気味な脅威に対する強力な防御を提供しています。このブログ記事では、ファイルレスマルウェアの世界に深く入り込み、その影響を理解し、Sysdig Secureがこの厄介な脅威との戦いをどのように革新しているかを探ります。
memfdとは?
メモリファイルディスクリプタ(memfd)は、物理的なファイルをディスク上に作成することなく、メモリ内にファイルオブジェクトを作成するためのLinuxカーネル機能です。これにより、プロセス間でデータやリソースを直接メモリ内に格納して共有する独自の方法が提供されます。ファイルレスマルウェア攻撃の文脈でこの機能が注目されているのは、ステルス性のある実行が可能になるためです。
memfdファイルはメモリ内にのみ存在し、ファイルシステムには表示されないため、攻撃者がファイルレスの技術を利用するための理想的な手段となります。memfdを利用することで、マルウェアは悪意のあるコードを直接メモリ内で実行でき、従来のファイルベースの検出方法を回避し、痕跡を残さないようにすることができます。これにより、memfdはセキュリティ防御を回避し、ステルス性の高い持続的な攻撃を実行しようとするサイバー犯罪者にとって魅力的なオプションとなります。memfdの台頭は、ファイルレスマルウェアの脅威を効果的に検出および対抗するための高度なセキュリティ対策の必要性を浮き彫りにしています。
Falco を使ってファイルレス攻撃を検知する
memfd_createまたはmemfd_secretシステムコールの機能を活用することで、ファイルレス攻撃を実行することができます。これらのシステムコールは、メモリのセクションを割り当て、そのセクションを指すファイルディスクリプタを返します。ファイルディスクリプタが利用可能になると、メモリ内に直接ELFファイルを書き込み、execveまたはexecveatシステムコールのいずれかを使用してバイナリを実行することが可能です。これらのシステムコールは、入力として提供されたポインタを使用してELFのバイトを参照し、それを実行します。結果として、プロセス名はファイルディスクリプタ(基本的にファイルディスクリプタの番号)となり、実行パスは空である可能性がありますが、プロセス引数には常にEXE_FROM_MEMFDフラグが表示されます。
以下のルールは、名前がmemfdで始まるこれらの2種類の実行を基本的に検出することを目的としています:
上記のルールを有効にするにはどうすればいいですか?
Sysdig Secureの管理ポリシー「Sysdig Runtime Threat Detection」には、新しい検知ルール「Fileless Malware Detected (memfd)」がデフォルトで含まれるようになります。このルールは高い重要度の評価を持っています。エージェントバージョン12.15+にアップグレードすると、追加の設定手順を必要とせずにファイルレスマルウェアを検知できるようになります。
検知をトリガーする方法
この検知ルールをトリガーするためには、スクリプトが必要です。基本的に、実行可能ファイルをメモリに読み込み、メモリから直接実行します。検知結果の例として、このツールを使用してPythonスクリプトを実行し、そのアクティビティを生成しました。このツールは、供給されたELFをメモリ内のファイルとして作成し、それを実行する解釈コードを生成します(tmpfsを使用せずに)。これにより、ディスクに痕跡を残さずにバイナリを実行することが可能になります。
import ctypes, os, base64, zlib
l = ctypes.CDLL(None)
s = l.syscall
c = base64.b64decode(<bytes of the elf>)
e = zlib.decompress(c)
f = s(319, '', 1)
os.write(f, e)
p = '/proc/self/fd/%d' % f
os.execle(p, 'dummy', {})
アクティビティ監査のコンテキストを理解する
監査ログには、ダウンロードが行われた証拠と、重大なプロセス置換イベントが記録されています。ファイルレス攻撃の文脈では、悪意のあるバイナリをダウンロードし、それをメモリバックファイルディスクリプタに格納して実行することが一般的です。このディスクリプタはメモリ内にのみ存在し、ファイルシステムには対応する存在がないため、多くの従来の防御メカニズムが効果を発揮しません。このような攻撃をより正確に検知するために、Sysdig Secureチームは新しいインジケーター「proc.is_exe_from_memfd」を導入しました。このフラグは、メモリファイルディスクリプタがファイルのバックストレージを参照する際にtrueに設定され、ファイルレスマルウェアの活動をより正確に検知できるようになります。
まとめ
リアルタイムのシステムコールアーキテクチャーに基づいたエンドポイント保護エージェントを構築することは、ファイルレスマルウェア攻撃を効果的に検知および防止するために非常に重要です。ファイルベースの検知方法に頼るだけでは、こうした脅威を特定するのは不十分です。リアルタイムのシステムコールアーキテクチャーを活用することで、エンドポイント保護エージェントはプロセスとオペレーティングシステム間の動的な動作や相互作用を監視し、分析することができます。
ファイルレス マルウェア軽減の詳細については、Sysdig ブログをご覧ください:
https://sysdig.jp/blog/containers-read-only-fileless-malware/