文字コ ドに潜むセキュリティ
文字コードに潜むセキュリティ
Internet Week 2010
Yosuke HASEGAWA///
http://j.mp/yosuke自己紹介長谷川陽介 - はせがわようすけ
ネットエージェント株式会社研究開発部
Microsoft
f MVP
for Consumer - Security 2005/10-2011/09

Ineternet
IttE
Explorer、Mozillal
M ill Fi
Firefoxを始め
f を始め脆弱性を多数発見
最近は JavaScript の難読化を研究
e.g. jjencode, aaencode

http://utf-8.jp/f

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

2

今日の話題3

今日の話題 はじめに 比較の一致/不一致

 UTF-8の非最短形式
UTF 8の非最短形式
 多対一の変換
 大文字と小文字 Unicode正規化
 不正なバイト列の埋め込み 先行バイトの埋め込み
 エンコード情報の不一致
 7ビットエンコーディングの解釈

 表示上の欺瞞 視覚的に似た文字
 見えない文字 双方向なテキスト

 まとめ

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

4

今日の話題 はじめに 比較の一致/不一致

 UTF-8の非最短形式
UTF 8の非最短形式
 多対一の変換
 大文字と小文字 Unicode正規化
 不正なバイト列の埋め込み 先行バイトの埋め込み
 エンコード情報の不一致
 7ビットエンコーディングの解釈

 表示上の欺瞞 視覚的に似た文字
 見えない文字 双方向なテキスト

 まとめ

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

5

はじめに

6

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

7

文字コードとセキュリティ 何が関係あるの?
テキストパ サの使用頻度が増加
テキストパーサの使用頻度が増加
Webアプリケーションの台頭
XMLやJSONのようなテキストデータ
やような キ トデ タ

レガシーな文字コードからUnicodeへの
レガシ な文字ドからの移行に伴う混乱
EUC JPやShift JIS等とUnicodeの混在
EUC-JPやShift̲JIS等とUnicodeの混在

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

8

文字コードとセキュリティ 何が関係あるの?
機械的な処理以外でも問題に繋がる可能性視覚的に似ている文字
利用者の錯誤を誘因

攻撃者にとっては強力な道具となり得る

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

9

今日の目的開発者として、文字コードに関連する脆
開発者として、文字コドに関連する脆弱性について攻撃方法だけでなく対策するための方法についても学ぶ文字コードやクロスサイトスクリプティング
といった基礎についてはすでに知っているものとして話をします。

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

10

今日の話題 はじめに 比較の一致/不一致

 UTF-8の非最短形式
UTF 8の非最短形式
 多対一の変換
 大文字と小文字 Unicode正規化
 不正なバイト列の埋め込み 先行バイトの埋め込み
 エンコード情報の不一致
 7ビットエンコーディングの解釈

 表示上の欺瞞 視覚的に似た文字
 見えない文字 双方向なテキスト

 まとめ

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

11

比較の一致/不一致/

12比較の一致/不一致文字列の比較検出
セキュリティのための基本的な処理
「安全な文字列の確認」や「危険な文字列の「安全な文字列 確認 や「危険な文字列検出」など

開発者の意図と異なる比較結果
フィルタ処理のバイパス
侵入検知(IDS等)の回避

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

13

今日の話題 はじめに 比較の一致/不一致

 UTF-8の非最短形式
UTF 8の非最短形式
 多対一の変換
 大文字と小文字 Unicode正規化
 不正なバイト列の埋め込み 先行バイトの埋め込み
 エンコード情報の不一致
 7ビットエンコーディングの解釈

 表示上の欺瞞 視覚的に似た文字
 見えない文字 双方向なテキスト

 まとめ

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

14

UTF-8の非最短形式
UTF-8では、ひとつの文字を複数のバイ
UTF
8では、ひとつの文字を複数のバイ
ト列のパターンで表現可能規格上は最短形式のみを許容
規格上は最短形式のみを許容
V lid
Valid

/

0x2F

U+002F

I
Invalidlid
0xC0 0xAF
0xE0 0x80 0xAF
0xF0 0x80 0x80 0xAF

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

15

UTF-8の非最短形式
UTF-8の文字列/etc/passwd「/」の検索、削除

passwd

次の処理(ファイルを開くなど)/appdir/passwd

404 エラーエラ

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

16

