ネットエージェント株式会社 研究開発部 はせがわよすうけ

Slides:



Advertisements
Similar presentations
オリジンのはなし. NetAgent Shibuya.XSS Feb What is "Origin" ?  オリジン  Same-Origin Policy  クロスオリジンなんとか…  RFC6454 "The Web.
Advertisements

XML ゼミ 独習 XML ~ 第 6 章 XHTML~ 6.1 XHTML の概要 6.2 XHTML の構造 谷津 哲平.
Copyright © Ariel Networks, Inc. AJAX 勉強会 アリエル・ネットワーク株式会社.
Nov Yosuke HASEGAWA #owaspjapan. OWASP Japan Local Chapter Meeting #8 #owaspjapan 自己紹介 はせがわようすけ  ネットエージェント株式会社  株式会社セキュアスカイ・テクノロジー 技術顧問  Microsoft.
1 安全性の高いセッション管理方 式 の Servlet への導入 東京工業大学 理学部 千葉研究室所属 99-2270-6 松沼 正浩.
IIS 4.0で開発をするコツ Webアプリケーション構築.
エンコーディングと セキュリティ 徹底調査 - XSS Allstars from Japan - Masato Kinugawa.
情報基礎A 情報科学研究科 徳山 豪.
Web::Security beyond HTML5
文字列検出ツール "istrings" の使い方
Webアプリケーション開発の 基本的なポイント
2007/12/21 宮脇文経 源氏物語の世界 再編集版 オリジナル - 高千穂大学 渋谷栄一教授 作成、無償公開
SQLの条件節が動的に構成されることを考慮した データベース接続APIの設計
下藤 弘丞 SecureWeblogの構築.
サイバーセキュリティ演習 ― Webセキュリティ基礎&実践―
めんどうくさくない Bugハンティング Jul Yosuke HASEGAWA.
Webアプリケーションの 通信メカニズム WEBアプリ研究プロジェクト 第2回.
JPAを利用した RESTful Webサービスの開発
受動的攻撃について Eiji James Yoshida penetration technique research site
CakePHPを業務に導入する Shin x blog 新原 雅司.
IDLTM/IONTMを使用した UDON (Universe via Darts ON-line) プロトタイプの作成
IE5でアプリケーション開発 東日本計算センター 小野 修司.
コードの歴史 ASCII(American Standard Code for Information Interchange)  ANSI ISO 646 = 95文字のラテン文字 アルファベット+数字+特殊文字 制御コード: LF, CR などの表示制御と   ACK,DEL などの通信制御 、など.
XSSで使えるかもしれないJavaScriptテクニック
Attacking with Character Encoding for Profit and Fun
第4回 個人の動画配信補足のためのWeb構築
第2章 ソフトウェアの基礎知識 電子制御設計製図Ⅰ    2010年5月11日 Ⅲ限目.
Webサイト運営 09fi118 橋倉伶奈 09fi131 本間昂 09fi137 三上早紀.
Vulnerability of Cross-Site Scripting
コンピュータ基礎実習上級 #11画像ファイルと文字のフォーマット
第1回 JavaScriptゼミ ・ scriptエレメント ・ 記述における諸注意 ・ 古いブラウザへの対応方法
第2章 ソフトウェアの基礎知識.
オペレーティングシステムⅡ 第3回 講師 松本 章代 VirtuaWin・・・仮想デスクトップソフト 2009/10/16.
佐賀大学 理工学部知能情報システム学科 講師 大月 美佳
タグライブラリとJSP J2EE I 第10回 /
文字化けの背景を知る.
プログラミング言語論 プログラミング言語論 プログラミング言語論 演習1 解答と解説 演習1解答と解説 1 1.
HTTPプロトコルとJSP (1) データベース論 第3回.
JQueryでAjax 藤田@ジャストプレイヤー ※参考しまくり文献 jQuery日本語リファレンス.
タグライブラリとJSP J2EE II 第2回 2004年10月7日 (木).
押さえておきたいIE8の セキュリティ新機能
Outlook メール文字化けの原因と対策
HTTPプロトコル J2EE I 第7回 /
データベース設計 第9回 Webインタフェースの作成(1)
第8章 Web技術とセキュリティ   岡本 好未.
卒業論文発表 「Web アクセスに伴う脅威の特徴分析」
ガジェット・マスターへの まわり道!? ~Ajaxを理解しよう~
文字コード 情報処理3 今井孝明.
独習XML 第2章 XML文書の構成要素 2.1 XMLの文字と文字列 2.2 コメント
文字の表現.
セキュリティ 05A2013 大川内 斉.
Webセキュリティ 情報工学専攻 1年 赤木里騎 P226~241.
Javaによる Webアプリケーション入門 第2回
第4回 コンピューティングの要素と構成 平成22年5月10日(月)
ネットワークプログラミング (3回目) 05A1302 円田 優輝.
文字エンコーディング 2010年7月.
第2章 ソフトウェアの基礎知識 電子制御設計製図Ⅰ    2010年5月19日 Ⅱ限目.
データベース設計 第7回 実用データベースの運用例 クライアント=サーバシステム(1)
Twitterクライアントに学ぶASP.NETアプリ
HP作成 そろそろまとめ編 担当:TAの人.
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
独習XML ~第1章 XMLの基礎~ 1.1 XML文書の基礎 1.2 XMLとHTML
日本語独特のL10N問題とは? 各社仕様の拡張文字 複数の符号化 規格の混乱など Unicodeとのマッピング
第14回放送授業.
PHP と SQL (MySQL) の連携 日本語のデータを扱う
CADシステムとソフトウェア 電子制御設計製図Ⅰ    2009年4月28日 Ⅲ限目.
データの改竄を防ぐ仕組み 2002/9/12 牧之内研究室「インターネット実習」Webページ
アプリケーションゲートウェイ実験 2001.10.5 鬼塚 優.
情報モラル06 情報 セキュリティ.
HTTPプロトコルの詳細 M1 峯 肇史.
Presentation transcript:

