ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC:NGHIÊN CỨU XÂY DỰNG MÔ HÌNH PHÁT HIỆN TẤN CÔNG, ĐỘT NHẬP MẠNG DỰA TRÊN ĐỐI SÁNH CHUỖI - Pdf 13

ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC
SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page
i
LỜI CẢM ƠN

Để hoàn thành đồ án này, lời đầu tiên em xin chân thành cảm ơn các thầy giáo, cô
giáo khoa Công nghệ thông tin, Học viện Công nghệ Bưu chính Viễn thông, những
người đã dạy dỗ, trang bị cho em những kiến thức bổ ích trong những năm học vừa
qua.
Em xin bày tỏ lòng biết ơn sâu sắc nhất tới thầy giáo Hoàng Xuân Dậu, người đã
tận tình hướng dẫn, chỉ bảo em trong suốt thời gian làm đồ án này.
Nhân dịp này em xin gửi lời cảm ơn chân thành tới gia đình, bạn bè, những người
thân đã cổ vũ, động viên tiếp thêm cho em nghị lực để em hoàn thành đồ án chuyên đề.
Em xin chân thành cảm ơn !

Hà Nội, ngày 20 tháng 11 năm 2013
SINH VIÊN
NGUYỄN THĂNG LONG


GIẢNG VIÊN HƯỚNG DẪN

ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Mục lục
SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page
iii
MỤC LỤC
LỜI CẢM ƠN i
NHẬN XÉT, ĐÁNH GIÁ, CHO ĐIỂM ii
MỤC LỤC iii
DANH MỤC CÁC BẢNG, SƠ ĐỒ, HÌNH VẼ v
DANH MỤC CÁC VÍ DỤ vi
KÝ HIỆU CÁC CỤM TỪ VIẾT TẮT vii
ĐẶT VẤN ĐỀ 8
1.1. Tổng quan về an toàn bảo mật hệ thống thông tin 9
1.2. Các điểm yếu và các lỗ hổng an ninh hệ thống 12
1.2.1. Khái quát về mối đe dọa và lỗ hổng 12
1.3. Các dạng tấn công điển hình vào hệ thống thông tin 13
1.3.1. Khái quát về tấn công độc hại (Malicious Attacks) 13
1.3.2. Một số dạng tấn công điển hình 13
1.4. Mô tả bài toán 16
1.5. Kết chương 17
CHƯƠNG 2: CƠ CHẾ TẤN CÔNG LỖI TRÀN BỘ ĐỆM VÀ CÁC PHƯƠNG PHÁP
PHÒNG CHỐNG 18
2.1. Giới thiệu về mô hình bộ nhớ ảo trong các hệ điều hành 18
2.1.1. Các khái niệm 18
2.1.2. Phương thức tổ chức bộ nhớ trong máy tính 19
2.1.3. Quy trình cấp phát bộ nhớ 22

PHỤ LỤC 61
TÀI LIỆU THAM KHẢO 64

ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Danh mục các bảng, sơ đồ, hình vẽ
SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page
v
DANH MỤC CÁC BẢNG, SƠ ĐỒ, HÌNH VẼ

