Malicious Code: Attacks & Defenses

62
Malicious Code Malicious Code for Fun and Profit for Fun and Profit Mihai Christodorescu [email protected] 29 March 2007

Transcript of Malicious Code: Attacks & Defenses

Page 1: Malicious Code: Attacks & Defenses

Malicious CodeMalicious Codefor Fun and Profitfor Fun and Profit

Mihai [email protected]

29 March 2007

Page 2: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 2

SYN Cookies (cont’d)SYN Cookies (cont’d)

• SYN cookies are particular choices of initial TCP sequence numbers by TCP servers.

• Server sequence number =Client sequence number +

t mod 32 (top 5 bits)max segment size (next 3 bit)HK( cl. IP, cl. port, srv IP, srv port, t )

Page 3: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 3

What is Malicious Code?What is Malicious Code?

Viruses, worms, trojans, …Code that breaks your security policy.

CharacteristicsAttack vectorPayloadSpreading algorithm

Page 4: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 4

OutlineOutline

• Attack Vectors

• Payloads

• Spreading Algorithms

• Case Studies

Page 5: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 5

Attack VectorsAttack Vectors

• Social engineering“Make them want to run it.”

• Vulnerability exploitation“Force your way into the system.”

• Piggybacking“Make it run when other programs run.”

Page 6: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 6

Social EngineeringSocial Engineering

• Suggest to user that the executable is:– A game.– A desirable picture/movie.– An important document.– A security update from Microsoft.– A security update from the IT department.

• Spoofing the sender helps.

Page 7: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 7

OutlineOutline

• Attack Vectors:Social EngineeringVulnerability ExploitationPiggybacking

• Payloads• Spreading Algorithms• Case Studies

Page 8: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 8

Vulnerability ExploitationVulnerability Exploitation

• Make use of flaws in software input handling.

• Sample techniques:– Buffer overflow attacks.– Format string attacks.– Return-to-libc attacks.– SQL injection attacks.

Page 9: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 9

Basic PrinciplesBasic Principles

A buffer overflow occurs when data is stored past the boundaries of an array or a string.

The additional data now overwrites nearby program variables.

Result:Attacker controls or takes over acurrently running process.

BufferOverflows

Page 10: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 10

ExampleExample

Expected input: \\hostname\path

BufferOverflows

void process_request( char * req )

{

// Get hostname

char host[ 20 ];

int pos = find_char( req, ‘\\’, 2 );

strcpy( host,

substr( req, 2, pos – 1 ) );

...

return;

}

process_request( “\\tux12\usr\foo.txt” ); ⇒ OK

process_request( “\\aaabbbcccdddeeefffggghhh\bar” ); ⇒ BAD

Page 11: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 11

A stack frame per procedure call.

Program StackProgram StackBuffer

Overflows

void process_request( char * req )

{

// Get hostname

char host[ 20 ];

int pos = find_char( req, ‘\\’, 2 );

strcpy( host,

substr( req, 2, pos – 1 ) );

...

return;

}

main()

process_request()

strcpy()

Page 12: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 12

A stack frame per procedure call.

Program StackProgram StackBuffer

Overflows

void process_request( char * req )

{

// Get hostname

char host[ 20 ];

int pos = find_char( req, ‘\\’, 2 );

strcpy( host,

substr( req, 2, pos – 1 ) );

...

return;

}

main()

process_request()

strcpy()

Page 13: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 13

A stack frame per procedure call.

Program StackProgram StackBuffer

Overflows

void process_request( char * req )

{

// Get hostname

char host[ 20 ];

int pos = find_char( req, ‘\\’, 2 );

strcpy( host,

substr( req, 2, pos – 1 ) );

...

return;

}

main()

process_request()

strcpy()

arg: req

Page 14: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 14

A stack frame per procedure call.

Program StackProgram StackBuffer

Overflows

void process_request( char * req )

{

// Get hostname

char host[ 20 ];

int pos = find_char( req, ‘\\’, 2 );

strcpy( host,

substr( req, 2, pos – 1 ) );

...

return;

}

main()

process_request()

strcpy()

arg: reqreturn addressframe pointer

Page 15: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 15

A stack frame per procedure call.

