署名されていないDLLのハントによるAPT攻撃グループの発見

Conceptual image representing adversaries and advanced persistent threats. Here, we discuss a method for finding these groups by hunting for unsigned DLLs.

This post is also available in: English (英語)

概要

マルウェア作者はつねに技術を磨き、検知をかいくぐってより巧妙な攻撃を実行しようとします。そうしたなかここ数年よく見かけるのが、署名されていないDLLをロードさせる手法です。

私たちは、持続的標的型攻撃者(Advanced Persistent Threats: APT)がこの手法を使っている可能性があると考え、そのハント(探索)を行いました。この結果、中国のサイバースパイグループStately Taurus(旧称PKPLUG 別名Mustang Panda)や北朝鮮のSelective Pisces(別名Lazarus Group)をはじめとするAPT攻撃グループと、洗練されたペイロードにより、実際の攻撃が広く行われている様子が確認されました。

そこで本稿では、署名されていないDLLのロードを検出することで、お客様の環境における攻撃や脅威発生源の特定につなげる方法を解説します。

パロアルトネットワークスのお客様は、Cortex XDRのエージェントを通じ、悪性DLLのロードに対する保護と検出を受けています。

本稿で扱う脅威アクターグループ名
Unit 42による追跡名 別名
Stately Taurus Mustang Panda, PKPLUG, BRONZE PRESIDENT, HoneyMyte, Red Lich, Baijiu
Selective Pisces Lazarus Group, ZINC, APT - C - 26

目次

悪性DLL: 感染システム上での悪性ペイロード実行によく使われる手法
署名されていないDLLに関連して実地に観測された攻撃の傾向
ペイロードを選んで深堀りしてみる
Stately Taurus (旧称 PKPLUG 別名 Mustang Panda)
Selective Pisces (別名 Lazarus Group)
Raspberry Robin
署名されていないDLLを使って自社環境内の攻撃をハントする方法
ハント用クエリ
結論

悪性DLL: 感染システム上での悪性ペイロード実行によく使われる手法

私たちは、長年にわたるプロアクティブな脅威ハント経験から、「悪性DLLのロードは感染システム上で悪性ペイロードを実行する主たる方法のひとつ」という仮説をたてました。個人のハッカーもAPT攻撃グループもこの手法を使っていることから、この仮説に基づいたリサーチを行ってみることにしました。

私たちが実際に目にする悪性DLLの多くには、次の3つの特徴が共通して見られます。

  • ほとんどが特権をもたないパスに書き込まれる
  • 署名されていない
  • 署名されているプロセスにロードさせることで検出を回避する。そのさいはDLLをロードする専用ユーティリティ(rundll32.exeなど)を使うこともあるし、アクティビティの一環としてDLLをロードする実行ファイルを使うこともある

これらを踏まえ、脅威アクターがよく使う手法は次のようなものであることがわかりました。

  1. rundll32.exeregsvr32.exeによるDLLのロード: これらのプロセスは署名された既知のバイナリですが、これらを悪用することで検出を回避しつつコードを実行しようとします。
  2. DLL検索順ハイジャック: 正規プロセスの検索順序を悪用して悪質DLLをロードさせる手法です。この手法では、既知のDLLと同じ名前のつけられた悪質ペイロードを良性アプリケーションがロードします。

上記の手法による実地観測結果を検証したところ、署名されていない悪性DLLのロード元となる特権なしのパスとして、ProgramData、AppData、ユーザーのホームディレクトリのフォルダとサブフォルダがもっともよく使われていることがわかりました。

次のセクションでは上記の仮説に基づいて得られた知見を紹介します。

署名されていないDLLに関連して実地に観測された攻撃の傾向

先の仮説に基づいてハントを行うにあたり、XQLクエリを2つ作成しました。1つめはrundll32.exeregsvr32.exeがロードした署名されていないDLLを探すクエリで、2つめは署名されていないDLLをロードする署名されたソフトウェアを探すクエリです。