UTF-8の非最短形式
UTF-8の文字列..(0xC0 0xAF)etc(0xC0 0xAF)passwd「/」の検索、削除..(0xC0 0xAF)etc(0xC0 0xAF)passwd

次の処理(ファイルを開くなど)/appdir/../etc/passwd

非最小形式を許容
INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

パストラバーサル
17

UTF-8の非最短形式
冗長なバイト表現を使ってフィルタを回避する攻撃手法
伝統的な攻撃手法のひとつ
伝統的な攻撃手法のひとMS00-057(IIS)などが有名()
Nimdaで使用された

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

18

UTF-8の非最短形式
開発者としての対策
UTF-16等に変換してから処理する
変換には自前のライブラリ等は使用しないメジャーなライブラリであれば通常は対策されている仮に問題があっても責任分界点が明確

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

19

今日の話題 はじめに 比較の一致/不一致

 UTF-8の非最短形式
UTF 8の非最短形式
 多対一の変換
 大文字と小文字 Unicode正規化
 不正なバイト列の埋め込み 先行バイトの埋め込み
 エンコード情報の不一致
 7ビットエンコーディングの解釈

 表示上の欺瞞 視覚的に似た文字
 見えない文字 双方向なテキスト

 まとめ

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

20

多対一の変換
U+005C¥₩¥

U+00A5

U+20A9

0x5C

UnicodeShift̲JIS、
EUC-JPなど

文字集合の変換は多対一で行われることがある特にUnicodeからの変換に注意

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

21

多対一の変換
Unicode文字列の入力¥..¥..¥

フィルタを通過

文字列の検査他の文字コードに変換

後続の処理

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

U+00A5U
00A5〵..〵..〵

0x5C

パス
トラバーサル

22

多対一の変換意図せず変換されることもある
NTFSはUnicodeでファイル名を保持
ANSIでファイル名を扱うAPIを呼び出す
イル名を扱うを呼び出す

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

23

多対一の変換ファイル名に¥(U+00A5)を使用可能
Unicode非対応のアプリケ ション/DLLUnicode非対応のアプリケーション/DLL
ではパストラバーサルが発生

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

24

多対一の変換「¥」以外も多数の文字が多対 で変換「¥」以外も多数の文字が多対一で変換¡!

U+00A1

0xA5¦|

U+00A6

0x7C

À

Á

Â

Ã

Ä

Å

Æ

U+00C0 U+00C1 U+00C2 U+00C3 U+00C4 U+00C5 U+00C6

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

A
0x41

25

多対一の変換開発者としての対策
エンドツーエンドでUnicodeのまま文字列を扱列を扱い、文字集合は変換しない文字集合は変換しな(変換するとしても)文字列の検査後には行わない

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

26

今日の話題 はじめに 比較の一致/不一致

 UTF-8の非最短形式
UTF 8の非最短形式
 多対一の変換
 大文字と小文字 Unicode正規化
 不正なバイト列の埋め込み 先行バイトの埋め込み
 エンコード情報の不一致
 7ビットエンコーディングの解釈

 表示上の欺瞞 視覚的に似た文字
 見えない文字 双方向なテキスト

 まとめ

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

27

大文字と小文字こんな要望を受けたことはありませんか？
ユーザから入力される名前/ファイル名/パスワードは
大文字小文字を同 視して処理してくださ
大文字小文字を同一視して処理してください

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

28

大文字と小文字大文字と小文字の同一視の定義は、言語大文字と小文字の同視の定義は、言語文化により異なるINNOVATION TO THE FUTURE

NetAgent Co., Ltd.

29

大文字と小文字
単語

一致

不一致

Gif / GIF

アメリカ

トルコ

Maße/MASSE

ドイツ

アメリカ

Maße / Masse

スイス

ドイツ
アメリカ

「Windowsプログラミングの極意」,株式会社アスキー,ISBN978-4-7561-5000-4,P.340より

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

30

大文字と小文字全角文字と半角文字も考慮?
全角大文字: ＡＢＣＤ
半角大文字:
半角 文字 ABCD
全角小文字: ａｂｃｄ
半角小文字: abcd

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

31

大文字と小文字既存の文字列比較関数のルールを把握す既存の文字列比較関数のル
ルを把握するのも難しいVisualilC
C++ C
CRT / Win32
i 32 API
stricmpp
wcsicmpp_mbsicmp_stricmp_l
CompareString
CompareStringOrdinal
StrCmpI
StrCmpIC....

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

