DevSumi2009 Webセキュリティ攻守攻防パネルディスカッション「Webアプリケーション/Ajaxセキュリティ徹底バトル」

XSSで何ができるか?

  • cookie情報、formの送信内容を盗む、偽の情報を見せる

「信頼出来ないWebサイト」でのXSSはそもそも無意味

  • 信頼してほしいならXSSくらい直せ

イントラだったら関係ない?

  • むしろイントラ内の方が盗みたい情報がいっぱいある

JSONによる秘密情報の漏洩

  • JSON Hijacking
    • Object.prototype.__defineSetter_で特定プロパティが設定されたら何らかの処理を行うようにする。
    • JSONをHTMLとして読み込むと上記のコードが入る。
  • 対策
    • 先頭にwhile(1);をつけて、JavaScriptとして実行出来ないようにする(Googleがやった)
    • POSTのみ許可
    • XHRで特定のリクエストヘッダをつけるようにする
    • レスポンスヘッダにcharsetを指定する
      • charsetにUTF-7を指定すると、きちんとエスケープされているJSONでもそうでないように解釈させる事ができてしまう

脆弱性の指摘はどうするの?blogで書いていいの?

  • IPAに報告する方が無難

オープンソースWebアプリの脆弱性は?

  • オープンソースだから安全というのは迷信
    • ソースが公開されていてもちゃんとレビューされていないコードはいっぱいある

IPA曰く、例えばPHPを避ける?

PHPを避けるべき3つの理由

  • 言語処理系としてマルチバイト文字列対応していない
    • 拡張モジュールを入れないとマルチバイト文字列を使えない
    • デフォルトの文字エンコーディングがライブラリ毎に違う
  • 仕様がドキュメント化されていない
  • サポート終了が早い
    • セキュリティアップデートを適用出来るようにするには、使用するPHPのバージョンアップを頻繁にしなければならないが、その割にはバージョン間の差異がある

なお、PHP4の延長パッチサポートをしている会社がある

ブラウザのバグと仕様の境界

  • 仕様に不満があるなら、ちゃんと声を上げよう
  • IE8ではIE6,7の酷い仕様を結構直している

UTF-7の後認識を利用したXSSってまだ有効?

  • UTF-7なんて誰が使ってるの?切り捨てちゃっていいんじゃないの?
  • 対策としてcharsetをちゃんと指定する
  • 静的ページでもエラーページのエラーメッセージでXSSというのもある

WAFってどうよ?

  • HTTPリバースプロキシ方式でWebアプリの攻撃から防御する
  • WAFの防御戦略
    • 入力値検証
    • 画面遷移の検証
    • 値の保護
      • Cookie,Hiddenフィールド
  • ブラックリスト
  • 基本はアプリ側での対策で、WAFは保険くらいに考える
  • 誤検知
    • 攻撃なのか、そういう値を入れたいのかの区別というのは難しい

開発者の立場ではWAFはない前提で開発する。
運用管理者の立場ではより安全に運用する為にWAFを入れる。

その他

IE8のXSS Filter

XSSについてはWAFくらいの精度はある。

divタグによるクリックジャッキングは仕様か、脆弱性か?

もし仕様を変えたら安全になる一方で今までできた事ができなくなってしまう。
そもそもユーザにHTMLのマークアップCSSを弄らせない

EODの流れと開発者はセキュリティ対策を超ガンガレというのは相反するのではないか?
  • プラットフォーム自体がセキュアになっていくという方向性なら矛盾しない
    • 例えば.aspxのページ(ASP.NETで開発したペーージ)は比較的堅牢
  • CMS脆弱性で多いのはplugin由来の脆弱性
  • 簡単になった方がセキュリティ対策に割くリソースの余裕ができる