part i the basic idea

22

Upload: paki-irwin

Post on 01-Jan-2016

22 views

Category:

Documents


0 download

DESCRIPTION

Part I The Basic Idea. return result. getURL. call getURL. IE. software. sequence of instructions in memory logically divided in functions that call each other function ‘IE’ calls function ‘ getURL ’ to read the corresponding page - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Part I The  Basic Idea
Page 2: Part I The  Basic Idea

Part IThe Basic Idea

Page 3: Part I The  Basic Idea

software

• sequence of instructions in memory• logically divided in functions that call

each other– function ‘IE’ calls function ‘getURL’ to read

the corresponding page• in CPU, the program counter contains

the address in memory of the next instruction to execute– normally this is the next address

(instruction 100 is followed by instruction 101, etc)

– not so with function call

200

201

202

203

204

100

101

102

103

IEge

tUR

L

104

call getURL

return result

Page 4: Part I The  Basic Idea

software

• sequence of instructions in memory• logically divided in functions that call

each other– function ‘IE’ calls function ‘getURL’ to read

the corresponding page• in CPU, the program counter contains

the address in memory of the next instruction to execute– normally this is the next address

(instruction 100 is followed by instruction 101, etc)

– not so with function call

return result

call getURL

200

201

202

203

204

100

101

102

103

104

PC

PC

PC

PC

PC

PC

PC

PC

PC

PC

IEge

tUR

L

Page 5: Part I The  Basic Idea

1020

1021

1022

1023

1024

software

• so how does our CPU know where to return?– it keeps administration– on a ‘stack’

200

201

202

203

204

100

101

102

103

104

stac

kPC

PCcall getURL

return result

103

PC

PC

PC

PC

PC

PC

PC IEge

tUR

L

stack pointer (SP)

Points to last added entry

on the stack

Page 6: Part I The  Basic Idea

real functions variables

getURL (){

char buf[10]; read(keyboard,buf,64);get_webpage (buf);

}IE (){

getURL ();}

Page 7: Part I The  Basic Idea

real functions variables

getURL (){

char buf[10]; read(keyboard,buf,64);get_webpage (buf);

}IE (){

getURL ();}

call read

200

201

202

203

100

101

102

103

IEge

tUR

L

104

call getURL

return result

Page 8: Part I The  Basic Idea

real functions variables

call read

200

201

202

203

100

101

102

103

IEge

tUR

L

104

call getURL

return result

getURL (){

char buf[10]; read(keyboard,buf,64);get_webpage (buf);

}IE (){

getURL ();}

stac

k

103

1022

1023

1024

1019

1021

1020

old FP

1018

1017

1016

1015

1014

1013

1012

1011

1010

frame pointer (FP)

Points to start of this

function’s stack frame

Page 9: Part I The  Basic Idea

real functions variables

call read

200

201

202

203

100

101

102

103

IEge

tUR

L

104

call getURL

return result

getURL (){

char buf[10]; read(keyboard,buf,64);get_webpage (buf);

}IE (){

getURL ();}

stac

k

103

1022

1023

1024

1019

1021

1020

old FP

1018

1017

1016

1015

1014

1013

1012

1011

1010

Page 10: Part I The  Basic Idea

real functions variables old FP

call read

200

201

202

203

100

101

102

103

IE

104

call getURL

return result

stac

k

103

1022

1023

1024

1019

1021

1020

1018 buf

1017

1016

1015

1014

1013

1012

1011

1010

getURL (){

char buf[10]; read(keyboard,buf,64);get_webpage (buf);

}IE (){

getURL ();}

1009

1008

1007ge

tUR

L

300

301

302

303 return

read

Page 11: Part I The  Basic Idea

real functions variables

call read

200

201

202

203

100

101

102

103

IE

104

call getURL

return result

stac

k

103

1022

1023

1024

1019

1021

1020

1018

1017

1016

1015

getURL (){

char buf[10]; read(keyboard,buf,64);get_webpage (buf);

}IE (){

getURL ();}

1014

1013

1012

1011

1010

64

(buf)

fd

old FP

1009

1008

1007

buf

getU

RL

stac

k

300

301

302

303 return

read

Page 12: Part I The  Basic Idea

real functions variables

call read

200

201

202

203

100

101

102

103

IE

104

call getURL