Hình 1: Tổ chức bộ nhớ ảo [16]. 19
Hình 2: Dữ liệu trong Stack Frame của hàm function(int a, int b) 24
Hình 3: Dữ liệu trong StackFrame của hàmFunction(char *str) 27
Hình 4: Tràn bộ nhớ đệm trên Stack ghi đè SavedEIP 28
Hình 5: Ghi đè địa chỉ trả về và trỏ đến các vùng dữ liệu khác [16] 28
Hình 6: Trích xuất Shellcode bằng objdump (Linux) 30
Hình 7: Lấy địa chỉ sys_call bằng arwin.exe 31
Hình 8: Các hàm xử lý bộ đệm không an toàn trong C/C++ [1] 35
Hình 9: Phát hiện lỗ hổng tràn bộ đệm trên chương trình HĐH họ Linux 36
Hình 10: Phát hiện lỗ hổng tràn bộ đệm trên HĐH họ Windows 37
Hình 11: Dữ liệu trong Stack khi bị tràn trên Linux 39
Hình 12: Dữ liệu trong Stack khi bị tràn trên Windows 39
Hình 13: Mô hình xây dựng chuỗi tấn công đặt tại buffer hàm bị tràn 40
Hình 14: Dữ liệu trong bộ nhớ Stack sau khi chèn mã tấn công 41
Hình 15: Mô hình xây dựng chuỗi tấn công đặt Shellcode lên Previous StackFrame 42
Hình 16: Tìm địa chỉ lệnh JUMP ESP trong file Executable bằng Ollydmg 43
Hình 17: Dữ liệu trong bộ nhớ Stack sau khi chèn mã tấn công 43
Hình 18: Nhận biết tràn bộ đệm trong chương trình demo4 49
Hình 19: Debug chương trình bằng công cụ GDB 50
Hình 20: Dữ liệu trong các thanh ghi sau thời điểm hàm bị tràn 51
Hình 21: Dữ liệu trong Stack sau khi bộ đệm bị tràn 52
Hình 22: Xây dựng chuỗi input tấn công 53

NOP No-Operation Lệnh rỗng không thực hiện tác vụ hữu ích
SQL Structured Query Language Ngôn ngữ truy vấn có cấu trúc
FP Frame Pointer Con trỏ khung Stack
EIP Extended Instruction Pointer Thanh ghi con trỏ lệnh
ESP Extended Stack Pointer Thanh ghi con trỏ Stack
EBP Extended Base Pointer Thanh ghi con trỏ cơ sở Stack
SF Stack Frame Khung Stack
SavedEIP Saved Extends Instruction
Pointer
Giá trị con trỏ lệnh ngay trước thời điểm
hàm được gọi
SavedEBP Saved Extended Base Pointer Giá trị thanh ghi con trỏ cơ sở Stack của
khung Stack của hàm trước đó
ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Đặt vấn đề
SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page
8
ĐẶT VẤN ĐỀ

Cùng với việc ứng dụng ngày càng rộng rãi máy tính và các phần mềm ứng dụng
trong xử lý thông tin phục vụ cuộc sống, các dạng tấn công vào hệ thống máy tính, hệ
điều hành, tấn công vào các dịch vụ và phần mềm ứng dụng đã phát triển nhanh chóng
và gây ra nhiều thiệt hại. Một trong các dạng tấn công vào hệ thống máy tính tiêu biểu
là kỹ thuật tấn công khai thác lỗi tràn bộ nhớ đệm. Các lỗi tràn bộ đệm có thể làm
chương trình ngừng hoạt động, hoặc có thể bị kẻ tấn công lợi dụng để truy nhập trái
phép, hoặc chiếm quyền điều khiển hệ thống. Các lỗi tràn bộ đệm được đánh giá là
loại lỗ hổng an ninh nghiêm trọng.
Mặc dù lỗ hổng tràn bộ đệm đã được phát hiện và khai thác từ khá lâu, các nguy
cơ cũng như tác hại của lỗ hổng này gây ra cho các hệ thống bị tấn công là rất cao.
Trong khi đó, việc phòng tránh và loại trừ nguy cơ tấn công dựa trên lỗi tràn bộ đệm
lại phụ thuộc rất nhiều vào kiến thức và kinh nghiệm của người lập trình. Do đó việc

cũng cũng như một số dạng tấn công hệ thống thông tin điển hình.