ネットエージェント株式会社 研究開発部 はせがわよすうけ hasegawa@utf-8.jp Webアプリケーションセキュリティ ネットエージェント株式会社 研究開発部 はせがわよすうけ hasegawa@utf-8.jp

悪用厳禁 自身が管理する以外のコンピュータに対して攻撃等の行為を行った場合 不正アクセス行為の禁止等に関する法律 電子計算機損壊等業務妨害罪 電磁的記録不正作出罪 その他の関連法規等に従い罰せられる可能性があります。

自己紹介 はせがわようすけ ネットエージェント株式会社研究開発部 Microsoft MVP for Client Operating System Unicode などの文字コードが引き起こすセキュ リティ上の問題点について調査・研究 Internet Explorer、Mozilla Firefox をはじ めソフトウェア製品および Webアプリケー ションに関する脆弱性を多数発見

Agenda はじめに 比較の一致/不一致 まとめ UTF-8の冗長なエンコーディング 多対一の変換 大文字と小文字 Unicodeの正規化 不正なバイト列の埋め込み 先行バイトの埋め込み エンコード情報の不一致 7ビット文字コードの解釈 まとめ P/1.x 200 OK e: Thu, 11 Jul 2009 07:37:27 GMT tent-Type: text/html; charset=UTF-8 y: Accept-Encoding tent-Length: 12644

Agenda はじめに 比較の一致/不一致 まとめ UTF-8の冗長なエンコーディング 多対一の変換 大文字と小文字 Unicodeの正規化 不正なバイト列の埋め込み 先行バイトの埋め込み エンコード情報の不一致 7ビット文字コードの解釈 まとめ P/1.x 200 OK e: Thu, 11 Jul 2009 07:37:27 GMT tent-Type: text/html; charset=UTF-8 y: Accept-Encoding tent-Length: 12644

Introduction はじめに

文字コードと セキュリティ 何が関係あるの?

レガシーな文字コードからUnicode への移行 文字コードとセキュリティ 何が関係あるの? レガシーな文字コードからUnicode への移行 EUC-JPやShift_JISと、Unicodeの混在 Webブラウザはテキストパーサ HTMLやXMLなどのテキストデータを処理 視覚的な効果 視覚的に似た文字など、攻撃者の強力な道具

文字列の比較検出 文字列の比較検出 セキュリティのための基本処理 「安全な文字列の確認」「危険な文字列の検出」 入力 検査 次の処理へ text text text 1101100110010 0010001110110 1000010100110 0101011011110 text 「安全な文字列の確認」「危険な文字列の検出」

SQL injection 攻撃者 エスケープ対象の文字の検出を すり抜けたときにSQLインジェクションが発生 http:// GET /?name='OR'1='1 メタ文字のエスケープ 入力値の検証 Webサーバ SELECT * FROM USERS WHERE name=''OR'1'='1' データベース ※バインド機構を使おう!

