a brief history of exploitation techniques and mitigations on windows

42
This document contains unpublished confidential and proprietary information of Leviathan Security Group, Inc. No disclosure or use of any portion may be made without the express written consent of Leviathan Security Group. © 2007 Leviathan Security Group, Inc. A Brief History of Exploitation Techniques & Mitigations on Windows By Matt Miller

Upload: ankurtyag

Post on 21-Apr-2015

63 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: A Brief History of Exploitation Techniques and Mitigations on Windows

This document contains unpublished confidential and proprietary information of Leviathan Security Group, Inc. No disclosure or use of any portion may be made without the express written consent of Leviathan Security Group.

© 2007 Leviathan Security Group, Inc.

A Brief History of Exploitation

Techniques & Mitigations on Windows

By Matt Miller

Page 2: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 2

• Introduction

– What are exploit mitigations?

• Evolution of exploit mitigations on

Windows

– /GS, SafeSEH, DEP, ASLR

• A look toward the future

Agenda

Page 3: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 3

• Software vulnerabilities are common

• Reliable exploitation techniques exist

– Stack-based buffer overflows

– Heap overflows (not covered due to time)

• Exploit mitigations act as

countermeasures to these techniques

Overview

Page 4: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 4

• Prevent or impede exploitation

• Patching the vulnerability

– The only guaranteed mitigation (if done right)

• Workarounds

– Disabling the vulnerable service

• Generic mitigations

– Buffer overflow prevention

What are exploit mitigations?

Page 5: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 5

THE LOGICAL EVOLUTION

Exploit techniques & mitigations

Page 6: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 6

Starting from the beginning

Local

Variables

Saved

EBP

Saved

EIPArguments

Stack grows toward lower addresses

Common structure of an x86 stack frame

Page 7: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 7

Exploit: Overwrite saved EIP

Local

Variables

Saved

EBP

Saved

EIPArguments

Buffer overflow

• Common stack-based buffer overflow[7]

• Return address is overwritten with address of

shellcode

Page 8: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 8

Mitigation: Stack canaries (/GS)

Local

Variables

Saved

EBP

Saved

EIPArguments

GS

Cookie

0xa47c10390x0012ef040x7601148c

0x414141410x414141410x7843110b

• Compiler change introduced in VS2002[7]

• Canary is validated before a function returns

• Mismatching canary leads to process termination

Page 9: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 9

Exploit: Overwrite variables

• Canary is only checked at function return

• Corrupt arguments or locals may be used before return

• Attacker could overwrite canary or other memory[2,8]

void vulnerable(char *in, char *out) {

char buf[256];

strcpy(buf, in); // overflow!

strcpy(out, buf); // out is corrupt

return; // canary checked

}

Page 10: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 10

Mitigation: /GS improvements

Local

Variables

Saved

EBP

Saved

EIP

Arguments

(Not referenced after

copying to locals)

GS

Cookie

• “Safe” copies of arguments made as locals

• Arrays positioned directly adjacent to GS cookie

• Corruption of dangerous locals and arguments is

less likely

Arguments

&

Pointers

Arrays

Buffer overflow

Page 11: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 11

Exploit: SEH Overwrite

• Structured Exception Handler (SEH) overwrite[1]

– Handler overwritten during overflow

– Called when an exception is generated

• Exception can be generated before the canary is

checked

Local

Variables…

GS

Cookie

Exception

Registration

Record

Next Handler

Buffer overflow

void vulnerable(char *ptr){

char buf[128];

try {

strcpy(buf, ptr);

… exception …

} except(…) { }

}

Page 12: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 12

Exploit: SEH Overwrite (cont’d)

N H

N H

N H

app!_except_handler4

k32!_except_handler4

ntdll!_except_handler4

0xffffffff

Normal SEH Chain

N H 0x7c1408ac

0x414106eb

Corrupt SEH Chain

An exception will cause 0x7c1408ac to

be called as an exception handler as:

EXCEPTION_DISPOSITION Handler(

PEXCEPTION_RECORD Exception,

PVOID EstablisherFrame,

PCONTEXT ContextRecord,

PVOID DispatcherContext);

