2025年4月4日(金)

TMPN(Skuld)Stealer: オープンソースのダークサイド

概要

  •  TMPN Stealer は、オープンソースプロジェクトの「Skuld stealer」がベースです
  • Discord の Webhook を使用してコミュニケーションを行います
  • JS ペイロードを Discord にインジェクトします
  • ブラウザと暗号通貨ウォレットのデータを盗みます
  • ローカルファイルとシステム情報を盗みます

はじめに

Skuld(別名: TMPN Stealer)は、2023年5月に登場した情報窃盗マルウェアで、Golang(Go)で記述されています。「Deathined」 と呼ばれているその開発者は、マルウェア開発の世界では新顔で、オープンソースプロジェクトを通じて、Skuld を展開させています。このマルウェアは、悪意のあるリンクや侵害された Web サイトなどの、さまざまな手段で配信されており、システム全体への感染を目的としています。

技術情報

概要

解析にかけられたサンプルは Go で記述されており、偽のコンパイルタイムスタンプが押されています。ファイルサイズは 14.4 MB で、Go言語で記述されたプログラムとしては普通のサイズです。

Acronis

GitHub には TMPN Stealer のソースコードと思えるものが含まれていますが、現在、https://github.com/DextenXD/TMPN-Stealer は利用できなくなっています。

Acronis

このページが利用できない一方で、私たちは分析中に、別のプロジェクトである Skuld Stealer に導くリンクがコード内にあることを発見しました。これは、Discord を対象にしたスティーラーの存在を示す、オープンソースの IT プロジェクトです。その記述ですらTMPN と似ています。

Acronis

構成

実行開始時に、Skuld は、複数の文字列を含む構成をメモリにロードします。最初の文字列は「webhook」で、2つ目の文字列には以下のような URL が含まれています。

 hxxps://discord.com/api/webhooks/1272963856322527274/PGGfe9V7To17wrSy0T7qE8EpNjFXfms2KY4A421gXmXwMcrPdaeG0Z3DB2T9eYE

これは、Discord のウェブフックに関するもので、これによって、Discord のチャネルにメッセージを手軽に投稿できるようになります。ウェブフックにはボットユーザーや認証を使う必要がないため、このメカニズムは統制的な制御を行うのにとても役立ちます。

メモリにロードされている、以下の文字列が BTC ウォレットを対象としています。

Acronis

実際、そのソースコードは複数の暗号通貨ウォレットに対応しています。

Acronis

準備

メインのペイロードを実行する前に、Skuld Stealer は、以下のような準備を行います。

Acronis

Skuld Stealer は最初に、特定のミューテックス名をチェックすることで、自身がすでに実行されているのかどうかを確認します。

Acronis

次に、ユーザーアカウント制御(UAC)バイパス機能を呼び出します。この段階で、プロセスが昇格されているかどうか、あるいは昇格の可能性があるのかどうかを確認し、最終的に昇格機能を呼び出します。この機能によって、以下のようなユーティリティの fodhelper.exe レジストリキーへのマルウェアの経路が設定されます。

HKCU\\Software\\Classes\\ms-settings\\shell\\open\\command\\DelegateExecute

これにより、fodhelper.exe が UAC ウィンドウを表示しますが、レジストリキーが変更されているため、通知を受け入れると、レジストリキーは昇格権限を使ってサンプルを実行します。古いプロセスは次に Fodhelper レジストリキーを消去し、終了させます。

ユーザーから見えなくするために、Skuld Stealer は attrib +h +s コマンドを使用し、「隠し」属性と「システム」属性をサンプルに付与します。さらに、「GetConsoleWindow」関数を使って、直近のウィンドウ記述子を取得し、「ShowWindow」関数によってウィンドウの表示状態を「Hidden」に設定します。

 さらに、被害者のシステムに永続的に存在するために、「Software\Microsoft\Windows\CurrentVersion\Run」にレジストリキーを追加します。キーの名称は「Realtek HD Audio Universal Service」となり、以下の値を持ちます。「%APPDATA%\Microsoft\Protect\SecurityHealthSystray.exe」。このあと、このパスにファイルが存在しているかどうかをチェックします。存在していない場合は、自分自身をそこにコピーします。

次に、Skuld Stealer は、サンプルが仮想マシン上で実行されているかどうかを確認します。そのために、ホスト名、ユーザー名、MAC アドレス、IP アドレス、および HWID をチェックし、自分自身に保存されたリストと比較します。一致する文字列があれば、実行が終了します。次に、プロセスにデバッガーが添付されていないかどうかを確認します。

