Notepad++の悪意あるプラグインによるセキュリティ回避とパーシステンスの実現

Cybereason GSOC(Global Security Operations Center)では、影響力のある脅威に関する情報をお客様に提供するために、サイバーリーズン脅威分析レポートを発行しています。同レポートは、影響力のある脅威に関する情報をまとめた上で、それらの脅威から身を守るための実践的な推奨事項を提供するものです。

この脅威分析レポートは、「パープルチームシリーズ」と名付けられたシリーズの一部です。同シリーズのレポートでは、広く使用されている攻撃手法、脅威アクターによるそれらの手法の利用方法、そして脅威アクターによる同手法の利用を検知する方法を紹介しています。

Cybereason GSOCチームのアナリストは、Notepad++プラグインを利用してパーシステンスを確立し、端末上のセキュリティメカニズムを回避するための具体的な手法を分析しました。まずこの攻撃の概要を説明した後、同攻撃の再現方法と、検知し、実行防止するメカニズムの実装方法を詳細に説明します。

重要なポイント

  • よく使われていることがアタックサーフェスの拡大につながる:Notepad++は、非常に人気のあるツールであり、ほとんどのIT関連環境にインストールされています。
  • 脅威アクターは過去にNotepad++を悪用している:StrongPityのようなAPTグループが、Notepad++を利用して端末にバックドアを配置していたことが確認されています。
  • 高度なプラグイン機能:Notepad++は、脅威アクターがパーシステンスの確立とセキュリティ回避のために利用できる高度なプラグイン機構を備えています。
  • Notepad++にはプラグインの検証プロセスが存在しない:ローカルにインストールされたプラグインを対象とする検証プロセスが存在しないため、ローカル管理者権限を持つ脅威アクターは、ローディングプロセスにおいて、自らの悪意あるDLLをインジェクトできます。
  • Cybereason MDRサービスによる検知と対応:Cybereason Defense プラットフォームは、悪意あるNotepad++プラグインによりロードされたマルウェアへの感染を効果的に検知した上で、それを実行防止します。

はじめに

Notepad++は、Windowsアプリケーション「メモ帳(Notepad)」の代替品として利用できる非常に人気のあるコードエディタであり、Don Hoにより作成と管理が行われているものです。このアプリケーションは、複数のコーディング言語と、ITや開発に関連する数多くの作業を自動化するプラグインをサポートしています。

プラグインとは、当該コミュニティにより保守されている承認済みリストを通じてインストールされるモジュールのことであり、C#などの言語を使用してカスタムビルドされることもあります。これらのプラグインは、%PROGRAMFILES% \Notepad++\plugins\ディレクトリに格納されています。

RastaMouseと名乗るセキュリティ研究者が、オープンソースプロジェクトであるNotepad++ Plugin Packを使用して、パーシステンス機能として使用できる悪意あるプラグインを構築する方法を実証することに成功しました。このプラグインパックは、Visual Studio用の.NETパッケージであり、プラグイン構築のための基本的なテンプレートを提供するものです。


▲Notepad++プラグインパックのテンプレート

脅威アクターは、この手法を利用することで、セキュリティメカニズムを回避し、被害者の端末上でパーシステンスを実現できます。

APTグループであるStrongPityは、悪意ある実行ファイルを伴う正規のNotepad++インストーラを利用することで知られています。このプログラムは、端末をリブートした後でもパーシステンスを維持できます。このバックドアを利用することで、同脅威アクターは当該端末にキーロガーをインストールできるほか、C2サーバーと通信して、このソフトウェアの出力を送信できるようになります。

StrongPity(APT-C-41またはPROMETHIUMとも呼ばれる)は2012年に初めて観測されたAPTグループであり、特定のユーザーが使用する正規のソフトウェアにバックドアを仕掛けるという、上記と同じ手口を採用することで知られています。

分析

本セクションでは、Notepad++のプラグインをロードする仕組みを分析し、このベクターに基づく攻撃シナリオを考案してみます。

■攻撃シナリオ
SCI_ADDTEXT APIを悪用することで、Notepad++の内部でキーがタイプされた際に、カスタムNotepad++コマンドをトリガーできます。C#を使用して、Notepad++の内部で任意のキーが最初に押された際にPowerShellコマンドを実行するようなDLLを作成しました。

この攻撃シナリオでは、PowerShellコマンドはMeterpreterペイロードを実行します。このコマンドが1回だけ実行されるように設定しました。これは、複数の接続試行が原因でC2の可用性に影響が出ないようにするためです。


▲悪意あるDLLに埋め込まれたPowerShellコマンド