1.1. Tổng quan về an toàn bảo mật hệ thống thông tin
1.1.1. Khái niệm hệ thống thông tin
Hệ thống thông tin (Information System) là một hệ thống tích hợp các thành phần
nhằm phục vụ việc thu thập, lưu trữ, xử lý và trao đổi thông tin, tri thức và các sản
phẩm số. Hệ thống thông tin ngày nay được các doanh nghiệp và các tổ chức sử dụng
phổ biến với nhiều mục đích khác nhau để thực hiện và quản lý một số hoạt động
như [3][12]:
- Tương tác với khách hàng;
- Tương tác với các nhà cung cấp;
- Tương tác với các tổ chức chính quyền;
- Quảng bá thương hiệu và sản phẩm.
Nhìn chung, một hệ thống thông tin thường gồm 5 thành phần cơ bản:
- Các thiết bị phần cứng;
- Các chương trình phần mềm;
- Các cơ sở dữ liệu;
- Hệ thống truyền thông và nhân sự.
Do các hệ thống thông tin ngày càng được sử dụng rộng rãi và phục vụ cho nhiều
mục đích khác nhau, nên việc phân loại các hệ thống thông tin chỉ mang tính tương
đối. Một số hệ thống thông tin điển hình được sử dụng:
- Các hệ thống kho dữ liệu (Data Warehouses);
- Các hệ thống lập kế hoạch nguồn nhân lực doanh nghiệp (Enterprise Resource
Planning);
- Các hệ thống thông tin doanh nghiệp (Enterprise Systems);
- Các hệ chuyên gia (Expert Systems) ;
- Các máy tìm kiếm (Search Engines) ;
- Các hệ thống thông tin địa lý (Geographic Information Systems);
- Các hệ thống thông tin toàn cầu (Global Information Systems);
- Các hệ tự động hóa văn phòng (Office Automation).

- An toàn công nghệ thông tin (IT Security), đôi khi còn được gọi là an toàn máy
tính (Computer Security), là an toàn thông tin áp dụng cho các hệ thống công nghệ.
Các hệ thống công nghệ áp dụng của tổ chức cần được đảm bảo an toàn trước các cuộc
tấn công.
- Đảm bảo thông tin (Information Assurance) là việc đảm bảo thông tin không bị
mất khi xảy ra các sự cố (trộm cắp, phá hoại, thiên tai, hỏng hóc, chiến tranh, …).
An toàn hệ thống thông tin (Information System Security) là việc đảm bảo các
thuộc tính an ninh, an toàn của hệ thống thông tin, bao gồm tính bí mật
(Confidentiality), tính toàn vẹn (Integrity) và tính sẵn sàng (còn gọi là khả dụng hoặc
sẵn dùng) của thông tin (Availability).

ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Chương 1: Tổng quan về các lỗ hổng bảo mật và các dạng tấn công HT
SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page
11

1.1.3.1. Tính bí mật của thông tin (Confidentiality)
Đặc trưng này còn được gọi là tính giới hạn về đối tượng được quyền truy xuất
thông tin. Theo đó chỉ những đối tượng có thẩm quyền mới được phép truy nhập vào
thông tin hoặc hệ thống. Mọi hành vi truy nhập vào thông tin hoặc hệ thống mà đối
tượng thực hiện không được phép đều được coi là vi phạm.Các thông tin bí mật có thể
gồm:
- Dữ liệu riêng cá nhân.
- Các thông tin thuộc quyền sở hữu trí tuệ của các doanh nghiệp hoặc các tổ chức.
- Các thông tin liên quan đến an ninh quốc gia.
1.1.3.2. Tính toàn vẹn của thông tin (Integrity)
Đặc trưng này có ý nghĩa đảm bảo sự tồn tại nguyên vẹn của thông tin. Mọi sự
thay đổi thông tin không có chủ đích của đối tượng được cấp quyền đều là vi phạm. Sự
toàn vẹn của thông tin trong một số trường hợp có ý nghĩa tương đương với sự đảm
bảo tính xác thực nguồn gốc của thông tin [3].
Tính toàn vẹn liên quan đến tính hợp lệ (Validity) và tính chính xác (Accuracy)