Program StackProgram StackBuffer

Overflows

void process_request( char * req )

{

// Get hostname

char host[ 20 ];

int pos = find_char( req, ‘\\’, 2 );

strcpy( host,

substr( req, 2, pos – 1 ) );

...

return;

}

main()

process_request()

strcpy()

arg: reqreturn addressframe pointer

local: host

Page 16: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 16

A stack frame per procedure call.

Program StackProgram StackBuffer

Overflows

void process_request( char * req )

{

// Get hostname

char host[ 20 ];

int pos = find_char( req, ‘\\’, 2 );

strcpy( host,

substr( req, 2, pos – 1 ) );

...

return;

}

main()

process_request()

strcpy()

arg: reqreturn addressframe pointer

local: pos

local: host

Page 17: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 17

Normal ExecutionNormal ExecutionBuffer

Overflows

void process_request( char * req )

{

// Get hostname

char host[ 20 ];

int pos = find_char( req, ‘\\’, 2 );

strcpy( host,

substr( req, 2, pos – 1 ) );

...

return;

}

main()

process_request()

arg: reqreturn addressframe pointer

local: host

local: pos

process_request( “\\tux12\usr\foo.txt” );

Page 18: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 18

Normal ExecutionNormal ExecutionBuffer

Overflows

void process_request( char * req )

{

// Get hostname

char host[ 20 ];

int pos = find_char( req, ‘\\’, 2 );

strcpy( host,

substr( req, 2, pos – 1 ) );

...

return;

}

main()

process_request()

arg: reqreturn addressframe pointer

7

local: host

process_request( “\\tux12\usr\foo.txt” );

local: post u x 1

2 \0

Page 19: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 19

Overflow ExecutionOverflow ExecutionBuffer

Overflows

void process_request( char * req )

{

// Get hostname

char host[ 20 ];

int pos = find_char( req, ‘\\’, 2 );

strcpy( host,

substr( req, 2, pos – 1 ) );

...

return;

}

main()

process_request()

arg: reqreturn addressframe pointer

32

local: host

process_request( “\\aaabbbcccdddeeefffggghhhiiijjj\bar” );

local: posa a a b

b b c c

c d d d

e e e f

f f g g

g

i i i j

h h h

j j \0

Characters that overwrite

the return address.

Page 20: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 20

The attacker gets one chance to gain control.

Craft an input string such that:• The return address is overwritten with a pointer

to malicious code.• The malicious code is placed inside the input

string.

Smashing the StackSmashing the StackBuffer

Overflows

Malicious code can create a root shell by executing “/bin/sh”.

Page 21: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 21

Shell CodeShell Code

EB 17 5E 89 76 08 31 C0

88 46 07 89 46 0C B0 0B

89 F3 8D 4E 08 31 D2 CD

80 E8 E4 FF FF FF / b

i n / s h \0 arg 2

to code

arg 2 arg 1 pointer

BufferOverflows

Code for exec(“/bin/sh”):

mov edx, arg2mov ecx, arg1mov ebx, “/bin/sh”mov eax, 0Bhint 80h

Pointer value foroverwriting the return address.

Page 22: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 22

• Defense against stack-smashing attacks:– Bounds-checking. – Protection libraries.– Non-executable stack.

– setuid()/chroot().– Avoid running programs as root!– Address randomization.

– Behavioral monitoring.

Thicker ArmorThicker ArmorBuffer

Overflows

Page 23: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 23

More InfoMore Info

“Smashing the Stack for Fun and Profit”by Aleph One

StackGuard, RAD, PAX, ASLR

CERT

Page 24: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 24

Format String AttacksFormat String Attacks

• Another way to illegally control program values.

• Uses flaws in the design of printf():

printf( “%s: %d” , s, x );

FormatStrings

Page 25: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 25

printfprintf()() OperationOperation

printf( “%s: %d, %x”,

s, x, y );

FormatStrings

foo()

printf()

yxs

format string ptr

Page 26: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 26

Attack 1: Read Any ValueAttack 1: Read Any Value

What the code says:printf( str );

What the programmer meant:printf( “%s”, str );

If str = “%x%x%x%x%s”

