はじめに
この記事では、私たちが特定した主要な Windows マルウェア スティーラー ファミリの分析について説明し、その操作方法、最近の更新、および構成を明らかにします。各家族の手口を理解することで、その影響の大きさをより深く理解し、それに応じて防御を強化することができます。さらに、当社独自のテレメトリを調査して、これらの蔓延しているマルウェア スティーラー ファミリに関連する現在のボリュームに関する洞察を提供します。
こうした隠れた脅威を軽減するには、多層防御の原則に沿った多面的なアプローチが必要です。また、組織が積極的に防御できるようにする ES|QL ハンティング クエリや Yara ルールの使用など、検出のためのさまざまな手法についても説明します。
テレメトリの概要
この記事で紹介されているテレメトリ データには、内部ソースと外部ソースの両方から収集された分析情報が含まれており、脅威の活動を包括的に理解することができます。
注目すべきは、 2022 から 2023 年の間に、REDLINE が最も蔓延しているマルウェアとして出現し、AGENT TESLA、VIDAR、STEALC がそれに続きました。この期間に STEALC が初めて出現し、脅威の状況が進化していることを示唆していることは注目に値します。
その後の 2023 から 2024 年にかけて、AGENT TESLA のアクティビティが著しく増加し、続いて REDLINE、STEALC、VIDAR のアクティビティが増加しました。これは、マルウェアの蔓延と配布の傾向の変化を反映しています。
Elasticテレメトリデータ(2024年5月 2023 ~5月)
一般的なマルウェアの蔓延状況には変動があるにもかかわらず、AGENT TESLA は一貫して顕著な脅威としての地位を維持しています。この永続的な優位性は、比較的低い価格と、特に限られたリソースや専門知識で活動する幅広い脅威アクターにとって魅力的な機能など、いくつかの要因に起因しています。
注目すべき点は、METASTEALER が REDLINE に基づいているため、特定の METASTEALER サンプルが誤って REDLINE の分類に該当する可能性があることです。
トップスティーラーの概要
レッドライン(レッドライン・スティーラー)
REDLINE は2020 年に脅威の世界にデビューし、最初の配布方法として電子メールを活用しました。MaaS (Malware-as-a-Service) モデルで動作し、幅広い脅威アクターがアクセス可能となっています。手頃な価格で、地下フォーラムで入手できることから、サイバー犯罪者の間で人気が高まっています。
REDLINE の最新の活動には、電子メールによるフィッシング、一見正当なアプリケーションをホストする悪意のある Web サイト、ソーシャル エンジニアリング戦術など、複数の感染ベクトルが関係しています。当社の研究者は、 vx-underground によって報告された最近のサンプルを分析し、フリーランス プラットフォーム Fiverr のエンジニアをターゲットにしたキャンペーンの存在を示唆しました。この戦術は重大なリスクを伴い、無防備なフリーランサーを通じて企業のセキュリティが侵害される可能性があります。
REDLINE は .NET フレームワーク上に構築されており、移植性と実装の容易さを実現します。重要なシステム情報を収集し、機密データを抽出するためのさまざまな機能があります。
- システム情報取得:
- ユーザー名、言語、タイムゾーンなどの重要なシステム詳細を収集します
- プロセッサやグラフィックカードの情報を含むハードウェアの詳細を取得します
- 実行中のプロセスを監視し、インストールされているブラウザを識別します
- データ抽出:
- ブラウザのデータリポジトリをターゲットにし、保存されたパスワード、クレジットカードの詳細、Cookie、自動入力エントリを抽出します。
- 不正アクセスのためにVPNログイン資格情報を入手する
- DiscordやTelegramなどのプラットフォームからユーザーの資格情報とチャット履歴を記録します
- 暗号通貨ウォレットを識別して盗み、貴重なデジタル資産を危険にさらす可能性があります。
REDLINE は、文字列難読化技術を使用して、実行時に文字の配列から文字列を動的に構築することにより、yara などの文字列に基づく分析を妨げ、検出を回避します。
その構成は静的クラス内に構造化されており、4 つのパブリック フィールド ( IP 、 ID 、 Message 、および XOR キー) が含まれています。IPフィールドとIDフィールドの内容は、XOR 暗号化を使用して暗号化され、以下に示すように base64 でエンコードされます。
METASTEALER
METASTEALER は2022 年に登場し、当初は REDLINE の派生版として宣伝され、追加機能が備わっていました。当社のマルウェア アナリストは最近、Roblox を装ったキャンペーン内で METASTEALER のサンプルに遭遇しました。このキャンペーンは以前、CERT によって Orange Polska として報告されていました。
METASTEALER は主に .NET フレームワークを使用して開発されており、Windows 環境との互換性が確保され、実装が容易になっています。特定のバージョンでは、マルウェアの制御フローを難読化し、検出や分析を困難にするなどの難読化手法が採用されています。
この METASTEALER サンプルは、 AGILE.NET難読化ツール、具体的にはプロキシ呼び出し難読化メソッドを利用します。この手法は、追加の抽象化レイヤーを導入することで、元の関数の直接呼び出しを隠すために使用されます。AGILE.NET は関数を直接呼び出すのではなく、元の関数を呼び出すプロキシ メソッドを生成します。この複雑さが増すと、コードアナリストがアクションのシーケンスを識別することがより困難になります。
上記のコードを見ると、メソッドDelegate11.smethod_0が初期化されていないDelegate11.delegate11_0を呼び出していることがわかります。アナリストはどのメソッドが実際に実行されるかを判断できないため、静的分析中に曖昧さが生じます。
実行時に、マルウェアはデリゲートを初期化します。このメソッドは、 Delegate11クラスのコンストラクタでメソッドClass4.smethod_13を呼び出すことによって、トークン値の辞書を構築します。各キーはデリゲート (例: 0x040002DE ) のトークン値を表し、対応する値は実行される元のメソッドのトークンを表します。この辞書はバイナリに格納されたバイトのシーケンスから構築され、実行時にメソッド呼び出しを動的に解決できるようになります。
これに続いて、デリゲートの動的メソッドを生成し、 smethod_0関数を使用してそれを実行します。
C2 IP アドレスやポートなど、構成内のすべての重要な文字列は暗号化されます。マルウェアには、実行の開始時に呼び出されてすべての文字列を一度に復号化するStringsというクラスがあります。このプロセスには、Base64 エンコード、XOR 復号化、および AES CBC 復号化の組み合わせが含まれます。
最初に、 AES KEYやAES IVなどの AES パラメータが復号化されます。提供された例では、 AES KEYとAES IVが最初に base64 デコードされます。その後、事前に決定された XOR キーを使用して XOR 復号化が実行され、その後 2 つの連続した base64 デコード手順が実行されます。
Strings クラスは、逆順にされた後に AES CBC を使用して復号化されたバイト配列を保持し、その後Strings.Arrayリストに追加されます。その後、マルウェアが特定の文字列を必要とする場合、このリストにインデックスを付けてその文字列にアクセスします。たとえばString.get(6) 。
スティールク
2 月に Sekoia によって発見されたスティーラー分野の最近の主要プレーヤーは、 2023 STEALCファミリーです。このマルウェアは、1 月に地下フォーラムで初めて宣伝され 2023 、開発者は VIDAR、RACOON、REDLINE などの既存のファミリに大きく依存していることに言及しました。この期間以降、私たちのチームは、サイバー犯罪者による人気と採用の兆候を示す新しい STEALC サンプルを毎日観察しています。
STEALC は C で実装されており、動的インポート、文字列の難読化、データ窃盗機能を有効にする前のさまざまな分析回避チェックなどの機能が含まれています。バイナリとそのコア機能を保護すべく、STEALC は各サンプルに埋め込まれたハードコードされたキーを使用して、Base64 + RC4 の組み合わせで文字列を暗号化します。
STEALC 内には、分析対策/サンドボックス対策チェックに使用される個別の関数が 6 個あります。プロセッサの数に基づいて、アクティブなプロセッサ数が 2 未満の場合、STEALC は自動的に終了します。
STEALC は、あまり知られていない Windows API ( VirtualAllocExNuma ) を使用してサンドボックス/エミュレーション テストを実行し、大量のメモリを割り当てます。API が実装されていない場合、プロセスは終了します。
マルウェアは、 GlobalMemoryStatusExから値を読み取って、別のサンドボックス チェックを実行します。物理メモリの収集された属性に対してバイトシフトを行った後、値が0x457未満であればサンプルは終了します。
言語識別子が次のいずれかの LangID と一致する場合、マルウェアは実行を停止します。
- ロシア語(
0x419) - ウクライナ語(
0x422) - ベラルーシ語(
0x423) - カザフスタン (
0x43f) - Uzbek_Latin__ウズベキスタン (
0x443)
STEALC には Microsoft Defender エミュレーション チェックも組み込まれており、 LOBSHOTなどで見られる多くのスティーラーでこれが確認されています。次のハードコードされた値が、Microsoft Defender のエミュレーション レイヤー内でユーザー名JohnDoeとコンピューター名HAL9THと一致する場合、STEALC は終了します。
STEALC に付属する、より効果的な分析防止チェックの 1 つは有効期限です。この一意の値はマルウェアの設定に配置され、ビルダーによって設定された特定の日付以降に Stealer が実行されないようにします。これにより、マルウェアはキャンペーンのターンアラウンドを短くし、サンドボックス環境での実行を制限することで、目立たないようにすることができます。
STEALC - 実行フロー
最初の実行後、STEALC はマシンの初期ハードウェア ID を送信し、C2 サーバーから構成を受信します。
f960cc969e79d7b100652712b439978f789705156b5a554db3acca13cb298050efa268fb|done|tested.file|1|1|1|1|1|1|1|1|
このリクエストの後、対象となるブラウザと対象となるブラウザ拡張機能の更新されたリストを受信するために複数のリクエストが送信されます。以下はブラウザ設定の例です。これには機密データが保存されている対象のディレクトリ パスが含まれています。
Google Chrome|\Google\Chrome\User Data|chrome|chrome.exe|Google Chrome Canary|\Google\Chrome SxS\User Data|chrome|chrome.exe|Chromium|\Chromium\User Data|chrome|chrome.exe|Amigo|\Amigo\User Data|chrome|0|Torch|\Torch\User Data|chrome|0|Vivaldi|\Vivaldi\User Data|chrome|vivaldi.exe|Comodo Dragon|\Comodo\Dragon\User Data|chrome|0|EpicPrivacyBrowser|\Epic Privacy Browser\User Data|chrome|0|CocCoc|\CocCoc\Browser\User Data|chrome|0|Brave|\BraveSoftware\Brave-Browser\User Data|chrome|brave.exe|Cent Browser|\CentBrowser\User Data|chrome|0|7Star|\7Star\7Star\User Data|chrome|0|Chedot Browser|\Chedot\User Data|chrome|0|Microsoft Edge|\Microsoft\Edge\User Data|chrome|msedge.exe|360 Browser|\360Browser\Browser\User Data|chrome|0|QQBrowser|\Tencent\QQBrowser\User Data|chrome|0|CryptoTab|\CryptoTab Browser\User Data|chrome|browser.exe|Opera Stable|\Opera Software|opera|opera.exe|Opera GX Stable|\Opera Software|opera|opera.exe|Mozilla Firefox|\Mozilla\Firefox\Profiles|firefox|0|Pale Moon|\Moonchild Productions\Pale Moon\Profiles|firefox|0|Opera Crypto Stable|\Opera Software|opera|opera.exe|Thunderbird|\Thunderbird\Profiles|firefox|0|
この時点で、STEALC は被害者に関する幅広い情報を収集します。この情報はフォーマットされ、Base64 でエンコードされ、フォーム データ フィールドを使用して POST リクエストを介して C2 サーバーに送信されます。
- ハードウェアID
- Windows OS製品情報
- プロセッサ/RAM情報
- ユーザー名 / コンピュータ名
- 被害者のローカルシステム時間 / タイムゾーン / ロケール
- キーボードレイアウト
- バッテリーチェック(ラップトップかどうかを判断するために使用)
- デスクトップ解像度、ディスプレイ情報
- インストールされたプログラム、実行中のプロセス
窃取コンポーネントの場合、STEALC は受信した構成を活用して、次のようなさまざまな貴重な情報を収集します。
- Browser cookies
- ログインデータ
- ウェブデータ
- 履歴
- 暗号通貨ウォレット
STEALC は、次のようなさまざまな構成オプションも提供しています。
- テレグラムデータ
- 不和
- トックス
- ピジン語
- スチーム
- Outlookメール
| RedLineStealer | メタスティーラー | スティールク | |
|---|---|---|---|
| 野生で初めて目撃された | 2020 | 2022 | 2023 |
| ソース言語 | C# | C# | C |
| 平均サイズ(未梱包) | 253KB | 278 KB | 107 KB |
| 文字列の難読化?アルゴ? | あり | あり | はい(カスタムRC4 + base64) |
検知
Elastic Security を使用して、以下に挙げる脅威の検出機能を最大限に活用するには、 Elastic DefendとWindows を統合することが不可欠です。
- 署名されていないバイナリによるWebサービスへの接続
- 署名付きバイナリプロキシによるWebServiceへの接続
- マウントされた仮想ディスクからの疑わしいDNSクエリ
- Webブラウザの認証情報ストアへの不審なアクセス
- 署名されていないプロセスによるWebブラウザーの資格情報アクセス
- 不審なメモリーからのブラウザー認証情報へのアクセス
- Webブラウザーファイルへのアクセス試行の失敗
- 通常とは異なるプロセスによるWebブラウザの資格情報アクセス
ES|QL queries
窃盗犯の活動を検出するために、次のハントおよび検出クエリのリストを使用できます。
-
Telegram または Discord ドメインに DNS 要求を行う、信頼できない、または署名されていない実行可能ファイルを識別します。これは、コマンド アンド コントロール通信の試行を示している可能性があります。
from logs-endpoint* | where (process.code_signature.trusted == false or process.code_signature.exists == false) | where dns.question.name in ("api.telegram.com", "cdn.discordapp.com", "discordapp.com", "discord.com","discord.gg","cdn.discordapp.com") | stats executable_count = count(*) by process.executable, process.name, dns.question.name | sort executable_count desc -
Windows システムに保存されている暗号通貨ウォレットのファイルと構成を標的とした疑わしいアクティビティを検出します。
from logs-endpoint.events.file-* | where @timestamp > now() - 14 days | where host.os.type == "windows" and event.category == "file" and event.action == "open" and ( file.path rlike """C:\\Users\\.+\\AppData\\Roaming\\.+\\(Bitcoin|Ethereum|Electrum|Zcash|Monero|Wallet|Litecoin|Dogecoin|Coinbase|Exodus|Jaxx|MyEtherWallet|MetaMask)\\.*""" or file.path rlike """C:\\ProgramData\\.+\\(Bitcoin|Ethereum|Electrum|Zcash|Monero|Wallet|Litecoin|Dogecoin|Coinbase|Exodus|Jaxx|MyEtherWallet|MetaMask)\\.*""" ) | keep process.executable, process.name, host.id, file.path, file.name | stats number_hosts = count_distinct(host.id), unique_files = count_distinct(file.name) by process.executable | where number_hosts == 1 and unique_files >= 3 | sort number_hosts desc -
情報窃盗マルウェアの活動を示す可能性のある、Cookie、ログイン データ、閲覧履歴などの機密性の高いブラウザー データへのアクセスを監視します。
from logs-endpoint.events.file-*, logs-windows.sysmon_operational-default-* | where @timestamp > now() - 14 days | where host.os.type == "windows" and event.category == "file" and event.action in ("open", "modification") and ( file.path rlike "C:\\\\Users\\\\.+\\\\AppData\\\\Local\\\\(Google\\\\Chrome\\\\User Data\\\\.*|Google\\\\Chrome SxS\\\\User Data\\\\.*|Chromium\\\\User Data\\\\.*|Amigo\\\\User Data\\\\.*|Torch\\\\User Data\\\\.*|Vivaldi\\\\User Data\\\\.*|Comodo\\\\Dragon\\\\User Data\\\\.*|Epic Privacy Browser\\\\User Data\\\\.*|CocCoc\\\\Browser\\\\User Data\\\\.*|BraveSoftware\\\\Brave-Browser\\\\User Data\\\\.*|CentBrowser\\\\User Data\\\\.*|7Star\\\\7Star\\\\User Data\\\\.*|Chedot\\\\User Data\\\\.*|Microsoft\\\\Edge\\\\User Data\\\\.*|360Browser\\\\Browser\\\\User Data\\\\.*|Tencent\\\\QQBrowser\\\\User Data\\\\.*|CryptoTab Browser\\\\User Data\\\\.*|Opera Software\\\\Opera Stable\\\\.*|Opera Software\\\\Opera GX Stable\\\\.*)\\\\(Default|Profile \\\\d+)\\\\(Cookies|Login Data|Web Data|History|Bookmarks|Preferences|Visited Links|Network Action Predictor|Top Sites|Favicons|Shortcuts)" or file.path rlike "C:\\\\Users\\\\.+\\\\AppData\\\\Roaming\\\\Mozilla\\\\Firefox\\\\Profiles\\\\.*\\\\(cookies.sqlite|logins.json|places.sqlite|key4.db|cert9.db)" or file.path rlike "C:\\\\Users\\\\.+\\\\AppData\\\\Roaming\\\\Moonchild Productions\\\\Pale Moon\\\\Profiles\\\\.*\\\\(cookies.sqlite|logins.json|places.sqlite|key3.db|cert8.db)" or file.path rlike "C:\\\\Users\\\\.+\\\\AppData\\\\Roaming\\\\Thunderbird\\\\Profiles\\\\.*\\\\(cookies.sqlite|logins.json|key4.db|cert9.db)" ) | keep process.executable, process.name, event.action, host.id, host.name, file.path, file.name | eval process_path = replace(process.executable, "([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}|ns[a-z][A-Z0-9]{3,4}\\.tmp|DX[A-Z0-9]{3,4}\\.tmp|7z[A-Z0-9]{3,5}\\.tmp|[0-9\\.\\-_]{3,})", "") | eval process_path = replace(process_path, "[cC]:\\\\[uU][sS][eE][rR][sS]\\\\[a-zA-Z0-9\\.\\-_\\$~ ]+\\\\", "C:\\\\users\\\\user\\\\") | eval normalized_file_path = replace(file.path, "[cC]:\\\\[uU][sS][eE][rR][sS]\\\\[a-zA-Z0-9\\.\\-_\\$~ ]+\\\\", "C:\\\\users\\\\user\\\\") | stats number_hosts = count_distinct(host.id) by process.executable, process.name, event.action, normalized_file_path, file.name, host.name | where number_hosts == 1 | sort number_hosts desc
YARAルール
- Windows トロイの木馬 MetaStealer
- Windows トロイの木馬の盗難
- Windows トロイの木馬 RedLineStealer
- Windows トロイの木馬エージェントTesla
まとめ
結論として、これらのマルウェアの脅威は企業と個人の両方に重大なリスクをもたらすことを認識することが重要です。手頃な価格であるため、高度なサイバー犯罪者だけでなく、小規模な犯罪者やスクリプトキディにも簡単に入手できます。このアクセシビリティは、技術的な専門知識が限られている個人でも悪意のあるソフトウェアを展開できる、サイバー犯罪の民主化を強調しています。
Elastic の包括的なセキュリティ機能スイートは、組織や個人にマルウェア攻撃を効果的に防御するために必要なツールを提供します。高度な脅威検出からリアルタイムの監視および対応機能まで。
