Slide 1

Slide 1 text

LIGHTWEIGHTLANGUAGEDECADE JavaScript は機械語になる Shibuya.js 竹迫 良範 @takesako

Slide 2

Slide 2 text

LIGHTWEIGHTLANGUAGEDECADE 第1回 Shibuya.js テクニカルトーク基調講演 最後に生き残るのは「JavaScript」かもな JavaScriptのこれまでの10年とこれからの10年 これまでの10年でクライアントサイドを征覇した これからの10年でどこまで領域を広げるか etoさん基調講演 2006年

Slide 3

Slide 3 text

LIGHTWEIGHTLANGUAGEDECADE 昔:サーバサイドのプログラミング言語 JavaScript Ruby Perl PHP Java サーバサイド (Webサーバ) クライアントサイド (ブラウザ)

Slide 4

Slide 4 text

LIGHTWEIGHTLANGUAGEDECADE 未来:JavaScriptで全部書く! Ruby Perl PHP Java サーバサイド (Webサーバ) クライアントサイド (ブラウザ) JavaScript Node.js jQuery

Slide 5

Slide 5 text

LIGHTWEIGHTLANGUAGEDECADE JavaScript = 現代のマシン語(機械語)? Ajax, Web 2.0, Thin client… mobile server Server Side Node.js browser HTML5

Slide 6

Slide 6 text

LIGHTWEIGHTLANGUAGEDECADE x86

Slide 7

Slide 7 text

LIGHTWEIGHTLANGUAGEDECADE コンピュータの進化とプログラミング言語 CPUが高速化 Intel x86 (Pentium … Core i7) アウト・オブ・オーダー、投機的実行 … スーパーパイプライン、スーパースカラー … Lightweight Language スクリプト言語でも高速に動作 Perl, Ruby, Python, PHP, ActionScript … JavaScript 高速化バトル勃発 Chrome の v8 エンジンの公開(2008年)

Slide 8

Slide 8 text

LIGHTWEIGHTLANGUAGEDECADE Z80 エミュレーター (100% JavaScript) jsMSX  The first MSX emulator 100% written in Javascript http://jsmsx.sourceforge.net/ Console: Booting jsMSX Starting RAM slots Starting VDP Starting PSG (No Sound) interrupt=0,ticks=59666 cpu ticks/interrupt, cpu clock=3.58 MHz MSX ready to go. Load ROMs and hit [start].

Slide 9

Slide 9 text

LIGHTWEIGHTLANGUAGEDECADE jsLinux - JavaScript PC Emulator (x86) Powerd by QEMU

Slide 10

Slide 10 text

LIGHTWEIGHTLANGUAGEDECADE HTML5 の実用化

Slide 11

Slide 11 text

LIGHTWEIGHTLANGUAGEDECADE 高速化

Slide 12

Slide 12 text

LIGHTWEIGHTLANGUAGEDECADE Webブラウザの高速化競争が激化 JavaScriptエンジンに JIT Compiler が搭載 ブラウザ JavaScriptエンジン Chrome v8 Firefox SpiderMonkey Firefox 3.5 TraceMonkey (TraceJIT) Firefox 4 JaegerMonkey (methodJIT) Firefox 9 IronMonkey Opera 9.5 Futhark Opera 10.5 Carakan Safari JavaScriptCore Safari 4 Nitro

Slide 13

Slide 13 text

LIGHTWEIGHTLANGUAGEDECADE http://ie.microsoft.com/testdrive/Benchmarks/SunSpider/Default.html より図引用 IE9 プレビュー

Slide 14

Slide 14 text

LIGHTWEIGHTLANGUAGEDECADE http://ie.microsoft.com/testdrive/Benchmarks/SunSpider/Default.html より図引用 IE9 正式版

Slide 15

Slide 15 text

LIGHTWEIGHTLANGUAGEDECADE Compiler

Slide 16

Slide 16 text

LIGHTWEIGHTLANGUAGEDECADE +00: B8 78563412 MOV EAX,0x12345678 +05: 35 78563412 XOR EAX,0x12345678 +0A: 35 78563412 XOR EAX,0x12345678 +0F: 35 78563412 XOR EAX,0x12345678 (例)JIT Compiler による論理演算の最適化 JavaScript ソースコード x86 最適化コード(JITで機械語を生成) var a = 0x12345678 ^ 0x12345678 ^ 0x12345678 ^ 0x12345678 // ...

Slide 17

Slide 17 text

LIGHTWEIGHTLANGUAGEDECADE 脆弱性

Slide 18

Slide 18 text

LIGHTWEIGHTLANGUAGEDECADE +00: 35 9090903C XOR EAX,0x3C909090 +05: 35 9090903C XOR EAX,0x3C909090 +0A: 35 9090903C XOR EAX,0x3C909090 +0F: 35 9090903C XOR EAX,0x3C909090 JavaScript x86 JIT Compiler の問題点 以下の JavaScript ソースを機械語に変換 JITで生成されるx86実行コードを制御可能 x ^= 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090;

Slide 19

Slide 19 text

