豪華な登壇者を迎えたことと、デブサミ2009のA会場の最後のセッションということもあって、ものすごく盛り上がっていました。
Webセキュリティ攻守攻防パネルディスカッション「Webアプリケーション/Ajaxセキュリティ徹底バトル」
登壇者
モデレータ
- 竹迫良範 氏
パネラー
- はせがわようすけ 氏
- はまちちゃん 氏
- 大垣靖男 氏
- 徳丸浩 氏
id:Hamachiya2さん(はまちちゃん)
インフルエンザにかかって3日目。
従って、このセッションを聴講する方はリスクを伴う、とのことw (脆弱性w)
Namazuプロジェクトの昔話
2001/11/25。
NamazuプロジェクトのMLに、高木先生から脆弱性の報告が来た。
しかも、MLはオープンになっている公開MLだった。
2日後に緊急リリース、そして非公開のMLを作成した。
XSSについて
- 信頼できないWebサイトでのXSS対策は無意味
- イントラネットだからこそ、XSSには気をつける
JSONによる秘密情報の漏洩
JSON Hijacking
- prototypeの"__defineSetter__"を使って処理、そしてJSONをHTMLとして読みとる
- JSONの一部をUTF-7で書いて、メールのSubjectに記述
オープンな脆弱性の指摘
- LACのJSOC(セキュリティ監視センター)では多数の攻撃を把握
- XSSは国内初、いたずら目的ばかり
- 運営者は「少しでも違法性があるなら訴えたい」
- 訴えること自体が時間の無駄
- 本物のクラッカーは捕まらないし、捕まるようなクラッカーはたいしたことない
- 訴えること自体が時間の無駄
オープンに指摘するメリットはない、IPAに報告しましょう、とのこと。
オープンソースWebアプリケーションの脆弱性
- オープンソース=安全、は間違い
- クローズドソース=安全、も間違い
- OSSのプロジェクトで、コードレビューされていないソースコードはある
PHPを避けるべき3つの理由
- 言語処理系としてマルチバイト文字列対応していない
- 拡張モジュールで対応
- 文字エンコードのデフォルトがライブラリごとに異なる
- 文書化されていない仕様
- サポートライフサイクルが短い
- PHPを使う場合は、常にバージョンアップに追随する決意が必要
ブラウザとバグと仕様の境界
- ブラウザベンダは「仕様です」の方向で、話が行きがち
- ブラウザベンダの窓口へ、フィードバック・報告を積極的に送るべし
UTF-7誤認識を利用したXSSは、まだ有効化?
- まだ有効(IE6/7/8)
- レスポンスヘッダで、charsetを付ける
- Shift_jIS, EUC-JP, UTF-8
- これ以外のcharset名はXSSする可能性がある
- 自分で作ったページ以外にも、エラーページなどは注意する(401/404など)
WAFってどう?
- HTTPリバースプロキシ方式で、Webアプリの攻撃から防御するツール
- WAF (Web Application Firewall)
- WAFの防御戦略
- 入力値検証
- ホワイト/ブラックリスト
- ホワイトリストは問題点があり、ブラックリストが本命
- ブラックリストは使う場所を選ばない
- ブラックリストの管理が面倒なのがベンダ側
- 不正な文字エンコード
- ホワイト/ブラックリスト
- 入力値検証
- 画面遷移の検証
- 値の保護
- Cookie, Hidden
WAFをどう使うか
- 基本はプログラミング上の対策
- WAFはあくまで保険程度
WAFのデモ
- ログインIDに"'"(シングルクォート)
- SQLインジェクション
- WAFを使うと、リバースプロキシの段階でとめてくれる
- (デモでは、500で検知したっぽい)
- パスワードに"a or a=a"
- WAFで止めてくれた
- UTF-7誤認識
- WAFで止めてくれた
- (ダイアログで検知したっぽい)
- WAFで止めてくれた
開発者は、"WAF"の存在は無いものとして開発しましょう。
運用者は、より安全にするために"WAF"を導入しましょう。
その他
- .NET Framework(.aspx)を使っていると、結構堅牢なパターンが多い
- CMSの脆弱性で圧倒的に多いのはプラグイン部分
# 質疑でパネラーの方の回答から経験則っぽいものをメモった。