さまざまな機能と高度な回避手法を備える「SmokeLoader」の攻撃を確認

文●フォーティネットジャパン 編集●ASCII

提供: フォーティネットジャパン

  • お気に入り
  • 本文印刷

本記事はフォーティネットジャパンが提供する「FORTINETブログ」に掲載された「SmokeLoader攻撃が台湾の企業を標的に」を再編集したものです。

FortiGuard Labs 脅威リサーチ
影響を受けるプラットフォーム:Microsoft Windows
影響を受けるユーザー    :Microsoft Windows
影響            :窃取された情報が以降の攻撃に使用される可能性がある
深刻度           :高

 FortiGuard Labsは2024年9月に、製造業、医療、IT分野などの台湾の企業を標的にする、悪名高いSmokeLoaderマルウェアを使用した攻撃を観測しました。SmokeLoaderは、さまざまな機能と高度な回避手法を備えていることで知られており、モジュール設計によってさまざまな攻撃を実行することができます。SmokeLoaderは主に、他のマルウェアを配布するダウンローダーとして機能しますが、今回の場合、C2サーバーからプラグインをダウンロードすることで自らが攻撃を実行します。

図1:攻撃フロー

フィッシングサイト

 図2に、キャンペーンで使用されるフィッシングメールを示します。送信者は、この悪意ある添付ファイルは見積書であり、具体的な指示が記載されていると主張します。このメールは、現地語の単語や文を使っているため本物らしく見えますが、このようなフィッシングメールがほとんど同じ内容で複数の受信者に送信されます。受信者の名前も変更されずに(受信者に合わせてファイル名が編集されることなく)、他の企業にも送信されます。このような現象は、このキャンペーンの他の攻撃チェーンでも確認されています。さらには、メールの署名と電話番号に本文と異なるフォントと色を使用されていることから、文章が他からコピーされた可能性があります。

図2:異なる企業に送信されたフィッシングメール。受信者の名前が同一

 いずれの場合も、第3段階でVBSファイルを使用してマルウェアローダーであるAndeLoaderを起動し、最終ペイロードはSmokeLoaderの同一ファイルです。

CVE 2017-0199

 CVE-2017-0199は、OLE2埋め込みリンクオブジェクトのエクスプロイトを可能にする、Microsoft Officeの脆弱性です。意図的に作成されたファイルを被害者が開くと、悪意ある文書が自動的にダウンロードされて実行されます。フィッシングメールの添付ファイルは保護されており、悪意あるリンクを含むオブジェクトがシートに隠れています。

図3:バイナリデータは保護されているが、ダウンロードリンクが含まれている

CVE 2017-11882

 CVE 2017-11882は、Microsoft Officeの数式エディタに存在するRCE(リモートコード実行)の脆弱性です。シェルコードには、復号アルゴリズムと暗号化されたデータが含まれています。復号されたシェルコードは、必要なAPIを取得し、URLDownloadToFile関数を使用して、次の段階のVBSファイルをダウンロードします。 

図4:復号されたシェルコード

HTA

 HTAファイルには、URLエンコードを何回か使用してエンコードされたVBSコードが含まれています。

図5:HTAファイルのソースコード

 デコードによって得られるVBSスクリプトには、記号と変数の間にスペースがたくさん挿入されていました。また、変数の名前を長くすることで、分析されにくくしていました。このVBSスクリプトは、PowerShellコードのスニペットを実行し、AndeLoaderのVBSファイルをダウンロードします。

図6:クリーンアップされたPowerShellコード

AndeLoader

図7:AndeLoaderの実行フロー

・VBS
 実行フローは、関係のない雑多なコードがたくさん含まれている、悪意あるコードを隠す、難読化されたPowerShellコードから開始します。

図8:VBSファイル。前半のコードスニペットだけが悪意の動作に関連している

 以下に、難読化されたPowerShellコードを示します。このコードは、インジェクターのbase64でエンコードされたデータが含まれているステガノグラフィ画像をダウンロードし、<<BASE64_START>><<BASE64_END>>の間にあるデータを抽出します。次に、このデータがインジェクターとそのdnlib.IO.Home.VAIメソッドにデコードされ、これが、6つの引数、すなわち、SmokeLoaderのデータのダウンロードリンク、永続化のフラグ、ファイルパス、ファイル名、インジェクションターゲット、未使用の引数を受け取ります。今回は、永続化の機能は使用されないため、2番目、3番目、4番目の引数には英語に翻訳すると「disabled」という意味のdestivadoが設定されます。