最後に、ウイルス対策ソフトウェアを回避しようとします。この時点で、Microsoft Windows Defender のスキャンから自分自身のパスを除外し、以下のような PowerShell コマンドを使用して Windows Defender を無効にします。

powershell""Set-MpPreference", "-DisableIntrusionPreventionSystem""$true", "-DisableIOAVProtection""$true", "-DisableRealtimeMonitoring""$true""-DisableScriptScanning""$true""-EnableControlledFolderAccess""Disabled""-EnableNetworkProtection""AuditMode""-Force""-MAPSReporting""Disabled""-SubmitSamplesConsent""NeverSend"

powershell""Set-MpPreference""-SubmitSamplesConsent""2"

"%s\\Windows Defender\\MpCmdRun.exe"os.Getenv("ProgramFiles"))"-RemoveDefinitions""-All

この機能の最後のステップは、以下のサイトへの接続をブロックすることです。

    virustotal.com」、「avast.com」、   totalav.com」、「scanguard.com」、「totaladblock.com」、「pcprotect.com」、「mcafee.com」、「bitdefender.com」、「us.norton.com」、「avg.com」、「malwarebytes.com」、「pandasecurity.com」、「avira.com」、「norton.com」、「eset.com」、「zillya.com」、「kaspersky.com」、「usa.kaspersky.com」、「sophos.com」、「home.sophos.com」、「adaware.com」、「bullguard.com」、「clamav.net」、「drweb.com」、「emsisoft.com」、「f-secure.com」、「zonealarm.com」、「trendmicro.com」、「ccleaner.com

Discord インジェクション

インジェクション段階になると、Skuld Stealer は最初に 2 つのバイパス機能を呼び出します。最初の機能は、Discord クライアントの改良版である、BetterDiscord をバイパスするために使用されます。異なるプラグイン、エモートおよび開発者向けツールに加え、これにはセキュリティ強化機能も含まれています。バイパスを実行するために、Skuld Stealer は、「AppData\ローミング\BetterDiscord\data\betterdiscord.asar」ファイルを検索して開き、既存のすべての「api/webhooks」文字列を「ByHackirby」に置き換えます。

Acronis

その後には、Discord Token Protector をバイパスしようとします。最初に、Skuld Stealer は、このモジュールがシステムに存在しているのかどうかを確認します。存在している場合、「AppData\Roaming\DiscordTokenProtector\config.json」ファイルを開き、以下の値を変更します。

 

"auto_start" = false

"auto_start_discord" = false

"integrity" = false

"integrity_allowbetterdiscord" = false

"integrity_checkexecutable" = false

"integrity_checkhash" = false

"integrity_checkmodule" = false

"integrity_checkscripts" = false

"integrity_checkresource" = false

"integrity_redownloadhashes" = false

"iterations_iv" = 364

"iterations_key" = 457

"version" = 69420

このあと、Skuld Stealer はインジェクション関数を呼び出します。最初に、PC 上に Discord があるかどうかを確認し、多くのブロックデータをロードして、それからデータを抽出します。このとき、抽出したすべてのデータを結び合わせ、検索フィルターとして「filepath.Glob」関数に渡します。

Acronis

次に、Skuld Github から「injection.js」ファイルをダウンロードします。ファイル名は「coreinedex.js」に変更され、以前からあった Discord のパスに書き込まれます。このスクリプトにより、フックが設定され、ログイン、登録と二要素認証の要求、PayPal のクレジット、および Eメール/パスワード変更などのデータが遮断されます。情報が取得されると、その結果が JSON 形式でサーバーに送信されます。

Acronis

暗号通貨ウォレットへのインジェクション

このインジェクションは、Exodus と Atomic という、2 つの暗号通貨ウォレットをターゲットにしています。この手法の特徴は、暗号通貨ウォレットで使用されている、「.asar」拡張子が付いているファイルをダウンロードして保存することであり、このファイルには攻撃者のデータが含まれています。

Acronis

システム情報の検出

両方のインジェクションが完了すると、Skuld Stealer はシステム情報を取得しようとします。このときに、CPU、ディスク、GPU、ネットワーク、OS、Windows のライセンスキー、RAMなどの情報を取得するために、多数の関数が呼び出されます。

Acronis

これらのデータはすべて JSON 形式で保存され、サーバーに送信されます。生データだけでなく、Skuld Stealer は画像へのリンクも「avatar_url」フィールドに追加します。このアバターは、おそらく攻撃者のDiscord ボットで使用されます。

Acronis

ブラウザ

ブラウザの機能は、エンジンが Chromium ベースであるものと、 Gecko ベースであるものの、2 種類のブラウザをターゲットにしています。どちらの機能でも、保存されたブラウザ名とパスが異なっています。ログイン情報、クッキー、クレジットカード、ダウンロードおよび履歴などのデータを抽出する機能は、すべてのブラウザで共通しています。