このハントの結果、署名されていないDLLのロードを行うマルウェアファミリがいろいろ発見されました。図1は過去6ヶ月間(2022年2月~8月)に弊社がこれらの手法で検出したマルウェアを示したものです。

2022年2月~8月に観測されたDLLロードを使うマルウェア: Raspberry Robin(31.0%)、Emotet(17.4%)、QakBot(15.5%)、IcedID(9.7%)、Cobalt Strike(7.8%)、Vawtrak(6.8%)、Ursnif(5.8%)、Amavaldo(3.1%)、Stately Taurus(1.9%)、Selective Pisces (1.0%)
図1. 観測されたDLL読み込み手法を使うマルウェア

上記の脅威が使う実行テクニックを分析したところ、金融系のトロイの木馬(バンキングトロージャン)や個人の脅威アクターは悪性DLLのロードにrundll32.exeregsvr32.exeを使うケースが多く、APT攻撃グループはたいていDLLサイドローディング手法を使っていることがわかりました。

ペイロードを選んで深堀りしてみる

Stately Taurus

今回はある組織の環境内で検出されたStately Taurusによるアクティビティを中心に調査することにしました。Stately Taurusは政府組織以外の組織を標的とすることが多い中国のAPTグループで、ペイロードのロードに正規ソフトウェアを悪用することで知られています。

この事例ではDLL検索順序ハイジャック手法で攻撃者の悪性DLLを正規プロセスのメモリ空間にロードさせている様子が確認されました。DLLサイドローディングには、ウイルス対策ソフトやPDFリーダーなどの複数のサードパーティソフトウェアが使われていました。

このスクリーンショットはサイドローディングにより悪性DLLのwsc.dllを読み込む良性実行ファイル (AvastSvc.exe) を示しています。
図2. AvastSvc.exeがサイドローディングにより悪性DLLをロード

DLLサイドローディング実行にあたり、同グループはペイロードをProgramDataフォルダにドロップし、そのなかにDLLハイジャック用の良性の実行形式ファイル(AvastSvc.exe)、DLL ファイル(wsc.dll)、暗号化されたペイロード(AvastAuth.dat)という3つのファイルを含めていました。ロードされたDLLはPlugX RATと見られ、これが.datファイルから暗号化されたペイロードをロードしていました。

表の内容は次のとおり。File Create - AvastAuth.dat - C:\ProgramData\AvastSvcZEg\AvastAuth.dat; File Write - wsc.dll - C:\ProgramData\AvastSvcZEg\wsc.dll; File Write - wsc.dll - C:\ProgramData\AvastSvcZEg\wsc.dll; File Create - wsc.dll - C:\ProgramData\AvastSvcZEg\wsc.dll; File Write - AvastSvc.exe - C:\ProgramData\AvastSvcZEg\AvastSvc.exe
図3. PlugXファイル: 良性の実行形式ファイル、DLLローダー、暗号化された.datファイル

Selective Pisces

またこのハント用クエリを実行すると、ProgramDataディレクトリ内(図4)に、エントロピーの高い悪性モジュールが複数特定されました。

このスクリーンショットには、uso.dat (0.999545)、mi.dll (0.999396)、mi.dll (0.999393)、 SXSHARED.DLL (0.999354)、USOShared.tmp (0.999317)など、Selective Piscesに関連するエントロピーの高い悪性モジュールが表示されている
図4. Selective PiscesによるDLLサイドローディング

図4に示した署名されていないモジュールの実行チェーンを調査したところ、署名のついたDreamSecurity MagicLine4NXプロセス(MagicLine4NX.exe)によってディスクにドロップされていたことがわかりました。