_stricmpp_wcsicmpp_wcsicmp_l _mbsicmp_l
CompareStringEx
lstrcmpi
IntlStrEqNI
StrCmpNIC
StrIsIntlEqual32大文字と小文字開発者としての対策大文字、小文字の差でセキュリティ上の分界点を くらな
分界点をつくらない大文字小文字のル ルの明確化と動作の大文字小文字のルールの明確化と動作の確認

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

33

今日の話題 はじめに 比較の一致/不一致

 UTF-8の非最短形式
UTF 8の非最短形式
 多対一の変換
 大文字と小文字 Unicode正規化
 不正なバイト列の埋め込み 先行バイトの埋め込み
 エンコード情報の不一致
 7ビットエンコーディングの解釈

 表示上の欺瞞 視覚的に似た文字
 見えない文字 双方向なテキスト

 まとめ

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

34

Unicode正規化
がか゛

U+304C

U+304B

U+3099

合成済み文字

基底文字

結合文字

Unicodeでは文字の分解、合成をサポート
見た目は同じでもバイト列が異なる表現

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

35

Unicode正規化
Unicodeでは4種類の正規化方法を規定
NFC Normalization Form Canonical Composition
NFD Normalization Form Canonical DecompositionNFKC Normalization Form Compatibility Composition
NFKDNormalization Form Compatibility Decomposition

正規化した文字列から元の文字列は復元できない
INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

36

Unicode正規化‥.

.

U+2025

U+002E

U+002E①

1

U+2473

U+0031

NFKC,NFKD

正規化(NFKC、NFKD)により意味の異な
正規化(NFKC
NFKD)により意味の異なるバイト列に変化
INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

37

Unicode正規化
Unicode文字列の入力

¥‥¥‥¥
¥
¥ ¥

フィルタを通過

文字列の検査正規化(NFKD,NFKD)

後続の処理

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

U+2025
U2025¥..¥..¥

U+005Cパス
トラバーサル38

Unicode正規化
開発者としての対策
文字列の検査後に正規化を行わない

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

39

今日の話題 はじめに 比較の一致/不一致

 UTF-8の非最短形式
UTF 8の非最短形式
 多対一の変換
 大文字と小文字 Unicode正規化
 不正なバイト列の埋め込み 先行バイトの埋め込み
 エンコード情報の不一致
 7ビットエンコーディングの解釈

 表示上の欺瞞 視覚的に似た文字
 見えない文字 双方向なテキスト

 まとめ

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

40

不正なバイト列の埋め込み不正なバイト列を与えたときの処理不正なバイト列を無視(切り捨てる)想定外の文字に変換
想定外 文字に変換こういった処理が脆弱性を生むことがあう
た処 が脆弱性を む とがある

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

41

不正なバイト列の埋め込み
Firefox 2
2.0.0.12以前
0 0 12以前

charset=Shift̲JIS のときに0x80を無視<s[0x80]c[0x80]r[0x80]ipt>alert(1)</s[0x80]c[0x80]r[0x80]ipt>

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

42

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

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

43

不正なバイト列の埋め込み
IE6 7のMLangIE6,7のMLang文字エンコーディング変換DLL

不正なバイト列を与えたとき
バイト列を与 た き

もとのバイト列に存在しない「"<>」などが
もとのバイト列に存在しない」などが生成され、XSSにつながる

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

44

不正なバイト列の埋め込み
MLang : 文字エンコ
文字エンコーディング変換DLL
ディング変換DLLIE内部では文字列をUnicodeで処理する
Shift̲JIS,
Shift̲JIS,
EUC--JP,EUC
EUC--KR, …
EUC
MLang

<html>
UTF--16LEUTF

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

45

不正なバイト列の埋め込み<meta httphttp-equiv="Content-Type"equiv Content Typecontent="text/html; charset=XXXXX" />...
<inputvalue="(0xNN)(0xNN)(0xNN)onmouseover=alert(1)//(0 NN)(0 NN)(0 NN)" type=(0xNN)(0xNN)(0xNN)t"ttextt">>(0xNN)は文字コードXXXXXにおいて
不正なバイト列<input value="??"onmouseover=alert(1)//??""
type="text">"">
もとのバイト列に存在しない「"」が生成され XSSにつながる生成され、XSSにつながる
INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