FormatStrings

secret key ptr

format string ptr

Page 27: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 27

Attack 2: Write to AddressAttack 2: Write to Address

What the code says:printf( str );

If str = “%x%x%x%x%n”

FormatStrings

return address

format string ptr

4

Page 28: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 28

DefensesDefenses

Never use printf() without a format string!

FormatGuard.

FormatStrings

Page 29: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 29

OutlineOutline

• Attack Vectors:Social EngineeringVulnerability ExploitationPiggybacking

• Payloads• Spreading Algorithms• Case Studies

Page 30: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 30

PiggybackingPiggybacking

Malicious code injected into a benign program or data file.

• Host file can be:– An executable.– A document with some executable content

(Word documents with macros, etc.).

Page 31: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 31

Piggybacking ExecutablesPiggybacking Executables

• Modify program on disk:

jmp evil_code

Variations:

• Jump to malicious code only on certain actions.

• Spread malicious code throughout program.

Page 32: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 32

Piggybacking DocumentsPiggybacking Documents

• Documents with macros:Microsoft Office supports documents with

macros scripted in Visual Basic (VBA).

• Macro triggered on:– Document open– Document close– Document save– Send document by email

Page 33: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 33

OutlineOutline

• Attack Vectors:Social EngineeringVulnerability ExploitationPiggybacking

• Payloads• Spreading Algorithms• Case Studies• Defenses

Page 34: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 34

PayloadPayload

Target the interesting data:

• Passwords

• Financial data

• User behavior

• User attention

Keylogger

Screen scraper

Spyware

Adware

Page 35: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 35

KeyloggerKeylogger UseUse

Page 36: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 36

Screen Scraper UseScreen Scraper Use

Page 37: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 37

More Payload IdeasMore Payload Ideas

Victim machines are pawns in larger attack:– Botnets.

– Distributed denial of service (DDoS).

– Spam proxies.

– Anonymous FTP sites.

– IRC servers.

Page 38: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 38

OutlineOutline

• Attack Vectors:Social EngineeringVulnerability ExploitationPiggybacking

• Payloads• Spreading Algorithms• Case Studies• Defenses

Page 39: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 39

Spreading MethodsSpreading Methods

Depends on the attack vector:Email-based⇒ need email addresses

Vulnerability-based⇒ need IP addresses of hosts running the

vulnerable service

Piggybacking⇒ need more files to infect

Page 40: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 40

Spreading through EmailSpreading through Email

MalwareInternet

HTML files (from cache)

Windows Address Book

Outlook Express folders

Outlook folders

Page 41: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 41

Vulnerable Target DiscoveryVulnerable Target Discovery

Need to find Internet (IP) addresses.

• Scanning:

• Target list:

• Passive: Contagion worms

RandomSequentialBandwidth-limited

Pre-generatedExternally-generated ⇒ MetaserverwormsInternal target list ⇒ Topological worms

Page 42: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 42

OutlineOutline

• Attack Vectors:Social EngineeringVulnerability ExploitationPiggybacking

• Payloads• Spreading Algorithms• Case Studies

Page 43: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 43

Types of Malicious CodeTypes of Malicious Code

• VirusSelf-replicating, infects programs and

documents.e.g.: Chernobyl/CIH, Melissa, Elkern

• WormSelf-replicating, spreads across a network.e.g.: ILoveYou, Code Red, B(e)agle, Witty

McGraw and Morrisett “Attacking malicious code: A report to the Infosec Research Council” Sept./Oct. 2000.

Page 44: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 44

Types of Malicious CodeTypes of Malicious Code

• Trojan– Malware hidden inside useful programse.g.: NoUpdate, KillAV, Bookmarker

• Backdoor– Tool allowing unauthorized remote accesse.g.: BackOrifice, SdBot, Subseven

Page 45: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 45

Types of Malicious CodeTypes of Malicious Code

• Spyware– Secretly monitors system activitye.g.: ISpynow, KeyLoggerPro, Look2me

• Adware– Monitors user activity for advertising purposese.g.: WildTangent, Gator, BargainBuddy

Page 46: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 46

OutlineOutline

• Attack Vectors:Social EngineeringVulnerability ExploitationPiggybacking