図9:難読化を解除したPowerShellコード

図10:インジェクターのデータを含む画像ファイル

・インジェクター
 このキャンペーンのインジェクターは、他のインジェクターに比べてシンプルです。コードは難読化されておらず、関数は永続性とインジェクションの2つだけです。

図11:インジェクター:Class.Startは永続化、Tools.Andeはインジェクションの関数

 Class.Startメソッドは、cmd.exeの現在の作業パスにあるすべてのVBSファイルを、Tools.Andeの3つ目と4つ目の引数でそれぞれ指定されたパスとファイル名のVBSファイルに連結します。ファイルパスが、HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunレジストリキーのPathという名前の新しい値に書き込まれることで、システム起動時にVBSファイルが自動的に実行されるようになります。この機能を使用すれば、前の段階でダウンロードされたVBSファイルの永続化が可能になります。

図12:Class.Startメソッド

 次に、Tools.Andeの最初の引数で指定されたTXTファイルがダウンロードされ、そのデータの難読化が解除されてSmokeLoaderになり、これが後にRegAsm.exeにインジェクションされます。通常、以下のインジェクションのプロセスが使用されます。

1. SmokeLoaderデータをターゲットにして新しいメモリに書き込むサスペンドプロセスを作成する。
2. スレッドのコンテキストのオフセット0xB0の値を変更して、プロセスのエントリポイントがSmokeLoaderのエントリポイントを指すようにすることで、スレッドの再開時にSmokeLoaderが実行されるようにする。

SmokeLoader

 SmokeLoaderの実行フローを以下に示します。このセクションは主として、C2サーバーからダウンロードするプラグインです。

図13:SmokeLoaderの実行フロー

 図14を見ると、レスポンスが404 Not Foundであるにもかかわらず、攻撃のペイロードが含まれていることがわかります。

図14:C2通信

 このペイロードには、プラグインのコンフィギュレーションと暗号化されたデータが含まれています。

 この例では、プラグイン4、5(fgclearcookies)、8、9(keylog_rules)のコンフィギュレーションが含まれています。これについては、後述します。C2サーバーから9つのプラグインを受け取り、そのうち3つが個別のプラグイン、3つが32ビット版と64ビット版のプラグインです。プラグインのアーキテクチャによると、SmokeLoaderはループを使用して、これらのプラグインを順番にexplorer.exeにインジェクションします。SmokeLoaderは、explorer.exeの一時停止したプロセスを作成し、プラグインの暗号化したデータと復号アルゴリズム、さらには復号アルゴリズムのコールに使用するシェルコードのスニペットを書き込みます。次に、explorer.exeのエントリポイントの先頭のコードをシェルコードへのジャンプに変更し、ResumeThreadをコールしてプラグインを実行します。

図15:SmokeLoaderはプラグインのアーキテクチャに応じてシェルコードを書き込む

プラグインのリスト

プラグイン1 32-bits ブラウザ、メールソフト、FTPクライアントからログインクレデンシャル、FTPクレデンシャル、Cookie、自動入力データを窃取する
プラグイン2 64-bits FirefoxやThunderbirdからログインクレデンシャルを窃取する。これはプラグイン1が使用するのと同じ関数
プラグイン3 32-bits メールソフトウェアからデータを読み取る
プラグイン4 32-bits コードをブラウザにインジェクションし、フックを設定してデータを窃取する
プラグイン5 64-bits 64ビット版のプラグイン4
プラグイン6 32-bits メールソフト、ブラウザ、FTPクライアントにコードをインジェクションし、フックを設定してデータを窃取する
プラグイン7 64-bits 64ビット版のプラグイン6
プラグイン8 32-bit sexplorer.exeまたはC2サーバーが指定したプロセスにコードをインジェクションし、フックを設定してデータを窃取する
プラグイン9 64-bits 64ビット版のプラグイン8