Các mối đe dọa thường gặp có thể gồm [3]:
- Phá hoại của các phần mềm độc hại
- Hư hỏng phần cứng hoặc phần mềm
- Kẻ tấn công ở bên trong
- Mất trộm các thiết bị
- Kẻ tấn công ở bên ngoài
- Tai họa thiên nhiên.
1.2.1.2. Lỗ hổng (Vulnerability)
Lỗ hổng là bất kỳ khiếm khuyết hoặc điểm yếu nào trong hệ thống có thể tạo điều
kiện cho phép một mối đe dọa gây tác hại. Các lỗ hổng an ninh tồn tại trong cả 7 vùng
của nền tảng CNTT, gồm [3]:
- Lỗ hổng trong vùng người dùng;
- Lỗ hổng trong vùng máy trạm;
- Lỗ hổng trong vùng mạng LAN;
- Lỗ hổng trong vùng LAN-to-WAN;
- Lỗ hổng trong vùng WAN;
- Lỗ hổng trong vùng truy nhập từ xa;
- Lỗ hổng trong vùng hệ thống/ứng dụng.
Trong các hệ điều hành và phần mềm ứng dụng, các lỗ hổng an ninh thường gặp
có thể gồm [3]:
- Lỗi tràn bộ đệm (Buffer Overflows);
- Không kiểm tra đầu vào (Unvalidated Input);
- Các vấn đề với điều khiển truy cập (Access-Control Problems);
- Các điểm yếu trong xác thực, trao quyền (Weaknesses in Authentication,
Authorization);
- Các điểm yếu trong các hệ mật mã (Weaknesses in Cryptographic Practices).
ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Chương 1: Tổng quan về các lỗ hổng bảo mật và các dạng tấn công HT
SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page
13
Mối đe dọa và lỗ hổng an ninh có mối quan hệ hữu cơ với nhau. Các mối đe dọa

công kiểu người đứng giữa, tấn công bằng bom thư, tấn công sử dụng cửa hậu và tấn
công kiểu Social Engineering. Phần tiếp theo, đồ án sẽ phân tích chi tiết từng kiểu tấn
công trên.

ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Chương 1: Tổng quan về các lỗ hổng bảo mật và các dạng tấn công HT
SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page
14
1.3.2.1. Tấn công vào mật khẩu
Tấn công vào mật khẩu là dạng tấn công nhằm đánh cắp thông tin tài khoản và
mật khẩu của đối tượng để giả danh người sử dụng truy xuất trái phép vào tài nguyên
hệ thống.Tấn công mật khẩu thường có hai dạng:
- Tấn công dựa vào từ điển (Dictionary attacks): Dựa vào xu hướng đặt mật khẩu
của người dùng là các thông tin có liên quan đến bản thân họ, hoặc mật khẩu dễ nhớ
như: tên, tuổi, ngày sinh, người thân, dãy số, … Từ đó kẻ tấn công dựa xây dựng nên
tập các mật khẩu có khả năng được người dùng sử dụng và thử các mật khẩu này.
- Tấn công kiểu vét cạn (Brute force attacks): Sử dụng công cụ và máy móc tiến
hành tổ hợp lần lượt toàn bộ các ký tự và thử mật khẩu một cách tự động. Phương
pháp này thường sử dụng để tìm ra mật khẩu khi đã nắm được dạng mã hóa của mật
khẩu.
1.3.2.2. Tấn công bằng mã độc
Tấn công bằng mã độc có thể gồm một số dạng, như lợi dụng lỗ hổng về lập trình
(như lỗi tràn bộ nhớ đệm), lỗ hổng cấu hình hệ thống để chèn và thực thi mã độc trên
hệ thống nạn nhân. Cụ thể các dạng tấn công bằng mã độc:
+ Tấn công lợi dụng lỗi tràn bộ nhớ đệm: Kẻ tấn công lợi dụng lỗi tràn bộ đệm
trên hệ thống nạn nhân để “tiêm” các đoạn mã độc vào và thực thi chúng.
+ Tấn công lợi dụng lỗi không kiểm tra đầu vào: Tấn công chèn mã SQL (SQL
injection), tấn công sử dụng mã javascript, kiểu XSS, CSRF, … Kẻ tấn công khéo léo
chèn mã SQL vào dữ liệu đầu vào và gửi các dữ liệu này tới máy chủ. Nếu máy chủ
không có cơ chế kiểm soát và lọc dữ liệu đầu vào đủ mạnh, mã SQL của kẻ tấn công
sẽ được thực hiện bởi máy chủ SQL.