pop eax

pop eax

ret

Page 13: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 13

Mitigation: SafeSEH

• VS2003 compiler change (/SafeSEH)[9]

• Binaries are compiled with a table of safe exception

handlers

• Exception dispatcher checks if handlers are safe before

calling

Safe SEH Handler Invalid SEH Handler

app!_except_handler4 app!eh1

app!eh2

app!_except_handler4

…Valid

app!_main+0x1c

Not found in table

?

Page 14: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 14

Exploit: SEH Overwrite Part II

• SafeSEH only works if all binaries in a process are compiled with it[4]

• Handler can be pointed into a binary that does

not have a safe exception handler table

N H

Compiled with

/SAFESEH

Not compiled

With /SAFESEH

Page 15: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 15

Mitigation: Dynamic SafeSEH

• Dynamic protection against SEH overwrites[4]

– No compile time hints required

• Symbolic Validation frame inserted as final entry in chain

• Corrupt Next pointers prevent traversal to validation frame

N H

N H

app!_except_handler4

k32!_except_handler4

N H sehprot!_validation_eh

N H app!_main+0x1c

0x41414141

Can’t reach validation frame!

Valid SEH Chain Invalid SEH Chain

?

Page 16: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 16

Recap: GS and SafeSEH

• GS and SafeSEH are solid mitigations for

stack-based buffer overflows

• Applications must be recompiled

– With the exception of dynamic SafeSEH

• Additional runtime mitigations are needed

– Protection for legacy & 3rd party applications

Page 17: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 17

Mitigation: Hardware DEP (NX)

Local

Variables

Saved

EBP

Saved

EIPArguments

• Exploits typically attempt to run shellcode stored in writable memory regions[10]

• Enforcing non-executable pages prevents execution of

arbitrary shellcode

• Binary must indicate support, VS2005 sets flag

Stack

Layout

PaddingAddress

ofjmp esp

ShellcodeExploit

Buffer

Buffer overflow

No-exec stack

Page 18: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 18

Exploit: ret2libc

• NX stack and heap prevents arbitrary code execution

• Library code is executable and can be abused[11]

• Example: return into a library function with a fake call

frame

Local

Variables

Saved

EBP

Saved

EIPArguments

Stack

Layout

PaddingAddress

ofsystem

Fake

Return

Address

Exploit

Buffer

Address

of“cmd”

Buffer overflow

Page 19: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 19

Exploit: ret2libc (cont’d)

• Windows makes extensive use of stdcall

• Caller pushes arguments

• Callee pops arguments with retn

• Allows multiple functions to be chained in ret2libc

Address

ofVirtualProtect

Address

ofjmp esp

Address

of

shellcode

Size

of

shellcode

RWXWritable

addressshellcode

1 2 3Return from

vulnerable

function

Entry toVirtualProtect

Return fromVirtualProtect

Page 20: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 20

• Returning to VirtualProtect requires

the ability to use NULL bytes

– Often impossible (string-related overflows)

• Windows has an API to disable NX for an

entire process

– NtSetInformationProcess[0x22]

• ntdll calls this API & we can abuse it[3]

Exploit: ret2libc (cont’d)

Page 21: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 21

Exploit: NtSetInformationProcess

Address

ofNtdllOkayToLockRoutine

(0x7c952080)

Address

OfLdrpCheckNXCompatibility+0x13

(0x7c91d3f8)

Address

ofjmp esp

(0x1b4c7814)

shl

code

4

byte

pad

z+4

byte

pad

ESP

n

byte

pad

app!vulnerable+0x1c:

104713a4 c20400 retn 4 Return to NtdllOkayToLockRoutine

and add 4 to esp (n=4)

Page 22: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 22

Exploit: NtSetInformationProcess

Address

OfLdrpCheckNXCompatibility+0x13

(0x7c91d3f8)

Address

ofjmp esp

(0x1b4c7814)

shl

code

4

byte

pad

z+4

byte

pad

ESP

ntdll!NtdllOkayToLockRoutine:

7c952080 b001 mov al,0x1 Set al to 1

7c952082 c20400 ret 0x4 Return to

