Tải bản đầy đủ (.docx) (43 trang)

tìm hiểu sự tràn bộ nhớ đệm

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.17 MB, 43 trang )

SỰ

TRÀN

BỘ

NHỚ

ĐỆM


























TIN

TỨC

BẢO

MẬT
THÔNG

TIN

TRONG

TUẦN
Lỗi

ngày

trở

về

0

vượt

qua


sự

kiểm

soát

của

Người

sử

dụng

Windows.


!"

#$

%

&'

()(

#$

*


!+

!,!

&-

*.

'

&/



(+
0("112

&3

'

!4

(56

7/

8


9)

"

(1

:;

!5

(<=
 
!"#$%&'%()'*+)(,
+-(%./ #(!,)0'1(2
(2)34
567 )(896&:'/);)<(%$=
%(%>?$@ABCD4)E$F226)G
!>?$@'HA6I)E&(,++1-JK 
+L,)2MN,$@0LN(G;'H
O;P0QL,)&R2)226)$
,HJK0!>2R@NPSTUVQ, F4
5677V66W6BOX&(%./
 +1?Y(G+$,HSTUV:1(O
0&'+,))8Z HO/2
Z0WB[4
>?>

>@

AB


CD

0DEF
Sự

tràn

bộ

nhớ

đệm

(BoF).
Tràn

bộ

nhớ

đệm

trên

stack

(ngăn

xếp)

Tràn

bộ

nhớ

đệm

trên

heap
Điều

khiển

stack
Các

bước

tràn

bộ

nhớ

đệm
Cách

thức


tấn

công

một

chương

trình
thực
Sự

phá

vỡ

stack


dụ

của

tràn

bộ

nhớ


đệm
Làm

cách

nào

khai

thác

sự

biến

đổi
của

việc

tràn

bộ

nhớ

đệm
Xác

định


tràn

bộ

nhớ

đệm
Điều

kiện

kiểm

tra

tràn

bộ

nhớ

đệm
trên

heap:

heap.exe
Các


bước

kiểm

tra

việc

tràn

bộ

nhớ
đệm

trên

stack

trong

chương

trình

sửa
lỗi

OllyDbg
Công


cụ

phát

hiện

tràn

bộ

nhớ

đệm
Phòng

chống

tràn

bộ

nhớ

đệm
Công

cụ

đối


phó

với

việc

tràn

bộ

nhớ
đệm
Bút

kiểm

tra

tràn

bộ

nhớ

đệm
GHIE

AJ


0DEF
Khái

niệm
tràn

bộ

nhớ
đệm
Phương
pháp

luận
tràn

bộ

nhớ
đệm
Công

cụ
bảo

mật
tràn

bộ


nhớ
Bút

kiểm
tra

tràn

bộ
nhớ

đệm


dụ

tràn
bộ

nhớ

đệm
Biện

pháp
đối

phó
tràn


bộ
đệm
Phát

hiện
tràn

bộ

nhớ
đệm
Lỗi

tràn

bộ

đệm

tổng

quát

xảy

ra

khi

một


bộ

nhớ

đệm

đã

được

phân

chia

cho

một

không

gian

lưu

trữ

cụ

thể



chứa

nhiều

dữ

liệu

được

sao

chép

vào

lớn

hơn

mức








thể

xử

lý.
Khi

chương

trình

được

biên

dịch



chạy,



sẽ

chỉ

định

một


phần

của

bộ

nhớ



độ

dài

11

bytes

để

chứa

chuỗi
tấn

công.
Hàm

Strcpy


sẽ

sao

chép

chuỗi

“DDDDDDDDDDDDDD”

vào

chuỗi

tấn

công,

lúc

này

bộ

đệm

sẽ

vượt


quá

kích
thước

11

bytes,

dẫn

tới

tràn

bộ

đệm.
Đây



loại

dễ

bị

tổn

thương

trong

hệ

thống
dựa

trên

UNIX



NT.
Tại

Sao

Các

Chương

Trình



Ứng
Dụng


Dễ

Bị

Tổn

Thương

?
Phương

thức

kiểm

tra

biên

không

được

thực
hiện

đầy

đủ


hoặc,

trong

nhiều

trường

hợp,
chúng

bị

bỏ

qua

hoàn

toàn.
Ngôn

ngữ

lập

trình,

chẳng


hạn

như

C,



các
lỗ

hổng

bảo

mật

trong

chính

chúng.
Chương

trình



các


ứng

dụng

không

tuân

thủ
đúng

các

hoạt

động



chúng

được

lập

trình.
Các

chức


năng

trong

ngôn

ngữ

lập

trình

C

như

strcat(),

strcpy(),

sprintf(),
vsprintf(),

bcopy(),

gets()




scanf()



thể

bị

khai

thác

như

việc

chúng

không
kiểm

tra

kích

thước

của

bộ


đệm.
Tìm

Hiểu

Về

Stack
Stack

sử

dụng



chế

Last-In-
First-Out

(vào

sau

ra

trước)


để
truyền

hàm

tham

số



tham
chiếu

với

các

biến

cục

bộ.


hoạt

động

như


một

bộ

đệm,
giữ

tất

cả

các

thông

tin



hàm
cần.
Được

tạo

ra

vào


thời

điểm

bắt
đầu

của

hàm



giải

phóng

lúc
kết

thúc

hàm.
Phần
dưới
của

bộ
nhớ
BP


tại
các

nơi
bên
trong
khung
stack
Phần
trên
của

bộ
\%](D
P#Y%DQ
\%](^
P#Y%^Q
]1(,)<
'
V7_`
200
Các

điểm

SP


đây

Hướng

đi
vào
Hướng

tăng
của

stack
nhớ
K

9%

(+

!(: K

9%

(+

!(:
UF$O
4
K

9%


(+

!(:
UF$O
4
%0F$
+1a
AL

(M

7

N/ AL

(M

7

N/

%
>-(

9O

*'

:-(
!"


&1

!(:
O

*'
O

*'

#L



&P
!"

&1

!(:
%
K

(4

(+

!(: K


(4

(+

!(:
$!

(Q(

R
!(:



:

#L

$!

(Q(
R

6-

1=
Tìm

Hiểu


Về

Heap
Heap



một

khu

vực

của

bộ

nhớ

được

sử

dụng

bởi

một

ứng


dụng



được
cấp

phát

động

tại

thời

gian

chạy

của

các

hàm,

chẳng

hạn


như

malloc().
Các

biến

tĩnh

được

lưu

trữ

trên

stack

cùng

với

dữ

liệu

được

giao,


sử

dụng
giao

diện

malloc.
Heap

lưu

trữ

tất

cả

các

trường

hoặc

thuộc

tính,

hàm


tạo



phương

thức

của
4
UF

$



O
0$!

!(:

#S

!T

!(:

:


#L

:;

!5

(<

U
một

lớp

hoặc

một

đối

tượng.


*V
#$

%
"T

&/



*V
#$

%


*V
#$

%
"T

&/
:3
:3


*V

W6

&X


"T

&/
:3



"

G$

%

A'

"

W6
Nếu

một

ứng

dụng

sao

chép

dữ

liệu




không

kiểm

tra





phù

hợp

với

nơi

được

sao

chép

tới,

thì

kẻ


tấn
công



thể

cung

cấp

một

lượng

lớn

dữ

liệu

cho

ứng

dụng

đó,

thực


hiện

ghi

đè

lên

thông

tin

quản



của

heap.
Kẻ

tấn

công

làm

một


bộ

nhớ

đệm

bị

tràn

trên

phần

dưới

của

heap,

ghi

đè

lên

các

biến


động

khác

gây

nên

các
biến

đổi

bất

ngờ



không

mong

muốn.


Y

!"1


K

Z!

(-(

<

!"T[

&/



\

(1

6]6

:;

!5

(<

:3

1-!


&V(

N'(

!(

!

(+
(X

!"S=
Hoạt

Aộng

>ủa

Stack
"Hủybỏ"một
mụctrên
cùngcủangăn
xếp
b

,`%
_>#4
b
]L(%(Y
$c

_>#4
<%M$
PSdbQ
SdbM#O(G(O
N4e O

`
(%(&fg!$
F



_

>#

1

?
Y4
hO%b'b
i)<'%!c<M
')M4
<%MX
PSXbQ
V2O 
SXbM#'jO_
>#'-'7!(
'


'

$O

M

k

_

>#

R
2

?

Y

O

%



'
L2N"#M
_>#4
<%M
PS\bQ

V2(2)S\b(%1(
l17 "
_>#02#'
F$(%(?Y
204
W**(19W

*

$!

^

_

&V(

8

9)

!"1

N'(

:

!-(

*`


a
(+

$!

6K

/=
G$

&'

*

)(

b



!c(

(+

(-(

:;

!5


(<

NS

(d

"5!

9

!"
Z

e

"

&/

:'

6f

V6=
W**(19W



!"


#$

&'[

NZ!

#g

V6

O[

:

!-(

(-(

*`

a
!"1

R

eZ6

N


#$

%

7

*c

W6=
h<

8

i

jDk
hZ#2VbT+(%
$m6"Pe 
O%Qn+ $(
ofp)$
M4
5 J&O+1
L(%0f
HoO
P=Q4
hZ#2>;(8
02PdUXQR
2q(#(F@!
mb4
e./ 2(#(

R((YjrZ$=
%(R2$
OmbP(%mb
)1%L!Q'
#VbTg $(o
H+8!:N
j[PH:M
,)'Q4
sU6P<eDQ/8
(%$=%(R(
2$Z''
tO(%
+7_
PoQ4
GHIE

AJ

0DEF
h-

'
!"

#$

%
&'
b
2$8

%H
(
><

()

#1
,!

!"

#$
%

&'
Gd!

:3

!"
!"

#$

%
&'
c

9)


!"
#$

%

&'
G'

6-6
&4

6

!"
#$

&'
-!

'
!"

#$

%
&'
Kiến

Thức


Cần

Thiết

Để

Khai

Thác

Lỗi

Tràn

Bộ

Đệm

Trong
Chương

Trình
3

#Z!

N/

1!
&$


(+

#$

%
!(:

N

W6
3

#Z!

N/

(-(

'
!4

U

(<

N'(
l

(56


&$

^

-
mW

N%

(-(

(<
()

#

9L(

N

8
*`



9#
hZ

!Q(


N/

*n6

"-6
N

<

O

-
hZ

!Q(

<

O
*,6

!"S

>

N

W"*
Các


Bước

Tràn

Bộ

Đệm
Bước1
Tìmsựhiệndiệnvàvịtrí
củalỗhổngtrànbộđệm
Bước3
ua$c,)'
(4
Bước2
uF$'%
((7(++
1>?$@4
Bước4
5)$vN
(R2(G64
Tấn

Công

Một

Chương

Trình


Thực


8

"g

$!



(`

#L

:

!-([

:;

!5

(<
(

!3

8


$!

(`

9

&K

N1=
>1

!"_

!"

N/

(+



bZ





&P[


N

:;

!5
(<

!

(<

!"1

N'(

!

&a

*o

!(
'

*'=
Z

T

8


9)

(P

N1

^

&K

N1[


!

1p(

(<

!

(

!3

#Z!

(c


e-(

&L

(M

N
:c(

!%(

(+

R

eZ6

N

*

(1

!"_

!"l

N/
%


!%

&1

^

(+

S

&3

!(

'

(M
!L=
Chuỗi

Định

Dạng



Vấn

Đề
>


N5

&/

Z

T

9f
qrssssssssssst
"1

>[

e]!

Nc

9)

(+

(`

&L
9

(


N5

&/=
H!

u(j("

vW"k
Y
w6"x

j

!91![

W"ky
z
>X

!"S

(

!3

)6

&a



"

$!

1=
Z

:<[

(X

!"S

\


$

9

#$

%
`

!1

9'

e


"

#g

(-(

8
9)

T

9f

qrst
S

!Q(

&d
H!

u(

j("

vW"k
Y
w6"x


j

!91![
rst[

W"k

y

z
Gây

Tràn

Bộ

Đệm

Bằng

Cách

Sử

Dụng

Chuỗi

Định
Dạng

"1

>[

e]!

Nc

9)

(+

G1w

8

9)
(`

&L

9

(

N5

&/=



!Z

1

Z

T

9f

q
rs{||9

}16~

}W**(19W~t
Sẽ

bỏ

qua

giới

hạn

“%400s”
Sẽ

tràn


biến

outbuf.
Phá

Vỡ

Stack
Ý

tưởng

chung



gây
ra

tràn

bộ

đệm

để

sau
đó


ghi

đè

lên

địa

chỉ
trả

về.
"

#$

%

&'

(1
6]6

(d

!

!


&a
&L

(M

!"

N/

(+

$!
=
h



&V(

!(
'

e1



\


!%


#5!

:•

&L

(M

1
!"

R

eZ6=
Ap!

$!

4

^

!"1

#$
&'

N


!Z!

*,6

&L

(M
!"l

N/=
Một

Khi

Stack

Bị

Phá

Vỡ
]!-)8
0$!

:

7

!"S


9

!a

!X

#L

(Z[

:;

!5

(<

(

(-(

&p(
7/

!X

!



7


!"S

N

(

!3

&/

:3

!"

(,6

#S
!T=


&



!

1p(

(<


!

(

!3
:

!-(

$!

*`

!"

#$

&'
()(

#$

&3

&!

&V(

7/


!"
(,6

(+



T

9f=
Tạo

một

cửa

sau
X?YPTdwY1Q6
X?Yx5bj,`P5x5bQv(
WBD***'(%0TdwLK4
X?Y6
8

9)

W!(!

&3


*

!<

N
:Z!

4

!X

!-(=
uTdwY14
VY$O(%#0Z0w4
GHIE

AJ

0DEF
h-

'

!"
#$

%

&'
X


6-6
*,

!"

#$
%

&'
><

()

#1

,!
!"

#$

%
&'
#d!

:3

!"
\f1(
#


%
%H
'
(
c

9)

!"

#$
%

&'
!"

$

&


G'

6-6

&4
6

!"


#$
&'
-!

'

!"
#$

%

&'
Lỗi

Tràn

Bộ

Đệm

Không

Thể

Kiểm

Soát

Đơn


Giản
c

9)

(+

N'(

!"

R

eZ6

:<

!3

:3

1-!= c

9)

(+

N'(


!"

W6

:<

!3

:3

1-!
€vA

*

$!

(X

!"S

(1

!5

$!

*`

!"

:<

!3

:3

1-!

&X



!"

R

eZ6v€
yz/'6zy
yz-D*)6s'%(zy
CW!"

y
yz,)<$O&)g;)(%)
82-'2_>#({zy
yz`27_fzy
yz(%"rr&'Ng 1
"#!'oJ1()%(zy
yzJM27_jzy
Tràn


Bộ

Đệm

Đơn

Giản

Trong

C
>X

!"S

>

9

#L

!a

!X

1NW""=>
Điềuđầutiêncủabấtkìchươngtrìnhnàolà
khaibáohaichuỗibiếnvàcấpphátbộnhớ
chochúng.
:5[#g$/)^*)6%HP(g

-+F(%=^*@NQ4
:V2$)1(H0[+#
^D|)64
\O1RV&0%H
2#g!LN"#O
 %H
o4
Gb;5j
:G8![&7`(%=kZ'"p#'j,)%H&
 +L1(}8:[4
])+~$+g`2@N(+/)Z#1#f•&)
+'!,'j0K!;%H4
##!)&(%./ +1;)%H:[HH%
H:2$)1([&'O)/€$(/)) /)(04
Để

biên

dịch

chương

trình

overrun.c,

chạy
lệnh

này


trong

Linux.

Tràn

đầu

ra

bộ

đệm
AL

(M

(1

#Z

r*'

'

!4




3t

*

•
#!W

#n!

&K

!.

#Z

r!t=


#!W

!

*

(

6c

&V(


8

9)

#l

'

!4
r1(t

&3

(1

6]6

#$

%

!"l

*

&3

8

9)

(

:



&V(



6
Khai

Thác

Ngữ

Nghĩa

Của

Các

Giải

Thích
Trong

C


(Chú

Thích)
>d

!c(

(

!3

&V(

&L


r‚t



r€vt
Thêm“@”sau“/*”(đượcxemlàchú
thíchtrongC)đượccôngnhậnnhưcú
phápcácthựcthểbởicôngcụLCLint.
'8)&(%(02&
+2 ,(0)
+1 04
VD:/*@thisvalueneednotbenull@*/
ƒ


#l

(-(

'

&/

8
9)

>!=
V2('%(+
1! ,(4
V2O2%(O
#2(,)<
''O#?Y2
'jY•(X6&(>X6&
(‚6'(>‚64
Làm

Thế

Nào

Để

Khai
Thác


Lỗi

Tràn

Bộ

Đệm
Đối

với

phần

NOP

Đối

với

“Các

sự

kiện
chính”
Đối

với

“Con


trỏ

quay

về”
„



!

!Z

(-(
D

N%

(-(

6

&1
(Q(

R

!X


&X
(+

^

jW==

e……y

e†y
‡D

Dk
?6

9)

DC

&3

:Z!

V6
^

N%

$!


:

:
3

„



(1
H =

>-(

^

>E

(ˆ
6



^

(-(

^
:<


3

&V(

!"1
!T



(

(X
!"S



^=Gl

!Z[

#$


^

!"l

!

&

S

N

"5!

:

&3

6-!
'=
„



(M

8
 G

(+

(1

!"_

%
!%


:

N(

(+

D=
GHIE

AJ

0DEF
h-

'

!"
#$

%

&'
6X

6-6
*,

!"

#$

%

&'
(<

()

#1

,!
!"

#$

%
&'
#d!

:3

!"
!"

#$

%
&'
Nc

9)


!"

#$
%

&'
#'

6-6

&4
6

!"

#$
&'
6-!

'

!"
#$

%

&'
w2]5\%H](
\H^

\H

D
\H

C
Chạymáychủweb
trênmáycụcbộ
Phátyêucầuvớimọi
thẻdài,thẻkếtthúc
với“$$$$$”
Nếumáychủwebbị
treo,tìmkiếmnơitập
kếtlõicủa“$$$$$”để
tìmkiếmvịtrítràn.
\Hƒ \H„
\H


SửdụngIDA-Protođể
xâydựnglạinơibị
khaithác
Sửdụngbộphậnphân
táchvàtrìnhgỡrối
Sửdụngcáccôngcụ
tựđộngnhư
codeBlocker,eEye Retina,…


Z


1

A3

-!

'

`

"

G$

A'

"1
0$!

>X

"S


GZ

()(

#$

"1

!"T

V6

[

:;

!5

(<
(

!3

*

(1

(-(

(`

:

#-1
!"<


4



(-(

#Z

()(

#$
!"1

(-(



1p(

(-(

6X
!Q([

N

e-(

,




(

p!

(+
(-(

"

%

:3

!"=


*

&/

:'

(K

!Z!

&3


:3
!"

N'(

8

9)

(

6f

V6

N%
(-(



b

(‰[

&p(

#'!

*


(-(
N'(

*

7

!%

(`

N

&K

N1
1p(

&K

"=
>-(



b

(‰
%22$/27Y'H0$!$HF$'1(
2

'/J4
BOU

(Tiện

Ích

Tràn

Bộ

Đệm)
>-(

(<

()

GDE

(

!3

&V(

8

9)


#l

$!

:;

!5

(<

g
:3

!"

(-(

Q

9)

ŠW#

&3

!1

&/

:'


(1

*`

!"

#$

&'=
c

9)

(+

!,6

b

‹"W7W!Œ
><

()



(K



&K

N1
Các

tập

tin

“yêu

cầu”,

dùng

để

kiểm

tra
Cách

thức

để

nhiều




cùng

tấn

công

(quy
định

trong

một

tập

tin

gọi



“lệnh”).


*5

$!

!,6


b



(K

&3

:3

!"

N

e5!

"

!5!

(

(-(

1!

&$
!%

DE


9

!"

Q(

&$

(+

7

&L

•

9

9Ž=
c

9)

(+

!,6

b


‹(19Œ
h3

"

A/

h'

"

W6
>-(

#Z

!3

(+

!"
W6

j!

ˆ
W6k
=

>1


6]6



&P

*

(1
!"_


•=h

!-(

(5

!"d(

7
*i

#$

%

&3


!(

!

^
!f

i
h3

!"

!"

W6

#g
(-(

(

(56

(-(

(`
&K

N1


9

X

9

:Z=
=

0$!

!"1

&a

(1

!"_
9

"



:

!"S

7
*c


!T

e

W6

&
N1

1!

&$=


!



F•

N

F>[
(

!3

&V(


&p!

(f

N%
&L

(M



T

8

9)
(

(56=
=

0$!

!"1

(-(

&L

(M


(
!3

%

!%

$!

(1

!"_


&3

bZ





&P[
Nc

9)

EFw


j#$

*U(

1

*'
(

e8

*ik=
=
•=

>-(

&L

(M

:-(

(

!3
*

&L


(M

(+

^

T
9f

(

(56

(K

6
&V(

!(

'=
h

*'

0D

3

!L


!"1

:

#

!"-

(+



()6



S
&V(

!(

'[

N'(



&P


&V(

9

"=

h

(-(



&V(

U[

^
T

9f

(

(56

&V(

!(

!=

8

'

A/

h'

"

W6
>-(

G%(

8

'

"

R

Z6
"1

D**#

W#W"=
8


'

"

R

Z6

"1

D**#

×