Cross Site Scripting エスケープ対象の文字の検出を すり抜けたときにXSSが発生 誘導 http:// 攻撃者 http://example.com/ ?item="><script>... GET /?item="><script>... Webサーバ メタ文字のエスケープ <input type="text" value=""><script>... 被害者

SQL injection メタ文字のエスケープ 入力値の検証 攻撃者 Webサーバ http:// バインド機構を使おう! データベース

文字列の比較・検出はセキュリティ のための要 文字コードとセキュリティ 何が関係あるの? 文字列の比較・検出はセキュリティ のための要 攻撃者は比較・検出を迂回する方法 を編み出している

Agenda はじめに 比較の一致/不一致 まとめ UTF-8の冗長なエンコーディング 多対一の変換 大文字と小文字 Unicodeの正規化 不正なバイト列の埋め込み 先行バイトの埋め込み エンコード情報の不一致 7ビット文字コードの解釈 まとめ P/1.x 200 OK e: Thu, 11 Jul 2009 07:37:27 GMT tent-Type: text/html; charset=UTF-8 y: Accept-Encoding tent-Length: 12644

Agenda はじめに 比較の一致/不一致 まとめ UTF-8の冗長なエンコーディング 多対一の変換 大文字と小文字 Unicodeの正規化 不正なバイト列の埋め込み 先行バイトの埋め込み エンコード情報の不一致 7ビット文字コードの解釈 まとめ P/1.x 200 OK e: Thu, 11 Jul 2009 07:37:27 GMT tent-Type: text/html; charset=UTF-8 y: Accept-Encoding tent-Length: 12644

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx (F0~F7)(80~BF)(80~BF)(80~BF) UTF-8の冗長なエンコーディング UTF-8とは Unicode文字範囲 UTF-8でのバイト列 U+0000~U+007F 0xxxxxxx (00~7F) U+0080~U+07FF 110xxxxx 10xxxxxx (C2~DF) (80~BF) U+0800~U+FFFF 1110xxxx 10xxxxxx 10xxxxxx (E0~EF) (80~BF) (80~BF) U+10000~U+10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx (F0~F7)(80~BF)(80~BF)(80~BF)

UTF-8の冗長なエンコーディング UTF-8の非最小形式 / 正しい表現 不正な表現 0x2F 0xC0 0xAF U+002F 0xE0 0x80 0xAF 0xF0 0x80 0x80 0xAF UTF-8の非最小形式 伝統的な攻撃手法のひとつ

UTF-8の冗長なエンコーディング IISに対するMS00-057が有名 もはや化石のような攻撃手法

ほんとに化石?

UTF-8の冗長なエンコーディング CVE-2008-2938 Apache Tomcat UTF-8 Directory Traversal Vulnerability Published: Aug 12 2008 いまでも存在する「生きた化石」

UTF-8の冗長なエンコーディング 対策はどうしたらいいの?

Agenda はじめに 比較の一致/不一致 まとめ UTF-8の冗長なエンコーディング 多対一の変換 大文字と小文字 Unicodeの正規化 不正なバイト列の埋め込み 先行バイトの埋め込み エンコード情報の不一致 7ビット文字コードの解釈 まとめ P/1.x 200 OK e: Thu, 11 Jul 2009 07:37:27 GMT tent-Type: text/html; charset=UTF-8 y: Accept-Encoding tent-Length: 12644

多対一の変換 ¥ ₩ Unicodeから他の文字コードへの変換 は多対一で行われる \ U+005C U+00A5 U+20A9 0x5C

多対一の変換 フィルタの すり抜け パストラバーサルなど Unicodeでの 文字列の入力 ¥..¥..¥ U+00A5 入力値の検査 他のエンコーディングに変換 〵..〵..〵 0x5C パストラバーサルなど 次の処理

多対一の変換 "..\" and "..\..\Windows" が C:\tempフォルダに存在 ファイル名をANSIで扱うとパストラ バーサル

多対一の変換 DEMO

多対一の変換 多数の文字が「多対一」で変換される ¡ ! ¦ | À Á Â Ã Ä Å Æ A U+00A1 0xA5 U+00A6 0x7C À Á Â Ã Ä Å Æ A U+00C0 U+00C1 U+00C2 U+00C3 U+00C4 U+00C5 U+00C6 0x41

多対一の変換 対策はどうしたらいいの? 文字列をUnicodeの扱い、他のエンコー ディングに変換しない (変換するとしても)検査後には変換しな い