LdrpCheckNxCompatibility+0x13

Page 23: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 23

Exploit: NtSetInformationProcess

Address

ofjmp esp

(0x1b4c7814)

shl

code

z+4

byte

pad

ntdll!LdrpCheckNXCompatibility+0x13:

7c91d3f8 3c01 cmp al,0x1 al is equal to 1

7c91d3fa 6a02 push 0x2 Set esi to 2

7c91d3fc 5e pop esi

7c91d3fd 0f84b72a0200 je 7c93feba ZF=1, jump

7c93feba 8975fc mov [ebp-0x4],esi Set [ebp-4] to 0x2

7c93febd e941d5fdff jmp 7c91d403

7c91d403 837dfc00 cmp [ebp-0x4],0x0 [ebp-4] is not 0

7c91d407 0f8560890100 jne 7c935d6d ZF=0, jump

Page 24: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 24

Exploit: NtSetInformationProcess

7c935d6d 6a04 push 0x4 Length := 4

7c935d6f 8d45fc lea eax,[ebp-0x4]

7c935d72 50 push eax &[ebp-4] (0x2)

7c935d73 6a22 push 0x22 ProcessExecuteFlags

7c935d75 6aff push 0xff NtCurrentProcess()

7c935d77 e8b188fdff call ntdll!ZwSetInformationProcess Invoke

7c935d7c e9c076feff jmp 7c91d441 NX is now disabled

7c91d441 5e pop esi

7c91d442 c9 leave

7c91d443 c20400 ret 0x4 Return to jmp esp then

jump into shellcode

Address

ofjmp esp

(0x1b4c7814)

shl

code

z+4

byte

pad

ESP

ZwSetInformationProcess(

NtCurrentProcess(), ProcessExecuteFlags,

&ExecuteFlags, sizeof(ULONG));

Page 25: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 25

Mitigation: Permanent flag

• Boot flag can force all applications to run

with NX enabled (AlwaysOn)[10]

• Processes can prevent future updates to

execute flags

– NtSetInformationProcess[22] with flag 0x8

• Does not mitigate return into VirtualProtect

Page 26: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 26

• Memory segments can be marked non-

executable with hardware support– Stacks, heaps, etc

• Ret2libc can run malicious code without using

shellcode

• It can also be used to disable NX and run

shellcode– VirtualProtect

– NtSetInformationProcess

Recap: DEP (NX)

Page 27: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 27

A common thread

What is common about all of the

exploitation techniques

discussed so far?

Page 28: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 28

A common thread

• Each technique generally relies on

address space knowledge

– Address used for a return address

– Address used for an SEH handler

– Address used for a library routine (ret2libc)

• What if the address space was

unpredictable?

Page 29: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 29

Mitigation: ASLR

• Address Space Layout Randomization(ASLR)[12]

– Images must be compiled with /dynamicbase

• Randomizes memory locations

– Addresses are no longer predictable

app.exe

user32.dll

ssleay32.dll

ntdll.dll

app.exe

user32.dll

ssleay32.dll

ntdll.dll

app.exe

user32.dll

ssleay32.dll

ntdll.dll

Boot 1 Boot 2 Boot 3

process

address

space

Page 30: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 30

Exploit: Partial overwrite

• Only the high-order two bytes are randomized in

image mappings

• Low-order two bytes can be overwritten to return

into another location within a mapping

– Overwriting 0x1446047c with 0x14461846

• Target address can be used to pivot

Local

Variables

Saved

EBP

Saved

EIP

Buffer overflow

memcpy(

dest, Stack buf

src, Controlled

length); Controlled

Page 31: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 31

Exploit: non-reloc executables

• Not all binaries are compiled with relocation

information

– Executables often don’t have relocations (/fixed:yes)

• ASLR is only effective if all regions are

randomized

app.exe

user32.dll

ssleay32.dll

ntdll.dll

app.exe

user32.dll

ssleay32.dll

ntdll.dll

app.exe

user32.dll

ssleay32.dll

ntdll.dll

Boot 1 Boot 2 Boot 3

process

address

space

Page 32: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 32

