セキュリティ●●●○○

ペネトレーションテスト

Penetration Testing ・ ペネトレーションテスト

許可を得て攻撃者の視点で実際に侵入を試み、防御の穴を実証的に洗い出す検査。

✦ 30秒で試す — 航海わざとお金を払って、自分の会社に侵入してもらうこの3つをつなげて使われたとき、最悪の被害は?予想してみる

概要

ペネトレーションテスト(侵入テスト、通称ペンテスト)は、許可を得た専門家が攻撃者の視点でシステムへの侵入を実際に試み、防御の穴を実証的に洗い出す検査です。設計書のレビューや自動スキャンが「ありそうな問題を列挙する」活動だとすれば、ペネトレーションテストは「その問題を突くと本当に何が起きるか」を確かめる活動です。「この脆弱性を悪用すると、実際に顧客情報のデータベースまで到達できました」という実証には、チェックリストの指摘とは比べものにならない説得力があります。

日本では「脆弱性診断」と「ペネトレーションテスト」が混同されがちですが、両者は目的が違います。脆弱性診断はツールを中心に既知の脆弱性を網羅的に見つける「健康診断」で、ペネトレーションテストは目標(機密データの奪取など)を決め、複数の弱点を連鎖させてでも到達を試みる「模擬攻撃」です。前者は弱点の一覧を、後者は「攻撃者に何ができてしまうか」という現実のシナリオを明らかにします。

なぜ生まれたか

防御側には構造的な不利があります。守る側はすべての穴を塞がなければなりませんが、攻める側は1つ見つければよい。しかも防御の担当者は自分たちのシステムを「作った側の目」でしか見られず、想定外の使われ方、たとえば小さな不備を組み合わせた侵入経路を自力で見つけるのは困難です。机上のレビューやチェックリストを何周しても、「実際に攻められたらどうなるか」は分からないままでした。

この非対称を埋める発想が「信頼できる攻撃者を雇う」ことです。起源は1960〜70年代、米国の政府や軍がコンピュータシステムの防御力を確かめるために編成した「タイガーチーム」にさかのぼります。攻撃者と同じ技術・同じ考え方で試させれば、防御側の思い込みの外にある穴が見つかる。この考え方が民間に広がり、体系化されたのが今日のペネトレーションテストです。ソフトウェアのテストが「正しく動くこと」を確かめるのに対し、ペネトレーションテストは「悪用できないこと」を攻撃者の目で確かめる、裏返しのテストと言えます。

詳細

大前提 — スコープと許可

ペネトレーションテストと不正アクセスを分けるのは、技術ではなく「事前の合意」だけです。許可なくシステムへの侵入を試みれば、善意でも不正アクセス禁止法などに触れる犯罪になります。そのため実施前には必ず契約を交わし、ルールオブエンゲージメント(交戦規定)と呼ばれる取り決めで、対象の範囲(スコープ)、許される手法、実施の時間帯、緊急連絡先、本番のデータに触れた場合の扱いなどを書面にします。クラウド上のシステムでは、クラウド事業者側のポリシーの確認も必要です(多くの事業者は、自分が借りている資源へのテストを事前申請なしで認める一方、DoS のような試験は禁じています)。「どこまでやってよいか」が書面で合意されていることが、この活動のすべての前提です。

脆弱性診断・ペネトレーションテスト・レッドチーム

似た活動は、「網羅性」と「攻撃の現実らしさ」のどちらに軸足を置くかで一直線に並べられます。

脆弱性診断ツール中心・網羅的既知の弱点を一覧化定期的な健康診断ペネトレーションテスト人手で侵入を実証弱点を連鎖させ目標へ範囲を合意して実施レッドチーム演習現実の攻撃者を再現防御側には知らせない検知と対応力も試す網羅性を重視現実の攻撃の再現を重視右ほど組織全体に広く踏み込むが、個々の弱点を洗い尽くす網羅性は下がる頻度は低く、1回あたりのコストは高くなる
脆弱性診断・ペネトレーションテスト・レッドチーム演習の位置づけ

脆弱性診断は、決められた対象(Web アプリの全画面など)を、既知の弱点の一覧に沿って漏れなく調べます。ペネトレーションテストは、対象の中から攻撃者が通りそうな経路を選んで深く掘ります。レッドチーム演習は、それをさらに実戦に近づけたものです。経営層など一部の合意のもと、防御チーム(ブルーチーム)には知らせずに、数週間〜数か月かけて実在の攻撃者の手口を再現します。試されるのは個々の脆弱性ではなく組織全体、つまり監視は侵入に気づけるか、インシデント対応は機能するか、です。攻守が協力して検知の力を磨く形式はパープルチームと呼ばれます。