このMagicLine4NX.exeが第2段階のペイロードを実行していましたが、このさい、検出避けにDLLサイドローディングを使っている様子が観測されています。この第2段階のペイロードは、mi.dllという名前の新たなDLLを書きこみ、wsmprovhost.exe(WinRMのホストプロセス)をProgramData内のランダムなディレクトリにコピーしていました。Wsmprovhost.exeはWindowsネイティブのバイナリで、同一ディレクトリ内にあるmi.dllをロードしようとします。攻撃者はこのしくみを悪用し、このプロセスを使ってDLLサイドローディング(T1574.002)を実現していました。

このmi.dllというペイロードは、ualapi.dllというさらにべつのペイロードをSystem32ディレクトリ(C:\Windows\System32\ualapi.dll)にドロップする様子が確認されています。このケースでは、System32ディレクトリ内にualapi.dllというDLLは存在していませんでした。攻撃者はこの事実を利用し、悪質ペイロードにualapi.dllという名前を付けることで永続性を確保していました。こうしておけば、spoolsv.exeが起動時に当該DLLをロードしてくれます。

上記ペイロードを分析したところ、これはUnit 42がSelective Piscesの名前で追跡している北朝鮮APT攻撃グループに帰属するものであることが判明しました。同グループがMagicLine4NXのような正規サードパーティソフトウェアを使うことは、今年のはじめにSymantecも同社のブログで解説しています。

Raspberry Robin

最後に、私たちがフィールドでもっともよく目にした攻撃方法を詳しく解説しておきたいと思います。
私たちがクエリから得た結果には、いくつかの特徴が共通して見られます。

  • 適当な文字を並べ変えた名前をもつDLLが、ProgramDataフォルダ以下またはAppDataフォルダ以下のランダムなサブフォルダに存在する
  • 似たようなエントロピー範囲をもつ(0.66前後)
  • いずれもrundll32.exeregsvr32.exeでロードされている

例: RUNDLL32.EXE C:\ProgramData\<random_folder>\fhcplow_Tudjdm.dll,iarws_sbv

Raspberry RobinのロードするDLLはnpwmse_Nemcttdid.dll、iyclBaiic_fig.dll、Portsoft_Gdfv.dll、adlsoft_w_ni.dll、dfjssoft_002.dll、fhcplow_Tudjdm.dll、CNBERngs_De4_3.dllなど
図5. Raspberry RobinがロードするDLL

これらの攻撃で行われていたDLLローディングアクティビティは、最近Red Canaryが解説したRaspberry Robinと呼ばれるキャンペーンに帰属するものです。

これらの攻撃は感染USBデバイス上のショートカットファイルから始まります。このショートカットファイルがmsiexec.exeのプロセスを作成してリモートのC2サーバーから悪性DLLを取得します。インストール後はスケジュールタスクが作成され、このタスクでシステム起動時にrundll32.exe/regsvr32.exeでDLLをロードすることにより、永続性を確保します。

署名されていないDLLを使って自社環境内の攻撃をハントする方法

Cortex XDRのXQL Searchを使うと、署名されていないDLLのロードをハント可能です。
結果を絞り込むには以下の点に着目することをお勧めします。

  • DLLサイドローディングの有無: 標準のディレクトリ以外に置かれている既知のサードパーティ製ソフトウェアが存在しないか注意する
  • ファイルのエントロピーはどのぐらいか: エントロピーの高いバイナリには、実行中に抽出されるパックされたセクションが含まれる可能性がある
  • 実行頻度はどのぐらいか: 実行頻度が高い場合、定期的に発生する正当な活動を示している可能性がある。頻度が低い場合、それが調査の手がかりとなる可能性がある
  • ファイルパスはどうなっているか: ファイル名が適当な文字の綴り変えで構成されているフォルダやファイルを含む場合はそうでない場合より疑わしいと言える
クエリの結果(モジュールのエントロピー順にソート)。この図はモジュールのエントロピー順にソートするとEmotetサンプルの実行が上位にきた様子を示しているこの例ではモジュールエントロピーのスコアの範囲が 0.860774から0.637715まで降順で表示されている
図6. クエリの結果(モジュールのエントロピー順にソート)