・プラグイン1
 ターゲット
 ・InternetExplorer、Firefox、Chrome、Edge、Opera、Chromium、Amigo、QQBrowser
 ・Outlook、Thunderbird
 ・FileZilla、WinSCP

 このプラグインは、ループを使ってターゲットソフトウェアの関数を順番に実行します。

図16:情報を窃取する関数を実行するループ

 これらの関数は、ターゲットによって以下のタイプに分類されます。

InternetExplorer
 このプラグインは、vaultcli.dllの関数を利用して、Internet Explorerからログインクレデンシャルを取得します。資格情報マネージャーは、パスワードを保存するために使用されるWindowsシステムの機能です。vaultcli.dllは、認証情報ボールトを列挙してそこから情報を取得する関数を提供します。

Firefox、Thunderbird
 このプラグインは、Software\Mozillaの下のレジストリキーを列挙してPathToExe値が含まれるものを探すことで、FirefoxとThunderbirdのデフォルトの場所を取得します。プラグインは次に、デフォルトの場所にあるprofiles.iniを検索して解析することで、logins.jsoncookies.sqliteの場所を取得し、そこからログインクレデンシャルを抽出します。

Chrome、Opera、Chromium、Edge、Amigo、QQBrowser
 このプラグインは、インストールパスの下にあるWeb DataCookiesLogin Dataフォルダ内のLocal Stateファイルを検索し、ログインクレデンシャルと自動入力データを抽出します。以下の場所を検索して、ターゲットファイルの場所を探します。

Outlook
 関連する可能性のあるレジストリキーの下のレジストリキーを列挙し、以下の値を見つけます

FileZilla
 %APPDATA%%LOCALAPPDATA%、またはC:\ProgramDataの下のインストールフォルダ内のsitemanager.xmlrecentservers.xmlfilezilla.xmlを検索して、これらのファイル内のhostPortUserPassタグの内容を収集します。

WinSCP
 SoftwareMartin Prikrylの下のレジストリキーを列挙し、HostNameUserNamePasswordRemoteDirectoryPortNumberの値を探します。

・プラグイン2
 この64ビットのプラグインは、プラグイン1と同じ関数を使用しますが、FirefoxとThunderbirdからのみ情報を収集します。

・プラグイン3
 ターゲット
:Outlook、Thunderbird、The Bat! 
 このプラグインは、以下のキーワードを使用して、特定のパスにあるメールクライアントのデータファイルを検索します。

Email client keyword Path
Outlook .pst、.ost %APPDATA%\Microsoft\Outlook
%LOCALAPPDATA%\Microsoft\Outlook
%ALLUSERSPROFILE%\Microsoft\Outlook
C:\Users\{User name}\Documents
Thunderbird .mab、.msf、 inbox、sent、draft、template、archive %APPDATA%\Thunderbird
The Bat! .tbb、.tbn、.abn
%APPDATA%\The Bat!
%ALLUSERSPROFILE%\The Bat!
%APPDATA%\BatMail%ALLUSERSPROFILE%\BatMail

 データファイルが見つかると、プラグインは、そのファイルの構造を解析し、被害者にメールを送信した人やメールのコピーを受け取った人のメールアドレスを取得します。次に、メールアドレスがC2サーバーに送信されて、プロセスは終了します。

・プラグイン4
 ターゲット:Chrome、Opera、Edge、Internet Explorer、Firefox
 このプラグインのプロセスは、injectionとhookingという2つのパートに分けることができます。

 Injection
 このプラグインは最初に、fgclearcookiesがC2サーバーからのコンフィギュレーションに含まれているかどうかをチェックします。fgclearcookiesが見つかった場合、以下のプロセスに関連するプロセスを終了し、関連するCookieを削除することで、被害者に機密データを再入力させます。