注:我々が作成したMeterpreterシェルは、Notepad++を起動したユーザーの権限を継承します。したがって、被害者が管理者として同アプリケーションをオープンした場合(例:hostsファイルに変更を加えようとする場合など)、またMeterpreterシェルはそれと同じ権限(すなわち管理者権限)を持つことになります。

ローカル管理者権限を使って、コンパイルしたDLLを適切なフォルダにドロップしました。


▲悪意あるDLLがプラグイン用のディレクトリにドロップされる

■PowerShellの実行
予想した通り、Notepad++を起動した後、何か1つの文字をタイプすると、PowerShellが実行され、Meterpreterのセッションが確立されました。


(被害者側の視点)キーがタイプされると、PowerShellは設定済みの悪意あるペイロードを実行する


(攻撃者側の視点)Meterpreterセッションを確立


(攻撃者側の視点)Meterpreterセッション経由でシェルコマンドを実行

■権限昇格
継承されたパーミッションによる振る舞いの違いをテストするために、一般ユーザーとして実行されたMeterpreterセッションでGetSystemモジュールを実行してみました。


(攻撃者側の視点)一般ユーザー権限で権限昇格を試みると失敗する

次に、Notepad++を「管理者」権限で実行し、ペイロードを再実行しました。今度は、GetSystemモジュールを通じて権限を”SYSTEM”へと昇格できました。


(攻撃者側の視点)SYSTEMへの権限昇格に成功

検知と防止

■検知機能とハンティング機能
Meterpreterペイロードにより、MalOpが作成されました。Metasploitの‘shell’モジュールを実行すると、cmd.exeの子プロセスが作成され、さらにwhoami.execalc.exeの子プロセスが作成されました。また、PowerShellによるCommand & Control(C2)サーバーへのネットワーク接続も確立されていることが見て取れます。


▲(防御者側の視点)Cybereason Defense プラットフォームで表示されたプロセスツリー:ロードされたモジュールによりPowerShell.exeの子プロセスが作成される

notepad++.exeプロセスでロードされたモジュールを検索すると、ロードされた悪意あるDLLを特定できます。


(被害者側の視点)ロードされた悪意あるモジュールを名前で検索

この攻撃の検知に役立つその他のファイルメタデータやインジケーターは、観測されませんでした。

■静的分析とリバースエンジニアリング
静的分析ツールを使うことで、バイナリがコンパイルされた時間、バイナリのアーキテクチャ、そしてバイナリ構築に使用されたプログラミング言語などのインジケーターを引き出すことができました。


▲コンパイルされた日付と時刻を示すタイムスタンプ


▲64-bitアーキテクチャ


▲C#で書かれたMicrosoft .NET実行ファイル

このファイルはC#/.NETバイナリであるため、C/C++バイナリに使用される標準的な静的分析ツールでは、プラグインパックまたは埋め込みPowerShellコマンドで使用されている関数への参照を引き出すことができません。C#/.NETのバイナリは、Microsoft Intermediate Language(MSIL)と呼ばれるものへとコンパイルされます。

当該コード内に含まれているメタデータを使うと、DNSpyを使用してこの実行ファイルを逆コンパイルできます。これにより、同バイナリをほぼ完全にソースまで逆コンパイルすることに成功し、Base64でエンコードされたPowerShellコマンド内に含まれているCommand & Control(C2)サーバーのIPアドレスのような痕跡情報(IoC)を抽出できました。


▲逆コンパイルされたソースコード


CyberchefでBase64をデコードした後のPowerShellコマンド

Cybereason GSOC による推奨事項

Cybereason GSOCでは次のことを推奨しています。

  • お使いの環境のポリシーでアンチランサムウェア(Anti-Ransomware)機能を有効にし、同機能の検知(Detect)モードおよび実行防止(Prevent)モードに設定すること。
  • 利用しているNotepad++の正規プラグインを特定し、それらを検知対象から除外すること。
  • %PROGRAMFILES%\Notepad++\plugins\ディレクトリ内に作成された新しいファイルのうち、容認基準から逸脱するものがないかを監視すること(これは、たとえば、センサーによって収集されたファイルイベントや、Cybereason Defense プラットフォームで報告されたファイルイベントを通じて実施すること)。
  • Notepad++の異常な子プロセスを監視し、シェル製品の種類に関して特別な注意を払うこと。

高まる経済安全保障リスクから考えるサイバーセキュリティ戦略

2022年2月に始まったロシアのウクライナ侵攻では、サイバー空間でも激しい攻防が行われています。
さらに、経済安全保障の観点から技術流出に対する懸念が世界中で高まっています。

そこで、本ホワイトペーパーでは、経済安全保障とサイバー攻撃の現状と、セキュリティ対策のポイントを解説します。
https://www.cybereason.co.jp/product-documents/white-paper/9052/