Genians Security Center(GSC)は、分析中にAPT37グループが使用する新しい形式のマルウェアを発見しました。彼らが使用する最も一般的なタイプは「RoKRAT」と呼ばれます。脅威アクター(Threat Actor)は、拡張子がLNKのショートカットファイル内の「Cmd」または「PowerShell」コマンドを攻撃に使っています。
現在、この攻撃は韓国でも引き続き観察されるほど活発に活動しています。それほど、効果的な攻撃手法として見ています。したがって、複数の業務用デバイスを持つ企業や政府機関、団体のセキュリティ管理者は、脅威に対するさまざまな攻撃の種類と手法を常に認識する必要があります。
ショートカットファイルの基本アイコンには小さな矢印が含まれており、ある程度目視区別が可能です。もちろん、ユーザーが自分で作成したショートカットフォルダやファイルはほとんど正常なので、絶対に誤解してはいけません。もし、メールの添付ファイルやSNSなどのメッセンジャーで受け取った圧縮ファイルの内部にショートカットファイルがあれば、それは十中八九マルウェアである可能性が高いです。このようにセキュリティ責任者は、最新の脅威の流入過程やファイル拡張子の概念、アイコンの固有の特徴などを理解する必要があります。
これにより、定期的な社内セキュリティトレーニングとケースシェアリングを通じて従業員のセキュリティ認識レベルを向上させることができます。さらに、EDRまたはMDRサービスの導入により、より体系的で効率的な脅威管理システムを運営できます。このレポートは、最新のケースに基づいて脅威を効果的に防御するためのインサイトの確保と防御戦略の確立に必要な技術分析資料として活用できます。
GeniansはAPT37グループの様々な脅威活動を分析し、サイバー脅威対応のための脅威インテリジェンスレポートを提供しています。
タイプ別の実際のケース分析により、高度標的型攻撃(APT)の変化と流れが把握できます。北朝鮮連携だけでなく、中国、ロシアなど国家背後のハッキング組織の脅威は日々高まっています。従来知られている攻撃ツールも引き続き発展しており、これに対する多様な分析と研究が重要となる傾向です。
[図2-1]攻撃シナリオ
悪意のあるファイルは「国家情報と防諜原稿.zip」圧縮ファイルを通じて配布されました。圧縮ファイルの内側に、「国家情報と防諜原稿.lnk」という名前のショートカットファイルが含まれています。
そのショートカットファイルのサイズは約54MB(54,160,170Bytes)で異常に大きいことがわかります。なぜなら、コード内部におとり用正常文書とともにRoKRAT Shellcodeなどが隠れているからです。
通常のショートカットファイルは単純なテキスト情報(ファイルのパス、アイコン情報など)を保存するため、最大数十キロバイト(KB)程度です。
[図3-1]配布された悪意のあるファイルの画面
「国家情報と防諜原稿.lnk」ファイル内に隠された属性情報を抽出すると、次のようになります。
[図3-2] LNKファイルの構造とコードの相関分析
ショートカットファイルには4つのデータが含まれています。
おとりファイルを除くデータの実行フローは次のとおりです。
[図3-3]コード実行のフロー
「ttf03.bat」バッチファイルを介して分離されたPowerShellコマンドが順次実行されます。そして、「ttf02.dat」ファイルを介してshellcodeブロック「ttf01.dat」ファイルを読み込み、XOR演算を実行します。
$exeFile = Get-Content -path $exePath -encoding byte $len = $exeFile.count $newExeFile = New-Object Byte[] $len $xK = '3' for ($i = 0; $i -lt $len; $i++) { $newExeFile[$i] = $exeFile[$i] -bxor $xK[0] } |
[表3-1] XOR演算ロジック
PowerShellで$ xK = 「3」として宣言された文字列の最初の文字は、ASCIIコード値として0x33(10進数51)に対応し、これはXOR演算で使用されるキー値として機能します。
各バイトは $exeFile[$i] -bxor $xK[0] を介して XOR ロジックにデコードされます。
手動でデコード操作を実行するには、次のPowerShellコマンドを使用できます。これにより、「ttf01.dat_decode」ファイルを取得できます。
$key = '3' $keyByte = [byte][char]$key $inputFile = "D:\ttf01.dat" $outputFile = "D:\ttf01.dat_decode" $encodedBytes = Get-Content -Path $inputFile -Encoding Byte $decodedBytes = New-Object Byte[] $encodedBytes.Length for ($i = 0; $i -lt $encodedBytes.Length; $i++) { $decodedBytes[$i] = $encodedBytes[$i] -bxor $keyByte } [IO.File]::WriteAllBytes($outputFile, $decodedBytes) Write-Host "XOR decoding complete. Output saved to: $outputFile" |
[表3-2]PowerShell XORファイルの変換コマンド
逐次コード分析のために手動デコードを便利に進めることができます。
[図3-4]PowerShell手動デコード変換の例
変換されたコードを比較すると、典型的なShellcodeブロックを持っています。詳細なShellcode分析のためにコードデバッグを実行し、ペイロード(Payload)確認のプロセスが必要になります。
[図3-5]Shellcodeの比較画面
Shellcodeデバッグプロセスにより、XOR 変換ロジックを確認できます。
[図3-6] XOR変換のプロセス
実際の元のShellcodeデータをベースにオフセット00000590番地から0xAE 1バイトへのXOR変換が行われます。
変換されたデータは32ビットEXE実行ファイルで、Time Date Stampの値は「2025-04-21 00:39:59(UTC)」です。脅威アクターは、韓国標準時(UTC+9)午前9時39分にマルウェアを作成したと推定します。
そのファイルで「Program Database(PDB)」情報を確認できます。 PDBファイルは、WindowsでVisual Studioなどでプログラムをビルドしたときに生成されるデバッグ情報ファイルです。このファイルには、実行ファイル(EXE)または動的ライブラリ(DLL)のシンボル情報(symbol information)、ソースコードのマッピング、変数名、関数名などのデバッグに必要な情報が含まれています。
マルウェアに存在するPDB情報は、開発者のさまざまな情報を把握するために活用され、類似の亜種に対する手がかりとしても使用できます。
[図3-7]DebugDataのPDBパス情報
この情報には「InjectShellcode」文字列データが含まれており、開発者の意図を予測することができます。
D:\Work\Util\InjectShellcode\Release\InjectShellcode.pdb |
[表3-3] PDB文字列の情報
多くのRoKRAT亜種の中に「InjectShellcode」文字列が見つかったのは今回が初めてです。これは、Anti-Virus製品の検知やマルウェアの分析を難しくすることが目的です。
[図3-8] mspaint.exeプロセスメモリインジェクションのルーチン
「InjectShellcode」モジュールは、CreateProcessW API関数を介してハードコードされた「C:\Windows\SysWOW64」パスに存在する「mspaint.exe」プロセスを生成します。ここで、「mspaint.exe」ファイルはWindows標準のペイントプログラムです。
ちなみに、64ビットは互換性を考慮するためにWindows-32-on-Windows-64(WOW64)サブシステムを使用して、変更なしで32ビットプログラムを実行します。ただし、Windows 11の最新バージョンでは、「mspaint.exe」は「SysWOW64」または「System32」パスにないです。これは、UWP(Universal Windows Platform)アプリに切り変わったためです。転換された時点は正確に知られていませんが、2024年10月前後に何度も累積的なアップデートでクラシックのペイントプログラムが削除されたというユーザーエクスペリエンスが報告されたことがあります。
そのため、一部の環境では、「SysWOW64」パスでハードコードされた「mspaint.exe」プロセスインジェクション手法が失敗し、マルウェアが正しく機能しなくなります。
「SysWOW64」パスに「mspaint.exe」ファイルが存在する場合は、仮想メモリスペースを割り当ててデータを書き込みます。このとき「xmmword_403018」配列のデータ 「325869FF25798BC277BF22DEB1DEB967h」から「0xDA000」(892,928)バイト分だけ書きます。
そして、「xmmword_402170」配列のデータとXOR演算を実行します。このとき使用されるデータは「3232323232323232323232323232323232h」です。 XOR演算が実行されたデータは、2番目のShellcode構造を持ちます。
[図3-9]Shellcodeデコードのルーチン
このShellcodeは、eaxがターゲットとするオフセット000590番地からbl値の「0xD6」キーとXOR演算を繰り返し実行します。
XOR演算が完了すると、32ビットEXE実行ファイルに変換されます。このファイルがRoKRATの亜種です。
[図3-10]XOR演算前後の結果比較
ちなみに、2025年07月20日には「北朝鮮離脱民の成功した渡韓および定着のためのアカデミー運営.lnk」ファイル名を持つ亜種が発見されました。
このタイプは、「C:\Windows\SysWOW64」パスに存在する「mspaint.exe」プロセスの代わりに「notepad.exe」ファイル名に変更されました。そして「Weapon」フォルダパスから悪意のあるファイルを開発しました。
D:\Work\Weapon\InjectShellcode\Release\InjectShellcode.pdb |
[表3-4]PDB文字列の情報
「Weapon」フォルダは、2025年02月03日「Kメッセンジャーとして流布された「APT37」グループの悪性HWP事例分析」レポートの[図12]でも同様に発見されたことがあります。
XOR演算後に変換された最終モジュールはAPT37グループが使用するRoKRATの亜種として確認されました。 RoKRATについては「Operation. ToyBox Story」レポートなどでも何度も紹介したことがありますので、詳細は前の内容を参考にしてください。
今回の亜種の場合も従来のものと大きな差がない、典型的なRoKRAT機能を行います。今回のモジュールでも固有の識別子文字列(--wwjaughalvncjwiajs–)がそのまま使われました。この文字列は、RoKRATタイプがC2で書き込むクラウドAPIを要求するときにContent-Typeに含める固定値として知られています。
RoKRATモジュールは、感染されたデバイスの基本的なコンピュータ情報と文書ファイル、スクリーンショットなどを収集し、合法的なクラウドサービスに漏洩しようとします。
脅威アクターはShellcodeおよびFilelessベースでこのモジュールをロードしていますが、そのせいか内部の機能は大きく変更せず使っています。
[図3-11]RoKRAT内部の文字列
さらに、無料のクラウドストレージをC2サーバーとして継続的に悪用しています。
したがって、企業や政府機関、団体のセキュリティ管理者は、外部クラウドへのアクセス履歴も慎重に確認する必要があります。
[図3-12]Dropbox APIとAccess Tokenの値
今回は2つのDropbox Access Token Keyが使用されました。対応するKey値は以下の通りで、現在は削除された(revoke)状態です。
2025年07月20日に発見された亜種のトークン値は以下の通りです。
Dropbox API サービスと Access Token で確認してみると、加入者の履歴情報を一部照会できます。これにより、脅威アクター(Threat Actor)のメール情報などを識別できます。
"email": "nusli.vakil@yandex.com", "email_verified": true, "disabled": false, "country": "US", "locale": "en", "email": "reddy.kappeta@yandex.com", "email_verified": true, "disabled": false, "country": "US", "locale": "en", "email": "leon24609@gmail.com", "email_verified": true, "disabled": false, "country": "GB", "locale": "ko", "email": "leon91729@zoho.com", "email_verified": true, "disabled": false, "country": "JP", "locale": "ko", |
[表 3-5]Dropbox加入者の履歴情報
[図3-13]Linkdin加入者の画面(プロファイルはモザイク加工)
どちらの加入者情報も、ロシアのYandexメールアカウントを使用しました。メールに使用されたIDを検索してみると、Linkedinが出てきますが、同じ人だと断定することはできません。
ただし、APT37の背後にある脅威の行為者→脅威アクターがクラウドストレージに参加するときに登録するメールアドレスがLinkedInで継続的に観察されることは非常に興味深いところです。これに関する内容は「Operation. ToyBox Story」レポートに記載されています。
2025年07月上旬に、Multiple Provider Router DLLのように偽装したRoKRAT Loader形式が多数識別されました。元のファイル名は「mpr.dll」で、32Bit DLLの亜種はすべて類似の機能を持っています。
一部はHWP文書ファイルに悪意のある OLE を挿入して攻撃に使われたものと確認されます。
[図4-1]悪意のあるHWP文書ファイル内部構造の解析画面
ドキュメント内に「BIN001.OLE」、「BIN002.OLE」オブジェクトが存在します。 1 つはSysinternalsで配布される「ShellRunas.exe」ファイルです。そしてもう一つは「credui.dll」です。
実際の悪意のあるHWP文書ファイルが実行され、内部に挿入されたハイパーリンクをクリックすると、一時フォルダ(%Temp%)パスに作成された「ShellRunas.exe」を実行するかどうかが表示されます。もし実行を許可すると、一緒に作成された「credui.dll」マルウェアがロードされます。これは典型的なDLL Side-Loading手法です。
類似のケースで確認されたDLL Side-Loading方式は次のとおりです。このdllファイルたちはマルウェアです。
「credui.dll」モジュールは、DropBoxドライブに存在する「Father.jpg」イメージをダウンロードしてメモリにロードします。興味深いのは、JPEG画像フォーマットの内部にRoKRATモジュールを隠しておいたところで、この手法は通常「ステガノグラフィ(Steganography)」と言われます。
2つの形式のイメージファイルで偽装された手口が発見されましたが、内部のマルウェアパターンは同じです。そこで、「mpr.dll」モジュールに偽装されたマルウェアをベースに分析します。
[図4-2]イメージファイル偽装のマルウェア事例
「mpr.dll」ファイルの内部に「MYIMAGEFILE」という名前のリソース(Resources)が含まれていることがわかります。一見リソース名だけを見たときは、イメージファイルが挿入されているかのように解釈されます。
[図4-3]「mpr.dll」リソース領域の画面
このファイルはリソースを見つけてそのデータをロードし、SHGetKnownFolderPath関数を介して%LOCALAPPDATA%パスに「version1.0.tmp」ファイルを保存します。
[図4-4]リソースデータ作成の関数
そして、LoadLibraryW関数を介して「version1.0.tmp」ファイルをロードします。
[図4-5]ライブラリロードの関数
ファイルのロードが行われると、そのDLL内の関数アドレスを取得します。
「version1.0.tmp」ファイルの内部にも「MYIMAGEFILE」という名前のリソースが含まれています。そして実際にはJPEG画像フォーマットのヘッダを持っています。
[図4-6]「version1.0.tmp」リソース領域の画面
リソースを抽出して確認してみると、実際に有効なJPEG Exif(Exchangeable image file format)ヘッダを持っています。そして、JPEG画像ファイルには、実際の特定の人物の顔が含まれています。
ところで、分析結果「version1.0.tmp」ファイルは、イメージファイルリソース内のデータを0xAA Key値でXOR演算するロジックが発見されました。演算後に変換されたオフセット0x4201位置にはShellcodeデータが観察されました。
[図4-7]イメージファイルとShellcode
こうして取得したShellcodeデータは、内部ルーチンを介して0x29 Key値でXOR演算がもう一度実行されます。この操作により、内部に隠されているRoKRATモジュールが表示されます。
このようにイメージファイルヘッダを持っていますが、デコード処理を経て内部にマルウェアがロードされます。典型的なステガノグラフィ手法の形をとっています。
[図4-8]XOR演算の実行ルーチン
ここで使用されているRoKRAT機能を分析した結果、2つのクラウドアクセストークン値が識別されました。
このトークン値は、2023年から2024年にすでに使用された履歴が確認されました。
Genian EDR管理者は、脅威の流れを可視性高く把握することができます。ステガノグラフィ手法を使用したケースでは、リソース領域内に存在していた「version1.0.tmp」ファイルが生成されるプロセスを簡単に把握できます。
拡張子はtmpファイルですが、「rundll32.exe」親プロセスで実行されていることを確認できます。
[図5-1]リソースに含まれるDLL作成後の実行画面
mspaint.exeプロセスにShellcodeを挿入(Injection)してファイルレス(Fileless)形式で攻撃を実行すると、シグネチャまたはパターンベースのセキュリティ製品で検知が難しい可能性があります。
[図5-2] mspaint.exeプロセスにインジェクションして通信するフロー
EDR(Endpoint Detection and Response)を使用すると、ShellcodeとDropbox APIを使用した外部通信の行為をすばやく識別できます。
デバイスで採証されたマルウェアを詳細にリバース(Reversing)して分析するには、多くの時間が必要です。ただし、EDRを介してマルウェア固有の動作フローをすばやく把握することは、SoC(Security Operations Center)内の脅威アナリストにとって非常に役立ちます。
マルウェアの流れを可視性のあるフローで提供することは、脅威アナリストにとって非常に重要なツールです。これにはいくつかの主な利点があります。
まとめると、EDRによるマルウェアの視覚的な分析は、脅威アナリストが攻撃の詳細な内容を深く理解し、効果的に対応するのに大きく役に立ちます。
[図5-3]クラウドベースのC2通信イベント調査の画面
Genian EDRは、合法的なクラウドサービスを悪用したC2通信記録もMITRE ATT&CK Techniqueタグを付けているため、セキュリティ管理者が脅威の可能性を判断するのに役立ちます。
RoKRATは、Dropbox、Google Drive、Yandex Diskなどのクラウドサービスで偽装されたCommand & Control(C2)通信を使っています。そのため、セキュリティソリューションでの検知が難しく、長期間にわたって隠蔽されたアクションが可能です。
特に、ファイルレス形式でメモリ上で動作し、ディスクに痕跡をほとんど残さないため、従来のアンチウィルスやログベースの検知では危険性を把握することが困難です。このように、秘密で継続的な攻撃にはEDRを活用した対応が不可欠です。システムに侵入した後に実行するスクリプトの実行、プロセスの作成、ネットワーク接続の試みなどの様々な攻撃行為をリアルタイムで監視して検知できるためです。
RoKRATの脅威は進化を重ねており、最新の亜種は一般的なアンチウィルス(Anti-Virus)やSIEMシステムだけでは検知と対応が難しい高度化された標的型攻撃(APT)用マルウェアです。したがって、次のような理由でEDRベースの対応が必須です。
a2ee8d2aa9f79551eb5dd8f9610ad557
ae7e18a62abb7f93b657276dcae985b9
d5fe744b9623a0cc7f0ef6464c5530da
f6d72abf9ca654a20bbaf23ea1c10a55
fd9099005f133f95a5b699ab30a2f79b
5ed95cde6c29432a4f7dc48602f82734
16a8aaaf2e3125668e6bfb1705a065f9
64d729d0290e2c8ceaa6e38fa68e80e9
443a00feeb3beaea02b2fbcd4302a3c9
e13c3a38ca58fb0fa9da753e857dd3d5
e4813c34fe2327de1a94c51e630213d1