wasbook reading #2

「体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践」読書会の第2回。
今回読んだのは以下の範囲。

  • 4章 Webアプリケーションの機能別に見るセキュリティバグ
    • Webアプリケーションの機能と脆弱性の対応
    • 入力処理とセキュリティ
    • 表示処理に伴う問題

4章 Webアプリケーションの機能別に見るセキュリティバグ

Webアプリケーションの機能と脆弱性の対応

入力に起因する脆弱性はない→入力値チェックだけじゃだめ。

入力処理とセキュリティ

文字エンコーディングのチェックは、そもそも文字化けで気付きそう。
バイナリセーフとかヌルバイト攻撃って聞いたことがなかった。Javaにもあるのかな?→ぐぐったけどでてこない。なぞ。
ヌルバイト→%00
正規表現の \a \z :^contrl: (JavaPerlだと \P{CC}) は使ったことがなかった。ほんとうに危険かどうかも含めて、試してみたい。

表示処理に伴う問題

クロスサイトスクリプティング(XSS)のターン。

  1. 脆弱なサイトでスクリプトが実行される
  2. スクリプトでクッキーのセッションIDを取得し、GETのパラメータなどにセッションIDをつけて、情報収集ページに遷移する(window.locationとかで)
  3. セッションIDいただきます

セッションID盗んで、どうやってなりすますんだろう?→セッションハイジャックのところで書いてありそう。

持続型だと、脆弱なサイトを表示した時点でスクリプトが動いてしまう。罠サイトいらず。
いろいろなXSSがあって、いろいろな対策がある。一部を抜粋する。正しい情報はちゃんと本を読みましょう。

  • 要素内容のXSS
    • < や & のエスケープをしよう
  • 引用符で囲まない属性値のXSS
    • " で囲って、 < " & のエスケープをしよう
  • href属性やsrc属性のXSS
    • javascript: での js 実行をされないようにしよう。URLを検査しよう。
  • イベントハンドラXSS
    • onload とか onerror とか気をつけよう。JS文字列リテラルとしてのエスケープとHTMLエスケープしよう。
  • script要素のXSS
    • でJSがいったん終了させらる。対策はいろいろあるので割愛。
  • DOM based XSS
    • DOMから切り出した文字列にスクリプトが埋めこまれている場合。難しいので対策は割愛。

今回のまとめ

XSSはいろんな攻撃方法があって、対策もいろいろあるので大変。あと、XSSといっても攻撃の経路?がいろいろあるので、それを理解するのが大変だった。ここのあたりは [twitter:@piyokango] にいろいろ教えてもらったおかげで、だいたい理解できたと思う。
あとは XSS をひとつくらい見つけてみたい。


wasbookに関するものは、こちらのタグで。



電子書籍版はこちら。