Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JavaScriptは機械語となる

3ddb3a4c58f5df64b92627f00bc09d72?s=47 takesako
August 04, 2012

 JavaScriptは機械語となる

HTML5アプリケーション基盤としてのプログラミング言語JavaScriptとセキュリティ

3ddb3a4c58f5df64b92627f00bc09d72?s=128

takesako

August 04, 2012
Tweet

Transcript

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

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

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

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

    JavaScript Node.js jQuery
  5. LIGHTWEIGHTLANGUAGEDECADE JavaScript = 現代のマシン語(機械語)? Ajax, Web 2.0, Thin client… mobile

    server Server Side Node.js browser HTML5
  6. LIGHTWEIGHTLANGUAGEDECADE x86

  7. LIGHTWEIGHTLANGUAGEDECADE コンピュータの進化とプログラミング言語 CPUが高速化 Intel x86 (Pentium … Core i7) アウト・オブ・オーダー、投機的実行

    … スーパーパイプライン、スーパースカラー … Lightweight Language スクリプト言語でも高速に動作 Perl, Ruby, Python, PHP, ActionScript … JavaScript 高速化バトル勃発 Chrome の v8 エンジンの公開(2008年)
  8. 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].
  9. LIGHTWEIGHTLANGUAGEDECADE jsLinux - JavaScript PC Emulator (x86) Powerd by QEMU

  10. LIGHTWEIGHTLANGUAGEDECADE HTML5 の実用化

  11. LIGHTWEIGHTLANGUAGEDECADE 高速化

  12. 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
  13. LIGHTWEIGHTLANGUAGEDECADE http://ie.microsoft.com/testdrive/Benchmarks/SunSpider/Default.html より図引用 IE9 プレビュー

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

  15. LIGHTWEIGHTLANGUAGEDECADE Compiler

  16. 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 // ...
  17. LIGHTWEIGHTLANGUAGEDECADE 脆弱性

  18. 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;
  19. 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された場合
  20. LIGHTWEIGHTLANGUAGEDECADE

  21. LIGHTWEIGHTLANGUAGEDECADE

  22. 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;
  23. 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
  24. LIGHTWEIGHTLANGUAGEDECADE JIT-Spray 攻撃

  25. LIGHTWEIGHTLANGUAGEDECADE JIT-Spray による任意コード実行の脆弱性 <!DOCTYPE html> <html><head> <title>JIT-Spray</title> <script language="JavaScript"><!-- 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
  26. 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が生成するコード
  27. LIGHTWEIGHTLANGUAGEDECADE ASLR (Address Space Layout Randomization) 攻撃コード 攻撃コード 攻撃コード Heap領域

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

    ASLR (Address Space Layout Randomization) アドレス空間配置のランダム化 Return Address の上書き (絶対アドレス指定) 攻撃コード 攻撃コード 攻撃コード 攻撃コード Heap-Spray攻撃
  29. LIGHTWEIGHTLANGUAGEDECADE デモ:YouTube「JITSpray」動画 Digital Security Research Group @ Black Hat DC

    2010
  30. LIGHTWEIGHTLANGUAGEDECADE

  31. LIGHTWEIGHTLANGUAGEDECADE 31

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

  33. LIGHTWEIGHTLANGUAGEDECADE all your Minesweeper are belong to us

  34. LIGHTWEIGHTLANGUAGEDECADE 古い Firefox ブラウザ

  35. LIGHTWEIGHTLANGUAGEDECADE 今すぐ 更新 しましょう

  36. LIGHTWEIGHTLANGUAGEDECADE 無料 です

  37. LIGHTWEIGHTLANGUAGEDECADE 無料 ゲームは

  38. LIGHTWEIGHTLANGUAGEDECADE Minesweeper マインスイーパ

  39. LIGHTWEIGHTLANGUAGEDECADE ※ただし Windows は 有料です

  40. LIGHTWEIGHTLANGUAGEDECADE 40