46

不正なバイト列の埋め込み開発者としての対策
他の文字コードに変換内部:UTF-8 → 外部:EUC-JP等

文字列を適切なバイト列で構成する
PHP: mb̲check̲encoding など。

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

47

今日の話題 はじめに 比較の一致/不一致

 UTF-8の非最短形式
UTF 8の非最短形式
 多対一の変換
 大文字と小文字 Unicode正規化
 不正なバイト列の埋め込み 先行バイトの埋め込み
 エンコード情報の不一致
 7ビットエンコーディングの解釈

 表示上の欺瞞 視覚的に似た文字
 見えない文字 双方向なテキスト

 まとめ

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

48

先行バイトの埋め込み
マルチバイト文字の先行バイトだけを与えることでフィルタを回避

あ
82

A0

あ

"
22

82

"
82

26

71

75

6F

74

3B

"

22

INNOVATION TO THE FUTURE

A0& q u o t ;82

NetAgent Co., Ltd.

22

49

不正なバイト列の埋め込み
name:<input type=text value="[0x82]">e-mail:<input type=text value=" onmouseover=...//">

Shift̲JISの先行バイトである 0x82 が後続のダブルクォ トを無効にしている
後続のダブルクォートを無効にしている

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

50

不正なバイト列の埋め込み
UTF-8
http://example.com/?%3cscript%20%E2%3Ealert(1);...
http://example.com/?%E2%22onmouseover=alert(1)Shift JIS
Shift̲JIS
http://example.com/?%3cscript%20%81%3E%3ealert(1);...
EUC JP
EUC-JP
http://example.com/?%3cscript%20%E0%3Ealert(1);...
http://example.com/?%E0%22onmouseover=alert(1)IE8ベータ版ではXSS Filterを回避可能

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

51

不正なバイト列の埋め込み開発者としての対策
他の文字コードに変換内部:UTF-8 → 外部:EUC-JP等

文字列を適切なバイト列で構成する
PHP: mb̲check̲encoding,htmlspecialchars(第三引数も指定) など。
など

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

52

今日の話題 はじめに 比較の一致/不一致

 UTF-8の非最短形式
UTF 8の非最短形式
 多対一の変換
 大文字と小文字 Unicode正規化
 不正なバイト列の埋め込み 先行バイトの埋め込み
 エンコード情報の不一致
 7ビットエンコーディングの解釈

 表示上の欺瞞 視覚的に似た文字
 見えない文字 双方向なテキスト

 まとめ

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

53

エンコード情報の不一致
サーバ側とクライアント側で異なる
charsetと解釈される
典型的には UTF-7 によるXSS
UTF-8< → &lt;& t> → &gt;" → &quot;& → &amp;' → &#39;
処理
INNOVATION TO THE FUTURE

エスケープ
NetAgent Co., Ltd.

UTF-7

<html>&lt;;&gt;

HTML生成ユーザ

54

エンコード情報の不一致
典型的にはUTF-7によるXSSが有名
典型的にはUTF
7によるXSSが有名charsetが不明瞭な場合にIEがUTF-7だと解釈する とと解釈することでXSSが発生
SSが発生

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

55

エンコード情報の不一致 UTF-7 XSS
そもそもUTF 7とは?
そもそもUTF-7とは?
Unicodeのエンコード形式のひとつ
非ASCII文字や記号類がbase64でエンコー
非文字や記号類がン
ドされる<div class="main">abcdあいう</div>+ADw-div class+AD0AIg-main+ACIAPgabcd+MEIwRDBG+ADw-/div+AD4INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

56

