McAfee Labsは、システムに対するサイバー攻撃の方法が、外部マルウェアから信頼されやすいWindowsの実行ファイルへと大きく移行していることを確認しました。最も流通している技術の一つとしてファイルレス攻撃(英文)があげられます。この手の攻撃は信頼できる実行ファイルを通じて感染するため、検出するのが困難です。一般ユーザーも企業ユーザーもこの脅威の被害に遭う可能性があります。企業の環境では、攻撃者はこのベクトルを使用してネットワークを横断して移動します。
ファイルレスの脅威の一つであるCactusTorchは、DotNetToJScriptを利用してメモリーから直接、悪意のある.NETアセンブリを読み込み実行します。これらのアセンブリは.dllや.exeといったアプリケーション展開の最小ユニットです。ほかのファイルレス攻撃技術と同じように、DotNetToJScriptはコンピュータのハードディスクに悪意のあるいかなる.NETアセンブリも書き込まないため、旧来からのファイルスキャナーではこうした攻撃を検出できません。
2018年には、このWindowsシステム上でカスタムシェルコード(英文)の実行が可能なCactusTorchが急速に拡大しました。下記のグラフは、CactusTorchの亜種の数値の上昇を示しています。
DotNetToJScript ツールキット
DotNetToJScriptツールを蓄積することで、.NETが実行可能なDotNetToJScript.exeとなり、.NETアセンブリのパスにつながり、JavaScriptファイルを出力します。
図1:DotNetToJScript.exeを利用して悪意のあるJavaScriptファイルを作成
DotNetToJScriptツールキットはマルウェアとともに運ばれることは決してありません。作成される唯一のコンポーネントは出力JavaScriptファイルだけで、スクリプトホスト(wscript.exe)によってターゲットシステム上で実行されています。分析にあたって、いくつか基本的な難読化を行い、いくつかのオンラインツールによって隠されていたCactusTorchを見つけました。
このコードについて詳しく分析する前に、.NETとそのCOMエクスポージャーについて理解する必要があります。任意のシステムに.NETフレームワークをインストールすると、MicrosoftのComponent Object Model(COM)を介していくつかの.NETライブラリが公開されます。
公開されたインターフェイスを見ると、スクリプトホストまたはブラウザからCOMオブジェクトにアクセスできるようにするIDispatchが表示されます。
DotNetToJScriptの経路を使用して悪意のあるコードを実行するために、攻撃は次のCOMオブジェクトを使用します。
- Text.ASCIIEncoding
- Security.Cryptography.FromBase64Transform
- IO.MemoryStream
- Runtime.Serialization.Formatters.Binary.BinaryFormatter
- Collections.ArrayList
次に、図2に示したJavaScriptコードに戻りましょう。関数base64ToStream()は、コード化されたBase64でシリアライズ済みオブジェクトをストリームに変換します。JavaScriptコードの背景にあるロジックを完全に理解するには、コード化されたBase64でシリアライズ済みオブジェクトの機能を調べる必要があります。それにより、次のステップは、エンベッドされたシリアライズ済みオブジェクトをリバースエンジニアリングし、クラス定義を再作成することです。 これが完了すると、クラス定義は悪意のあるシェルコードを実行する次のコードのようになります。 (この手順に関する重要な点について、Casey Smith氏、@subTeeに感謝します)。
そこで、CactusTorchのオープンソースコンポーネントを手にすることになり、図2のJavaScriptコードが意味を持ちます。悪質なシェルコードがターゲットシステム上でどのように実行されるかがわかります。図2の29行目では、コードが起動する実行ファイルとシェルコードという2つの引数を持つflame(x、x)関数を起動させます。
CactusTorchスクリプトに埋め込まれた.NETアセンブリは、以下のステップを踏んで悪質なシェルコードを実行します。
- (シェルコードをホストするために)CreateProcessAを使用して、新たな中断プロセスを起動
- 一部のVirtualAllocEx()を持つメモリをEXECUTE_READWRITE権限で割り当て
- WriteProcessMemory()で標的のプロセスメモリにシェルコードを書き込み
- CreateRemoteThread()を使用してシェルコードを実行するための新しいスレッドを作成
結論
Filelessマルウェアは、セキュリティソフトウェアと署名された本物のWindowsアプリケーション間の信頼関係を利用します。この種の攻撃は信用があり信頼できる実行可能ファイルによって起動するため、攻撃を検出するのは困難です。シグネチャID 6118により、McAfee Endpoint Security (ENS) と Host Intrusion Prevention System (HIPS)のお客様は、このクラスのファイルレス攻撃から保護されます。
謝辞
著者は、この分析に協力してくれた以下の同僚に感謝します。
・アビシェク・カーニック(Abhishek Karnik)
・ディーパク・セティ(Deepak Setty)
・オリバー・デヴェーン(Oliver Devane)
・シュルティ・スマン(Shruti Suman)
参照
- https://ruxcon.org.au/assets/2017/slides/NET-Interop-Full.pdf
- https://github.com/tyranid/DotNetToJScript
- https://github.com/mdsecactivebreach/cactustorch
MITRE ATT&CK techniques
- Drive-by compromise
- Scripting using Windows Script Host
- Decode information
- Command-line interface
- Process injection
Hashes
- 4CF9863C8D60F7A977E9DBE4DB270819
- 5EEFBB10D0169D586640DA8C42DD54BE
- 69A2B582ED453A90CC06345886F03833
- 74172E8B1F9B7F9DB600C57E07368B8F
- 86C47B9E0F43150FEFF5968CF4882EBB
- 89F87F60137E9081F40E7D9AD5FA8DEF
- 8A33BF71E8740BDDE23425BBC6259D8F
- 8DCCC9539A499D375A069131F3E06610
- 924B7FB00E930082CE5B96835FDE69A1
- B60E085150D53FCE271CD481435C6E1E
- BC7923B43D4C83D077153202D84EA603
- C1A7315FB68043277EE57BDBD2950503
- D2095F2C1D8C25AF2C2C7AF7F4DD4908
- D5A07C27A8BBCCD0234C81D7B1843FD4
- E0573E624953A403A2335EEC7FFB1D83
- E1677A25A047097E679676A459C63A42
- F0BC5DFD755B7765537B6A934CA6DBDC
- F6526E6B943A6C17A2CC96DD122B211E
- CDB73CC7D00A2ABB42A76F7DFABA94E1
- D4EB24F9EB1244A5BEAA19CF69434127
※本ページの内容は、2018年7月26日(US時間)更新のMcAfee Blogの内容に一部追記しています。
原文:CactusTorch Fileless Threat Abuses .NET to Infect Victims
著者:Debasish Mandal