thống nạn nhân, từ đó kẻ tấn công gửi đi các gói tin gây tràn bộ đệm khiến cho chương
trình trên hệ thống bị tấn công ngừng hoạt động.
+ Tấn công từ chối dịch vụ phân tán (Distributed DoS- DDos): Phương thức tấn
công DDoS dựa trên nguyên tắc của DoS nhưng có mức độ nguy hiểm cao hơn do kẻ
tấn công có thể huy động cùng lúc rất nhiều máy tính bị điều khiển tham gia.
1.3.2.4. Tấn công giả mạo địa chỉ IP (IP Spoofing)
Tấn công giả mạo địa chỉ IP là dạng tấn công trong đó kẻ tấn công sử dụng địa
chỉ IP giả, thường để đánh lừa máy nạn nhân để vượt qua hàng rào kiểm soát an ninh.
Dạng tấn công này có thể được sử dụng trong trường hợp kẻ tấn công giả IP thành địa
chỉ cục bộ của mạng LAN, từ đó có thể tấn công vào các máy khác trong mạng LAN
do thường chính sách an ninh giữa các máy trong LAN với nhau sẽ giảm nhẹ.
1.3.2.5. Tấn công nghe trộm
Tấn công nghe trộm là dạng tấn công không được thực hiện trực diện vào các
máy người dùng (client) hay máy chủ (server) mà nó thường nhằm vào phương tiện
truyền dữ liệu giữa các máy. Kẻ tấn công có thể sử dụng thiết bị phần cứng hoặc phần
mềm, lắng nghe trên một thành phần của hệ thống mạng như: Card mạng, Hub, Router
… để chặn bắt các gói tin di chuyển qua. Từ đó sử dụng các kỹ thuật phân tích các gói
tin thu được nhằm lấy cắp thông tin tài khoản, đánh cắp nội dung email hoặc các file
được truyền qua mạng (file đính kèm trong email, hoặc truyền qua các giao thức SMB,
FTP).
1.3.2.6. Tấn công kiểu người đứng giữa (Man in the middle)
Tấn công kiểu người đứng giữa lợi dụng quá trình lưu chuyển gói tin đi qua nhiều
trạm trên nhiều mạng khác nhau. Kẻ tấn công khi đó sẽ chặn bắt các thông điệp trao
đổi giữa hai bên tham gia giao tiếp, sau đó chuyển tiếp lại cho bên kia sau khi thông
điệp có thể đã được xử lý. Nạn nhân của kiểu tấn công người đứng giữa không hay biết
ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Chương 1: Tổng quan về các lỗ hổng bảo mật và các dạng tấn công HT
SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page
16
về việc xen giữa này mà vẫn cứ tin tưởng rằng họ đang giao tiếp trực tiếp với nạn nhân
bên kia.

SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page
17
1.5. Kết chương
Chương 1 giới thiệu tổng quan về an toàn bảo mật hệ thống thông tin, các mối đe
dọa, các dạng lỗ hổng an ninh và một số dạng tấn công thông dụng vào hệ thống thông
tin. Đảm bảo an toàn thông tin và hệ thống thông tin là phải đảm bảo được 3 thuộc tính
cốt yếu, gồm tính bí mật, tính toàn vẹn và tính sẵn dùng. Các dạng tấn công độc hại có
thể vi phạm một, một số hoặc tất cả các thuộc tính trên. Nhiều cuộc tấn công có thể
thực hiện thành công nhờ khai thác các lỗ hổng an ninh tồn tại trong hệ thống. Một
trong các dạng lỗ hổng an ninh thường hay xảy ra và bị lợi dụng nhiều nhất là lỗ hổng
tràn bộ nhớ đệm. Chương 2 sẽ phân tích chi tiết cơ chế xảy ra lỗi tràn bộ đệm và các
kỹ thuật tấn công lợi dụng lỗ hổng này.
ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC
Chương 2: Cơ chế tấn công lỗi tràn bộ đệm và các PP phòng chống
SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page
18
CHƯƠNG 2: CƠ CHẾ TẤN CÔNG LỖI TRÀN BỘ ĐỆM
VÀ CÁC PHƯƠNG PHÁP PHÒNG CHỐNG