エンコード情報の不一致 UTF-7 XSS
メタキャラクタ(<>"など)を使わずにメタキャラクタ(<>など)を使わずにHTMLを記述できる
IEにHTMLがUTF-7だと解釈させることにがだと解釈させる とで<script>が動作
p
<div>
+AD
+ADw-script+AD4ri t+AD4 alert(1)l rt(1) +ADw-/script+AD4+AD / ri t+AD4</div>INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

57

エンコード情報の不一致 UTF-7 XSS
IEがHTMLをUTF 7扱いする条件
IEがHTMLをUTF-7扱いする条件
charsetが指定されていない
IEが理解できないcharsetが指定されているが理解 きなが指定される
偽の<meta>を攻撃者が注入できる

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

58

エンコード情報の不一致 UTF-7 XSS
charsetが指定されていない
HTTP/1.1 200 OK
C t t T
Content-Type:t t/ht ltext/html...
<html><head><meta http-equiv="content-type"p q
yp
content="text/html"></head><b d ><body>+ADw-script+AD4- alert(1) +ADw-/script+AD4...
INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

59

エンコード情報の不一致 UTF-7 XSS
IEが理解できないcharsetが指定されている<meta http-equiv='content-type'content='text/html;charset=CP932'>+ADw-script+AD4alert(document.cookie);+AD /+ADw-/script+AD4i t+AD4

CP932/MS932/utf8/eucjp などは登録されていない
INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

60

エンコード情報の不一致 UTF-7 XSS
IEが理解できないcharsetが指定されている
http://www.google.com/search?oe=CP932&q=%2bADw‐...
///
http://www.google.com/search?oe=CP950&q=%2bADw‐...
http://search.yahoo.com/search?eo=EUC&p=%2bADw‐...

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

61

エンコード情報の不一致 UTF-7 XSS
偽の<meta>を攻撃者が注入できる本来の<meta>より前に偽の<meta>を攻
撃者が注入<title>+ADw-/title+AD4<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'>
t t 't t/ht l; htj '>INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

62

エンコード情報の不一致 UTF-7 XSSUTF-7UTF
7 XSSへの開発者としての対策
charsetをHTTPレスポンスヘッダで明記
ブラウザが解釈可能なcharset名とする
ブ ウザが解釈可能な名とする
<meta>より前に攻撃者がコントロールできる文字列を配置しない

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

63

エンコード情報の不一致
UTF-7による問題はIEのXSS以外にも。
UTF-7によるJSON Hijack機密情報を含むJSON
攻撃者がJSON内の一部をコントロール可能
例えばWebメールの新着通知など
ば
着ど攻撃者がJSON内のデ タを盗み見できる
攻撃者がJSON内のデータを盗み見できる{"name"
name : "Yosuke
Yosuke HASEGAWA"
HASEGAWA ,"mail" : "hasegawa@utf-8.jp",
subject : "Welcome
Welcome to IW2010
IW2010""subject"}
INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

64

エンコード情報の不一致 JSON Hijack
利用者

XHR.send(…)
eval( JSON )JSON{"from" : "a@example.com"}
INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

Webメールサーバ
65

エンコード情報の不一致 JSON Hijack<script src=“json”>
HTML

Attacker

利用者
JSON<script src=“json”>
From: "+MPv+MPv…ACIACI "JSON{"from" : "+MPv/…ACI-"}INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

Webメールサーバ
66

エンコード情報の不一致 JSON Hijack[{"name" : "abc+MPv/fwAiAH0AXQA7‐var t+AD0AWwB7ACIAIg‐:+ACI‐","mail" : "hasegawa@utf‐8.jp"
攻撃者により挿入された文字列}},{"name" : "John Smith","mail" : "john@example.com"}]

奪取対象のJSON: http://example.com/newmail.json
p //
p
/
j

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

67

エンコード情報の不一致 JSON Hijack[{"name" : "abc"}];var t=[{"":"","mail" : "hasegawa@utf‐8.jp"},{"name" : "John Smith","mail" : "john@example.com"}]

奪取対象のJSON: http://example.com/newmail.json
p //
p
/
j

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

68

エンコード情報の不一致 JSON Hijack[{"name" : "abc"}];var t=[{"":"","mail" : "hasegawa@utf‐8.jp"},{"name" : "John Smith","mail" : "john@example.com"}]

奪取対象のJSON: http://example.com/newmail.json
p //
p
/
j

<script src="http://example.com/newmail.json" charset="utf‐7"><script> alert(l ( t[[ 1 ].name]+ t[[ 1 ].mail]l );) </script>/

奪取対象の作成した罠ページ

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

69

エンコード情報の不一致 JSON HijackContent‐Type: application/json; charset=utf‐8

レスポンスヘッダでcharsetを明記[{""name"" : ""abc"}];varb "}]
tt=[{"":"",[{"" """mail" : "hasegawa@utf‐8.jp"},{"name" : "John Smith","mail" : "john@example.com"}]

IE6,7では攻撃者が指定した側が優先される<script src="http://example.com/newmail.json" charset="utf‐7"><script> alert( t[ 1 ].name + t[ 1 ].mail ); </script>

奪取対象の作成した罠ページ
奪取対象の作成した罠ペジ

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

70

エンコード情報の不一致 JSON Hijack
開発者としての対策
HTTPレスポンスヘッダでcharsetを明記
JSON内の + を ¥u002B にエスケープ

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

71

今日の話題 はじめに 比較の一致/不一致

 UTF-8の非最短形式
UTF 8の非最短形式
 多対一の変換
 大文字と小文字 Unicode正規化
 不正なバイト列の埋め込み 先行バイトの埋め込み
 エンコード情報の不一致
 7ビットエンコーディングの解釈

 表示上の欺瞞 視覚的に似た文字
 見えない文字 双方向なテキスト

 まとめ

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

72

7ビットエンコーディングの解釈
Internet Explorer
Explorer, Outlook Expressの問題
エンコーディングがUS-ASCIIのとき、ン
デ ングが S SC のとき
最上位ビットが無視される

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

73

7ビットエンコーディングの解釈
US ASCIIで最上位ビットが無視される
US-ASCIIで最上位ビットが無視される

"

<

>

0x22

0x3C

0x3E

0010 0010

0011 1100

0011 1110

｢

ｼ

ｾ

0xA2

0xBC

0xBE

1010 0010

1011 1100

1011 1110

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

ふたつの文字列は等価として扱われる
747ビットエンコーディングの解釈

IE6,7が該当

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

75

7ビットエンコーディングの解釈
Outlook Expressも同様
US-ASCIIの最上位ビットを無視
MIME-Version:
MIME
V
i
11.0
0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
This is test mailbegin 644 eicar.com
ﾍｶ#5/(5̀E0$%06S1<4%I8-30H4%XI-T-#*3=])$5)0T%2+5-404Y$05)$+4%$5)0T%2
5 404Y$05)$ 4%.
75$E625)54RU415-4+49)3$4A)$@K2"I#̀
end
INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

M

ﾍ

0x4D

0xCD

0100 1101

1100 1101

6

ｶ

0x36

0xB6

0011 0110

1011 0110
767ビットエンコーディングの解釈
開発者としての対策メールヘッダ、HTTPレスポンスヘッダでcharsetを明示
US-ASCIIを使用しない

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

77

今日の話題 はじめに 比較の一致/不一致

 UTF-8の非最短形式
UTF 8の非最短形式
 多対一の変換
 大文字と小文字 Unicode正規化
 不正なバイト列の埋め込み 先行バイトの埋め込み
 エンコード情報の不一致
 7ビットエンコーディングの解釈

 表示上の欺瞞 視覚的に似た文字
 見えない文字 双方向なテキスト

 まとめ

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

78

表示上の欺瞞

79表示上の欺瞞
人間に対する視覚的な効果
利用者の錯誤を誘因
攻撃者にとっては強力な道具となり得る
攻撃者にとは強力な道具となり得る

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

80

今日の話題 はじめに 比較の一致/不一致

 UTF-8の非最短形式
UTF 8の非最短形式
 多対一の変換
 大文字と小文字 Unicode正規化
 不正なバイト列の埋め込み 先行バイトの埋め込み
 エンコード情報の不一致
 7ビットエンコーディングの解釈

 表示上の欺瞞 視覚的に似た文字
 見えない文字 双方向なテキスト

 まとめ

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

81

視覚的に似た文字
見た目の似ている文字
例えば、数字の1(イチ)と小文字のl(エル)http://bank1.example.com/
http://bankl example com/
http://bankl.example.com/
Unicodeだと、もっとたくさんの文字

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

82

視覚的に似た文字
スラッシュ
/U+002F∕
U+2215Solids
Solidus
Division Slash

http://example.co.jp∕t.example.com/foo/bar
Domain nameINNOVATION TO THE FUTURE

NetAgent Co., Ltd.

83

視覚的に似た文字
アルファベットの ggU+0067

ɡ
U+0261

Lattin Small
L tt G
LetterLattin Small
Letter Script G

http://ɡoogle.com/
U+0261INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

84

視覚的に似た文字
U+0261を実際にブラウザで表示
http://ɡoogle.com/
http://xn--oogle-qmc
http://xn
oogle qmc.com
com

Internet Explorer 8

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

85

視覚的に似た文字
U+0261を実際にブラウザで表示
http://ɡoogle.com/
http://xn--oogle-qmc
http://xn
oogle qmc.com
com

Mozilla Firefox 3
3.6
6

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

86

視覚的に似た文字
U+0261を実際にブラウザで表示
http://ɡoogle.com/
http://xn--oogle-qmc
http://xn
oogle qmc.com
com

Google Chrome 7

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

87

視覚的に似た文字
U+0261を実際にブラウザで表示
http://ɡoogle.com/
http://xn--oogle-qmc
http://xn
oogle qmc.com
com

Apple Safari 5

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

88

視覚的に似た文字
U+0261を実際にブラウザで表示
http://ɡoogle.com/
http://xn--oogle-qmc
http://xn
oogle qmc.com
com

Opera 10

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

89

視覚的に似た文字
U+0261を実際にブラウザで表示
http://ɡoogle.com/
http://xn--oogle-qmc
http://xn
oogle qmc.com
com

Opera 10

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

90

今日の話題 はじめに 比較の一致/不一致

 UTF-8の非最短形式
UTF 8の非最短形式
 多対一の変換
 大文字と小文字 Unicode正規化
 不正なバイト列の埋め込み 先行バイトの埋め込み
 エンコード情報の不一致
 7ビットエンコーディングの解釈

 表示上の欺瞞 視覚的に似た文字
 見えない文字 双方向なテキスト

 まとめ

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

91

見えない文字文字列に挿入しても見えない制御文字
U+200BZERO WIDTH SPACE

U+200CZERO WIDTH NON-JOINER

U+200DZERO WIDTH JOINER

U+202AU
202A

LEFT-TO-RIGHTLEFT
TO RIGHT EMBEDDING

U+FEFFBYTE ORDER MARK (ZWNBSP)INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

92

見えない文字ファイル名やレジストリにも使用できる

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

93

今日の話題 はじめに 比較の一致/不一致

 UTF-8の非最短形式
UTF 8の非最短形式
 多対一の変換
 大文字と小文字 Unicode正規化
 不正なバイト列の埋め込み 先行バイトの埋め込み
 エンコード情報の不一致
 7ビットエンコーディングの解釈

 表示上の欺瞞 視覚的に似た文字
 見えない文字 双方向なテキスト

 まとめ

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

94

双方向なテキスト
Unicodeの双方向アルゴリズム
文字列を部分的に左右反転して表示
U+202E - Right-to-Left
f Override;RLO

this-(U+202E)txt.exe

実際のバイト列

this-exe.txt

表示される文字列

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

95

双方向なテキスト

this-(U+202E)txt.exe

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

96

今日の話題 はじめに 比較の一致/不一致

 UTF-8の非最短形式
UTF 8の非最短形式
 多対一の変換
 大文字と小文字 Unicode正規化
 不正なバイト列の埋め込み 先行バイトの埋め込み
 エンコード情報の不一致
 7ビットエンコーディングの解釈

 表示上の欺瞞 視覚的に似た文字
 見えない文字 双方向なテキスト

 まとめ

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

97

表示上の欺瞞
対策
複数の確認方法を用意する
SSLやEVSSLの活用や活用

Punycodeでの表示

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

98

今日の話題 はじめに 比較の一致/不一致

 UTF-8の非最短形式
UTF 8の非最短形式
 多対一の変換
 大文字と小文字 Unicode正規化
 不正なバイト列の埋め込み 先行バイトの埋め込み
 エンコード情報の不一致
 7ビットエンコーディングの解釈

 表示上の欺瞞 視覚的に似た文字
 見えない文字 双方向なテキスト

 まとめ

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

99

まとめ

100

まとめ
文字列の検査においては、検査後に文字コード変換や正規化を行わない
見た目だけに騙されない
見た目だけに騙されな文字コ ドを利用したセキュリティとい文字コードを利用したセキュリティという分野は日本がトップレベルかつ未開拓

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

101

質問＆連絡先メ ルメール
hasegawa@utf-8.jp
hasegawa@netagent.co.jp

Twitter@hasegawayosukeWeb sitehttp://utf-8.jp/

INNOVATION TO THE FUTURE

NetAgent Co., Ltd.

102