Acronis

Discord トークン

Discord トークンを取得するために、Skuld Stealer は再びブラウザをチェックし、データベースで特定の文字列を検索します。その後、Discord API とインタラクションを行う機能に結果が送られ、見つかったトークンが有効かどうかが検証されます。すべての結果は JSON 形式で保存され、サーバーに送信されます。

Acronis

Discord 二要素認証コード

Discord には、ユーザーがデバイスに二要素認証デバイスでアクセスできない場合に利用される、メカニズムがあります。ファイル「discord_backup_codes.txt」には、そのような状況で使うことのできるコードが含まれています。

Acronis

サンプルが、以下のユーザーフォルダから、このファイルを検索します。 デスクトップ、ダウンロード、文書、動画、画像、音楽、OneDrive

共通ファイル

この機能は、以下のフォルダ内で名前と拡張子に特定のキーワードを含んでいるファイルを検索します。デスクトップ、ダウンロード、文書、ビデオ、画像、音楽、OneDriveファイル名にキーワードと拡張子の両方が含まれている場合、そのファイルが新しいフォルダにコピーされます。

Acronis

このフォルダは、16 のランダムな記号を含むパスワードを付けてアーカイブされます。このアーカイブは、アーカイブのサーバー URL、パスワードおよびアーカイブされたファイルの番号を含む JSON データととも、サーバーにアップロードされます。この段階で、「アップロード」機能で提供されたサーバーリンクが、ソースコード「https://api.gofile.io/getServer 」のリンクと一致していることがわかります。このリンクは無効です。つまり、このサンプルはデータを収集しますが、攻撃者には送信しません。

暗号通貨ウォレット

異なった 2 つ機能が、この目的のために使われます。1 つめの機能は、ローカルシステムの「%APPDATA%\\Roaming」フォルダでの暗号通貨ウォレットファイルの検索です。検出されたすべてのファイルがアーカイブで ZIP 圧縮されて、サーバーに送られます。2 つめの機能は、暗号通貨ウォレットのブラウザ拡張機能をチェックし、そのプロファイルを盗むためのものです。

Acronis

ゲームセッションの盗難

ゲームデータを盗むために、Skuld Stealer は以下の 6 つの名前を含むリストをロードします。Epic Games」、「Minecraft」、「Riot Games」、「Uplay」、「NationsGloryおよびSteam。それぞれのフィールドには、検索対象となっているファイルのパスとファイル名を含む、追加の値が含まれています。Skuld Stealer は、このリストに表示されている、すべてのファイルを一時フォルダにコピーし、それらを ZIP アーカイブとしてサーバーに移動させます。

Acronis

クリッパー

最後に、クリッパー機能について説明します。Skuld Stealer は、複数の regex 値を使用して、クリップボードデータのフィルタリングを行います。この regex は、異なる暗号通貨ウォレットのアドレスをターゲットにしており、マッチすると、データを自身の暗号通貨ウォレットアドレスに置き換えます。構成で見つけられる攻撃者アドレスは、BTC アドレスだけとなります。

Acronis

結論

オープンソースプロジェクトの Skuld からコンパイルされた、TMPN Stealer は、BTCウォレットアドレスと Discord API リンクを構成に含んでいます。ファイルをアップロードするためのサーバーなどの、ソースコードに追加されている情報はありません。つまり、このサンプルは主に Discord をターゲットにしており、Eメール、パスワード、トークンなどの情報を取得するために JS ペイロードをインジェクトしています。

Discord はよく狙われるターゲットとなっています。ゲーマーに最も人気のあるコミュニケーションプラットフォームであるだけでなく、暗号通貨コミュニティでも人気があるからです。Skuld Stealer は、セキュリティ強化のための Discord プラグインをバイパスすることさえできます。また、資格情報を含んでいる可能性のあるブラウザデータやユーザーファイルを盗み、これらを攻撃者にアップロードすることもできます。

Acronis による検出

Acronis
Acronis

IoC

ファイル

ファイル名 
SHA256
loader.exe
5a7e38a45533e0477c3868c49df16d307a3da80b97a27ac4261619ff31a219f8

ネットワークインジケータ

URL
https://raw.githubusercontent.com/hackirby/discord-injection/main/injection.js
https://discord.com/api/webhooks/1272963856322527274/PGGfe9V7To17wrSy0T7qE8EpNjFXfms2KY4A421gXmXwMcrPdaeG0Z3DB2T9eYE
https://i.redd.it/68p07sk4976z.jpg
https://api.gofile.io/getServer