Chương 2 trình bày phương pháp tổ chức và cấp phát bộ nhớ ảo cho chương
trình, cơ chế gây tràn bộ đệm, tấn công lợi dụng lỗ hổng tràn bộ đệm trên Stack và
phương pháp tạo mã thực hiện Shellcode. Phần cuối chương đề cập một số các phương
pháp phòng chống tấn công bộ nhớ đệm hiệu quả nhằm giúp xây dựng nên các hệ
thống an toàn.
2.1. Giới thiệu về mô hình bộ nhớ ảo trong các hệ điều hành
2.1.1. Các khái niệm
2.1.1.1. Buffer
Buffer hay bộ đệm là một khối dành riêng của bộ nhớ máy tính, cho phép chứa
nhiều các phần tử của cùng kiểu dữ liệu. Với ngôn ngữ lập trình C, Buffer thường
được tổ chức dưới dạng là mảng của các từ nhớ.

- ESP (Extended Stack Pointer): Thanh ghi con trỏ Stack, dùng để chứa địa chỉ
của đỉnh ngăn xếp (Stack).
- EBP (Extended Base Pointer): Thanh ghi con trỏ cơ sở Stack, dùng để chứa địa
chỉ đến một Stack Frame trong Stack.
2.1.2. Phương thức tổ chức bộ nhớ trong máy tính
Bộ nhớ ảo là một phương thức tổ chức quản lý hệ thống nhớ, trong đó bộ nhớ
được hệ điều hành tổ chức thành các vùng nhớ với các chức năng riêng biệt tạo thuận
lợi cho việc tổ chức lưu trữ và xử lý. Thông thường, bộ nhớ ảo tổ chức thành ba vùng:
Text region, Data region và Stack region. Tương ứng với mỗi vùng khi các tiến trình
được thực thi, các dữ liệu liên quan đến một tiến trình sẽ được tải vào các vùng tương
ứng. Sơ đồ tổng quan cấu trúc tổ chức bộ nhớ ảo trong máy tính được thể hiện như
Hình 1.

Hình 1: Tổ chức bộ nhớ ảo [16].

ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC
Chương 2: Cơ chế tấn công lỗi tràn bộ đệm và các PP phòng chống
SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page
20
Trong phần tiếp theo, đồ án chủ yếu tập trung vào Stack region nhằm phục vụ
cho mục đích tiếp theo đó là nghiên cứu lỗ hổng tràn bộ đệm trên Stack.
2.1.2.1. Text region (Code segment)
Vùng dữ liệu này được cố định bởi chương trình, chứa các mã lệnh (Instruction)
và dữ liệu chỉ đọc (Read-only Data) của chương trình. Text region phản hồi tới Text
region của file thực thi (Executable file).
Text region thường được tạo là chỉ đọc (Read-only) hoặc sẽ hoạt động ở chế độ
tự bảo vệ thay đổi (Self-modifying mode). Mọi nỗ lực nhằm thay đổi nội dung dữ liệu
trong vùng này đều được coi là vi phạm [10].
2.1.2.2. Data region (Data segment)
Data region = Data + BSS + Heap [11].