ホワイトボックス・グレーボックス・ブラックボックス

テスターに渡す情報の量によって、進め方は3つに分かれます。ブラックボックスは内部の情報を一切渡さず、外部の攻撃者と同じ条件で始める形式で、現実に近い一方、限られた期間では表面をなぞるだけで終わるおそれがあります。ホワイトボックスはソースコードや設計書、管理者権限まで開示して徹底的に調べる形式で、効率よく深部まで検査できますが、「情報を持たない攻撃者に見つかるか」は分かりません。実務で最も多いのは中間のグレーボックスで、一般ユーザーのアカウントと構成の概要くらいを渡し、「ログインした利用者が悪意を持ったら」という現実的な脅威を効率よく確かめます。どれが優れているかではなく、想定する攻撃者の像と予算に応じて選ぶ設計判断です。

テストの進め方と成果物

典型的なテストは、偵察 → スキャンと列挙 → 弱点の悪用 → 権限昇格と横展開 → 報告という段階を踏みます。偵察では公開情報(DNS の記録、求人情報に書かれた使用技術、公開リポジトリなど)から攻撃面を洗い出します。スキャンでは、どのIPアドレスのどのポート番号でどんなサービスが動いているか(22番の SSH、443番の HTTPS、閉じ忘れた 3306番の MySQL など)を調べ、動いているソフトウェアの種類と版から既知の脆弱性の候補を絞ります。悪用の段階で侵入に成功したら、そこを足場に、より強い権限や隣のシステムへと進んでいきます。

ここで大切なのは、深刻な侵入の多くが単一の大穴ではなく、OWASP Top 10 に載るような不備の組み合わせで成り立つことです。軽微な情報漏えいで得た内部の情報と、設定のミスと、認可の確認漏れ(アクセス制御の不備)がつながると、個々には「低」「中」と評価された問題が致命傷になります。これを1本の経路として示せるのが、人間によるテストの最大の価値です。

テスター外部から開始エラー画面内部のホスト名が表示される管理画面初期パスワードのまま公開顧客データ権限の確認が漏れたAPIから全件取得単独の評価: 低単独の評価: 中単独の評価: 中連鎖させた結果: 顧客情報の全件流出(致命的)一覧型の診断では別々の3行になるものを、1本の経路として示せるのが人手のテストの価値
弱点の連鎖 — 1つずつは「低」「中」でも、つなぐと顧客データまで届く

成果物は報告書です。よい報告書は「どの経路で何がどこまでできたか」の再現手順、ビジネスへの影響、そして優先度付きの対策を含みます。防御側にとってテストは受けて終わりではなく、指摘を直し、再テストで塞がったことを確かめ、同じ種類の問題を作り込まないように開発プロセスへ戻すまでがひとまとまりです。連鎖の図でいえば、3つの弱点のどれか1つを塞げば経路は切れますが、残りの2つも別の連鎖の部品になりうるので、すべてを直すのが原則です。

学びの文化 — CTF とバグバウンティ

攻撃の技術を合法的に学び、防御に活かす文化も育っています。CTF(Capture The Flag)は、用意された脆弱なシステムから「フラグ」と呼ばれる文字列を奪い合う競技で、世界中で大会が開かれ、セキュリティ人材の登竜門になっています。攻撃の手触りを知ることは、防御の設計に直結します。もう1つがバグバウンティで、企業が公開したルールのもとで外部の研究者に自社サービスの脆弱性を探してもらい、報告に報奨金を払う制度です。年に一度のテストと違い、世界中の目で継続的に検査を受けられるのが利点で、脆弱性の協調的な開示の枠組みを、企業の側から制度として整えたものと言えます。定期的なペネトレーションテスト、継続的なバグバウンティ、日常の脆弱性診断。これらは競合ではなく、頻度と深さの異なる層として組み合わせるのが成熟した防御の体制です。

試問

セキュリティの検査には、軸足の違う3つの形があります。既知の弱点の一覧に沿って対象を漏れなく調べる「脆弱性診断」、目標を決めて弱点をつなぎ、攻撃者に本当に何ができるかを実証する「ペネトレーションテスト」、防御チームに知らせずに組織ごと実戦さながらに試す「レッドチーム演習」です。守る側が発注する8つの依頼を、どの形にあたるかで分けます。

✦ 命題挑戦中

8つの依頼を、脆弱性診断・ペネトレーションテスト・レッドチーム演習に仕分けよ

脆弱性診断一覧に沿って漏れなく
ペネトレーションテスト目標へ弱点をつないで実証
レッドチーム演習組織ごと実戦さながら

項目を選んでから、入れる箱を選びます