Agenda はじめに 比較の一致/不一致 まとめ UTF-8の冗長なエンコーディング 多対一の変換 大文字と小文字 Unicodeの正規化 不正なバイト列の埋め込み 先行バイトの埋め込み エンコード情報の不一致 7ビット文字コードの解釈 まとめ P/1.x 200 OK e: Thu, 11 Jul 2009 07:37:27 GMT tent-Type: text/html; charset=UTF-8 y: Accept-Encoding tent-Length: 12644

大文字と小文字 大文字、小文字同一視の定義は、言語 や文化によって異なる 大文字・小文字を同一視した文字列の 比較は実は難しい 独自の基準で比較 Unicodeに従って比較

大文字と小文字 大文字と小文字の比較 単語 一致 不一致 Gif / GIF U.S. アメリカ Turkey トルコ Maße/MASSE Germany ドイツ Maße / Masse Switzerland スイス 「Windowsプログラミングの極意」,株式会社アスキー,ISBN978-4-7561-5000-4,P.340より

大文字と小文字 Unicodeでは大文字と小文字の対応を 規定 A a 0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061; 0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062; 0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063; : 0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041 0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042 0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043 0041 0061 0061 0041 http://unicode.org/Public/UNIDATA/UnicodeData.txt

大文字と小文字 Unicodeのバージョンによって大文字 小文字の基準が異なることがある Ⴇ თ ? Unicode 2.1.9 U+10A7 U+10D7 U+2D07 Unicode 2.1.9 10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;10D7; 10D7;GEORGIAN LETTER TAN;Ll;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;; Unicode 5.0.0 10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;2D07; 2D07;GEORGIAN SMALL LETTER TAN;Ll;0;L;;;;;N;;Khutsuri;10A7;;10A7

大文字と小文字 対策はどうしたらいいの? 大文字、小文字の差でセキュリティ上の 分界点をつくらない 大文字、小文字の比較・変換機能は十分 動作を確認・把握する

Agenda はじめに 比較の一致/不一致 まとめ UTF-8の冗長なエンコーディング 多対一の変換 大文字と小文字 Unicodeの正規化 不正なバイト列の埋め込み 先行バイトの埋め込み エンコード情報の不一致 7ビット文字コードの解釈 まとめ P/1.x 200 OK e: Thu, 11 Jul 2009 07:37:27 GMT tent-Type: text/html; charset=UTF-8 y: Accept-Encoding tent-Length: 12644

Unicodeの正規化 Unicodeは文字の分解・合成をサ ポート が か ゛ 見た目は同じでもバイト列が異なる表現 合成済み文字 U+304C U+304B U+3099 合成済み文字 基底文字 結合文字 Unicodeは文字の分解・合成をサ ポート 見た目は同じでもバイト列が異なる表現

Unicodeの正規化 Unicodeでは4種類の正規化方法を規定 正規化した結果からは元のバイト列の復元はでき ない NFC Normalization Form Canonical Composition 正規合成 NFD Normalization Form Canonical Decomposition 正規分解 NFKC Normalization Form Compatibility Composition 互換合成 NFKD Normalization Form Compatibility Decomposition 互換分解 正規化した結果からは元のバイト列の復元はでき ない

Unicodeの正規化 正規化処理により意味の異なるバイ ト列に変化する ‥ . . ① 1 NFKC,NFKD U+2025 U+002E

Unicodeの正規化 フィルタの すり抜け パストラバーサルなど Unicodeでの 文字列の入力 〵‥〵‥〵 U+2025 入力値の検査 正規化処理 〵..〵..〵 U+002E パストラバーサルなど 次の処理

Unicodeの正規化 対策はどうしたらいいの? 文字列の検査後に正規化処理を行わない

Agenda はじめに 比較の一致/不一致 まとめ UTF-8の冗長なエンコーディング 多対一の変換 大文字と小文字 Unicodeの正規化 不正なバイト列の埋め込み 先行バイトの埋め込み エンコード情報の不一致 7ビット文字コードの解釈 まとめ P/1.x 200 OK e: Thu, 11 Jul 2009 07:37:27 GMT tent-Type: text/html; charset=UTF-8 y: Accept-Encoding tent-Length: 12644

不正なバイト列の埋め込み 処理系によっては不正なバイト列が無 視されたり、想定外の文字に変換され ることがある

不正なバイト列の埋め込み Firefox 2.0.0.12以前のバージョン はShift_JISのときに0x80を無視す る <s[0x80]c[0x80]r[0x80]ipt> alert(1) </s[0x80]c[0x80]r[0x80]ipt>

