OWASP Top 10
オワスプトップテン
Webアプリの重大リスクを10項目に整理した定番リスト。セキュリティ対策の共通言語。
概要
OWASP Top 10 は、Web アプリケーションにおける最も重大なセキュリティリスクを 10 項目に整理した文書です。発行元の OWASP(Open Worldwide Application Security Project)は、ソフトウェアのセキュリティ向上を目的とする非営利のコミュニティで、ツール・ガイドライン・チートシートを無償で公開しています。その中で最も広く知られているのがこの Top 10 で、数年おきに実際の脆弱性データと専門家の調査に基づいて改訂されています。
大切なのは位置づけの理解です。Top 10 は「これだけ守れば安全」というチェックリストでも、脆弱性の網羅的な分類でもありません。公式にも「啓発文書(awareness document)」と明記されており、開発者とセキュリティの専門家が共通の言葉でリスクを語り、対策の優先順位を考えるための出発点です。「うちのアプリは A01 のアクセス制御が弱い」のように、チームをまたいだ会話の共通言語として機能することに価値があります。
なぜ生まれたか
2000年代初頭、Web アプリケーションが急増する一方で、セキュリティの知見はごく一部の専門家に偏っていました。開発者はSQLインジェクションやXSSという言葉すら知らずに脆弱なコードを量産し、発注側にも「何を要求すればセキュアと言えるのか」の基準がありませんでした。セキュリティ対策は「専門家に診断を依頼して初めて問題が発覚する」後追いの活動だったのです。
2003年に初版が公開された OWASP Top 10 は、この非対称を崩すために「まずこの 10 個を知れ」という形で知識の入口を作りました。無数にある攻撃手法をリスクの大きさで束ね、順位を付けて 10 個に絞ったことで、専門家でなくても学び始められる地図になったのです。以降、PCI DSS(クレジットカード業界のセキュリティ基準)をはじめ多くの規格や調達要件が Top 10 を参照するようになり、事実上の業界標準の座を得ました。
詳細
2021年版の構成 — 個別の攻撃からリスクの束へ
最新の 2021 年版は、実際の検査データで観測された発生率と影響度に基づいて順位付けされています。注目すべきは、長年 1 位だったインジェクションを抜いて「アクセス制御の不備」が 1 位になったことです。個別の攻撃テクニックよりも、「誰が何をしてよいか」という認可の設計・実装の失敗こそが、現実の被害の最大の源泉だと明確になりました。また「安全でない設計」という項目が新設され、実装のバグ取りだけでなく設計段階からの安全性(シフトレフト)が問われるようになったのも大きな変化です。
主要項目を防御側の視点で読む
A01 アクセス制御の不備は、「認証は通っているが、認可の確認が漏れている」失敗の総称です。URL の ID を書き換えるだけで他人のデータが見える、一般ユーザーが管理者用 API を直接叩ける、といったものです。対策の要点は、リソースへのアクセスごとにサーバ側で権限を検証すること、デフォルト拒否と最小権限を原則にすることです。クライアント側でボタンを隠すのは UI の配慮であって防御ではありません。
A03 インジェクションは、データとして扱うべき入力が命令として解釈されてしまう欠陥の総称で、SQLインジェクションが代表格、2021年版ではXSSもここに統合されました。プレースホルダ(プリペアドステートメント)や文脈に応じたエスケープ、CSP のような多層防御が定石です。A02 暗号化の失敗は、暗号化すべきデータの平文保存、パスワードの不適切なハッシュ化、TLS の欠如などを束ねた項目です。
A04 安全でない設計は他と毛色が異なり、「実装は仕様どおりだが、仕様自体が危険」というケースを指します。パスワードリセットの秘密の質問のように、正しく実装しても安全にならない設計は、コードレビューでは見つかりません。脅威モデリング — 設計段階で「攻撃者ならどこを突くか」を洗い出す活動 — が対応策になります。A05 設定ミスと A06 脆弱で古いコンポーネントは、コードではなく構成と依存関係の問題で、デフォルト認証情報の放置や、既知の脆弱性を含むライブラリの使い続けが典型です。A09 ログと監視の不備は、攻撃を「防げなかった」ことより「気づけなかった」ことを問題にする項目で、ログと監視、そしてインシデント対応体制の整備を求めています。
開発プロセスへの組み込み方
Top 10 の実践的な使い方は、リストを暗記することではなく、開発ライフサイクルの各段階に対応づけることです。設計段階では A01 と A04 を意識して認可モデルと脅威モデリングをレビューし、実装段階ではコードレビューの観点にインジェクション対策と認証まわりの定石を含めます。CI/CD には静的解析(SAST)と依存関係スキャンを組み込んで A03・A06 を機械的に検出し、リリース前にはテストの一環として動的スキャン(DAST)やペネトレーションテストで A01・A05 のような文脈依存の問題を人の目で確かめる、という多層の構えです。
より本格的に取り組む場合、OWASP は Top 10 の先も用意しています。検証項目を網羅的に定義した ASVS(Application Security Verification Standard)、実装の定石を集めた Cheat Sheet Series、無償の診断ツール OWASP ZAP などです。Top 10 は入口であって到達点ではない — この認識を持って、チームの共通言語として使い倒すのが正しい付き合い方です。