反射型DLLインジェクションにより高度なファイルレス活動を行うランサムウェア「Netwalker」

攻撃者は、より巧妙に検出を回避するための技術を常に考案しています。トレンドマイクロは、「Netwalker(ネットウォーカー)」と名付けられたランサムウェアによる攻撃を確認しました。このランサムウェアのコードはコンパイルされておらずPowerShellで作成されており、ランサムウェア本体のバイナリをディスク上に保存することなく、直接メモリ内で実行されます。このように「ファイルレス活動」を実行するNetwalkerは、感染コンピュータ内の既存ツールを悪用することによって攻撃を展開し、検出を回避して活動を持続化させます。

「反射型DLLインジェクション(Reflective DLL Injection)」または「反射型のDLL読み込み(Reflective DLL Loading)」とも呼ばれる手法を利用する脅威として、「ColdLock」と呼ばれるランサムウェアによる攻撃を2020年5月に確認していますが、今回のNetwalkerランサムウェアは、同様の攻撃をファイルレスで実行しています。反射型DLLインジェクションでは、ディスクからではなくメモリからDLLをインジェクトすることが可能です。ディスク上にDLLファイルの実体を必要としないだけでなく、Windowsローダも必要としないため、通常のDLLインジェクションよりも高度かつステルス的と言えます。これにより、DLLをプロセスへロードされたモジュールとして登録する必要がなくなり、DLLのロードを監視するツールからの回避が可能になります。

Netwalkerのペイロードは、「Ransom.PS1.NETWALKER.B」として検出されるPowerShellスクリプトから始まります。

PowerShellスクリプトの解析
A picture containing screenshot, clock

Description automatically generated
図1:PowerShellスクリプトの動作概要

PowerShellスクリプトは、何層もの暗号化、難読化、およびエンコード技術のレイヤーの下に隠されています。解析したサンプルでは、3つのコードの層を明らかにすることができました。最上位層は、base64でエンコードされたコマンドを実行します。

図2:最上位層のコード(base64でエンコードされたコマンド)

これをデコードすると、16進数でエンコードされた上にXORで暗号化された、以下のコードの層が現れます。

図3:2番目の層のコード(16進エンコードおよびXOR暗号化されている)

デコードおよび復号すると、メインスクリプトが現れますが、これも重度に難読化が施されており、解析者によるコンテンツの解読をさらに困難にするものとなっています。

図4:難読化されたメインスクリプトのコード

このファイルは、実行中の正規プロセスである「explorer.exe」のメモリに対し、ランサムウェアのDLLを反射型でインジェクションさせます。ランサムウェアの不正コードは16進形式でスクリプトに埋め込まれています。

図5:スクリプトに16進形式で埋め込まれているランサムウェアのバイナリ

スクリプトからバイナリを取り出してデコードすると、2つのDLLが生成されます。1つはランサムウェアのx86バージョン(32ビットOS用)、もう1つはx64バージョン(64ビットOS用)です。使用するDLLバージョンを決定するため、スクリプトが実行されている環境を、スクリプトの次の部分を使用して判別します。

図6:自身がどの環境で実行されているかを判別するためのスクリプト

次に、反射型DLLインジェクションを正常に実行するため、最初にkernell32.dllから必要な関数のAPIアドレスを探し出します。

図7:kernell32.dllからAPIアドレスを見つける

そして、次の関数を使用して、正確なメモリアドレスの計算を設定します。

図8:メモリアドレス計算を設定する関数
図9:必要なメモリアドレスを計算するコード

このようにして、スクリプト自体がDLLのカスタムローダとして機能します。これにより、通常はLoadLibrary関数を利用する従来のWindowsローダが不要になります。スクリプト自体が、DLLを正しくロードするために必要なメモリアドレスと再配置する場所を計算し、解決することができます。次に、インジェクト先のプロセスを指定します。解析したサンプルの場合では、実行中のエクスプローラー (Windows Explorer)のプロセスを検索します。

図10:実行中のエクスプローラーのプロセスを検索するコード

その後、次のコードを使用して、ランサムウェアのDLLを「explorer.exe」のメモリ空間に書き込み、実行します。

図11:ランサムウェアのDLLコードをメモリに書き込むコード

最後にWindowsの自動バックアップ機能であるシャドウコピーを削除することによって、ユーザがシャドウボリュームを使用して暗号化されたファイルを回復することができないようにします。

図12:シャドウコピーを削除するコード

解析したサンプルは、ペネトレーションテストツール「PowerSploit」のモジュールの一つ「Invoke-Mimikatz」から派生したもののようです。このオープンソースのプログラムはもともと、Mimikatzをメモリに反射型インジェクションし、気づかれないように「Credential Dumping (認証情報ダンピング)」を行うため利用されていました。

■ファイルレスランサムウェアの解析

解析したNetwalkerの亜種の動作は、従来のランサムウェアと類似しています。暗号化したファイルの名称を、ランダムな6文字を拡張子として加え変更します。

図13:ランダムな6文字が拡張子に追加された、暗号化されたファイル

