Thông tin tài liệu
SỰ TRÀN BỘ NHỚ ĐỆM
GVHD: Ths Lê Tự Thanh
Nhóm 13:
Phạm Nguyễn Thanh Hưng
Hà Xuân Hải
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.
Sự tràn bộ nhớ đệm cục bộ là thủ thuật đánh lừa hệ điều hành của
Microsoft để hệ thống cấp quyền sử dụng riêng cho kẻ tấn công.
Nhiều phiên bản của hệ điều hành Microsoft dễ bị tổn thương nhưng không
được tiết lộ, việc tràn bộ đệm ngày về 0 có nguy cơ bị tổn thương mà qua
đó cho phép một kẻ tấn công chiếm được quyền của hệ thống và kiểm soát
máy tính.
Theo nghiên cứu của công ty bảo mật Vupen, “vấn đề này gây ra bởi một lỗi
tràn bộ đệm trong bộ xử lý ‘win32k.sys’ khi lưu trữ các giá trị registry đã
được xử lý với ‘reg_binary’, mà qua đó có thể cho phép người dùng không
có đặc quyền phá bỏ sự quản lý của hệ thống hoặc thực thi mã nhị phân với
hạt nhân (hệ thống) đặc quyền, bằng cách thay đổi các giá trị registry liên
quan tới người dùng cuối được xác định bằng ký tự (EUDC) qua phông chữ.
Theo tổ chức nghiên cứu an ninh Chester Wisniewski tại Sophos, một kẻ tấn
công có thể sử dụng mã khóa liên quan tới EUDC “để mạo danh tài khoản
hệ thống, và có quyền truy cập gần như không giới hạn cho tất cả các thành
phần của hệ thống Windows”.
CÁC CHỦ ĐỀ TRONG MODULE
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
Ví 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
BIỂU ĐỒ MODULE
Khái niệm
tràn bộ nhớ
đệm
Công cụ
bảo mật
tràn bộ nhớ
đệm
Phương
pháp luận
tràn bộ nhớ
đệm
Bút kiểm
tra tràn bộ
nhớ đệm
Biện pháp
đối phó
tràn bộ
đệm
Ví dụ tràn
bộ nhớ đệ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ể có chứa
nhiều dữ liệu được sao chép vào lớn hơn mức mà nó có thể xử lý.
Khi chương trình được biên dịch và chạy, nó sẽ chỉ định một phần của bộ nhớ có độ 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 là loại dễ bị tổn
thương trong hệ thống
dựa trên UNIX và NT.
Tại Sao Các Chương Trình Và Ứ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ác
lỗ hổng bảo mật trong chính chúng.
Chương trình và các ứng dụng không tuân thủ
đúng các hoạt động mà 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() và scanf() có 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 cơ chế Last-InFirst-Out (vào sau ra trước) để
truyền hàm tham số và tham
chiếu với các biến cục bộ.
Nó hoạt động như một bộ đệm,
giữ tất cả các thông tin mà hàm
cần.
Được tạo ra vào thời điểm bắt
đầu của hàm và 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
Các điểm SP ở
đây
Bộ Đệm2
(biến cục bộ 2)
Hướng đi
vào
Bộ Đệm1
(biến cục bộ 1)
Điểm quay trở về
Phần
trên
của bộ
nhớ
Chức năng gọi
các đối số
Hướng tăng
của stack
Phần dưới của
Stack
Dữ liệu trên đoạn
stack.
Phần dưới của
Stack
Phần dưới của
Stack
Dữ liệu trên đoạn
stack.
Dữ liệu trên đoạn
stack.
Địa chỉ quay về
Các dữ liệu khác
trên đoạn stack
Phần cuối của Stack
Một Stack bình thường
Stack khi bị kẻ tấn công gọi
một chức năng
Một số dữ liệu
có thể bị ghi đè
Địa chỉ quay về mới
Dữ liệu
mới
Dữ liệu bị ghi đè
trên đoạn stack
Phần cuối của Stack
Stack sau khi bị một chức
năng phá hoại.
Tìm Hiểu Về Heap
Heap là một khu vực của bộ nhớ được sử dụng bởi một ứng dụng và đượ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 và phương thức của
một lớp hoặc một đối tượng.
Dung lượng
bộ nhớ
Trường điều
khiển
Trường điều
khiển
Dung lượng
bộ nhớ
Dung lượng
bộ nhớ
Dung lượng Heap đơn giản
Trường điều
khiển
Sự Tràn Bộ Nhớ Đệm Trên Heap
Nếu một ứng dụng sao chép dữ liệu mà không kiểm tra dù nó phù hợp với nơi được sao chép tới, thì kẻ tấn
công có 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 lý 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ờ và không mong muốn.
Lưu ý: trong hầu hết các môi trường, điều này sẽ cho phép kẻ tấn công kiểm soát được việc thực thi của
chương trình.
Hoạt Động Của Stack
"Hủy bỏ" một
mục trên
cùng của ngăn
xếp
Pop
Các hoạt động
quan trọng của
ngăn xếp.
Push
Đặt một mục
lên trên đỉnh
của ngăn xếp.
Hoạt động của Push và Pop
Quay trở về nội dung được chỉ bởi con trỏ
và thay đổi con trỏ.
Mở rộng con trỏ lệnh
hiện hành (EIP)
EIP trỏ đến đoạn mã mà bạn
đang thực hiện. Khi bạn gọi
một hàm, chúng sẽ được lưu
trữ trên ngăn xếp để sử
dụng sau.
Mở rộng con trỏ Stack
(ESP)
ESP trỏ đến vị trí hiện tại trên ngăn
xếp và cho phép vài thứ được thêm
vào và loại bỏ từ ngăn xếp bằng
cách sử dụng hoạt động push và
pop hoặc thao tác trực tiếp con trỏ
ngăn xếp.
Mở rộng con trỏ nền
(EBP)
Các máy chủ EBP như một điểm
tĩnh để tra cứu thông tin trên
ngăn xếp giống như các biến và
dữ liệu trong một hàm sử dụng
các hiệu số.
Shellcode là một mã nhỏ được sử dụng trong việc khai thác lỗ hổng
của một phần mềm.
Bộ đệm là mục tiêu ưu thích của các kẻ tấn công vì chúng rất dễ tràn
nếu xảy ra điều kiện phù hợp.
Shellcode gây tràn bộ đệm, viết bằng hợp ngữ, khai thác các lỗ hổng
trong ngăn xếp và bộ nhớ quản lí heap.
Không Xử Lý (NOPs)
Hầu hết các CPU đều có một
lệnh No Operation (Không
hoạt động) – nó không làm
gì nhưng thúc đẩy lệnh con
trỏ.
Thông thường, bạn có thể
đặt một trong số chúng
trước chương trình của bạn
(trong chuỗi).
Hầu hết các xâm nhập hệ
thống phát hiện (IDSs) bằng
cách tìm kiếm chữ ký trượt
của NOP.
Kẻ tấn công các miếng đệm
nhằm mục đích bắt đầu lỗi
tràn bộ đệm bằng các lệnh
dài hạn của NOP (một NOP
chuyển động hoặc trượt) vi
thế CPU sẽ không làm gì cả
cho tới khi nó nhận được “sự
kiện chính” (trước “con trỏ
quay về).
ADMutate (bởi K2) chấp nhận
một lỗi tràn bộ đệm nhằm
khai thác như là đầu vào và
ngẫu nhiên tạo ra một phiên
bản có chức năng tương
đương (đa hình).
BIỂU ĐỒ MODULE
Khái niệm
tràn bộ nhớ
đệm
Công cụ bảo
mật tràn bộ
nhớ đệm
Phương
pháp luận
tràn bộ nhớ
đệm
Bút kiểm tra
tràn bộ nhớ
đệm
Biện pháp
đối phó tràn
bộ đệm
Ví dụ tràn
bộ nhớ đệm
Phát hiện
tràn bộ nhớ
đệm
Kiến Thức Cần Thiết Để Khai Thác Lỗi Tràn Bộ Đệm Trong
Chương Trình
Hiểu biết về hoạt
động của bộ nhớ
stack và heap
Hiểu biết về cách hệ
thống gọi công việc
ở cấp độ mã máy
Kiến thức về lắp ráp
và ngôn ngữ máy
Quen với các công
cụ biên dịch và sửa
lỗi như gdb
Kiến thức ngôn ngữ
lập trình C và Perl
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
Ghi đè lên địa chỉ quay về
của hàm.
Bước 2
Ghi nhiều dữ liệu vào bộ
đệm hơn mức mà nó có
thể xử lý.
Bước 4
Thay đổi luồng thực hiện
hàm bằng các mã hacker.
Tấn Công Một Chương Trình Thực
Giả sử rằng một hàm chuỗi bị khai thác, kẻ tấn công
có thể gửi một chuỗi dài đầu vào.
Con trỏ trả về của hàm tiến hành ghi đè, và kẻ tấn
công thành công trong việc thay đổi luồng thực
hiện lệnh.
Nếu người sử dụng chèn vào mã đầu vào, anh
ta hoặc cô ta có thể biết chính xác địa chỉ và
kích thước của ngăn xếp và làm con trỏ trở về
hướng tới đoạn mã của mình để thực hiện chỉ
thị.
Chuỗi Định Dạng Có Vấn Đề
Có vấn đề nếu người dùng =“%%
%%%%%%%%%”
Trong C, xét ví dụ của chuỗi định
dạng có vấn đề.
Int func(char *user)
{
Fprintf ( stdout, user);
}
Chương trình có thể sụp đổ gây ra
một Dos.
Nếu không, chương trình sẽ in nội
dung bộ nhớ
Lỗi toàn diện xảy ra bằng cách sử
dụng người dùng =“%n”
Hình thức đúng
Int func (char *user)
{
Fprintf ( stdout,
“%s”, user) ; }
Gây Tràn Bộ Đệm Bằng Cách Sử Dụng Chuỗi Định
Dạng
Trong C, xét ví dụ của BoF sử dụng
chuỗi định dạng có vấn đề.
Như thế nào nếu người dùng =
“%500d ”
Sẽ bỏ qua giới hạn “%400s”
Sẽ tràn biến outbuf.
Phá Vỡ Stack
Ý tưởng chung là gây
ra tràn bộ đệm để sau
đó ghi đè lên địa chỉ
trả về.
Tràn bộ nhớ đệm cho
phép chúng ta thay đổi
địa chỉ trả về của một
hàm.
Khi hàm được thực
hiện xong nó sẽ nhảy
tới bất kỳ địa chỉ nào
trên ngăn xếp.
Đặt một số mã trong bộ
đệm và thiết lập địa chỉ
trở về.
Một Khi Stack Bị Phá Vỡ
Được phép truy cập
Một khi quy trình dễ tổn thương bị chiếm, kẻ tấn công có các đặc
quyền tương tự như quy trình và có thể điều khiển truy cập bình
thường.
Sau đó anh ta hoặc cô ta có thể
khai thác một lỗi tràn bộ đệm
cục bộ để đạt được quyền truy
cập của siêu người dùng.
Sử dụng Netcat
Tạo một cửa sau
Sử dụng (UNIX cụ thể) inetd
Sử dụng FTP ít quan trọng (TFTP) bao gồm
cả Windows 2000 và một số UNIX đặc thù.
Sử dụng Netcat để làm thô và
kết nối tương tác.
Giao diện UNIX cụ thể.
Chụp lại một kết nối đầu cuối X.
BIỂU ĐỒ MODULE
Khái niệm tràn
bộ nhớ đệm
Công cụ bảo mật
tràn bộ nhớ
đệm
Phương pháp
luận tràn bộ nhớ
đệm
bút kiểm tra
Bút tràn
kiểmbộ
tranhớ
tràn
bộ nhớ
đệm
đệm
Biện pháp đối
phó tràn bộ đệm
Ví dụ tràn bộ
nhớ đệm
Phát hiện tràn
bộ nhớ đệm
Lỗi Tràn Bộ Đệm Không Thể Kiểm Soát Đơn Giản
Ví dụ của việc tràn ngăn xếp không thể kiểm soát.
/*Đây là một chương trình cho thấy một lỗi tràn
không thể kiểm soát đơn giản trên ngăn xếp*/
/*sao chép 20 bytes của A và bộ đệm*/
Return 1; /*quay trở lại, điều này sẽ gây ra một truy cập
trái phép do việc các ngăn xếp tham nhũng*/
/*gọi các chức năng của chúng ta*/
/*in ra một tin nhắn ngắn, việc thực thi sẽ không thể
tiến hành được vì thời điểm này bộ đệm bị tràn*/
/*rời khỏi các chức năng chính*/
Ví dụ của việc tràn heap không thể kiểm soát
/*đơn giản nhất của việc tràn heap*/
Tràn Bộ Đệm Đơn Giản Trong C
Chương trình C dễ bị tổn thương overrun.C
Đ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.
“Tên” biến sẽ lấy 10 byte của bộ nhớ (mà sẽ
cho phép nó giữ một chuỗi 10 ký tự).
“Các lệnh nguy hiểm tới hệ thống” có biến
dài 128 byte.
Bạn phải hiểu rằng trong C, khối bộ nhớ cho
các biến sẽ được đặt trực tiếp bên cạnh
nhau trong không gian bộ nhớ ảo dành cho
chương trình.
Mã Phân Tích
“Mã nhận được”, thứ đọc một chuỗi từ đầu vào tiêu chuẩn đến vị trí quy định của bộ nhớ,
không có đặc điểm kỹ thuật “chiều dài”.
Điều này có nghĩa là nó sẽ đọc các ký tự mà nó thấy cần thiết để kết thúc dòng, ngay cả
khi nó vượt qua vị trí cuối cùng được phân bổ của bộ nhớ.
Nếu biết được điều này, một kẻ tấn công có thể gây tràn bộ nhớ “tên” hướng tới bộ
nhớ “các lệnh nguy hiểm”, và chạy bất kỳ lệnh nào mà anh ấy hay cô ấy muốn.
Để biên dịch chương trình overrun.c, chạy
lệnh này trong Linux.
Địa chỉ cho biến “lệnh hệ thống nguy hiểm” là 16
byte bắt đầu từ biến “tên”.
6 byte thêm là chi phí được sử dụng bởi hệ thống
“maHoc” để cho phép bộ nhớ trở lại để sử dụng
chung khi nó được giải phóng
Tràn đầu ra bộ đệm
Khai Thác Ngữ Nghĩa Của Các Giải Thích
Trong C (Chú Thích)
Thêm “@” sau “/*”
Chú thích có thể được định
nghĩa bởi các mệnh đề sử
dụng LCLint.
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.
Các giả định miêu tả về bộ đệm có
thể được thông qua hàm.
Như vậy, trong một tham số khai báo,
nó cho giá trị thông qua tham số này
có thể không trống.
Các trạng thái của bộ đệm bị hạn
chế khi các hàm giả định quay trở
về và bị hạn chế sử dụng trong các
ví dụ sau: minSet, maxSet,
minRead và maxRead.
VD: /*@ this value need not be null@*/
Làm Thế Nào Để Khai
Thác Lỗi Tràn Bộ Đệm
Đối với phần NOP
Ngẫu nhiên thay thế các
NOPs với các phân đoạn
chức năng tương đương
của mã (e.g.: x++; x-; ?
NOP NOP)
Đối với “Các sự kiện
chính”
Áp dụng XOR để kết hợp
mã với một khóa khó
hiểu ngẫu nhiên cho IDS.
Các mã CPU cũng phải
giải mã các mã không
hiểu được trong thời
gian chạy chương trình
giải mã.Bởi thế, bộ giải
mã trở thành đa hình và
rất khó để phát hiện.
Đối với “Con trỏ quay về”
Ngẫu nhiên chỉnh sửa
LSB của con trỏ hướng
tới khu vực của NOP.
BIỂU ĐỒ MODULE
Khái niệm tràn
bộ nhớ đệm
công cụ bảo mật
tràn bộ nhớ
đệm
phương pháp
luận tràn bộ nhớ
đệm
bút kiểm tra
tràn bộ nhớ
đệm
biện pháp đối
phó tràn bộ đệm
ví dụ tràn bộ
nhớ đệm
phát hiện tràn
bộ nhớ đệm
Xác Định Tràn Bộ Nhớ Đệm
Bước 1
Chạy máy chủ web
trên máy cục bộ
Bước 2
Phát yêu cầu với mọi
thẻ dài, thẻ kết thúc
với “$$$$$”
Bước 6
Bước 5
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
Bước 3
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.
Bước 4
Sử dụng các công cụ
tự động như
codeBlocker, eEye
Retina, …
Làm Thế Nào Để Phát Hiện Lỗi Tràn Bộ Đệm Trong
Một Chương Trình ?
Biến cục bộ
Trong trường hợp này, kẻ tấn công
có thể làm cho các chuỗi khai báo
trông giống như các biến cục bộ
trong các hàm hoặc các phương
thức, và xác nhận sự có mặt của
các ranh giới kiểm tra.
Nó là điều kiện cần thiết để kiểm
tra việc sử dụng có phù hợp với
các hàm tiêu chuẩn, đặc biệt là các
việc liên quan tới chuỗi và đầu vào
hoặc đầu ra.
Các hàm tiêu chuẩn
Một cách khác là cung cấp các ứng dụng với số lượng lớn dữ liệu và kiểm tra các
hành vi bất thường.
BOU (Tiện Ích Tràn Bộ Đệm)
Các công cụ BOU có thể được sử dụng bởi một kẻ tấn công nhằm
kiểm tra các ứng dụng Web để tạo điều kiện cho lỗi tràn bộ đệm.
Công cụ này cần hai
đầu vào
Các tập tin “yêu cầu”, dùng để kiểm tra
Cách thức để nhiều mã cùng tấn công (quy
định trong một tập tin gọi là “lệnh”).
Nó lấy một tập tin yêu cầu để kiểm tra và xuất ra tất cả các hoạt động
tới STDOUT dựa trên mức độ của quy định tính dài dòng.
Ví dụ của tập tin ‘command’
Ví dụ của tập tin ‘request’
Kiểm Tra Điều Kiện Tràn Heap
Các biến thể của tràn
heap (tham nhũng
heap)
1. Cho phép ghi đè lên con
trỏ hàm
2.Khai thác cấu trúc quản
lý bộ nhớ để thực thi mã
tùy ý
Kiểm tra tràn heap bằng
cách cung cấp các chuỗi
đầu vào dài hơn dự kiến.
1. Một trao đổi con trỏ
diễn ra sau khi trình quản
lí thường xuyên heap đi
vào hoạt động.
Hai thanh ghi EAX và ECX,
có thể được đặt cùng với
địa chỉ mà người sử dụng
cung cấp.
1. Một trong các địa chỉ có
thể hướng tới một con trỏ
hàm để tiến hành ghi đè,
ví dụ UEF (bộ lọc ngoại lệ
chưa xử lý).
.
2. Các địa chỉ khác có thể
là địa chỉ của mã người
dùng cung cấp cần phải
được thực hiện.
Khi lệnh MOV hiển thị trong khung bên trái của ảnh chụp màn hình
được thực hiện, việc ghi đè được diễn ra. Khi các hàm được gọi, mã
người dùng cung cấp được thực thi.
Thử Nghiệm Điều Kiện Tràn Heap
Các Bước Thử Nghiệm Tràn Ngăn Xếp
Trong OllyDbg Debugger.
một
m
è
i
k
Đính ửa lỗi tớ
s
c
trình ụng hoặ
d
ứng ình mục
tr
tiến
tiêu
ào
ầu v
đ
o
o
Tạ
h ch
n
ì
h
dị
ng
các ứ
dụng
nhận
p
ấ
Ch
ng
các ứ tới
dụng ào dị
v
đầu
hình
tra
m
ể
i
K
h ồi
n
ả
h
h
p
g trìn
n
o
r
t
lỗi
sử a
Thử Nghiệm Tràn Ngăn Xếp Trong OllyDbg
Debugger.
Biểu diễn cách thức mà một kẻ tấn công có thể ghi đè lên con trỏ lệnh
Bước 1
Kiểm tra
“sample.exe” của
lỗi tràn ngăn xếp.
Bước 2
Bước 3
Một dãy lớn
Khởi động
các ký tự
“sample.exe” chẳng hạn
trong một
như “A”, có
trình sửa lỗi. thể được
cung cấp
trong trường
tham số
được hiển
thị.
Bước 4
Mở trình
thực thi với
các đối số
được cung
cấp
(AAAAAAAA
…) và tiếp tục
thực hiện, kết
quả được
hiển thị trong
fig.
Bước 5
EIP bao gồm
các giá trị
“41414141”
tượng trưng
cho hệ thập
lục phân
“AAAA”.
Thử Nghiệm Tràn Ngăn Xếp Trong OllyDbg Debugger.
Thử Nghiệm Định Dạng Chuỗi Điều Kiện Sử Dụng
IDA Pro.
Lỗ hổng định dạng chuỗi
Lỗ hổng định dạng chuỗi thể
hiện chủ yếu trong:
Các máy chủ Web
Các máy chủ ứng dụng
Các ứng dụng web sử dụng
dựa trên mã C/C++
Tập lệnh CGI viết bằng C
Thao tác với các tham số
đầu vào
Kẻ tấn công thao tác với các
tham số đầu vào bao gồm các
loại cụ thể như %x hoặc %n.
Ví dụ một yêu cầu chính đáng như
Thử Nghiệm Định Dạng Chuỗi Điều Kiện Sử
Dụng IDA Pro.
Kẻ tấn công xác định sự hiện diện của
một lỗ hổng định dạng chuỗi bằng cách
kiểm tra các trường hợp của mã (ráp
mảnh)
Khi rã mảnh được kiểm tra bằng cách sử
dụng IDA Pro.
• Địa chỉ của một loại định dạng xác định
được đẩy vào ngăn xếp hiển thị rõ trước khi
lệnh gọi tới printf được thực hiện.
Công Cụ Phát Hiện Tràn Bộ Nhớ Đệm (BoF)
BOU (Tiện ích tràn bộ đệm)
OllyDbg
Flawfinder
RATS (Công cụ bảo mật kiểm
soát thô)
Splint
BLAST (Công cụ xác minh phần mềm
trừu tượng lười biếng Berkeley)
BOON
Stack Shield (Lá chắn ngăn xếp)
BIỂU ĐỒ MODULE
Khái niệm tràn
bộ nhớ đệm
Công cụ bảo mật
tràn bộ nhớ
đệm
Phương pháp
luận tràn bộ nhớ
đệm
Bút kiểm tra
tràn bộ nhớ
đệm
Biện pháp đối
phó tràn bộ đệm
Ví dụ tràn bộ
nhớ đệm
Phát hiện tràn
bộ nhớ đệm
Phòng Chống
Tràn Bộ Đệm
Hướng dẫn sử
dụng kiểm soát
bộ mã
Trình biên dịch kỹ
thuật
Hỗ trợ thư viện
an toàn hơn C
Vô hiệu hóa
thực thi ngăn
xếp
Ngăn Chặn Tấn Công BoF
Sử dụng các loại ngôn ngữ an toàn
(Java, ML)
Thực hiện kiểm tra thời gian thực
Địa chỉ rắc rối
Đánh dấu ngăn xếp như là không
được thực hiện, đặt vị trí ngăn
xếp ngẫu nhiên
Phân tích mã nguồn tĩnh
Đặt ngẫu nhiên vị trí của hàm trong
libc
Lập Trình Các Biện Pháp Đối Phó
Thiết kế chương trình với trọng
tâm bảo mật
Vô hiệu hóa việc thực thi ngăn xếp
(có thể thực hiện trên Solaris)
Kiểm tra và sửa mã để tìm lỗi
Ngăn chặn sử dụng các hàm
nguy hiểm: gets, strcpy, …
Xem xét việc sử dụng các trình
biên dịch “an toàn” như
StackGuard.
Xác nhận các tham số và giảm số
lượng của các mã chạy với đặc
quyền root
Ngăn chặn địa chỉ trả về bị ghi
đè
Ngăn ngừa tất cả các thông tin
nhạy cảm không bị ghi đè
Lập Trình Các Biện Pháp Đối Phó
Hãy thay đổi bản thân ngôn ngữ C ở cấp độ ngôn ngữ để giảm
nguy cơ tràn bộ đệm
Sử dụng phân tích mã nguồn tĩnh hoặc động ở cấp độ mã nguồn
để kiểm tra mã của các vấn đề tràn bộ đệm
Thay đổi các trình biên dịch ở cấp độ biên dịch để giới hạn kiểm
tra hoặc bảo vệ các địa chỉ từ thanh ghi đè.
Thay đổi các quy tắc ở cấp độ hệ điều hành để các trang bộ nhớ
được phép chứa các số liệu thực thi
Hãy sử dụng các thư viện an toàn
Hãy sử dụng các công cụ có thể phát hiện lỗ hổng tràn bộ đệm
Chống Thực Thi Dữ Liệu (DEP)
DEP là một tập hợp của các công nghệ phần
cứng và phần mềm theo dõi chương trình để
xác minh xem chúng có sử dụng hệ thống bộ
nhớ an toàn và bảo mật.
Nó ngăn chặn các ứng dụng truy cập bộ nhớ
không được giao của tiến trình này và gian dối
trong tiến trình khác
Khi một tiến trình xảy ra phần cứng thi hành
lệnh DEP phát hiện mã đang chạy từ các địa
điểm này và đặt ra một ngoại lệ.
Để ngăn chặn các mã độc hại lợi dụng cơ chế xử
lý ngoại lệ trong Windows cần sự giúp đỡ bởi
phần mềm thi hành lệnh DEP.
DEP giúp sức trong việc ngăn chặn các mã thực
thi từ các trang dữ liệu, chẳng hạn như các trang
heap mặc định, các trang bộ nhớ pool, và các
trang stack khác nhau, nơi mà mã không thực
hiện được từ heap và stack mặc định.
Enhanced Mitigation Experience Toolkit (EMET)
Enhanced Mitigation Experience Toolkit (EMET) được thiết kế để tăng khó khăn cho kẻ tấn
công trong việc khai thác các lỗ hổng của phần mềm và truy cập vào hệ thống.
Nó hỗ trợ các kỹ thuật giảm thiểu nhằm ngăn ngừa các kỹ thuật tấn công phổ biến, chủ yếu
liên quan đến tràn ngăn xếp và các kỹ thuật được sử dụng bởi malware để tương tác với hệ
điều
bằng
pháp
hiệp.
Nó cảihành
thiện
khảphương
năng phục
hồithỏa
của Windows
để khai thác lỗi tràn bộ đệm
Nó ngăn ngừa các kỹ thuật
phổ biến sử dụng để khai thác
lỗi tràn ngăn xếp trong
Windows bằng việc thực hiện
xác nhận chuỗi SHE.
Nó đánh dấu các phần của một
tiến trình bộ nhớ không được
thực thi, gây khó khăn trong
việc khai thác các lỗ hổng
tham nhũng bộ nhớ.
Bộ xử lý cấu trúc ngoại lệ bảo vệ Phòng chống thực thi dữ liệu
động (DDEP)
việc ghi đè (SEHOP)
Điều mới trong EMET 2.0 là
bắt buộc địa chỉ không gian bố
trí ngẫu nhiên (ASLR), cũng
như các module phi nhận thức
ASLR trên tất cả các phiên bản
Windows mới.
Địa chỉ không gian bố trí ngẫu
nhiên (ASLR)
Cài Đặt Cấu Hình Hệ Thống EMET
Cửa Sổ Application Configuration EMET
Sử dụng hộp thoại Application Configuration, chúng
ta có thể thêm các ứng dụng để cấu hình cho EMET.
Điều này giúp cho các ứng dụng cứng không bị biên
dịch (bởi nhà cung cấp gốc) với các biện pháp bảo
mật cụ thể.
BIỂU ĐỒ MODULE
Khái niệm tràn
bộ nhớ đệm
Công cụ bảo mật
tràn bộ nhớ
đệm
Phương pháp
luận tràn bộ nhớ
đệm
Bút kiểm tra
tràn bộ nhớ
đệm
Biện pháp đối
phó tràn bộ đệm
Ví dụ tràn bộ
nhớ đệm
phát hiện tràn
bộPhát
nhớhiện
đệmtràn
bộ nhớ đệm
Tấn công tràn bộ đệm tận dụng các
bài tập áp dụng mã hóa kém của
các lập trình viên khi viết và xử lý
các hàm chuỗi C và C++.
t
àm
h
c
Cá
số
ham
Các h
à
trả về m địa chỉ
Cook
ie
Cookie
Trình biên dịch chuyển đổi /GS có
thể được kích hoạt từ trang tùy
chọn thế hệ mã trên thẻ C/C++
Bộ chuyển đổi /GS cung cấp một “va
chạm tốc độ”, hoặc cookie, giữa bộ
đệm và địa chỉ trở về hữu ích trong
ngăn chặn tràn bộ đệm
Nếu một lỗi tràn ghi lên địa chỉ trả
về, nó sẽ phải ghi đè lên các tập tin
cookie đặt giữa nó và bộ đệm, kết
quả ở trong một ngăn xếp được bố
trí mới.
Các
thanh
ghi lưu
Calle
Khung xử lý
ngoại lệ
áo
ai b
h
k
ộ
n
Biế bộ và B
cục
đệ m
Công Cụ Bảo Mật BoF: BufferShield
BufferShield cho phép bạn phát hiện
và ngăn chặn việc khai thác lỗi tràn
bộ đệm, chịu trách nhiệm về phần
lớn các vấn đề bảo mật liên quan
Các Tính Năng
Phát hiện mã thực thi trên ngăn
xếp, heap mặc định, bộ nhớ ảo
và các phân đoạn dữ liệu
Chấm dứt các ứng dụng nghi
vấn nếu một lỗi tràn bộ đệm bị
phát hiện.
CácCông
CôngCụ
CụBảo
BảoMật
MậtBoF
BoFư
Các
BIỂU ĐỒ MODULE
Khái niệm tràn
bộ nhớ đệm
Công cụ bảo mật
tràn bộ nhớ
đệm
Phương pháp
luận tràn bộ nhớ
đệm
Bút kiểm tra
tràn bộ nhớ
đệm
Biện pháp đối
phó tràn bộ đệm
Ví dụ tràn bộ
nhớ đệm
Phát hiện tràn
bộ nhớ đệm
Thử Nghiệm Độ Thâm Nhập Tràn Bộ Đệm
Kĩ năng của một người kiểm tra độ
thâm nhập
Thành thạo trong việc sử dụng trình sửa
lỗi, tháo rời và ngăn chặn
Hiểu biết nguyên tắc làm việc của tấn
công tràn bộ đệm
Hiểu biết về ngôn ngữ lập trình như
C/C++, lắp ráp và ngôn ngữ máy.
Hiểu biết về quản lý bộ nhớ trong các
môi trường điều hành khác nhau.
Kiểm Tra Độ Thâm Nhập Tràn Bộ Đệm
Xác định vị trí các
ứng dụng mục tiêu
Đảo ngược kiến trúc ứng
dụng bằng cách phân tách.
Nguồn
có sẵn?
Đính kèm một trình gỡ lỗi
vào ứng dụng mục tiêu
Xem xét mã
Tìm kiếm các cuộc gọi tới các
thư viện hàm không an toàn
Thực hiện phân tích mã tĩnh
bằng các công cụ
Cung cấp một lượng lớn dữ
liệu đầu vào
Kiểm tra trả lời trong trình
ứng dụng
Tìm kiếm các cuộc gọi tới thư viện các hàm
không an toàn như gets(), strcpy(),
strcatf(), printf, fprintf, sprintf, snprintf, vf
printf, vprintf, vsprintf, và vsnprintf có thể
dẫn tới lỗi tràn bộ đệm nếu không sử dụng
đúng cách.
Thực hiện phân tích các mã tĩnh bằng cách
sử dụng các công cụ như RATS và
Flawfinder.
Đảo ngược kiến trúc ứng dụng bằng cách
phân tách như IDA Pro và OllyDbg để phân
tích các mã của trình biên dịch theo thứ tự
để xác định lỗi tràn bộ đệm.
Đính kèm một trình sửa lỗi (OllyDbg, IDA
Pro) vào ứng dụng mục tiêu, cung cấp một
lượng lớn dữ liệu đầu vào, và kiểm tra trả
lời trong trình sửa lỗi để xác địnhnguồn lỗi
tràn bộ đệm; lặp lại các bước này với các
đầu vào khác nhau của độ dài biến.
Kiểm Tra Độ Thâm Nhập Tràn Bộ Đệm
Cấp định dạng xác định tại
đầu vào
Sử dụng kỹ thuật ngăn chặn
tràn dữ liệu ứng dụng
Chuyển văn bản tất cả các
phát hiện
Cung cấp các định dạng xác định tới đầu vào như %x hoặc %n
Sử dụng kỹ thuật ngăn chặn các việc cung cấp dữ liệu trái phép, bất ngờ, hoặc ngẫu
nhiên của các ứng dụng đầu vào và quan sát hành vi của ứng dụng
Sử dụng các công cụ ngăn chặn như Spike và Brute Force Binary Tester (BFB) để thực
hiện kiểm tra ngăn chặn tự động
Bất kỳ hành vi hoặc sự sụp đổ bất thường của ứng dụng cho thấy một cuộc tấn công
thành công gây tràn bộ đệm.
TÓM TẮT
Một lỗi tràn bộ đệm xảy ra khi một chương trình hay một quy trình cố gắng lưu trữ nhiều hơn dữ
liệu trong một bộ đệm (khu vực lưu trữ dữ liệu tạm thời) hơn mức định lượng mà nó có thể giữ
Các cuộc tấn công tràn bộ đệm phụ thuộc vào: thiếu sót trong việc kiểm tra ranh giới, và một máy
tính có thể thực hiện một mã thường trú trong phân đoạn ngăn xếp hoặc dữ liệu.
Lỗ hổng tràn bộ đệm có thể được phát hiện bởi kỹ năng kiểm toán mã cũng như việc kiểm tra ranh
giới
Biện pháp đối phó bao gồm kiểm tra mã, vô hiệu hóa thực thi ngăn xếp, hỗ trợ bằng một thư viện
tốt hơn C, và sử dụng các trình biên dịch an toàn hơn
Các công cụ như stackguard, Immunix và quét lỗ hổng dễ tổn thương rất hữu ích trong việc bảo
mật hệ thống.
Trích Dẫn
“Thiết kế không phải là trông thấy và cảm nhận. Thiết kế là xem nó
hoạt động như thế nào”
[...]... Phương pháp luận tràn bộ nhớ đệm bút kiểm tra Bút tràn kiểmbộ tranhớ tràn bộ nhớ đệm đệm Biện pháp đối phó tràn bộ đệm Ví dụ tràn bộ nhớ đệm Phát hiện tràn bộ nhớ đệm Lỗi Tràn Bộ Đệm Không Thể Kiểm Soát Đơn Giản Ví dụ của việc tràn ngăn xếp không thể kiểm soát /*Đây là một chương trình cho thấy một lỗi tràn không thể kiểm soát đơn giản trên ngăn xếp*/ /*sao chép 20 bytes của A và bộ đệm* / Return 1; /*quay... đương (đa hình) BIỂU ĐỒ MODULE Khái niệm tràn bộ nhớ đệm Công cụ bảo mật tràn bộ nhớ đệm Phương pháp luận tràn bộ nhớ đệm Bút kiểm tra tràn bộ nhớ đệm Biện pháp đối phó tràn bộ đệm Ví dụ tràn bộ nhớ đệm Phát hiện tràn bộ nhớ đệm Kiến Thức Cần Thiết Để Khai Thác Lỗi Tràn Bộ Đệm Trong Chương Trình Hiểu biết về hoạt động của bộ nhớ stack và heap Hiểu biết về cách hệ thống gọi công việc ở cấp độ mã máy... bảo mật tràn bộ nhớ đệm phương pháp luận tràn bộ nhớ đệm bút kiểm tra tràn bộ nhớ đệm biện pháp đối phó tràn bộ đệm ví dụ tràn bộ nhớ đệm phát hiện tràn bộ nhớ đệm Xác Định Tràn Bộ Nhớ Đệm Bước 1 Chạy máy chủ web trên máy cục bộ Bước 2 Phát yêu cầu với mọi thẻ dài, thẻ kết thúc với “$$$$$” Bước 6 Bước 5 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 Bước... lỗi tràn bộ đệm cục bộ để đạt được quyền truy cập của siêu người dùng Sử dụng Netcat Tạo một cửa sau Sử dụng (UNIX cụ thể) inetd Sử dụng FTP ít quan trọng (TFTP) bao gồm cả Windows 2000 và một số UNIX đặc thù Sử dụng Netcat để làm thô và kết nối tương tác Giao diện UNIX cụ thể Chụp lại một kết nối đầu cuối X BIỂU ĐỒ MODULE Khái niệm tràn bộ nhớ đệm Công cụ bảo mật tràn bộ nhớ đệm Phương pháp luận tràn. .. thể tiến hành được vì thời điểm này bộ đệm bị tràn* / /*rời khỏi các chức năng chính*/ Ví dụ của việc tràn heap không thể kiểm soát /*đơn giản nhất của việc tràn heap*/ Tràn Bộ Đệm Đơn Giản Trong C Chương trình C dễ bị tổn thương overrun.C Đ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 “Tên” biến sẽ lấy 10 byte của bộ nhớ (mà sẽ cho phép nó giữ một chuỗi... các miếng đệm nhằm mục đích bắt đầu lỗi tràn bộ đệm bằng các lệnh dài hạn của NOP (một NOP chuyển động hoặc trượt) vi thế CPU sẽ không làm gì cả cho tới khi nó nhận được sự kiện chính” (trước “con trỏ quay về) ADMutate (bởi K2) chấp nhận một lỗi tràn bộ đệm nhằm khai thác như là đầu vào và ngẫu nhiên tạo ra một phiên bản có chức năng tương đương (đa hình) BIỂU ĐỒ MODULE Khái niệm tràn bộ nhớ đệm Công... các công cụ biên dịch và sửa lỗi như gdb Kiến thức ngôn ngữ lập trình C và Perl 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 Ghi đè lên địa chỉ quay về của hàm Bước 2 Ghi nhiều dữ liệu vào bộ đệm hơn mức mà nó có thể xử lý Bước 4 Thay đổi luồng thực hiện hàm bằng các mã hacker Tấn Công Một Chương Trình Thực Giả sử rằng một hàm chuỗi bị khai thác, kẻ tấn công... “Các sự kiện chính” Áp dụng XOR để kết hợp mã với một khóa khó hiểu ngẫu nhiên cho IDS Các mã CPU cũng phải giải mã các mã không hiểu được trong thời gian chạy chương trình giải mã.Bởi thế, bộ giải mã trở thành đa hình và rất khó để phát hiện Đối với “Con trỏ quay về” Ngẫu nhiên chỉnh sửa LSB của con trỏ hướng tới khu vực của NOP BIỂU ĐỒ MODULE Khái niệm tràn bộ nhớ đệm công cụ bảo mật tràn bộ nhớ đệm. .. thể gây tràn bộ nhớ “tên” hướng tới bộ nhớ “các lệnh nguy hiểm”, và chạy bất kỳ lệnh nào mà anh ấy hay cô ấy muốn Để biên dịch chương trình overrun.c, chạy lệnh này trong Linux Địa chỉ cho biến “lệnh hệ thống nguy hiểm” là 16 byte bắt đầu từ biến “tên” 6 byte thêm là chi phí được sử dụng bởi hệ thống “maHoc” để cho phép bộ nhớ trở lại để sử dụng chung khi nó được giải phóng Tràn đầu ra bộ đệm Khai... thông tin trên ngăn xếp giống như các biến và dữ liệu trong một hàm sử dụng các hiệu số Shellcode là một mã nhỏ được sử dụng trong việc khai thác lỗ hổng của một phần mềm Bộ đệm là mục tiêu ưu thích của các kẻ tấn công vì chúng rất dễ tràn nếu xảy ra điều kiện phù hợp Shellcode gây tràn bộ đệm, viết bằng hợp ngữ, khai thác các lỗ hổng trong ngăn xếp và bộ nhớ quản lí heap Không Xử Lý (NOPs) Hầu hết các ... thống, có quyền truy cập gần không giới hạn cho tất thành phần hệ thống Windows” CÁC CHỦ ĐỀ TRONG MODULE Sự tràn nhớ đệm (BoF) Tràn nhớ đệm stack (ngăn xếp) Tràn nhớ đệm heap Điều khiển stack Các... Phòng chống tràn nhớ đệm Công cụ đối phó với việc tràn nhớ đệm Bút kiểm tra tràn nhớ đệm BIỂU ĐỒ MODULE Khái niệm tràn nhớ đệm Công cụ bảo mật tràn nhớ đệm Phương pháp luận tràn nhớ đệm Bút kiểm... lỗi tràn đệm nhằm khai thác đầu vào ngẫu nhiên tạo phiên có chức tương đương (đa hình) BIỂU ĐỒ MODULE Khái niệm tràn nhớ đệm Công cụ bảo mật tràn nhớ đệm Phương pháp luận tràn nhớ đệm Bút kiểm
Ngày đăng: 17/10/2015, 13:11
Xem thêm: Tài Liệu Hacker Sự Tràn Bộ Nhớ Đệm, Tài Liệu Hacker Sự Tràn Bộ Nhớ Đệm