Stack có một thanh ghi (ESP) gọi là con trỏ Stack (Stack pointer) luôn trỏ tới
đỉnh của Stack. Đáy của Stack là một địa chỉ cố định. Kích cỡ của Stack được điều
chỉnh động bởi nhân của hệ điều hành (Kernel) trong thời gian thực thi (Run-time).
CPU thực hiện các lệnh PUSH và POP với Stack.
ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC
Chương 2: Cơ chế tấn công lỗi tràn bộ đệm và các PP phòng chống
SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page
21
Stack gồm các khung, gọi là Stack Frame. Các Stack Frame được thêm vào khi
gọi một hàm (function) và được loại bỏ ra khỏi Stack khi trở về từ hàm. Một Stack
Frame gồm: các tham số của hàm, các biến địa phương của hàm đó, và các dữ liệu cần
thiết để khôi phục khung Stack trước để quay về hàm gọi (Previous Stack Frame) – Dữ
liệu này gồm: Giá trị của con trỏ lệnh vào thời điểm hàm được gọi (SavedEIP) và địa
chỉ đầu tiên của Stack Frame (Frame Pointer) của hàm trước đó (SavedEBP).
Tuỳ thuộc vào bộ vi xử lý (VXL) mà Stack sẽ đánh địa chỉ tăng hoặc giảm. Cách
đánh địa chỉ giảm dần được nhiều VXL sử dụng, như trong các VXL Intel, Motorola,
SPARC và MIPS. Đối với Stack Pointer do luôn trỏ vào đỉnh của Stack với địa chỉ
thấp nhất, nên để tiện lợi hơn cho việc truy xuất tới các biến, các đối số của hàm sẽ có
một con trỏ khung FP (Frame Pointer) sẽ luôn trỏ tới một địa chỉ cố định trong một
khung (Thường là địa chỉ bắt đầu của Stack Frame) – một số nơi gọi là LP (Local base
Pointer) [2].
Stack Pointer có thể trỏ vào địa chỉ cuối của Stack hoặc trỏ vào địa chỉ còn trống
kế tiếp của Stack phụ thuộc vào thiết kế của VXL. Giá trị của biến SP được lưu trong
thanh ghi ESP.
Theo nguyên tắc, biến địa phương có thể được tham chiếu bằng việc tính hiệu số
(offsets) từ SP. Tuy nhiên, với những từ nhớ được đưa vào hoặc lấy ra khỏi Stack,
những offsets này bị thay đổi. Mặc dù trong một số trường hợp trình biên dịch có thể
theo dõi thứ tự của những từ trong Stack và sửa những offsets, tuy nhiên một số trường
hợp thì lại không như vậy.
Trong một số VXL, như VXL Intel, việc truy cập vào một biến bằng việc biết

Chương 2: Cơ chế tấn công lỗi tràn bộ đệm và các PP phòng chống
SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page
22
2.1.3. Quy trình cấp phát bộ nhớ
- Việc đầu tiên một thủ tục phải làm khi được gọi, đó là lưu Frame Pointer trước
(Để có thể khôi phục lại Stack Frame của thủ tục mẹ khi thủ tục này kết thúc). Sau đó
nó copy Stack Pointer vào Frame Pointer để tạo một Frame Pointer mới, và tăng Stack
Pointer để tạo khoảng trống lưu trữ các biến địa phương - mã lệnh này gọi là thủ tục
PROLOG.
- Sau khi thủ tục kết thúc, Stack phải được dọn dẹp lại, thủ tục này gọi là
EPILOG.
- PROLOG và EPILOG trong VXL Intel là lệnh ENTER và LEAVE, còn với
Motorola là LINK và UNLINK, được cung cấp để làm hầu hết công việc của thủ tục
PROLOG và EPILOG hiệu quả [2]. Quy trình cấp phát bộ nhớ ảo cho chương trình
đựơc thể hiện thông qua trong Ví dụ 1.

Ví dụ 1: chương trình exampleCode1.c [2]
Language c code

void function(int a, int b){
char buffer1[5];
char buffer2[10];
}
void main() {
function(5, 10);
}
Assembly code

(gdb) disas function
push %ebp


sub $0x8,%esp
movl $0xa,0x4(%esp)
movl $0x5,(%esp)
- Gọi hàm: Câu lệnh tiếp theo của hàm được gọi được đẩy vào Stack và hệ thống
trao quyền điều khiển cho hàm