図6は次のセクションで解説するクエリの結果の一部を、モジュールのエントロピー順にソートしたものです。最初の2行がEmotetの実行例で、ほかは良性のDLLです。

ハント用クエリ

結論

悪性DLLをブロックする検出技術は対象モジュールのメモリロード後の振る舞いに依存して行われることが多く、これが悪性モジュールブロックの足かせになってしまうことがあります。

そうした場合でも、本稿で紹介したようなハンティング手法を使えば、署名されていない悪性DLLをプロアクティブに発見できます。

また正規ソフトウェアや振る舞いの観点からネットワークのベースラインを知っておけば、上記クエリで生成される結果の数を絞り込み、疑わしいものに集中できます。

Cortex XDRは、振る舞い脅威防御(Behavioral Threat Protection: BTP)やAnalyticsモジュールを使い、既知のハイジャック技術によってロードされた悪性DLLに対してアラートを発報してブロックし、エクスプロイト後のアクティビティを防止できます。

Stately Taurus関連のIoC(侵害指標)とTTPの指標はATOMでStately Taurusを確認してください。

侵害の懸念があり弊社にインシデントレスポンスに関するご相談をなさりたい場合は、infojapan@paloaltonetworks.com まで電子メールにてご連絡ください(ご相談は弊社製品のお客様には限定されません)。

IoC

脅威アクター SHA256
Selective Pisces 779a6772d4d35e1b0018a03b75cc6f992d79511321def35956f485debedf1493
Selective Pisces d9b1ad70c0a043d034f8eecd55a8290160227ea66780ccc65d0ffb2ebc2fb787
Selective Pisces 3131985fa7394fa9dbd9c9b26e15ac478a438a57617f1567dc32c35b388c2f60
Selective Pisces 5be717dc9eda4df099e090f2a59c25372d6775e7d6551b21f385cf372247c2fd
Selective Pisces 18cc18d02742da3fa88fc8c45fe915d58abb52d3183b270c0f84ae5ff68cf8a2
Selective Pisces 7aa62af5a55022fd89b3f0c025ea508128a03aab5bc7f92787b30a3e9bc5c6e4
Selective Pisces 79b7964bde948b70a7c3869d34fe5d5205e6259d77d9ac7451727d68a751aa7d
Selective Pisces cf9ccba037f807c5be523528ed25cee7fbe4733ec19189e393d17f92e76ffccc
Selective Pisces 32449fd81cc4f85213ed791478ec941075ff95bb544ba64fa08550dd8af77b69
Selective Pisces 5a8b1f003ae566a8e443623a18c1f1027ec46463c5c5b413c48d91ca1181dbf7
Selective Pisces 5bb4950a05a46f7d377a3a8483484222a8ff59eafdf34460c4b1186984354cf9
Stately Taurus 352fb4985fdd150d251ff9e20ca14023eab4f2888e481cbd8370c4ed40cfbb9a
Stately Taurus 6491c646397025bf02709f1bd3025f1622abdc89b550ac38ce6fac938353b954
Stately Taurus e8f55d0f327fd1d5f26428b890ef7fe878e135d494acda24ef01c695a2e9136d
Raspberry Robin 06f11ea2d7d566e33ed414993da00ac205793af6851a2d6f809ff845a2b39f57
Raspberry Robin 202dab603585f600dbd884cb5bd5bf010d66cab9133b323c50b050cc1d6a1795
Raspberry Robin f9e4627733e034cfc1c589afd2f6558a158a349290c9ea772d338c38d5a02f0e
Raspberry Robin 9fad2f59737721c26fc2a125e18dd67b92493a1220a8bbda91e073c0441437a9
Raspberry Robin 9973045c0489a0382db84aef6356414ef29814334ecbf6639f55c3bec4f8738f

表1 サンプルのハッシュ