不正なバイト列の埋め込み IEは0x00を無視する <s[0x00]c[0x00]r[0x00]ipt> alert(1)

不正なバイト列の埋め込み IEは0x0Bと0x0Cを区切り文字とみ なす <script[0x0B]> alert(1) </script> <input type=text value=a[0x0C]onmouseover=alert(1)>

不正なバイト列の埋め込み 他にもいろいろある!? 対策はどうしたらいいの? ホワイトリストを用いて安全な文字列の み生成する。

Agenda はじめに 比較の一致/不一致 まとめ UTF-8の冗長なエンコーディング 多対一の変換 大文字と小文字 Unicodeの正規化 不正なバイト列の埋め込み 先行バイトの埋め込み エンコード情報の不一致 7ビット文字コードの解釈 まとめ P/1.x 200 OK e: Thu, 11 Jul 2009 07:37:27 GMT tent-Type: text/html; charset=UTF-8 y: Accept-Encoding tent-Length: 12644

先行バイトの埋め込み マルチバイト文字の先行バイトを注 入することでフィルタを回避

先行バイトの埋め込み name: <input type=text value="[0x82]"> e-mail: <input type=text value=" onmouseover=...//"> Shift_JISの先行バイトである0x82 でダブルクォートを無効にする (IE / Firefox / Opera)

先行バイトの埋め込み IE8 beta2 の XSS Filter も回避 UTF-8 http://example.com/?%3cscript%20%E2%3Ealert(1);... http://example.com/?%E2%22onmouseover=alert(1) Shift_JIS http://example.com/?%3cscript%20%81%3E%3ealert(1);... EUC-JP http://example.com/?%3cscript%20%E0%3Ealert(1);... http://example.com/?%E0%22onmouseover=alert(1) IE8 beta2 の XSS Filter も回避

先行バイトの埋め込み 対策はどうしたらいいの? 文字単位で検証 他の文字コードにいったん変換…

Agenda はじめに 比較の一致/不一致 まとめ UTF-8の冗長なエンコーディング 多対一の変換 大文字と小文字 Unicodeの正規化 不正なバイト列の埋め込み 先行バイトの埋め込み エンコード情報の不一致 7ビット文字コードの解釈 まとめ P/1.x 200 OK e: Thu, 11 Jul 2009 07:37:27 GMT tent-Type: text/html; charset=UTF-8 y: Accept-Encoding tent-Length: 12644

エンコード情報の不一致 End-to-End(サーバとクライアント 間)でcharsetの解釈が異なる UTF-8 UTF-7 < → < > → > " → " & → & ' → ' <html> < > 1101100110010 0010001110110 1000010100110 0101011011110 HTML生成 処理 エスケープ ユーザ

エンコード情報の不一致 典型的にはUTF-7によるXSSが該当 charsetが不明瞭なとき、IE6/7は UTF-7だと解釈してXSSが発生

エンコード情報の不一致 HTTPヘッダおよび<meta>にて charsetが指定されていない HTTP/1.1 200 OK Content-Type: text/html ... <html><head> <meta http-equiv="content-type" content="text/html"> </head><body> +ADw-script+AD4- alert(1) +ADw-/script+AD4-...

エンコード情報の不一致 IEが解釈できないcharset名 典型的には CP932 / MS932 / sjis / jis / utf8 ... <meta http-equiv='content-type' content='text/html;charset=CP932'> +ADw-script+AD4- alert(document.cookie); +ADw-/script+AD4-

エンコード情報の不一致 本来の<meta>より前に偽の <meta>を注入 <title>+ADw-/title+AD4- +ADw-meta http-equiv+AD0-'content-type' content+AD0-'text/html+ADs-charset+AD0-utf-7'+AD4- </title> <meta http-equiv='content-type' content='text/html;charset=euc-jp'>

エンコード情報の不一致 XSS対策はどうしたらいいの? charsetをHTTPレスポンスヘッダで明 記する <meta>より前に攻撃者がコントロー ルできる文字列を置かない

エンコード情報の不一致 UTF-7に関連する問題はIEだけでな く他のブラウザにも影響

エンコード情報の不一致 UTF-7を使ったJSON Hijacking JSON内のデータを操作可能 HTTPレスポンスヘッダにcharsetがない 攻撃者がJSONの一部をコントロール可能 JSON内のデータを操作可能