call 0x80483b4 <function>
Bước 3: Quá trình thực thi hàm
function()
:
- Đầu tiên giá trị trong thanh ghi EBP (lúc này thanh ghi EBP đang lưu địa chỉ
EBP của hàm
main()
) được đưa vào Stack, lúc này ESP trỏ đến địa chỉ của EBP cũ.
Sau đó chương trình cấp phát vùng nhớ cho các biến cục bộ của hàm (buffer1 là 8bit
và buffer2 là 12bit) bằng cách giảm địa chỉ của ESP:push %ebp
mov %esp,%ebp
sub $0x10,%esp
Bước 4: Kết thúc hàm:
Sau khi hàm được thực thi, việc thoát khỏi một hàm được thực hiện trong hai
bước. Trước tiên môi trường tạo ra cho hàm thực thi cần được dọn dẹp (khôi phục giá
trị cho %ebp và %eip). Sau đó kiểm tra Stack để lấy các thông tin liên quan đến hàm
vừa thoát ra.
leave
ret
Khi kết thúc EBP đang trỏ đến ô nhớ chứa giá trị EBP cũ. ESP sẽ được gán bằng

ret(main)(SavedEIP)
[4 byte]

sfp(main)(SavedEBP)
[4 byte]buffer1
[5 byte]

buffer2
[10 byte]

 SP (ESP register)
Void function(int a, int b){
char buffer1[5];
char buffer2[10];
}
void main() {
function(5, 10);
}  IP (EIP register)
Hình 2: Dữ liệu trong Stack Frame của hàm
function(int a, int b)


tràn bộ đệm trong deamon fingerd của HĐH Unix lây lan và làm hơn 6.000 máy chủ
trên khắp nước Mỹ gần như quá tải. Thiệt hại ước tính khoảng 100 triệu USD [14].
- Sâu Code-Red: xuất hiện tháng 07/2001 khai thác lỗi tràn bộ đệm trong dịch vụ
đánh chỉ số (Indexing service) của Microsoft IIS Server. Từ đó gây lỗi từ chối dịch vụ
cho các máy chủ IIS 4.0/5.0 đã cài đặt Indexing service, các Router DSL Cisco
Unpatched 600-series, và cả những hệ thống không chạy IIS mà chạy HTTP server
lắng nghe TCP cổng 80. Từ lúc xuất hiện đến lúc dừng hoạt động 28 ngày (1/07/2001
– 28/07/2001) sâu Code-Red ước tính đã lây lan khoảng 359.000 host (Bao gồm cả
máy tính và router) [8].
- Sâu Nimda: Xuất hiện khoảng 18/09/2001 khai thác lỗ hổng trong email, một
vài kẽ hở khác của hệ điều hành, lỗ hổng của IIS Server 4.0/5.0 khác và cửa hậu(back-
doors) do Code-Red để lại, gây thiệt hại cho các máy tính Client sử dụng windows 95,
98, ME, NT, 2000, XP và Server chạy windows NT và 2000. Trong tuần đầu tiên xuất
hiện, tổn thất ước tính của sâu Nimda đã đạt con số khoảng 530 triệu USD [9].
- Sâu W32/Blaster: Xuất hiện tháng 08/2003, lợi dụng lỗ hổng tràn bộ đệm trong
Microsoft Remote Procedure Call (RPC) interface trên máy tính trong mạng nội bộ
hoặc kết nối trực tiếp ra Internetchạy các HĐH windows NT 4.0, 2000, XP, server
2003. Trong vòng 1 tuần, sâu Blaster nhiễm ở hơn 420.000 máy tính trên thế giới, thiệt
hại ước tính 320 triệu USD [7].
Ngoài ra, còn một số sâu máy tính nổi tiếng sau đó như: SQL Slammer worm
(xuất hiện năm 2004 dựa vào lỗi tràn bộ đệm trên MS SQL server), Sasser worm (xuất
hiện năm 2004 lợi dụng lỗi tràn bộ đệm trong LSASS của HĐH windows), Configker
worm (xuất hiện năm 2009 dựa vào lỗi tràn bộ đệm RPC trên HĐH windows).
2.2.2. Tổng quan về tấn công dựa trên lỗi tràn bộ đệm
2.2.2.1. Tràn bộ đệm:
Mỗi tiến trình được thực thi trên hệ điều hành sẽ được cấp phát một vùng nhớ ảo,
chứa toàn bộ các thông tin cần thiết để tiến trình có thể thực thi ổn định và an toàn. Bộ
đệm được cấp phát cho chương trình có thể được đặt ở:
- Bộ đệm trên Stack
- Bộ đệm trên Heap


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status