PCI DSSの要件6.5では,Webアプリケーション開発時のコーディング上の不備による脆弱性に対処するために,コーディング手法の指針である「OWASP:Open Web Application Security Project」ガイドラインなどに基づいた開発を求めている。
6.5 すべてのWeb アプリケーションは「Open Web Application Security Project」ガイドラインなどの安全なコーディング・ガイドラインに基づいて開発する。コーディングの脆弱性を特定するために,カスタム・アプリケーション・コードを見直す。次に示すような、ソフトウェア開発プロセスにおける共通のコーディング脆弱性の防止に努める。 6.5.1 入力データの未検証 6.5.2 アクセス制御の不徹底(例えば、ユーザーID の悪用) 6.5.3 認証・セッション管理の不徹底(アカウント信用証明とセッション・クッキーの使用) 6.5.4 XSS(cross-site scripting)攻撃 6.5.5 バッファ・オーバーフロー 6.5.6 入力不正(例えば、SQL=structured query language インジェクション) 6.5.7 不適切なエラー処理 6.5.8 安全でない保管 6.5.9 サービスの拒否 6.5.10 信頼できない設定管理 |
OWASPは,安全なWebアプリケーションの開発を支援するドキュメントの提供やWebアプリケーションの安全性の評価基準の整備を行っている非営利団体である。OWASPでは,Webアプリケーションのセキュリティ脆弱性を危険度に応じて順位付け,その上位10の脆弱性をトップ10として毎年公表している。
PCI DSSでは,OWASPが2004年に発表したトップ10の脆弱性を例にとり,防止に努めるよう定めている。以下に,OWASPが発表した脆弱性のうち,2007年も危険度の高い順位にある脆弱性について補足する。
認証・セッション管理の不徹底による脆弱性(要件6.5.3)
Webサイトにおいて,ユーザーの認証,セッション管理,ログアウト機能,パスワード管理などの機能に脆弱性が存在すると,“なりすまし(他人のユーザIDやパスワードを盗用し,その人のふりをしてネットワーク上で活動すること)”が可能となる恐れがある。このため,セッション管理機能の開発には,SSLの利用やワンタイムパスワード等による安全な認証機能と,推測が困難なセッションIDの発行,適切な時間でのタイムアウト処理や重要な処理では利用者に再認証を要求するなど,細心の注意が必要である。
XSS(クロスサイト・スクリプティング)攻撃(要件6.5.4)
Webサイトの入力フォームに入力された文字列を,次ページでそのまま表示する仕様となっていた場合,悪意を持ったユーザーが任意のスクリプト(悪意のあるコード)を入力し,表示させることにより,偽のWebページへの誘導や,攻撃の対象となったユーザのクッキーにあるセッションIDの漏洩や改ざんによるセッションの乗っ取りが可能となる恐れがある。Webサイトに入力されたデータを一定のルールに従ってチェックし,悪意のあるコードが実行されないよう,適切なエスケープ処理を行うことが必要である。
SQLインジェクションなどの不正な入力(要件6.5.6)
Webサイトの入力フォーム等に入力された文字列に,悪意のあるユーザが任意のデータ(不正なパラメータ)を挿入し,不正に情報を入手される恐れがある。その代表的な攻撃として「SQLインジェクション」がある。「SQLインジェクション」とは,Webサーバーを介しデータベース・サーバーに不正なSQLコマンドを送り込み実行させ,データベース上のデータ改ざん,削除,漏洩を行うことをいう。クロスサイト・スクリプティングと同様に,入力データをチェックし,適切なエスケープ処理を行う対策が必要である。
安全でない保管(要件6.5.8)
暗号化しない,もしくは脆弱な暗号方式の利用によるデータ保管は,データ漏洩の可能性につながる。要件の中では使用する暗号化方式については特に定められていない。そのため,PCI DSSの用語解説(Glossary)にある“Strong Cryptography”や要件3で要求される暗号化の要件などを参照すると良い。なお,国内では総務省および経済産業省が推奨する暗号リストも参照すべきである。
ネットワンシステムズ セキュリティ事業推進本部 コンサルティング部 第2チーム