LIGHTWEIGHTLANGUAGEDECADE +00: 35 909090903C XOR EAX,0x3C909090 +05: 35 909090903C XOR EAX,0x3C909090 +0A: 35 909090903C XOR EAX,0x3C909090 +0F: 35 909090903C XOR EAX,0x3C909090 XORによるNOPコード生成(80%の確率で実行可) +04: 3C 35 CMP AL,0x35 +06: 90 NOP +07: 90 NOP +08: 90 NOP +09: 3C 35 CMP AL,0x35 +0B: 90 NOP 「5の倍数」以外のアドレスにjumpされた場合

Slide 20

Slide 20 text

LIGHTWEIGHTLANGUAGEDECADE

Slide 21

Slide 21 text

LIGHTWEIGHTLANGUAGEDECADE

Slide 22

Slide 22 text

LIGHTWEIGHTLANGUAGEDECADE +00: 35 9090BB7F XOR EAX,0x7FBB9090 +05: 35 2211903C XOR EAX,0x3C901122 +0A: 35 B733903C XOR EAX,0x3C9033B7 +0F: 35 B344903C XOR EAX,0x3C9044B3 (例) MOV EBX, 0x11223344 を実行する方法 JavaScriptソースコード JITで生成されるx86実行コード x ^= 0x3c7FBB90 ^ 0x3c901122 ^ 0x3c9033B7 ^ 0x3c9044B3;

Slide 23

Slide 23 text

LIGHTWEIGHTLANGUAGEDECADE (例) MOV EBX, 0x11223344 を実行する方法 +01番地からのディスアセンブル結果 +01: 90 NOP +02: 90 NOP +03: BB 7F352211 MOV EBX,0x1122357F +08: 90 NOP +09: 3C 35 CMP AL,0x35 +0B: B7 33 MOV BH,0x33 +0D: 90 NOP +0E: 3C 35 CMP AL,0x35 +10: B3 44 MOV BL,0x44

Slide 24

Slide 24 text

LIGHTWEIGHTLANGUAGEDECADE JIT-Spray 攻撃

Slide 25

Slide 25 text

LIGHTWEIGHTLANGUAGEDECADE JIT-Spray による任意コード実行の脆弱性 JIT-Spray <!-- x ^= 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090

Slide 26

Slide 26 text

LIGHTWEIGHTLANGUAGEDECADE JIT-Spray による攻撃メカニズム 35 90 90 90 3C 35 90 90 90 3C 35 90 90 90 3C 35 90 90 90 3C shellcode 35 90 90 90 3C 35 90 90 90 3C 35 90 90 90 3C 35 90 90 90 3C shellcode 35 90 90 90 3C 35 90 90 90 3C 35 90 90 90 3C 35 90 90 90 3C shellcode 0xdeadbeef XOR EAX, 0x3C909090 NOPと 解釈 GetPC + 自己書換 (任意コード) リターンアドレス JITが生成するコード

Slide 27

Slide 27 text

LIGHTWEIGHTLANGUAGEDECADE ASLR (Address Space Layout Randomization) 攻撃コード 攻撃コード 攻撃コード Heap領域 ASLR (Address Space Layout Randomization) アドレス空間配置のランダム化 Return Address の上書き (絶対アドレス指定)

Slide 28

Slide 28 text

LIGHTWEIGHTLANGUAGEDECADE ASLR (Address Space Layout Randomization) 攻撃コード 攻撃コード 攻撃コード Heap領域 ASLR (Address Space Layout Randomization) アドレス空間配置のランダム化 Return Address の上書き (絶対アドレス指定) 攻撃コード 攻撃コード 攻撃コード 攻撃コード Heap-Spray攻撃

Slide 29

Slide 29 text

LIGHTWEIGHTLANGUAGEDECADE デモ:YouTube「JITSpray」動画 Digital Security Research Group @ Black Hat DC 2010

Slide 30

Slide 30 text

LIGHTWEIGHTLANGUAGEDECADE

Slide 31

Slide 31 text

LIGHTWEIGHTLANGUAGEDECADE 31

Slide 32

Slide 32 text

LIGHTWEIGHTLANGUAGEDECADE Firefox 3.5 における任意コード実行のデモ

Slide 33

Slide 33 text

LIGHTWEIGHTLANGUAGEDECADE all your Minesweeper are belong to us

Slide 34

Slide 34 text

LIGHTWEIGHTLANGUAGEDECADE 古い Firefox ブラウザ

Slide 35

Slide 35 text

LIGHTWEIGHTLANGUAGEDECADE 今すぐ 更新 しましょう

Slide 36

Slide 36 text

LIGHTWEIGHTLANGUAGEDECADE 無料 です

Slide 37

Slide 37 text

LIGHTWEIGHTLANGUAGEDECADE 無料 ゲームは

Slide 38

Slide 38 text

LIGHTWEIGHTLANGUAGEDECADE Minesweeper マインスイーパ

Slide 39

Slide 39 text

LIGHTWEIGHTLANGUAGEDECADE ※ただし Windows は 有料です

Slide 40

Slide 40 text

LIGHTWEIGHTLANGUAGEDECADE 40