公開されたRDP:攻撃者にとって依然として有利な設定ミス
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
この記事では、公開されたリモートデスクトッププロトコル(RDP)サービスが引き続き攻撃者にとって一般的な初期アクセスベクターとして機能していることを説明しています。多くの組織は依然としてRDPポートをインターネットからアクセス可能な状態にしており、自動スキャンや機会を狙った侵入攻撃の容易なターゲットになっています。この投稿は、攻撃者がオープンRDPアクセスや公開されたRDWebポータルを悪用して環境に侵入し、その後、横方向への移動を通じてアクセスを拡大する実例を紹介します。
調査
説明されているケースには、インターネットに露出したRDPポートを持つ医療組織、RDWebポータルを通じた妥協を伴う事件、攻撃者が脆弱なSonicWall VPNデバイスを悪用した後にRDPを有効にするためにファイアウォールとレジストリ設定を変更した侵入が含まれています。これらのシナリオでは、攻撃者は単純なWindowsコマンド、リバーストンネルユーティリティ、および資格情報収集スクリプトに依存してアクセスを維持し、ネットワーク内でさらに深く移動しました。
緩和策
推奨される防御策は、不必要なRDPの露出を排除し、必要なRDPアクセスを適切に設定されたファイアウォールの背後に置き、疑わしい露出の後に資格情報をローテーションし、ファイアウォールおよびVPNログをSIEMに投入してより迅速に検出することに焦点を当てています。また、EDRカバレッジを展開し、RDPサービスを有効または再有効にするレジストリ変更を監視することも勧めています。
対応
疑わしいRDP関連の活動が検出された場合、対応者は問題のIPアドレスをブロックし、RDPサービスを無効にし、悪意のあるレジストリ変更を元に戻し、ファイアウォールルールが変更されていないことを確認し、影響を受けた資格情報をリセットする必要があります。繰り返しアクセスしようとする試みの監視と、すべての設定変更の検証も不可欠です。
攻撃フロー
シミュレーション実行
前提条件: テレメトリおよびベースラインのプリフライトチェックが合格している必要があります。
根拠: このセクションでは、検出ルールをトリガーするために設計された敵対者の技術(TTP)の正確な実行を詳細に説明します。 コマンドおよびナarr atorが識別されたTTPに直接的に反映され、検出ロジックによって期待される正確なテレメトリーを生成することを目的としています。
-
攻撃の説明およびコマンド:
-
偵察 (T1016.001): 敵対者は、ターゲットサブネットのポート3389が開いているホストを特定するために
Test-NetConnectionをループで実行します。 -
特権昇格/ファイアウォール操作 (T1021.001): ローカル管理者権限を取得した攻撃者は、
netsh.exeを使用して、RDPのために許可するインバウンドファイアウォールルールを追加し、サービスをインターネットに露出させました。 - 作成後の検証: 攻撃者はファイアウォールルールをリストして、新しいエントリが存在することを確認し、その後、RDPセッションを開始します(このテストの範囲外)。
-
偵察 (T1016.001): 敵対者は、ターゲットサブネットのポート3389が開いているホストを特定するために
-
回帰テストスクリプト:
#--------------------------------------------------------- # シミュレートされた敵対者の活動 – RDPがnetsh経由で公開されている場合 #--------------------------------------------------------- # 1. 開いているRDPポートの探索のためにローカル/24サブネットをスキャンします(無害の再評定) $subnet = "10.0.0." 1..254 | ForEach-Object { $ip = "$subnet$_" $result = Test-NetConnection -ComputerName $ip -Port 3389 -WarningAction SilentlyContinue if ($result.TcpTestSucceeded) { Write-Host "[+] RDPが $ip に開いています" } } # 2. 任意のアドレスからのインバウンドRDPを許可するファイアウォールルールを追加 $ruleName = "TempAllowRDP_$(Get-Random -Maximum 10000)" $netshCmd = "advfirewall firewall add rule name=`"$ruleName`" dir=in action=allow protocol=TCP localport=3389" Write-Host "`n[+] netshでファイアウォールルールを作成しています..." Start-Process -FilePath "$env:SystemRootSystem32netsh.exe" -ArgumentList $netshCmd -Wait -NoNewWindow # 3. ルールが存在するか確認(オプション、テレメトリーの確認に役立つ) netsh advfirewall firewall show rule name=$ruleName # シミュレートされた攻撃の終わり -
クリーンアップコマンド:
#--------------------------------------------------------- # テスト中に作成された一時的なファイアウォールルールを削除 #--------------------------------------------------------- $rulePrefix = "TempAllowRDP_" $rules = netsh advfirewall firewall show rule name=all | Select-String -Pattern $rulePrefix | ForEach-Object { ($_ -split 's+')[0] } foreach ($r in $rules) { Write-Host "[*] ルール $r を削除しています" netsh advfirewall firewall delete rule name=$r }