PHPカンファレンス2009 - 45分で分かる安全なWebアプリケーション開発のための発注・要件・検収3. 徳丸浩の自己紹介
• 経歴
– 1985年 京セラ株式会社入社
– 1995年 京セラコミュニケーションシステム株式会社(KCCS)に出向・転籍
– 2008年 KCCS退職、HASHコンサルティング株式会社設立
• 経験したこと
– 京セラ入社当時はCAD、計算幾何学、数値シミュレーションなどを担当
– その後、企業向けパッケージソフトの企画・開発・事業化を担当
– 1999年から、携帯電話向けインフラ、プラットフォームの企画・開発を担当
Webアプリケーションのセキュリティ問題に直面、研究、社内展開、寄稿など
を開始
– 2004年にKCCS社内ベンチャーとしてWebアプリケーションセキュリティ事業を立
ち上げ
• その他
– 1990年にPascalコンパイラをCabezonを開発、オープンソースで公開
「大学時代のPascal演習がCabezonでした」という方にお目にかかることも
• 現在
– HASHコンサルティング株式会社 代表 http://www.hash-c.co.jp/
– 京セラコミュニケーションシステム株式会社 技術顧問
http://www.kccs.co.jp/security/
– 独立行政法人情報処理推進機構 2009 HASH Consulting Corp. http://www.ipa.go.jp/security/
Copyright (C) 非常勤研究員 3
4. 責任と契約について
• Webアプリの脆弱性の責任は発注者か開発者か
– 発注者に責任というのが主流のよう
– ただし、判例があるわけではないので要注意
• 経産省の「モデル契約書」では、以下のような記述がある
なお、本件ソフトウェアに関するセキュリティ対策については、具体的な機能、
遵守方法、管理体制及び費用負担等を別途書面により定めることとしている(第
50 条参照)。セキュリティ要件をシステム仕様としている場合には、「システ
ム仕様書との不一致」に該当し、本条の「瑕疵」に含まれる。
(セキュリティ)
第50 条 乙が納入する本件ソフトウェアのセキュリティ対策について、甲及び乙
は、その具体的な機能、遵守方法、管理体制及び費用負担等を協議の上、別途書
面により定めるものとする。
• 発注者は自衛のために要求仕様にセキュリティ用件を盛り込んで
おくべき
– 「発注者のための・・・ 」
– 「ウェブ健康診断仕様」によるテストに合格すること、と記述する手もあ
りか
Copyright (C) 2009 HASH Consulting Corp. 4
5. RFI/RFPの書き方アプローチ
• パターン1:提案を求める
– 要求も提案も曖昧になりがち
• 要求の例:セキュリティに留意して開発すること
• 提案の例:セキュリティには万全の体制で臨みます
• パターン2:詳細な仕様を出す
– 「安全なWebサイトの作り方」に準拠せよ
– 「発注者のためのWebシステム/Webアプリケーション セ
キュリティ要件書」に準拠せよ
• パターン3:検査仕様を提示する
– 第三者に検査させる
– 発注者が自ら検査する(後述)
Copyright (C) 2009 HASH Consulting Corp. 5
6. RFI/RFPの書き方
• 漠然としたものは効果が薄い
• 脆弱性の名前を列挙する方法
– XSS、SQLインジェクション【略】の対策を施すこと
– 対策の「質」を問うことは難しい
• 実装方式を指定する方法
– 例:SQLアクセスの際はPrepared Statementを使用すること
– 既存ソフトの流用やフレームワークの使用に制限が生じると、コスト増の
要因になり得る
• 検収の方法を指定する
– 例:弊社の指定する脆弱性検査会社の試験に合格すること
– コストは高くなる
– 検査会社の検査内容がグレーなので、開発会社にとってはリスク
– 「ウェブ健康診断仕様」の応用【後述】
Copyright (C) 2009 HASH Consulting Corp. 6
7. 提案する方法
• 基本はベンダーに提案してもらう
– 開発言語、ミドルウェア、フレームワークを考慮したセキュア
な開発体制を提案してもらう
– セキュリティ的な機能の提案
– 脆弱性を作り込まない体制の提示を求める
– セキュリティ検査にパスできる根拠を説明してもらう
• 納品物としてセキュリティ検査結果を添付してもらう
– 今後、納品検査としてのセキュリティ検査は必須とすべき
• 検収時の検査として自らもセキュリティ検査を実施する
– 「Web健康診断仕様」による検査を自ら実施する(一種の抜き
取り検査)
– 予算に余裕があれば、第三者に検査してもらう
Copyright (C) 2009 HASH Consulting Corp. 7
10. 情報資産洗いだしの例
完全性と可用性は
だいたい「中」く
らいになる
機密性の高低くら
いを洗い出せば十
分
「情報システムの構築等におけるセキュリティ要件及びセキュリティ機能の検討に関する解説書」より引用
11. 脅威分析の例
脅威分析は、どのサイトでも
同じような結果になる
開発プロジェクトごとに脅威
分析をやってもあまり意味は
ない
「情報システムの構築等におけるセキュリティ要件及びセキュリティ機能の検討に関する解説書」より引用
12. 脅威に対する技術的対策の例
技術的対策も、毎回同じようなものが
「候補」にあがる
脅威分析の結果というより、情報資産
の価値と機密性に応じて、対策を選ぶ
ような形になりがち
脅威分析の結果によって技術的対策が
左右されることはあまりない・・・と思
う
「情報システムの構築等におけるセキュリティ要件及びセキュリティ機能の検討に関する解説書」より引用
13. リスク分析は手間の割に効果が少ない
一般的なWebアプリの場合、わかりきっていることをな
ぞる結果になりやすい
重要な情報はなにか?
個人情報、企業情報など
情報の格納場所はどこか
データベースに決まっている
情報資産に対する対策方法は?
ベストプラクティスが分かっている
重要なのは、なにが重要情報か(What)ではなく、それを
どう(How)扱うか
わかりきった資産洗いだしをするよりも、「対策を選
ぶ」ようなアプローチの方が効果的
Copyright (C) 2009 HASH Consulting Corp. 13
14. リバース・ リスク・アセスメントの勧め
ベストプラクティスのセキュリティ対策から選択しあるいはリスクを許容する
対策 採用 不採用時のリスク 代替コントロール
ファイアウ ○ - -
オール
WAF ○ - -
IDS/IPS × 攻撃予兆の見逃し、脆 WAFによる防御、
弱性対策の漏れに対す WAF等のログ監視強化、
る攻撃 脆弱性対策強化
認証方式 パスワード認証 パスワード管理の不備 パスワード管理の徹底
を突いた攻撃を受ける
回線の選択 SSL - -
データベー △(パスワードの ストレージ持ちだしに 入退室管理強化による持ち出
スの暗号化 ハッシュ化の よる情報漏洩 し対策
み)
監査証跡 認証、エラー、 - -
操作ログ
ウィルス対 × マルウェアの感染 速やかなパッチ適用、
策ソフト 本番環境と運用環境間のFW
Copyright (C) 2009 HASH Consulting Corp. 14
15. 脆弱性対策と開発プロセス
SQLインジェクションやクロスサイトスクリプティング
(XSS)などが「ないこと」という要求は、仕様として盛
り込みにくい
リスク分析の結果で脆弱性対策をするものではない。
脆弱性対策は常にすべき。
これらはセキュリティバグであり、バグがないことはわ
ざわざ仕様に明記するものではない
脆弱性対策は、開発標準に盛り込むのがよい
だから、ベンダーの開発標準が重要
開発標準の閲覧を要求するのも一法
ただし、契約上の問題は別
ベンダーの責任範囲は、発注仕様に書いてある範囲
Copyright (C) 2009 HASH Consulting Corp. 15
16. 提案:3つのポイント
セキュリティ要件とセキュリティバグ
開発標準と教育
セキュリティテスト
Copyright (C) 2009 HASH Consulting Corp. 16
17. 3分で分かるセキュアプログラミング
セキュリティ・バグの撲
ポイント① ポイント② 滅
セキュリティ機能(要件)と
セキュリティ・バグは分けて考える 開発標準の整備とメンバーの教育でチーム力をアップ
認証方法などのセキュリティ要件は ユーザー コーディング規約をメンバーに学
方式設計において,開発標
と相談して定義し,そのあとに粛々と実装する 習してもらう。
SQLインジェクションなどのセキュリティ・バ 準やテスト方式を整備し
規約を破ると本当に危険だと認
ておく
グへの対処法を明確にする 識してもらう
要件定義 基本設計 詳細設計 開発 テスト 運用
コード・レビューの方針を決める。内部レ
脆弱性テストの方針を決める。内部
ビューを基本とし,誰がどの範囲(抜き取り検
テストを基本にし,必要に応じて外部
査など)を
の専門ベンダーに依頼する。テストで
チェックするのかを明確にする。レビューでき
きる担当者のリソースを確保する
る担当者のリソースを確保する
ポイント③
セキュリティ・バグの
コスト要因となるレビューとテストを計画的に 撲滅
日経SYSTEMS2009年8月号「プロマネの技で守るWebセキュリティ」図1を改変
18. セキュリティ要件とはなにか
リバース・リスク・アセスメントのところで出てきたよ
うな「積極的な」セキュリティ対策
セキュリティ仕様の例
パスワード仕様、アカウント・ロック…
暗号化(回線、データベース)
ログ
ウィルス対策ソフトの導入
…
セキュティ仕様の実装は、要件定義からウォーター
フォールで粛々と実施(通常機能と同じ)
脆弱性対策は開発標準で対応
Copyright (C) 2009 HASH Consulting Corp. 18
19. 開発標準と教育
• SQLインジェクション対策やXSS対策などは、実装設計
時に個別に設計していたのでは効率が悪いし、対応が統
一できないので、開発標準で定義する
• 開発標準は作りっぱなしになることが多く、定着が難し
い。教育を実施して、テストで定着度を確認するとよい
• 日経SYSTEMS寄稿時に各社にインタビューした際の印
象では、「やられサイト」を作って開発者向けにデモし
ている企業が意外に多く、効果が期待できる
Copyright (C) 2009 HASH Consulting Corp. 19
20. 開発標準として利用できるリソース
• 安全なウェブサイトの作り方 改訂第3版
– http://www.ipa.go.jp/security/vuln/websecurity.html
• 発注者のためのWebシステム/Webアプリケーション セキュリティ要件書
– http://脆弱性診断.jp/specifications/index.html
• いずれも基本的な内容だが、これくらいからスタートするほうが賢明
【参考】K社の
開発標準利用状況
引用:http://techtarget.itmedia.co.jp/tt/news/0902/10/news01.html
Copyright (C) 2009 HASH Consulting Corp. 20
21. 方式設計のすすめ
• 開発標準の抽象度が高い場合、基本設計フェーズの「方
式設計」として、具体的なコードレベルに落としておく
とよい
XSS対策のため特殊文字をエスケープする Bad
H TM L表示の際に「 、「 、「 、「」
<」 >」 &」 ”は文字参照によりエ
スケープする
H TM L表示の際にhtm l
speci chars()関数により
al エスケープ
H TM L表示の際にライブラリ e()関数を用いる
【 実装】
functi e($p) {
on
echo htm l
speci chars($p,EN T_Q U O TES,' TF-8'
al U );
} Good
• 開発言語、アーキテクチャ、ライブラリ、チームの習慣
等を考慮し、コピペ可能なレベルまで具体化しておく
• 方式設計の際には、テスト方法も検討しておくとよい
Copyright (C) 2009 HASH Consulting Corp. 21
22. コスト要素はどこか
• 「セキュリティ要件」については、機能が増えることになるの
で、直接コスト増となる
– 発注者と要件詰めをしっかり行う必要がある
• セキュリティバグについては以下がコスト要因となる
– 開発標準作成、開発者の教育
– セキュリティテスト
• 「発注者のための…セキュリティ要件書」でコスト増になるの
は・・・
– アカウントロック機能の作りこみ
– SSLの証明書代 …たいしたことはない
• 開発標準や教育はプロジェクトをまたがって有効なので間接費用
と考えられる。一度しっかりしつものを作れば使い回しがきく
• セキュリティテストはプロジェクトごとに必要であり、費用も大
きいので、セキュリティテストのコスト削減が、セキュア開発の
課題
Copyright (C) 2009 HASH Consulting Corp. 22
23. セキュリティテスト
セキュリティ要件にせよ、セキュリティバグにせよ、最
終的にはテストで品質を保証することになる
開発工程
ソースコードレビュー、ソースコードチェッカー
単体テスト工程での「ウェブ健康診断仕様」利用もあり
テスト工程
ツールでのテスト・・・ツールが高価、全項目テストできない
ウェブ健康診断仕様の活用
専門家にアウトソース
受け入れテスト(検収)
ウェブ健康診断仕様の活用
専門家にアウトソース
Copyright (C) 2009 HASH Consulting Corp. 23
24. ウェブ健康診断とは
診断方式 : 遠隔地からインターネット経由による手動若しくは自動診断ツールを利用
診断実施数:約300団体
診断対象 : 地方公共団体が保有若しくは利用している、現在インターネットで稼動中
のWeb サーバ1サイト分(1 ドメインネーム)
http://www.lasdec.nippon-net.ne.jp/cms/12,1284.html より引用
25. ウェブ健康診断仕様(1)
12項目の診断項目により危険度の高い脆弱性項目を網
羅している
実被害に至る可能性の高いものに限定
「安全なウェブサイトの作りかた 改定第3版」で解説されてい
る
9種類の脆弱性を包含
診断仕様、判定基準、抜き取り基準が明確に定義・公開
されている
公開された無償ツールのみで診断できる
本番稼働サイトの診断を前提とした安全性の高い診断仕
様である
Copyright (C) 2009 HASH Consulting Corp. 25
35. テスト工程のコスト削減方法
• 専門家に全部頼むと高いので、できる部分は自分でやる
• 必ずしも全項目をテストする必要はない
• 明らかにテスト不要なもの
– 外部コマンドを利用しない・・・OSコマンドインジェクショ
ンは不要
– メール送信しない・・・メールヘッダインジェクションは不要
• ソースコード検査の方が効率がよいもの
– OSコマンドインジェクション
– パストラバーサル
– SQLインジェクション(ソースコード検査しやすいように開発
標準を定めておくと良い)
• セルフテスト工数を削減して浮いた費用で、専門家にも
検査してもらうとなお可
Copyright (C) 2009 HASH Consulting Corp. 35
36. まとめ
• セキュアな発注方法論は発展途上であり、まだ業界標準
といえる方法がない
• 要件について
– セキュリティ要件とセキュリティバグに分けて考える
– 資産洗い出し、脅威分析は定石だが、Webアプリの場合、
うんと簡略化してよい
• セキュリティバグ対応は、開発標準整備とチームの教育
が鍵
• テスト、検収について
– おもなコスト要素はセキュリティテスト
– セキュリティテストツールとしての「ウェブ健康診断仕様」
• 契約にも注意
Copyright (C) 2009 HASH Consulting Corp. 36