• Payloads• Spreading Algorithms• Case Studies: Sobig

Page 47: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 47

The The SobigSobig WormWorm

• Mass-mailing, network-aware worm• Multi-stage update capabilities

Launch Deactivation

Sobig.A 9 Jan. 2003 -Sobig.B 18 May 2003 31 May 2003

Sobig.C 31 May 2003 8 June 2003

Sobig.D 18 June 2003 2 July 2003Sobig.E 25 June 2003 14 July 2003

Sobig.F 18 Aug 2003 10 Sept 2003

Page 48: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 48

• E-mail

• Network shares

SobigSobig: Attack Vector: Attack Vector

[email protected]:

Subject:

[email protected]@[email protected]@yahoo.com

• Compressed executable attachment with renamed extension.

• Later: attachment in ZIP file.

Page 49: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 49

SobigSobig: Payload: Payload

Geocities web page

Trojan web server

• 1st stage:Backdoor (Lala)& keylogger

• 2nd stage:Proxy (WinGate)

Page 50: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 50

SobigSobig: Payload: Payload

...Hacked DSL/cable hosts

Trojan web server

1

22

Page 51: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 51

SobigSobig: Spreading Algorithm: Spreading Algorithm

• E-mail addresses extracted from files on disk.

• Network shares automatically discovered.

Page 52: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 52

Sobig.FSobig.F in Numbersin Numbers

August: 19 20 21 22 23

Cour

tesy

of

Mes

sage

Labs

.com

Page 53: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 53

OutlineOutline

• Attack Vectors:Social EngineeringVulnerability ExploitationPiggybacking

• Payloads• Spreading Algorithms• Case Studies: Sobig, Blaster

Page 54: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 54

The The BlasterBlaster WormWorm

• Multi-stage worm exploiting Windows vulnerability

2003: July August1716 25 31 11 13 15 17 19

Microsoft releases patch

LSD Research exploit released

CERT advisory

Blaster appears 1.2 million hosts infected

Metasploit refined exploit

FRB Atlanta, MD DMV, BMW

Scandinavian bank closes all 70 branches

Page 55: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 55

Blaster: Attack VectorBlaster: Attack Vector

• Uses a Microsoft Windows RPC DCOM vulnerability.

• Coding flaw:1. The RPC service passes part of the

request to function GetMachineName().2. GetMachineName() copies machine name

to a fixed 32-byte buffer.

Page 56: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 56

Blaster: Attack VectorBlaster: Attack Vector

Exploit 1

“tftp GET msblast.exe” 2

TFTPServer

“GET msblast.exe”3

4

“start msblast.exe” 5

Page 57: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 57

Blaster: PayloadBlaster: Payload

• Worm installs itself to start automatically.

• All infected hosts perform DDoS against windowsupdate.com .– SYN flood attack with spoofed source IP,

Aug 15 → Dec 31 andafter the 15th of all other months.

Page 58: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 58

Blaster: Effect on Local HostBlaster: Effect on Local Host

• RPC/DCOM disabled:– Inability to cut/paste.– Inability to move icons.– Add/Remove Programs list empty.– DLL errors in most Microsoft Office programs.– Generally slow, or unresponsive system

performance.

Page 59: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 59

Blaster: Spreading AlgorithmBlaster: Spreading Algorithm

• Build IP address list:40% chance to start with local IP address.60% chance to generate random IP address.

• Probe 20 IPs at a time.

• Exploit type:80% Windows XP.20% Windows 2000.

Page 60: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 60

Blaster: Infection RateBlaster: Infection Rate

Page 61: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 61

Future Threat: Future Threat: SuperwormSuperworm

“Curious Yellow: the First Coordinated Worm Design” – Brandon Wiley

• Fast replication & adaptability:– Pre-scan the network for targets.– Worm instances communicate to coordinate

infection process.– Attack vectors can be updated.– Worm code mutates.

Page 62: Malicious Code: Attacks & Defenses

29 March 2007 Mihai Christodorescu 62

ConclusionsConclusions

• Vulnerabilities left unpatched can and will be used against you.

• Attackers are more sophisticated.

• Need to understand the attackers’ perspective.