身代金要求文書(ランサムノート)をコンピュータ内のさまざまなフォルダに作成し、データとドキュメントのファイルを暗号化した後で、そのうちの一つを開きます。通常のランサムウェアと同様に、ファイルの復号と引き換えに金銭をユーザに要求します。

図14:Netwalkerの身代金要求文書

そして、次のレジストリエントリを追加します。このエントリの追加は、Netwalkerの特徴的と言える動作です。

HKEY_CURRENT_USER\SOFTWARE\{ランダムな8文字}

{ランダムな8文字} = {16進数}

図15:Netwalkerが追加したレジストリエントリの例

Netwalkerは、いくつかのプロセスとサービスを終了させます。そのうちのいくつかは、バックアップソフトウェアとデータ関連のアプリケーションに関係するものです。つまり、ランサムウェア攻撃を受けたユーザが、バックアップやリカバリのための操作を試みる努力を無駄にするためと考えられます。

以下は、ランサムウェアが終了させるサービスの例です(サービスの完全なリストについては、ウイルス情報(英語)を参照してください)。

  • *backup*
  • *sql*
  • AcronisAgent
  • ARSM
  • server Administrator
  • ShadowProtectSvc
  • wbengine

また、ランサムウェアはセキュリティ対策ソフトウェア関連のプロセスを停止させ、ランサムウェア活動の検出と終了を回避します。

さらに、ユーザのデータとドキュメントに関連するプロセス、およびバックアップを作成するためのソフトウェアを終了させます。次に、それらのアプリケーションを利用して作成されたファイルの暗号化を実行します。

以下は、ランサムウェアによって終了されたプロセスの例です(プロセスの完全なリストについては、ウイルス情報(英語)を参照してください)。

  • *sql*
  • excel.exe
  • ntrtscan.exe
  • powerpnt.exe
  • wbengine*
  • winword.exe
  • wrsa.exe

Netwalkerは主に、Officeドキュメント、PDF、画像、ビデオ、オーディオ、テキストファイルなどの一般的なファイルを暗号化の対象とします。それ以外のクリティカルなファイル、実行ファイル、ダイナミックリンクライブラリ、レジストリ、またはその他システム関連ファイルは暗号化しません。これは、感染コンピュータを完全に使い物にならないようにするつもりはなく、被害者に身代金を払う処理を可能にさせようとする活動と言えます。

■被害に遭わないためには

攻撃者は、ランサムウェアに反射型インジェクションの機能を追加し、攻撃の検出を回避しセキュリティ解析者による調査を困難にしようとしているようです。ランサムウェアだけでも組織や企業にとって恐ろしい脅威ですが、ファイルレス活動を組み込むことによって、検出をさらに効果的に回避し活動を持続化させるため、リスクはさらに大きなものとなります。複数の手法を組み合わせたこのような脅威の被害に遭わないためには、多層防御のセキュリティソリューションによってエンドポイントを効果的に保護する必要があります。

また、このような脅威はユーザに多大な影響を与える可能性があり、回復が困難なものとなる場合があります。ベストプラクティスを適用するなど、適切な予防策を講じることにより感染リスクを最小限に抑えることができます。

以下は、ランサムウェア攻撃を回避するための推奨事項です。

  • ランサムウェア攻撃に備えて重要なデータは定期的にバックアップしておく
  • OSおよびサードパーティベンダのソフトウェアは、最新のものに更新する
  • 電子メールとWebサイトの安全対策を実践する
  • 従業員は、不審な電子メールとファイルについてITセキュリティチームに警告する
  • エンドポイントにアプリケーションのホワイトリストを実装して、未知で不要なアプリケーションをすべてブロックする
  • ソーシャルエンジニアリングの危険性について、従業員への教育を定期的に実施する

以下は、ファイルレスの脅威からシステムを保護するための推奨事項です。

  • PowerShellのロギング機能を利用して不審な動作を監視し、PowerShellを保護する
  • 「ConstrainedLanguageMode」などのPowerShellコマンドを利用して、不正なコードからシステムを保護する
  • システムコンポーネントを設定し使用されていない古いコンポーネントを無効にすることによって、侵入口として利用されないようにする
  • 信頼のおけないソースからファイルをダウンロードして実行しない
トレンドマイクロの対策

法人利用者向け「Trend Micro Apex One™」、個人利用者向け「ウイルスバスタークラウド」などトレンドマイクロのエンドポイント対策製品では、先進技術と実績ある技術を融合したXGen(クロスジェネレーション)のセキュリティアプローチにより、さまざまな脅威に対して広範な保護を提供します。ファイルレス攻撃対応の強化、仮想通貨マイニング、ランサムウェアなど、高度なマルウェアをより正確に検出します。また、挙動分析により、スクリプト、インジェクション、ランサムウェア、メモリ、ブラウザ攻撃に対する効果的な保護を実現します。

■侵入の痕跡(Indicators of Compromise、IoCs

侵入の痕跡(Indicators of Compromise、IoCs)はこちらを参照してください。

参考記事:

翻訳: 室賀 美和(Core Technology Marketing, Trend Micro™ Research)