Exploit: Brute force

• Vista ASLR randomizes most DLLs once

per-boot

• Brute forcing addresses may be possible

– No “forking” daemons in Windows

– Vista service restart policy limits this

• Not as effective against Windows ASLR in

most cases

Page 33: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 33

Exploit: Information disclosure

• Application bugs may leak address space

information

• Can be used to construct reliable return

addresses

• Knowledge of image file version is all that

is needed

Page 34: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 34

Recap: ASLR

• Address space becomes unpredictable

• Exploits cannot assume the location of

opcodes and other values

• Still, it has its weaknesses

– Partial overwrite

– Brute force

– Information disclosure

Page 35: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 35

THE CHRONOLOGICAL

EVOLUTION

Exploit techniques & mitigations

Page 36: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 36

Chronology on Windows

• Attack: Smashing the stack (Aug, 1996)

• Mitigation: Visual Studio 2002 (Feb, 2002)

– First release of /GS[7]

• Attack: Overwrite variables[2] (Feb, 2002)

• Attack: SEH Overwrite[1] (Sep, 2003)

Page 37: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 37

Chronology on Windows

• Mitigation: Visual Studio 2003 (Nov, 2003)

– Arrays placed adjacent to GS cookie

– /SAFESEH added[9]

• XP SP2 released (Aug, 2004)

– Windows compiled with /GS and /SAFESEH

– DEP

• Attack: Bypass NX[3] (Sep, 2005)

Page 38: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 38

Chronology on Windows

• Mitigation: Visual Studio 2005 (Nov, 2005)

– Arguments copied to safe locals for /GS

• Mitigation: ASLR (Nov, 2006)

– Included with Windows Vista

– Attacks against ASLR already existed

• Attack: Weak GS entropy[5] (May, 2007)

Page 39: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 39

WRAP UP

Exploit techniques & mitigations

Page 40: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 40

Looking toward the future

• Vista has formidable mitigations

– GS, SafeSEH, Heap cookies, DEP, ASLR

• Easily exploitable issues have been found

– Alexander Sotirov’s write-up on ANI

• Third parties have been slow to adopt

• Unlikely Vista will have a wormable flaw

Page 41: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 41

Questions?

Page 42: A Brief History of Exploitation Techniques and Mitigations on Windows

Leviathan Security Group Proprietary & Confidential. Client Internal Use Only. 42

References

[1] Litchfield, David. Defeating the Stack Based Buffer Overflow Prevention Mechanism of Microsoft Windows

20003 Server. http://www.ngssoftware.com/papers/defeating-w2k3-stack-protection.pdf.

[2] Ren, Chris et al. Microsoft Compiler Flaw Technical Note.

http://www.cigital.com/news/index.php?pg=art&artid=70.

[3] skape, Skywing. Bypassing Windows Hardware-enforced DEP.

http://www.uninformed.org/?v=2&a=4&t=sumry.

[4] skape. Preventing the Exploitation of SEH Overwrites. http://www.uninformed.org/?v=5&a=2&t=sumry.

[5] skape. Reducing the Effective Entropy of GS Cookies. http://www.uninformed.org/?v=7&a=2&t=sumry.

[6] Aleph1. Smashing the Stack for Fun and Profit.

http://www.phrack.org/issues.html?issue=49&id=14#article.

[7] Microsoft. /GS Compiler Switch.

http://msdn2.microsoft.com/en-us/library/8dbf701c(VS.80).aspx.

[8] Whitehouse, Ollie. Analysis of GS Protections in Microsoft Windows Vista.

http://www.symantec.com/avcenter/reference/GS_Protections_in_Vista.pdf.

[9] Microsoft. /SAFESEH Compiler Switch. http://msdn2.microsoft.com/en-us/library/9a89h429(VS.80).aspx.

[10] Microsoft. A detailed description of DEP. http://support.microsoft.com/kb/875352.

[11] Wikipedia. Return-to-libc attack. http://en.wikipedia.org/wiki/Return-to-libc_attack.

[12] Wikipedia. Address Space Layout Randomization (ASLR). http://en.wikipedia.org/wiki/ASLR.