return result

stac

k

103

1022

1023

1024

1019

1021

1020

1018

1017

1016

1015

getURL (){

char buf[10]; read(keyboard,buf,64);get_webpage (buf);

}IE (){

getURL ();}

1014

1013

1012

1011

1010

old FP

1009

1008

1007

64

(buf)

fdbu

f

getU

RL

202

300

301

302

303 return

read

Page 13: Part I The  Basic Idea

real functions variables

call read

200

201

202

203

100

101

102

103

IE

104

call getURL

return result

stac

k

103

1022

1023

1024

1019

1021

1020

1018

1017

1016

1015

getURL (){

char buf[10]; read(keyboard,buf,64);get_webpage (buf);

}IE (){

getURL ();}

1014

1013

1012

1011

1010

old FP

202

10231009

1008

1007

64

(buf)

fd

getU

RL

300

301

302

303 return

read

frame pointer (FP)

Page 14: Part I The  Basic Idea

real functions variables

call read

200

201

202

203

100

101

102

103

IE

104

call getURL

return result

stac

k

103

1022

1023

1024

1019

1021

1020

1018

1017

1016

1015

getURL (){

char buf[10]; read(keyboard,buf,64);get_webpage (buf);

}IE (){

getURL ();}

1014

1013

1012

1011

1010

old FP

202

10231009

1008

1007

64

(buf)

fdon “return

from read”

getU

RL

300

301

302

303 return

read

Page 15: Part I The  Basic Idea

real functions variables

call read

200

201

202

203

100

101

102

103

IE

104

call getURL

return result

stac

k

103

1022

1023

1024

1019

1021

1020

1018

1017

1016

1015

getURL (){

char buf[10]; read(keyboard,buf,64);get_webpage (buf);

}IE (){

getURL ();}

1014

1013

1012

1011

1010

old FP

202

10231009

1008

1007

64

(buf)

fd

getU

RL

300

301

302

303 return

read

POP

Page 16: Part I The  Basic Idea

real functions variables

call read

200

201

202

203

100

101

102

103

IE

104

call getURL

return result

stac

k

103

1022

1023

1024

1019

1021

1020

1018

1017

1016

1015

getURL (){

char buf[10]; read(keyboard,buf,64);get_webpage (buf);

}IE (){

getURL ();}

1014

1013

1012

1011

1010

old FP

202

10231009

1008

1007

64

(buf)

fd

getU

RL

300

301

302

303 return

read

Page 17: Part I The  Basic Idea

real functions variables

call read

200

201

202

203

100

101

102

103

IE

104

call getURL

return result

stac

k

103

1022

1023

1024

1019

1021

1020

1018

1017

1016

1015

getURL (){

char buf[10]; read(keyboard,buf,64);get_webpage (buf);

}IE (){

getURL ();}

1014

1013

1012

1011

1010

old FP

202

10231009

1008

1007

64

(buf)

fd

getU

RL

300

301

302

303 return

read

RET

Page 18: Part I The  Basic Idea

real functions variables

call read

200

201

202

203

100

101

102

103

IE

104

call getURL

return result

stac

k

103

1022

1023

1024

1019

1021

1020

1018

1017

1016

1015

getURL (){

char buf[10]; read(keyboard,buf,64);get_webpage (buf);

}IE (){

getURL ();}

1014

1013

1012

1011

1010

old FP

202

10231009

1008

1007

64

(buf)

fd

getU

RL

300

301

302

303 return

read

Page 19: Part I The  Basic Idea

Where is the vulnerability?

Page 20: Part I The  Basic Idea

Exploit 103

1022

1023

1024

1019

1021

1020

1018 buf

1017

1016

1015

1014

1013

1012

1011

1010

getURL (){

char buf[10]; read(keyboard, buf, 64);get_webpage (buf);

}IE (){

getURL ();}

1013

Page 21: Part I The  Basic Idea

You may also overwrite other things

• For instance: – Other variables that are also on the stack– Other addresses– Etc.

Page 22: Part I The  Basic Idea

Memory CorruptionFinal words Part I• We have sketched only the most common memory

corruption attack– many variations, e.g.:

• heap stack• more complex overflows• off-by-one

• But there are others also– integer overflows– format string attacks– double free– etc.

• Not now, perhaps later…

*different kinds