はじめに
地域団体が職員用ポータルを廃止しました。インシデント演習で、古いパスワードのエクスポートを模したデータが見つかりましたが、現在の職員用アーカイブは稼働中です。古いレコードと人物の対応を保ったまま、与えられた候補で実際に何を復元できるか調べます。
稼働中のアーカイブを利用し、Kali Linux で John the Ripper を実行して、非公開の復元一覧を作成します。ユーザーはすべて架空です。監査側と対象側は隔離されたコンテナーで、1 つの VM のカーネルを共有します。対象範囲は提供されたファイルとサービスだけです。インストールやプログラミングは不要です。
前提はターミナルでのコマンド入力とパスの識別です。このラボで使用するオプションとファイル操作は説明します。読解や通常の入力ミスへの対処を含め、所要時間は約 45 分という作者の見積もりです。次のガイド付きラボは独立した環境から始め、現在の影響を調べます。
アーカイブを利用して結果を保護する
このステップでは、エクスポートを調べる前に正常なアクセスを確認します。Auditor を開いてください。ターミナルは Kali 監査コンテナーの auditor ユーザーで /home/auditor/project に入ります。アーカイブは別のコンテナーで稼働しています。
SSH は暗号化されたリモートログインのプロトコルです。このアーカイブはパスワードを受け付け、認証されたアカウント名だけを返します。汎用シェルは提供しません。まず機密性のないデモアカウントを使います。-p はサービスのポートを選びます。2 つの -o オプションは準備済みのサーバー鍵ファイルを選び、鍵の一致を要求します。ホスト鍵はサーバーを識別し、パスワードはあなたを認証します。末尾の whoami はリモート側のアカウント名を要求します。
ssh -o UserKnownHostsFile=/etc/reuse/known_hosts -o StrictHostKeyChecking=yes -p 12222 demo@staff-archive whoami
demo@staff-archive's password: が表示されたら、welcome-7 を入力して Enter を押します。パスワードの文字は表示されません。demo が表示され、ローカルのプロンプトに戻ることを確認します。パスワードをシェルのコマンドとして入力しないでください。入力を間違えたら Ctrl+C で中止し、SSH コマンドをやり直します。接続やホスト鍵のエラーは認証情報の拒否ではありません。ホスト鍵の検証を無効にしないでください。
許可範囲を読みます。cat はファイルを表示し、相対パスは現在のディレクトリーを基準にします。inputs は読み取り専用の原本です。
cat inputs/scope.tsv
タブ区切りの列は employee_id、current_login、host、port です。検証できるのは staff-archive:12222 にあるこれらの現在のユーザーと demo だけです。追加のユーザー名、ホスト、候補リストを推測してはいけません。
演習でも、復元したパスワードは機密情報です。umask 077 は、このターミナルセッションで新しく作るファイルからグループとその他ユーザーのアクセス権を取り除きます。mkdir -m 700 は所有者だけが入れるディレクトリーを作ります。別々に実行してください。
umask 077
mkdir -m 700 findings
findings は書き込み可能な結果用ディレクトリーです。再接続時にすでに存在していたら保持してください。新しいセッションでは umask 077 を再実行します。相対パスで失敗したら pwd で現在地を確認し、cd /home/auditor/project で戻ります。監査中はすべての入力ファイル、アーカイブのアカウントと現在のパスワードを維持してください。
提供された辞書で一致するパスワードを復元する
このステップでは、5 つの候補を 4 つの実際のパスワードハッシュに照合します。ハッシュはパスワードから一方向に導かれる値です。オフライン復元は保存済みの設定で候補のハッシュを計算し、比較します。パスワードを復号したり、アーカイブにログインしたりする処理ではありません。
Auditor の /home/auditor/project に留まってください。小さな入力ファイルをそれぞれ読みます。
cat inputs/legacy.txt
cat inputs/candidates.txt
古いデータの各行は record_id:hash です。$6$ は SHA-512 crypt を示します。保存値にはソルトが含まれ、同じパスワードでも異なる保存値になります。各レコードの識別子を保持してください。この小さな架空の辞書は演習を短時間で進めるためのものです。その速度から本番環境のパスワード強度を見積もることはできません。
John の --format=sha512crypt は形式を選び、--wordlist は提供された候補を読みます。pot ファイルは復元されたハッシュとパスワードのペアを保存します。--pot は共有の既定ファイルではなく非公開ファイルを選びます。--session は実行の再開用ファイルとログの保存先を選びます。OMP_NUM_THREADS=2 はこのコマンドだけのワーカースレッド数を制限します。これらのパスに空白はないため、引用符は不要です。
OMP_NUM_THREADS=2 john --format=sha512crypt --wordlist=inputs/candidates.txt --pot=/home/auditor/project/findings/audit.pot --session=/home/auditor/project/findings/recovery inputs/legacy.txt
プロンプトに戻るまで待ちます。3 つのハッシュが復元されるはずです。時間や順序は変わることがあります。再実行時の No password hashes left to crack は、入力が空ではなく、pot に結果が保存済みである可能性を示します。--show は新たな復元を始めずに保存結果を読みます。
john --show --format=sha512crypt --pot=/home/auditor/project/findings/audit.pot inputs/legacy.txt
次の対応関係を確認します。順序は異なっても構いません。
portal-17:cedar42
portal-23:pebble7
portal-41:birch81
3 password hashes cracked, 1 left
実際の出力をエクスポートします。> は標準出力をファイルにリダイレクトし、再実行時にはその結果ファイルを置き換えます。ハッシュは変更しません。
john --show --format=sha512crypt --pot=/home/auditor/project/findings/audit.pot inputs/legacy.txt > findings/recovered.txt
cat findings/recovered.txt
エクスポートにはレコード識別子と復元したパスワードを残す必要があります。パスを打ち間違えたら修正し、該当コマンドを再実行します。結果が他者にも読める状態なら、chmod 600 findings/recovered.txt で所有者だけが読み書きできる状態に戻せます。他の結果ファイルにも同じ修正を適用できます。pot や平文のエクスポートをインシデントの要約として共有しないでください。
ユーザーとの対応と不確実性を保つ
このステップでは、パスワードを含まない復元一覧を作ります。Auditor に留まり、古い職員名簿を読みます。
cat inputs/legacy-roster.tsv
名簿は record_id を固定の employee_id と表示名に結び付けます。Morgan Rivera という人物が 2 人います。portal-17 は E101、portal-41 は E103 です。名前だけでは、古いレコードを現在のログイン名に安全に対応付けられません。
ここでの recovered は、元のハッシュが提供された候補と一致したことを意味します。not-recovered は、この完了した限定的な実行で一致する候補がなかったことを意味します。強い、安全、存在しない、使い回されていないという意味ではありません。現在のサービスに受け入れられるかどうかは、すべてのレコードでまだ不明です。
record_id、employee_id、recovery の 3 列を持つ findings/recovery.tsv を作成します。printf は \t をタブ、\n を改行として解釈します。一重引用符は printf が読むまでこれらの並びを保持します。> はパスワードなしの一覧を作成、または置き換えます。
printf 'record_id\temployee_id\trecovery\nportal-17\tE101\trecovered\nportal-23\tE102\trecovered\nportal-41\tE103\trecovered\nportal-58\tE104\tnot-recovered\n' > findings/recovery.tsv
cat findings/recovery.tsv
4 つのレコードが名簿の職員 ID とともに 1 回ずつ載っていることを確認します。3 つは復元済みで、1 つはこの予算の範囲を超えて未解決です。値を直すには printf のテキストを修正して再実行します。非公開の pot とエクスポートは後続の許可された作業に使え、一覧はパスワードを開示せずに結果を伝えます。
まとめ
稼働中の SSH サービスを利用し、John で架空の旧パスワードを 3 つ復元して、元のユーザーとの対応を保持しました。非公開の結果とパスワードなしの一覧により、成功したオフライン照合と辞書を使い切った後の限界を区別できます。復元したパスワードが現在の職員アカウントで機能することは、まだ示されていません。次のガイド付きラボでは、許可された正確なペアを使って、その別の判断を行います。



