既知のことも多いので、新しく知ったこと
ちなみに、Pre-Engagementで、ペネトレを行う上で、クライアントと結び契約について結構詳しく書かれてるから、ペネトレの契約を結び時におすすめ
Information Gathering
インフラ列挙、サービス列挙、ホスト列挙の概要
1. インフラ列挙(Infrastructure Enumeration)
- 目的: 企業のインターネット・イントラネット上の立場を分析し、インフラの全体像を把握する。
- 手法:
- OSINT(オープンソースインテリジェンス) や アクティブスキャン を活用。
- DNS、ネームサーバー、メールサーバー、Webサーバー、クラウドインスタンス などを特定し、インフラの構成を理解する。
- 取得したIPアドレスやホストのリスト をスコープと照らし合わせ、調査対象を確定する。
- セキュリティ対策の把握:
- ファイアウォール(例: WAF) の特定 → アラートを回避する手法の検討
- 攻撃の偽装(Evasive Testing) への応用
- 内部・外部の区別:
- 外部(External) → 公開情報をもとに調査
- 内部(Internal) → ネットワーク内部での攻撃を想定(例: Password Spraying攻撃)
2. サービス列挙(Service Enumeration)
- 目的: ネットワーク内で利用可能なサービスの種類と情報 を特定し、攻撃の手がかりを得る。
- 調査対象:
- サービスの種類、バージョン、提供される情報、用途 を特定
- サービスの背景を理解 し、攻撃に利用できる可能性を探る
- バージョンの確認:
- 脆弱性の特定 → 古いバージョンのサービスには既知の脆弱性が多い
- 多くの管理者は、動作するアプリケーションを変更することを恐れるため、脆弱性を放置しがち
3. ホスト列挙(Host Enumeration)
- 目的: 企業インフラのホストやサーバーを詳細に調査し、それぞれの役割や脆弱性を特定する。
- 調査手法:
- スコープ内のホストを特定(OS、サービス、バージョンなど)
- OSINTやアクティブスキャン を活用し、ホストの構成を把握
- ホストの種類とリスク:
- 匿名アクセスが許可されたFTPサーバー など、内部情報の流出につながるサービスの発見
- メーカーがサポート終了したホストやサーバー の調査 → 旧OSやサービスには脆弱性が多い
- 内部・外部の視点:
- 内部調査(Internal) では、外部から見えないサービスや脆弱な設定が発見されることが多い
- 管理者は、外部からアクセスできないことを理由に「安全」と誤認するケースが多い → ミスコンフィグ(誤設定)が頻繁に見つかる
- 攻撃の流れ:
- 侵入後の調査(Post-Exploitation):
- 機密ファイル、ローカルサービス、スクリプト、アプリケーション、その他の情報を探索
- 権限昇格の手がかりを探し、攻撃を拡大する
- 侵入後の調査(Post-Exploitation):
Vulnerability Assessment
4種類の分析
分析には、主に以下の4種類があります
-
記述的分析 (Descriptive Analysis)
- データセットの特徴を把握するために行う基本的な分析。
- データ収集のミスや外れ値を発見するのに役立つ。
-
診断的分析 (Diagnostic Analysis)
- 過去の出来事の原因や影響、相互関係 を明らかにする分析。
- 「なぜこの出来事が起こったのか?」を解明するために行う。
-
予測的分析 (Predictive Analysis)
- 過去と現在のデータをもとに、未来の出来事を予測 する。
- トレンドの特定や異常値の検出に活用される。
-
処方的分析 (Prescriptive Analysis)
- 未来の問題を防ぐため、または特定の行動を促すための具体的なアクションを提案 する。
分析のプロセスの例(ネットワークスキャンのケース)
-
例えば、情報収集の段階で TCPポート2121 が開いていることが分かったとする。
-
Nmap(ネットワークスキャンツール)では、それ以上の情報は得られなかった。
-
ここで、次のような質問を自分に投げかけて分析を進める
- TCPポート2121は標準的なポートか? → いいえ(標準ポートは0-1023)。
- このポート番号に見覚えがあるか? → はい(ポート21はFTPに関連)。
- 2121は管理者がFTPを隠すために設定したポートでは? → 可能性あり。
-
この推測を検証するために、NetcatやFTPクライアントを使って接続を試みる。
-
接続時に 異常に遅い応答(約15秒) が発生したことに気付く。
-
一部のサービスでは応答速度を設定できるため、これは意図的な遅延 かもしれない。
-
Nmapの最小プローブ往復時間 (--min-rtt-timeout) を15秒または20秒に設定し、再スキャンすると仮説を裏付けられる。
情報収集で一般的な脆弱性やCVEを見つけたとき
- 診断的分析(Diagnostic Analysis) と 予測的分析(Predictive Analysis) が使用される場面
- 公開された脆弱性を発見した場合、その原因を診断・特定することが重要。
- 管理者が手動設定する環境では、POC(Proof-of-Concept)コードのカスタマイズが必要になる場合が多い。
- POCを適用するために、対象のアプリケーションやサービスの機能を深く理解する必要がある。
- POCはケースごとに調整が必要であり、特定の状況に適応させる必要がある。
情報収集に戻る
- 脆弱性が特定できない場合、より詳細な情報を得るために**情報収集(Information Gathering)**の段階に戻る。
- 情報収集と脆弱性評価(Vulnerability Assessment)は頻繁に行き来することが多く、両者が重なることもある。
- CTF(Capture The Flag)とHTB(Hack The Box)の挑戦では、スピードが重要であり、できるだけ早くターゲットマシンに侵入し、高い権限でフラグを取得することが目的。
- CTFは実際のペンテストとは異なる。
- リアルなペンテストでは、質と深さが最優先。
- 企業などのクライアントに対して行う場合、見逃した単純な脆弱性が実際の攻撃に利用されることが最悪の結果となるため、慎重な分析が求められる。
Exploitation
エクスプロイト(Exploitation)と攻撃の優先順位付け
1. エクスプロイトの準備
- 脆弱性を利用し、目的の権限を獲得する(例:足場を作る、特権昇格 など)。
- 逆シェル(Reverse Shell)を取得する場合、PoC(Proof of Concept)を改変し、ターゲットが指定したIPアドレスへ暗号化接続するように調整 する必要がある。
- エクスプロイトの準備は、Exploitation(攻撃実行)フェーズの中心的な作業 となる。
2. フェーズの連携
- 各フェーズ(情報収集、脆弱性評価、攻撃実行など)は厳密に区別されるわけではなく、密接に関連している。
- しかし、特に大規模なペネトレーションテストでは、どのフェーズで何を行ったかを明確にしておかないと、情報量が多くなり混乱しやすい。
3. 攻撃の優先順位付け
脆弱性評価(Vulnerability Assessment)の結果、ターゲットネットワーク/システムに適用できる脆弱性が見つかったら、攻撃の優先順位を決める必要がある。
- CVSSを使用するのもあり
- https://nvd.nist.gov/vuln-metrics/cvss
以下の3つの要因を基に評価する
- https://nvd.nist.gov/vuln-metrics/cvss
① 成功確率(Probability of Success)
- 攻撃の成功確率を評価する。
- CVSSスコア(Common Vulnerability Scoring System)やNVD(National Vulnerability Database) などを用いて、脆弱性の危険度を分析し、成功の可能性を数値化 する。
② 複雑さ(Complexity)
- 攻撃の実行に必要な時間・労力・調査の度合い を評価する。
- 経験のある攻撃なら短時間で実行可能 だが、初めて扱う攻撃は詳細な理解と準備が必要 になるため、実行までの難易度が上がる。
③ 影響度(Probability of Damage)
- 攻撃がターゲットシステムに与える影響を評価 し、必要以上のダメージを避ける。
- DoS(サービス拒否攻撃) は、クライアントの要望がない限り実施しないのが基本。
- 実行中のサービスやOSを破壊する可能性がある攻撃は、慎重に判断 する必要がある。
4. 評価システムの導入
- 上記の要因(成功確率、複雑さ、影響度)をポイント化 し、自分たちのスキルと知識に基づいて客観的に攻撃の優先順位を決定する。
- 経験や環境に応じて柔軟に評価 し、最も効果的でリスクの少ない攻撃手法を選択する。
攻撃の準備(Preparation for the Attack)
1. PoC(Proof of Concept)のカスタマイズ
- 高品質で既知のPoC(エクスプロイトコード)が見つからない場合、攻撃の準備としてローカル環境でのテストが必要になることがある。
- 対象ホストに近い環境を仮想マシン(VM)上に再現し、同じサービス・アプリケーションのバージョンをインストール。
- エクスプロイトの手順を適用し、ローカルVMでテストを行い、動作確認とリスク評価を実施。
- 誤設定(Misconfigurations)や既知の脆弱性 に対して、適切なツールやエクスプロイトを迅速に選択し、安全性やシステムの安定性を確認する。
2. クライアントとの確認
- 攻撃の実行に疑問がある場合、クライアントと相談するのがベスト。
- 必要なデータを提供し、クライアントがエクスプロイトを試すか、単に問題として報告するかを判断できるようにする。
- クライアントがエクスプロイトを実行しないと決定した場合、レポートには「実際の攻撃は行っていないが、問題として認識される可能性が高い」と記載。
- ペネトレーションテストには一定の自由度があるが、リスクの高い攻撃は慎重に判断し、システムに影響を与える可能性がある場合はチームリーダーやクライアントと十分にコミュニケーションを取る。
3. 攻撃成功後の流れ
- ターゲットのエクスプロイトに成功し、初期アクセスを取得したら、次の段階へ進む。
- すべてのアクティビティをログに記録し、明確なメモを作成(報告書作成のために重要)。
- その後、ポストエクスプロイト(Post-Exploitation) や ラテラルムーブメント(Lateral Movement) の段階へ移行し、さらなる侵入や権限昇格を試みる。
Post_Explotiotion
ポストエンゲージメント(Post-Engagement)まとめ
ポストエンゲージメント は、ペネトレーションテスト(PT)完了後に行う一連の作業を指し、契約上の義務としても重要なフェーズです。各テストの状況によって細かい作業内容は異なりますが、一般的な流れは以下のとおりです。
1. クリーンアップ(Cleanup)
- ターゲット環境に残したツールやスクリプトの削除。
- 小規模な設定変更を元に戻す(例:一時的に作成した管理者アカウントの削除)。
- 削除できない痕跡がある場合はクライアントに報告し、レポートに記載。
- クライアントのセキュリティ監視チームがアラートを受けた場合に備え、実施したアクティビティの詳細を文書化。
2. ドキュメントとレポート作成(Documentation and Reporting)
- 全ての発見事項を整理し、レポートを作成。
- レポートの内容:
- 攻撃チェーンの説明(フルコンプロミスや外部から内部へのアクセス経路を明記)
- 非技術者向けの要約(エグゼクティブサマリー)
- クライアント環境に特化した詳細な脆弱性情報(リスク評価・影響・推奨対策・参考資料)
- 脆弱性の再現手順(修正担当者が理解しやすいように)
- 短・中・長期のセキュリティ改善提案
- 付録情報(スコープ、OSINTデータ、侵害したアカウント、パスワード解析結果、ADセキュリティ評価など)
3. レポートレビュー会議(Report Review Meeting)
- クライアントがレポートを内部で確認後、会議を実施。
- ペンテストの結果を説明し、クライアントの質問に対応。
- 技術的な詳細が必要な場合、クライアント側の担当者(システム管理者など)を交えて議論。
- 軽微なリスクの詳細説明は省略し、重要な発見にフォーカス。
4. レポートの最終版提出(Deliverable Acceptance)
- クライアントからのフィードバックを受けて修正を行い、最終レポート(FINAL版)を提出。
- 監査機関がDRAFT版のレポートを受け付けない場合があるため、正式なFINALレポートを発行。
5. ポスト・リメディエーションテスト(Post-Remediation Testing)
-
クライアントが脆弱性を修正した後、再テストを実施し、修正が正しく適用されたか検証。
-
修正状況のレポート作成(例:修正済み/未修正の一覧)
# | 深刻度 | 脆弱性名 | 修正状況 |
---|---|---|---|
1 | 高 | SQL Injection | 修正済み |
2 | 高 | 認証破綻 | 修正済み |
3 | 高 | ファイルアップロード制限なし | 修正済み |
4 | 高 | 不適切なWeb/Egressフィルタリング | 未修正 |
5 | 中 | SMB署名無効 | 未修正 |
6 | 低 | ディレクトリリスティング有効 | 未修正 |
- 証拠データ(スキャン結果やエクスプロイトの失敗例など)を提示し、修正の正当性を示す。
6. ペンテスターの役割(Role of the Pentester in Remediation)
- テスターは修正作業を行わず、あくまで第三者として中立を保つ(例:コード修正や設定変更はクライアントの責任)。
- 一般的な修正方法を提案できるが、具体的なコード提供はしない(例:「SQLインジェクションには入力サニタイズが必要」など)。
7. データ保持と削除(Data Retention)
- ペンテスト後のデータ管理方針は国・企業・契約ごとに異なるため、契約時に明確化が必要。
- 証拠データは一定期間保持し、必要に応じてクライアントや監査機関に提供可能な状態にする。
- データは暗号化して安全に保管し、不要になった情報は完全削除(テスト後の仮想マシンも消去)。
8. クロージング(Close Out)
- 最終レポートを提出し、クライアントの疑問に対応後、プロジェクトを正式に終了。
- クライアントのシステムやデータに関する全ての情報を消去し、契約に基づいた手続きを完了。
- 請求処理・支払い対応 を進め、正式に契約終了。
- クライアントへのフィードバック調査を実施し、今後の改善に活かす。
- 良好な関係を維持し、追加のセキュリティ業務の相談やフォローアップに繋げる。
9. 振り返りと継続的な改善
- テクニカルスキルだけでなく、ソフトスキルの向上も重要。
- クライアントの満足度は技術的な成功だけでなく、対応の丁寧さやコミュニケーション能力にも左右される。
- ペネトレーションテストの過程を振り返り、チームや個人として改善できる点を特定。
まとめ
ポストエンゲージメント では、ペネトレーションテストの終了後に必要な手続きを行い、クライアントに明確な結果を伝える。
具体的な作業は以下のとおり:
- クリーンアップ → 攻撃の痕跡を消し、システムを元に戻す
- レポート作成 → 発見した脆弱性と対応策を文書化
- レポートレビュー → クライアントと結果を確認・説明
- 最終レポート提出 → フィードバックを反映し、正式なレポートを提出
- リメディエーションテスト → 修正後の再テストを実施し、改善状況を確認
- ペンテスターの役割 → 中立の立場を保ち、修正作業には関与しない
- データ管理 → 必要な証拠は一定期間保持し、不要なデータは完全削除
- クロージング → すべての手続きを完了し、契約終了
- 振り返りと改善 → チームや個人の成長に繋げる
ポストエンゲージメントは、ペネトレーションテストの品質を左右する重要なプロセス であり、適切に実施することでクライアントのセキュリティ強化につながる。
今後の進め方
ペネトレーションテストの実践(Practice)まとめ
1. 理論だけでは不十分:実践の重要性
- 理論を学ぶだけではなく、実際に適用できるスキルが必要。
- TTP(Tactics, Techniques, and Procedures)を実際に使いこなすことがスキル向上につながる。
- 技術的スキルだけでなく、文書作成やクライアント対応の能力も重要(レポート作成、メール対応、会議での説明など)。
- ペネトレーションテストはチームで行うことが多いため、協力してスキルを高めることが重要。
2. 実践の方法
① モジュール(Modules)
- 技術的スキルと攻撃手法の理解を深めるための基礎トレーニング。
- 実習(演習)を通じて攻撃の仕組みを学び、効果的なドキュメント作成の訓練も行う。
実践ステップ
- モジュールを読む
- 演習を行う
- モジュールを完了する
- 演習を最初からやり直す
- 解き直しながらノートを取る
- 技術的ドキュメントを作成する
- 非技術的ドキュメント(エグゼクティブサマリーなど)を作成する
② リタイアードマシン(Retired Machines)
- 過去のHTB(Hack The Box)のマシンを使用し、実際の攻撃シナリオを体験。
- 既存のWrite-up(攻略記事)と比較し、理解を深める。
実践ステップ
- ユーザーフラグの取得
- ルートフラグの取得
- 技術的ドキュメント作成
- 非技術的ドキュメント作成
- 公式またはコミュニティのWrite-upと比較
- 書き漏れをリストアップ
- Ippsecの動画を視聴し、知識を補完
- 文書を更新し、詳細なドキュメントを作成
③ アクティブマシン(Active Machines)
- 現在公開中のHTBマシンを使用し、よりリアルな環境で練習。
- 攻略情報が公開されていないため、ブラックボックス環境での実践的な経験を積む。
実践ステップ
- ユーザーとルートフラグの取得
- 技術的ドキュメント作成
- 非技術的ドキュメント作成
- 技術者・非技術者にドキュメントを校閲してもらう
④ プロラボ & エンドゲーム(Pro Lab / Endgame)
- 実際の企業ネットワークに近い、大規模な環境でペンテストを練習。
- 単体ホストではなく、複数のネットワーク要素が絡むシナリオを体験。
特徴
- ネットワーク内での攻撃手法(例:Responderによるパスワードハッシュの取得)を練習。
- 単一ホストではなく、侵入経路を含めた「攻撃チェーン」を構築し、詳細なドキュメントを作成。
3. 実践的なスキル向上のためのポイント
- 日々練習し、攻撃手法を習得し続ける(継続的な学習が重要)。
- 新しい攻撃手法やTTPを定期的にキャッチアップ(サイバーセキュリティの進化に適応する)。
- レポート作成のスキルも磨く(技術的な成果を分かりやすく伝える力が重要)。
- HTBなどのプラットフォームを活用し、多様な環境でスキルを磨く。
4. まとめ
- 理論を学ぶだけでは不十分で、実際のシナリオでの演習が必要。
- HTBのモジュール、リタイアードマシン、アクティブマシン、プロラボを活用し、スキルアップを図る。
- 単なるハッキングスキルだけでなく、文書作成やクライアント対応スキルも重要。
- 継続的な学習を行い、新しい攻撃手法やセキュリティ対策に適応する。
- 日々の練習を積み重ね、「Think Outside The Box」の精神で挑戦を続ける。