エンコード情報の不一致 JSONはリモートから読み込み可能? XHRで読み込むのでクロスドメインでの読み込みは不可 HTML ユーザ XHR eval( JSON ) JSON { "name" : "value" } Webサーバ

エンコード情報の不一致 JSONはリモートから読み込み可能? JSからJSON内にはアクセスできないはず… HTML 攻撃者 ユーザ <script src=JSON> 無名オブジェクトが生成される or 構文エラー JSON { "name" : "value" } Webサーバ

エンコード情報の不一致 UTF-7を使ったJSON Hijacking JSON内のデータを操作可能 HTTPレスポンスヘッダにcharsetがない 攻撃者がJSONの一部をコントロール可能 JSON内のデータを操作可能

エンコード情報の不一致 JSON Hijacking with UTF-7 これが意味するのは… [ { "name" : "abc+MPv/fwAiAH0AXQA7-var t+AD0AWwB7ACIAIg-:+ACI-", "mail" : "hasegawa@utf-8.jp" }, "name" : "Matcha Daifuku", "mail" : "ripjyr@example.com" } ] 攻撃者により挿入 HTTPヘッダにcharsetの指定がない場合 これが意味するのは…

エンコード情報の不一致 JSON Hijacking with UTF-7 [ { "name" : "abc"}];var t=[{"":"", "mail" : "hasegawa@utf-8.jp" }, "name" : "Matcha Daifuku", "mail" : "ripjyr@example.com" } ] HTTPヘッダにcharsetの指定がない場合

エンコード情報の不一致 JSON Hijacking with UTF-7 攻撃者の用意した罠ページ <script src="http://example.com/target.json" charset="utf-7"></script> <script> alert( t[ 1 ].name + t[ 1 ].mail ); </script> [ { "name" : "abc"}];var t=[{"":"", "mail" : "hasegawa@utf-8.jp" }, "name" : "Matcha Daifuku", "mail" : "ripjyr@example.com" } ] 外からJSONがUTF-7であると指定。 __defineSetter__が使えない場面でも有効。

エンコード情報の不一致 DEMO

エンコード情報の不一致 JSONハイジャックの対策はどうした らいいの? while( 1 ); などをJSONの前に配置 POSTのみ受け入れる

Agenda はじめに 比較の一致/不一致 まとめ UTF-8の冗長なエンコーディング 多対一の変換 大文字と小文字 Unicodeの正規化 不正なバイト列の埋め込み 先行バイトの埋め込み エンコード情報の不一致 7ビット文字コードの解釈 まとめ P/1.x 200 OK e: Thu, 11 Jul 2009 07:37:27 GMT tent-Type: text/html; charset=UTF-8 y: Accept-Encoding tent-Length: 12644

7ビット文字コードの解釈 IEはUS-ASCIIの最上位ビットを無視す る " 0010 「 1010 0010 < 0011 2 「 1010 0010 A 2 0x22 0xA2 < 0011 1100 3 C シ 1011 1100 B C 0x3C 0xBC > 0011 1110 3 E セ 1011 1110 B E 0x3E 0xBE

7ビット文字コードの解釈

7ビット文字コードの解釈 OEもUS-ASCIIの上位バイトを無視 する uuencode形式でeicar.comを添付 MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit This is test mail begin 644 eicar.com ヘカ#5/(5`E0$%06S1<4%I8-30H4%XI-T-#*3=]) $5)0T%2+5-404Y$05)$+4%. 75$E625)54RU415-4+49)3$4A)$@K2"I# ` end uuencode形式でeicar.comを添付

7ビット文字コードの解釈 対策はどうしたらいいの? HTTPレスポンスヘッダでcharsetを明記 する US-ASCIIを避け、ISO-8859-1や UTF-8などを使う

Agenda はじめに 比較の一致/不一致 まとめ UTF-8の冗長なエンコーディング 多対一の変換 大文字と小文字 Unicodeの正規化 不正なバイト列の埋め込み 先行バイトの埋め込み エンコード情報の不一致 7ビット文字コードの解釈 まとめ P/1.x 200 OK e: Thu, 11 Jul 2009 07:37:27 GMT tent-Type: text/html; charset=UTF-8 y: Accept-Encoding tent-Length: 12644

Conclusion まとめ

まとめ 検査後にバイト列の意味を変えるよう な変換・正規化を行わない End-to-Endで解釈が統一されるよう にする 文字コード×セキュリティって未開拓

Questions? Yosuke HASEGAWA hasegawa@netagent.co.jp hasegawa@utf-8.jp http://utf-8.jp/