「iexplore.exe、microsoftedge.exe、microsoftedgecp.exe、firefox.exe、chrome.exe、opera.exe、msedge.exe、plugin-container.exe(Firefoxのサブプロセス、Macromedia Flash Playerに関連するCookie」

 次に、現在実行中のプロセスを常に監視し、プラグインの他の部分をターゲットブラウザにインジェクションすることで、指定されたAPIをフックします。他のプラグインと同様、インジェクションされるコードには、シェルコード、復号アルゴリズム、暗号化されたデータが含まれています。相違点は、シェルコードにジャンプするコードがntdllatan関数に書き込まれ、プラグインがCreateRemoteThreadをコールすることで、ターゲットプロセスでatan関数を実行することです。

フッキング

 このプラグインは、インジェクションする場所によって異なるAPIをフックします。

プロセス DLL API
firefox.exe Kernel32.dll VirtualQuery
nspr4.dll or nss3.dll PR_GetDescType
nspr4.dll PR_Write
iexplore.exe
microsoftedgecp.exe
wininet.dll HttpSendRequestA
HttpSendRequestW
InternetWriteFile
msedge.exe
opera.exe
chrome.exe
msedge.dll、 chrome.dll、opera.dll、 opera_browser.dll 未知の関数

 フックを設定する前に、インジェクションされたプロセスの現在のスレッド以外のスレッドを一時停止します。次に、ターゲットAPIの先頭のコードを修正して、APIに渡されたデータをC2サーバーに送信するようにします。プラグインはGetProcAddressをコールすることで、ほとんどのターゲットAPIのアドレスを取得します。唯一の例外は、Chromiumベースのブラウザに関連するDLLファイル内の未知の関数の取得方法です。プラグインは、.rdataセクションの構造を解析し、特定のバイトパターンに一致する関数を探します。

図17:ターゲット関数を検索するコード

 フックがセットされると、プラグインは、現在のプロセスの他のスレッドを再開し、現在のスレッドを終了します。

・プラグイン5
 64ビット版のプラグイン4

・プラグイン6
 ターゲット
 ・Edge、InternetExplorer、Firefox、Chrome、Opera
 ・Outlook、Thunderbird、The Bat!、MailMaster、263EM、Foxmail、AliMail、MailChat
 ・FileZilla、SmartFTP、FlashFXP、CuteFTP
 ・WinSCP

 プラグイン6も同じ方法を使用して、フッグするコードをターゲットプロセスにインジェクションします。フックするAPI関数は、WSASendws2_32.dllsend関数です。これらの関数がコールされると、プラグインが、FTP、SMTP、IMTP、POP3のホスト名を収集します。

・プラグイン7
 64ビット版のプラグイン6

・プラグイン8
 ターゲット:explorer.exe、またはC2によって指定されたプロセス

 プラグイン4と同様、インジェクションとフックのパートがあります。C2サーバーからのコンフィギュレーションにkeylog_rules=が含まれている場合、インジェクションを開始します。このシェルコードは、explorer.exe、またはコンフィギュレーション内のkeylog_rules=に続く名前のプロセスが実行された場合にインジェクションされます。以下の関数にフックが設定されます。

DLL API ターゲット
user32.dll TranslateMessage キーボードの状態とユーザーがデータを入力するウィンドウの名前
GetClipboardData クリップボードの内容を取得する

・プラグイン9
 64ビット版のプラグイン8

結論

 SmokeLoaderは、さまざまなニーズに対応する、モジュール型のマルウェアです。今回の攻撃では、SmokeLoaderは、最終段階で使用する完成したファイルをダウンロードするのではなく、プラグインを使用して攻撃を実行します。このことは、SmokeLoaderの柔軟性を示すものであり、このような有名なマルウェアであってもアナリストが注意する必要があることを強調するものでもあります。FortiGuardは今後もこれらの攻撃キャンペーンの監視を継続し、必要に応じて適切な保護を提供します。

フォーティネットのソリューション

 この記事で説明したマルウェアは、FortiGuardアンチウイルスによって以下として検知され、ブロックされます。

JS/Kryptik.CTS!tr.dldr
VBS/TrojanDownloader.AAWM!tr.dldr
W32/Smokeloader.F!tr

 FortiGate、FortiMail、FortiClient、FortiEDRは、FortiGuardアンチウイルスサービスをサポートしています。FortiGuardアンチウイルスエンジンは、これらのソリューションの一部です。そのため、これらの製品を利用して最新の保護が可能にしているお客様は、このキャンペーンから保護されます。

 FortiGateとFortiMailの両方で動作するFortiGuard CDR(コンテンツ無害化)サービスにより、文書に埋め込まれた悪意あるマクロを無効化できます。

 また、フォーティネットが無償で提供するNSEトレーニングモジュール:NSE 1 – 情報セキュリティ意識向上を受講することをお勧めします。このモジュールを受講することで、エンドユーザーがフィッシングキャンペーンを特定して自らを保護する方法を習得できます。

 FortiGuard IPレピュテーション / アンチボットネットセキュリティサービスは、フォーティネット分散ネットワークからの不正送信元IPデータを集約することで、これらの攻撃をプロアクティブにブロックします。この分散ネットワークでは、脅威センサー、CERT、MITER、協力関係にある他社、その他のグローバルソースが連携し、悪意の送信元に関する最新の脅威インテリジェンスを提供します。

 このようなサイバーセキュリティの脅威の影響を受けていることが疑われる場合は、グローバルFortiGuardインシデントレスポンスチームにお問い合わせください。

IOC(Indicators of Compromise:侵害指標)

IP
198[.]23[.]188[.]147
77[.]232[.]41[.]29
91[.]183[.]104[.]24
185[.]228[.]234[.]237

フィッシングメール
3e523ed80dbb592b1ff8c3345c3cd231ddd5a06e1af4c7b7d1f7f81249d0c4a3
ad657479d9f6322daba65638523d65631ff83ba5a717261acb5a53fd48e52209
8dc06fdc2897d7c3438105ea0a39d2074774f80e051007fe7799b8195580ad2f
fbe226dd0130c3c0c4db9d125cd25eca3c8e310dae8127d15c8be18041d41cd6
392d201120936c1f0e77bdb4b490f2825c1e6f584f18055c742b36250f89566b
e29c269a4c3ee4bbd673bfe0d24ca7d131d9221607e26a60989e81d8ffc17095
00874ab2a91433dfbfdc9ee6ade6173f3280737fc81505504ace11273f640610
1a1c8cdac1c3cbae5f1140e850ee06b414259876dab97152669f7c0f93469b13
5dc92a6ed1ef2a5d9cf2a112532ad2c9fd70bff727e4cb60cd5d9c4966f2f77f
a334ba0d8ac0676d09e41aa273589ee27338c44a09109a4d5defa45f1d9bd82b
35e55053bed6b3c1027a3e7c140e67303e01e8fcbf42abac27b8e9df2a090ee3
858d26e697bc60b642e5d92922b625f58532fc06f028962d8add5fa497981f33
7f9909677c290b98541be176251eca34b9f3d36555669a2639130adb97ca6958
f4b16c3f8bff445fdcd9d7edb5883d20d7663c3744e137439fa961736d0a9471
fb6ef14ac4cebf87f937f15553575f0f62ac62df917b490f602025a0985addd1
9dea895b5b1c03caa2b838b8def4e082392851325794c3bd2eb5ca7372d8e09c
cfe7f6c1c0560bd56cd2df856d459b7fe7fd63b2f635c35151f61d4d04ce4162

配布
a4ec792538455fb56f0b89ae10ddd0b2504afba092ba5cfa2083cf61b5fac0ef
cb92d320fc9bc674e8d37ceeebf0363f8e96dd67ef4ef543b3348f96ef567e5f
eb8381b156aad734ef3a0328b4985ed1edeca1c8d79d66e094598f8c6992ac71
e3e7a3d0ba55b8dbbe3633b1dad0a3bbf4eada72dd8df3f7b1bc76a692862f23
ea3b07a2356a7bfb92144f621ba551677a138c31d684072d69a4d37c1a378bb3
7ab20d40431b990a9a44e96dc53519f0af72eaf56c4b20f8995f95a48039bf67
bdb897e6a8bfc21302ae1ac254b1b2e779684fe75b2b824cb24c80c775898940

マルウェア
f7544f07b4468e38e36607b5ac5b3835eac1487e7d16dd52ca882b3d021c19b6

■関連サイト