Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 41

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC CẦN THƠ


TRƯỜNG CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

NIÊN LUÂN CƠ SỞ
NGÀNH TRUYỀN THÔNG VÀ MẠNG MÁY TÍNH
Đề tài
TẤN CÔNG TRÀN BỘ ĐỆM
(Buffer Overflow Attack)

Giảng viên hướng dẫn: Sinh viên thực hiện:


ThS. TRẦN DUY QUANG PHAN DUY TƯỜNG
MSSV: B2013512
KHÓA 46

Cần Thơ, 12/2023

BỘ GIÁO DỤC VÀ ĐÀO TẠO

GVHD: TS.GVC Nguyễn Văn A SVTH: Võ Thanh B

1
TRƯỜNG ĐẠI HỌC CẦN THƠ

MỤC LỤC
CHƯƠNG 1: GIỚI THIỆU...............................................................................................................
1.1. Lý do chọn đề tài...............................................................................................................................
1.2. Mục tiêu của đề tài............................................................................................................................
1.3.Đối tượng nghiên cứu........................................................................................................................
1.4.Phạm vi nghiên cứu............................................................................................................................
1.5.Phương pháp nghiên cứu..................................................................................................................
1.6.Ý nghĩa khoa học và thực tiễn của đề tài...........................................................................................
1.6.1.Ý Nghĩa Khoa Học:....................................................................................................................
1.6.2.Ý Nghĩa Thực Tiễn:...................................................................................................................
CHƯƠNG 2 : CƠ SỞ LÝ THUYẾT................................................................................................................
2.1. Buffer overflow attack là gì................................................................................................................
2.2 Cơ sở lý thuyết liên quan đến buffer overflow attacks:......................................................................
2.2.1.Buffer:........................................................................................................................................
2.2.2.Overflow:...................................................................................................................................
2.2.3.Stack Overflow và Heap Overflow:............................................................................................
2.2.4.Return Address (Địa chỉ Quay Về):...........................................................................................
2.2.5.Shellcode:..................................................................................................................................
2.2.6.ASLR (Address Space Layout Randomization):........................................................................
2.2.7.DEP (Data Execution Prevention):............................................................................................
CHƯƠNG 3: PHƯƠNG PHÁP THỰC HIỆN.................................................................................................
3.1.Xác định Lỗ Hổng:..............................................................................................................................
3.2.Xây Dựng Payload:............................................................................................................................
3.3.Xác Định Điểm Tiếp Xúc:...................................................................................................................
3.4.Chuẩn Bị Dữ Liệu Tấn Công:.............................................................................................................
3.5.Chèn Payload vào Dữ Liệu Đầu Vào:................................................................................................
3.6.Thực Hiện Tấn Công:.........................................................................................................................
3.7.Kiểm Tra Hiệu Quả và Thu Thập Kết Quả:........................................................................................
CHƯƠNG 4: KẾT QUẢ THỰC NGHIỆM.......................................................................................................
4.1.Ret2win...............................................................................................................................................
4.1.1.Bước 1.......................................................................................................................................
4.1.2.Bước 2.......................................................................................................................................
4.1.3.Bước 3.......................................................................................................................................
4.1.4.Bước 4.......................................................................................................................................
4.1.5.Bước 5.......................................................................................................................................
4.1.6.Bước 6.......................................................................................................................................
4.2.Callme................................................................................................................................................
4.2.1.Bước 1.......................................................................................................................................
4.2.2.Bước 2.......................................................................................................................................
4.2.3.Bước 3.......................................................................................................................................
GVHD: TS.GVC Nguyễn Văn A SVTH: Võ Thanh B

1
4.2.4.Bước 4.......................................................................................................................................
4.2.5.Bước 5.......................................................................................................................................
4.2.6.Bước 6.......................................................................................................................................
4.2.7.Bước 7.......................................................................................................................................
4.2.8.Bước 8.......................................................................................................................................
4.3.Write4.................................................................................................................................................
4.3.1.Bước 1.......................................................................................................................................
4.3.2.Bước 2.......................................................................................................................................
4.3.3.Bước 3.......................................................................................................................................
4.3.4.Bước 4.......................................................................................................................................
4.3.5.Bước 5.......................................................................................................................................
4.3.6.Bước 6.......................................................................................................................................
4.3.7.Bước 7.......................................................................................................................................
CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN....................................................................................
5.1.Kết Luận.............................................................................................................................................
5.2.Hướng Phát Triển :.............................................................................................................................
TÀI LIỆU THAM KHẢO..................................................................................................................................

GVHD: TS.GVC Nguyễn Văn A SVTH: Võ Thanh B

1
MỤC LỤC HÌNH ẢNH
LỜI CẢM ƠN

Để hoàn thành được bài niên luận này, em xin chân thành cảm ơn sâu sắc đến
thầy Trần Duy Quang người đã trực tiếp giảng dạy và hướng dẫn em thực hiện bài
niên luận này bằng tất cả lòng nhiệt tình và sự quan tâm sâu sắc.

Trong quá trình thực hiện bài niên luận này, do hiểu biết còn nhiều hạn chế nên
bài làm khó tránh khỏi những thiếu sót. Em rất mong nhận được những lời góp ý của
quý thầy cô để bài tiểu luận ngày càng hoàn thiện hơn.

Em xin chân thành cảm ơn!


TÓM TẮT
Xác định lỗ hổng tấn công buffer overflow bắt đầu bằng việc xác định một lỗ
hổng trong phần mềm hoặc hệ thống, thường liên quan đến việc không kiểm soát được
dữ liệu đầu vào.
Xây dựng Payload người tấn công phải xây dựng một payload chứa mã độc hại
hoặc các hành động không mong muốn mà người tấn công muốn chúng thực hiện trên
hệ thống mục tiêu.
Chuẩn bị dữ liệu tấn công tạo ra dữ liệu đầu vào mà sẽ được sử dụng để tận
dụng lỗ hổng buffer overflow. Điều này thường liên quan đến việc tạo ra một lượng dữ
liệu lớn hơn kích thước của buffer.
Chèn Payload vào dữ liệu đầu vào chèn payload vào dữ liệu đầu vào đã được
chuẩn bị. Payload này thường chứa mã máy (shellcode) để thực hiện các hành động
độc hại.
Thực hiện tấn công gửi dữ liệu đầu vào đã được tấn công đến ứng dụng hoặc hệ
thống mục tiêu và chờ xem liệu buffer overflow attack có thành công hay không.
Kiểm tra hiệu quả và thu thập kết quả kiểm tra xem payload của bạn có thực sự
được thực hiện không và thu thập thông tin về việc tấn công, chẳng hạn như thông tin
về hệ thống hoặc quyền truy cập mới có được.
Đề tài : Tấn công tràn bộ đệm
——————————————————————————————————

CHƯƠNG 1: GIỚI THIỆU

1.1. Lý do chọn đề tài.


Buffer overflow attack là một trong những mô hình tấn công phổ biến và có
nguy cơ cao đối với nhiều hệ thống. Nắm vững về cách thức tấn công này giúp hiểu rõ
hơn về một trong những thách thức lớn nhất mà các hệ thống phải đối mặt.
Nghiên cứu về buffer overflow attack có thể giúp bảo mật viên, nhà phân tích
mã độc hại và nhà phát triển phần mềm hiểu sâu về cách tấn công này để phát triển
các biện pháp bảo vệ hiệu quả và giúp người học và nghiên cứu phát triển kỹ năng
trong lĩnh vực an ninh mạng và bảo mật ứng dụng.
Buffer overflow là một trong những kỹ thuật thường được sử dụng trong
kiểm thử bảo mật để kiểm tra tính bảo mật của một hệ thống hoặc ứng dụng. Nắm
vững về cách thức tấn công giúp người ta hiểu rõ hơn về cách ngăn chặn và phòng
tránh.
1.2. Mục tiêu của đề tài.
Hiểu rõ về cách hoạt động của buffer overflow attack, cách kẻ tấn công có
thể tận dụng lỗ hổng bảo mật để thực hiện mã độc hại và kiểm soát hệ thống.Nắm
vững các phương pháp phòng tránh và ngăn chặn buffer overflow attacks. Điều này có
thể bao gồm việc tìm hiểu về các biện pháp an ninh như DEP, ASLR, và kỹ thuật mã
hóa.
Phát triển công cụ kiểm thử bảo mật xây dựng hoặc cải tiến các công cụ kiểm
thử bảo mật để phát hiện và ngăn chặn buffer overflow attacks trong quá trình kiểm
thử hệ thống.Đề xuất biện pháp bảo mật mới dựa trên những kiến thức đã thu thập, đề
xuất những biện pháp bảo mật mới hoặc cải tiến để ngăn chặn buffer overflow attacks.

1.3.Đối tượng nghiên cứu.

Buffer overflow attack

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

1
Đề tài : Tấn công tràn bộ đệm
——————————————————————————————————

1.4.Phạm vi nghiên cứu.

Phân tích cơ chế tấn công hiểu rõ về cách hoạt động của buffer overflow
attack, cách kẻ tấn công có thể tận dụng lỗ hổng bảo mật để thực hiện mã độc hại và
kiểm soát hệ thống.

Nghiên cứu về bảo mật hệ thống nắm vững các phương pháp phòng tránh và
ngăn chặn buffer overflow attacks.

1.5.Phương pháp nghiên cứu

Hiểu rõ về cơ chế tấn công đọc và nghiên cứu về cách buffer overflow attack
hoạt động. Nắm vững về các khái niệm như stack overflow, heap overflow, và các
biến thể khác của tấn công.

Phân tích mã nguồn kiểm tra ứng dụng mục tiêu nghiên cứu mã nguồn của
ứng dụng để xác định các lỗ hổng có thể dẫn đến buffer overflow. Phân tích các hàm
và biến tìm hiểu về cách hàm và biến được xử lý trong mã nguồn để xác định điểm
yếu có thể bị tận dụng.

Thực hiện kiểm thử để kiểm tra các kịch bản tấn công buffer overflow mà các
công cụ tự động có thể bỏ qua. Xác định và đánh giá lỗ hổng nếu có lỗ hổng , xác định
mức độ nghiêm trọng và khả năng tận dụng.

Phân tích cơ chế bảo vệ nghiên cứu về cách các cơ chế bảo vệ như DEP,
ASLR được triển khai để ngăn chặn buffer overflow attacks. Đánh giá hiệu suất của
các cơ chế bảo vệ đánh giá hiệu suất và độ hiệu quả của các cơ chế bảo vệ hiện tại.

1.6.Ý nghĩa khoa học và thực tiễn của đề tài.


1.6.1.Ý Nghĩa Khoa Học:
Hiểu rõ hơn về an ninh mạng và phân tích mã độc hại nghiên cứu về buffer
overflow attacks giúp nâng cao kiến thức về an ninh mạng và cách tấn công có thể
được thực hiện thông qua các lỗ hổng bảo mật trong mã nguồn.
Phát triển kỹ năng nghiên cứu và phân tích cho phép các nghiên cứu viên và
học viên phát triển kỹ năng nghiên cứu, phân tích mã độc hại, và kiểm thử bảo mật, là
những kỹ năng quan trọng trong lĩnh vực an ninh mạng.

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

2
Đề tài : Tấn công tràn bộ đệm
——————————————————————————————————

Cải tiến biện pháp bảo mật hiện tại dựa trên những kiến thức mới, nghiên cứu
này có thể dẫn đến việc cải tiến hoặc đề xuất các biện pháp bảo mật mới để ngăn chặn
buffer overflow attacks.
Kiến thức nền tảng cho các nghiên cứu tiếp theo nghiên cứu về buffer
overflow attacks có thể tạo ra kiến thức nền tảng cho các nghiên cứu tiếp theo trong
lĩnh vực an ninh mạng và phân tích mã độc hại.
1.6.2.Ý Nghĩa Thực Tiễn:
Nâng cao tính bảo mật của hệ thống và ứng dụng hiểu rõ về buffer overflow
attacks giúp cải thiện tính bảo mật của hệ thống và ứng dụng, giảm nguy cơ bị tấn
công thông qua các lỗ hổng này.
Phát triển biện pháp ngăn chặn và phòng tránh dựa trên kết quả nghiên cứu,
có thể phát triển các biện pháp ngăn chặn và phòng tránh buffer overflow attacks, giúp
bảo vệ thông tin và hệ thống.

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

3
Đề tài : Tấn công tràn bộ đệm
——————————————————————————————————

CHƯƠNG 2 : CƠ SỞ LÝ THUYẾT

2.1. Buffer overflow attack là gì.

Buffer overflow attack là một hình thức tấn công mạng mà kẻ tấn công cố gắng
tràn (overflow) dữ liệu vào bộ nhớ đệm (buffer) của một chương trình hoặc hệ thống
để làm cho nó thực hiện các hành động không mong muốn hoặc chạy mã độc hại.
Điều này thường xảy ra khi một chương trình không kiểm soát được lượng dữ liệu đầu
vào mà nó xử lý, và kẻ tấn công tận dụng điều này để tràn qua giới hạn của buffer và
thực hiện các hành động không an toàn.

Hình 1 : Sơ đồ bộ nhớ chương trình

-Text segment (Phân đoạn văn bản ) : lưu trữ mã thực thi của chương trình.
Khối bộ nhớ này thường chỉ đọc

-Data segment (Phân đoạn dữ liệu) : lưu trữ các biến tĩnh/toàn cục được người
lập trình khởi tạo.

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

4
Đề tài : Tấn công tràn bộ đệm
——————————————————————————————————

-BSS segment (Phân đoạn BSS) :lưu trữ các biến tĩnh/toàn cục chưa được khởi
tạo. Phân đoạn này sẽ được hệ điều hành lấp đầy bằng các số 0, vì vậy tất cả các biến
chưa được khởi tạo đều được khởi tạo bằng số 0.

-Heap : Heap được sử dụng để cung cấp không gian cho việc cấp phát bộ nhớ
động. Khu vực này được quản lý bởi malloc, calloc, realloc, free, v.v.

-Stack : được sử dụng để lưu trữ các biến cục bộ được xác định bên trong hàm,
cũng như lưu trữ dữ liệu liên quan đến lệnh gọi hàm, chẳng hạn như địa chỉ trả về, đối
số, v.v . Chúng tôi sẽ cung cấp thêm chi tiết về phân đoạn này sau.

Cơ chế hoạt động của buffer overflow attack thường liên quan đến việc gửi một
lượng dữ liệu lớn hơn kích thước được dự kiến của buffer đến chương trình. Khi dữ
liệu này được ghi vào buffer, nó có thể tràn ra các vùng bộ nhớ khác, có thể là các địa
chỉ quay về (return addresses) hoặc các biến khác trong bộ nhớ. Kẻ tấn công có thể
kiểm soát được chương trình bằng cách chèn mã độc hại và thay đổi quá trình thực thi
của nó.

Buffer overflow attacks có thể dẫn đến nhiều hậu quả nghiêm trọng, bao gồm
việc thực hiện mã độc hại, kiểm soát hệ thống, thực hiện tấn công từ chối dịch vụ
(DoS), hoặc thậm chí là kiểm soát toàn bộ máy chủ. Để ngăn chặn buffer overflow
attacks, các biện pháp như kiểm tra giới hạn dữ liệu đầu vào, sử dụng ngôn ngữ lập
trình an toàn, và triển khai các cơ chế bảo vệ như Data Execution Prevention (DEP) và
Address Space Layout Randomization (ASLR) thường được áp dụng.

2.2 Cơ sở lý thuyết liên quan đến buffer overflow attacks:

2.2.1.Buffer:

Là một vùng bộ nhớ được cấp phát để lưu trữ dữ liệu tạm thời. Có thể là mảng,
chuỗi, hoặc bất kỳ cấu trúc dữ liệu nào khác.

2.2.2.Overflow:

Khi lượng dữ liệu được ghi vào buffer vượt quá dung lượng mà nó được cấp
phát, xảy ra hiện tượng overflow, và dữ liệu có thể tràn ra các vùng bộ nhớ lân cận.

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

5
Đề tài : Tấn công tràn bộ đệm
——————————————————————————————————

2.2.3.Stack Overflow và Heap Overflow:

Stack Overflow: Xảy ra khi một chương trình ghi quá nhiều dữ liệu vào stack
(ngăn xếp), thường thông qua các biến địa phương, địa chỉ quay về, hoặc các giá trị
lưu trữ trên ngăn xếp.

Heap Overflow: Xảy ra khi dữ liệu được ghi vào vùng nhớ được cấp phát động
(heap), thường thông qua các hàm như ‘malloc’ hoặc ‘calloc’.

2.2.4.Return Address (Địa chỉ Quay Về):

Là một giá trị trỏ đến vị trí trong bộ nhớ mà chương trình sẽ quay về sau khi
kết thúc một hàm. Khi bị thay đổi bởi buffer overflow, nó có thể dẫn đến thay đổi
luồng thực thi của chương trình.

2.2.5.Shellcode:

Là mã máy nhỏ, thường được thiết kế để thực hiện các chức năng độc hại. Khi
buffer overflow attack thành công, shellcode thường được chèn vào vùng nhớ và sau
đó được thực thi để kiểm soát chương trình.

2.2.6.ASLR (Address Space Layout Randomization):

Một kỹ thuật bảo mật để ngăn chặn buffer overflow attacks bằng cách ngẫu
nhiên đặt vị trí của các phần quan trọng trong bộ nhớ, như địa chỉ quay về và các vùng
nhớ chứa shellcode.

2.2.7.DEP (Data Execution Prevention):

Một kỹ thuật bảo mật được thiết kế để ngăn chặn việc thực thi mã từ vùng bộ
nhớ chỉ chứa dữ liệu, ngăn chặn buffer overflow attacks có thể sử dụng vùng bộ nhớ
đúng mục đích.

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

6
Đề tài : Tấn công tràn bộ đệm
——————————————————————————————————

CHƯƠNG 3: PHƯƠNG PHÁP THỰC HIỆN


3.1.Xác định Lỗ Hổng:

Tìm kiếm và xác định hệ thống có lỗ hổng buffer overflow. Điều này thường
liên quan đến việc phân tích mã nguồn hoặc thực hiện kiểm thử bảo mật.

3.2.Xây Dựng Payload:

Phát triển mã shellcode hoặc payload chứa các hành động độc hại mà bạn
muốn thực hiện trên hệ thống mục tiêu. Điều này có thể bao gồm việc kiểm soát
chương trình, thực hiện các hàm độc hại, hoặc mở cổng kết nối để tạo một lối vào từ
xa.

3.3.Xác Định Điểm Tiếp Xúc:

Xác định nơi mà buffer overflow có thể xảy ra, ví dụ như thông qua đầu vào từ
người dùng, dữ liệu từ mạng, hoặc tương tác với tệp tin.

3.4.Chuẩn Bị Dữ Liệu Tấn Công:

Tạo ra dữ liệu đầu vào mà bạn sẽ sử dụng để tận dụng buffer overflow. Điều
này thường liên quan đến việc tạo ra một lượng dữ liệu lớn hơn kích thước của buffer
để khi ghi vào, nó sẽ tràn ra các vùng nhớ lân cận.

3.5.Chèn Payload vào Dữ Liệu Đầu Vào:

Chèn payload của bạn vào dữ liệu đầu vào mà bạn đã chuẩn bị. Payload này
thường chứa mã máy (shellcode) để thực hiện các hành động độc hại.

3.6.Thực Hiện Tấn Công:

Gửi dữ liệu đầu vào đã được tấn công đến ứng dụng hoặc hệ thống mục tiêu và
chờ xem liệu buffer overflow attack có thành công hay không.

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

7
Đề tài : Tấn công tràn bộ đệm
——————————————————————————————————

3.7.Kiểm Tra Hiệu Quả và Thu Thập Kết Quả:

Kiểm tra xem payload của bạn có thực sự được thực hiện không, và thu thập
thông tin về việc tấn công, chẳng hạn như thông tin về hệ thống hoặc quyền truy cập
mới có được.

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

8
Đề tài : Tấn công tràn bộ đệm
——————————————————————————————————

CHƯƠNG 4: KẾT QUẢ THỰC NGHIỆM

4.1.Ret2win
4.1.1.Bước 1
- Thu thập thêm thông tin về tệp nhị phân.

- Chạy chương trình và xem hoạt động của chương trình.

hình 2 : thu thập thông tin tệp nhị phân và chạy chương trình .
4.1.2.Bước 2

- Kích hoạt radare2.

- Biết địa chỉ các chức năng của chương trình : main , sym.pwnme, sym.ret2win.

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

9
Đề tài : Tấn công tràn bộ đệm
——————————————————————————————————

hình 3 : Kích hoạt radare2.

hình 4 : main.

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

10
Đề tài : Tấn công tràn bộ đệm

hình 5 : Sym.ret2win

hình 6 : Sym.pwnme.

- Có thể thấy ở hàm này họ đang tạo một bộ đệm có kích thước 0x20 (32 ở
dạng thập phân)

hình 7 : Sym.pwnme.

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

11
Đề tài : Tấn công tràn bộ đệm

- Hàm đọc họ yêu cầu người dùng nhập một số thông tin và ghi vào bộ đệm,
vấn đề ở đây là họ viết 0x38 byte (56 ở dạng thập phân)

- Đầu vào tiêu chuẩn vào bộ đệm và rõ ràng, 56 lớn hơn 32 khiến đây trở thành
tình huống tràn bộ đệm thông thường.

4.1.3.Bước 3

- Truy cập gdb.

hình 8: Truy cập gdb.

- Tạo một mẫu có 50 byte.

hình 9: Mẫu 50 byte.

- Chạy chương trình ret2win.

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

12
Đề tài : Tấn công tràn bộ đệm

hình 10 : chạy chương trình ret2win.

- Kiểm tra nội dung của RSP.

hình 11 : Nội dung thanh ghi RSP

- Nội dung thanh ghi RSP : 0x7fffffffde18("AA0AAFAAbA").

- Xác định phần bù.

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

13
Đề tài : Tấn công tràn bộ đệm

hình 12 : Phần bù

- Phần bù là 40 byte.

4.1.4.Bước 4

- Sử dụng công cụ ROPgadget để tìm đúng địa chỉ của ret

hình 13 : Sử dụng công cụ ROPgadget

hình 14 : Địa chỉ ret

- Địa chỉ ret : 0x000000000040053e

4.1.5.Bước 5

- Tạo tập lệnh expliot.py và nội dung của tập lệnh

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

14
Đề tài : Tấn công tràn bộ đệm

hình 15 : tạo tập lệnh exploit.py và nội dung tập lệnh

4.1.6.Bước 6

- Chạy tập lệnh, đây là kết quả

hình 16 : chạy tập lệnh và kết quả

4.2.Callme

4.2.1.Bước 1

- Thu thập thêm thông tin về tệp nhị phân

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

15
Đề tài : Tấn công tràn bộ đệm

hình 17 : Thông tin tệp nhị phân callme

4.2.2.Bước 2

- Truy cập radare2 và chạy lệnh sau:

hình 18 : Truy cập radare2

- Có thể thấy rằng cờ canary cho phép thực hiện các cuộc tấn công tràn bộ
đệm

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

16
Đề tài : Tấn công tràn bộ đệm

4.2.3.Bước 3

- chạy chương trình và xem hoạt động của của chương trình

hình 19 : chương trình callme

4.2.4.Bước 4

- Xem nhị phân trong radare2

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

17
Đề tài : Tấn công tràn bộ đệm

hình 20 : Truy cập radare2

- Bây giờ chúng ta có địa chỉ cho từng hàm (callme_one, callme_two và
callme_third). Để có thể khai thác, trước tiên chúng ta cần hiểu phần bù lỗi tràn bộ
đệm và chúng ta cũng cần một cách để chuyển các đối số cho các hàm, để làm được
điều đó, chúng ta cần tiện ích ROP với ba cửa sổ đăng ký theo sau là một ret. bắt đầu
bằng cách tìm phần bù tràn bộ đệm

- Sau khi phân tích callme trên radare2, phát hiện ra rằng bộ đệm được khởi tạo
trong hàm pwnme. Ngoài ra, đầu vào được yêu cầu cho người dùng trong chức năng
này và được thêm vào bộ đệm

- Hàm pwnme.

hình 21 : Hàm pwnme

- Đây là nơi chúng ta nhận dữ liệu đầu vào từ người dùng. Cũng có thể thấy ở
hàm này họ đang tạo một bộ đệm có kích thước 0x20 (32 ở dạng thập phân) và sau
đó với hàm đọc họ yêu cầu người dùng nhập một số thông tin và ghi vào bộ đệm,
vấn đề ở đây là họ ghi 0x200 byte (512 ở dạng thập phân) từ đầu vào tiêu chuẩn vào
bộ đệm và rõ ràng, 512 lớn hơn 32 khiến đây trở thành tình huống tràn bộ đệm thông
thường.

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

18
Đề tài : Tấn công tràn bộ đệm

4.2.5.Bước 5

- Truy cập gdb

- Tạo một mẫu có 50 byte

- Chạy chương trình

- Chèn mẫu đã tạo trước đó làm đầu vào cho chương trình

hình 22 : chạy chương trình callme

- Nó tràn ra gây ra lỗi phân đoạn (như bạn có thể thấy trong hình 23)

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

19
Đề tài : Tấn công tràn bộ đệm

hình 23 : Lỗi gây tràn

- Nhìn vào hình ảnh có thể tìm thấy thanh ghi RSP : 0x7fffffffde18
(“AA0AAFAAbA”)

- Chúng ta đã có nội dung của thanh ghi RSP, chúng ta phải làm để có thể tìm
được phần bù.

hình 24 : phần bù

4.2.6.Bước 6

- Chúng ta cần sử dụng các thanh ghi để truyền đối số cho các hàm nên chúng
ta cần sử dụng tổ chức ROP để bật ba thanh ghi và sau đó làm một ret.

- chúng ta phải lưu ý để có thể chọn tiện ích ROP chính xác là ESP phải được
di chuyển các tháp có địa chỉ cao hơn trong tiện ích ROP, vì vậy bằng cách nhìn vào
ngăn xếp

- tìm kiếm ROPgadgets bằng pop và ret.

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

20
Đề tài : Tấn công tràn bộ đệm

hình 25 : ROPgadgets

- Có thể thấy ở kết quả ở trên, chúng ta có pop rdi ; pop rsi ; pop rdx ; ret
tiện ích ROP trong địa chỉ: “ 0x000000000040093c “

4.2.7.Bước 7

- Tạo tập lệnh expliot.py và nội dung của tập lệnh

hình 26 : tạo tập lệnh exploit.py và nội dung tập lệnh

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

21
Đề tài : Tấn công tràn bộ đệm

4.2.8.Bước 8

- Chạy tập lệnh, đây là kết quả

hình 27 : kết quả

4.3.Write4

4.3.1.Bước 1

- Thu thập thêm thông tin về tệp nhị phân.

hình 28 : Thu thập thông tin tệp nhị phân write4

4.3.2.Bước 2

- Chương trình và xem hoạt động.

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

22
Đề tài : Tấn công tràn bộ đệm

hình 29 : chương trình write4

4.3.3.Bước 3

- Xem nhị phân trong radare2

hình 30 : radare2 write4

- Chúng tôi có một số thông tin quan trọng. Cụ thể hiện nay chúng ta đã biết
địa chỉ các chức năng của chương trình usefulFunction ,imp.pwnme,main.

- Sym. usefulFunction.

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

23
Đề tài : Tấn công tràn bộ đệm

hình 31 : Sym.usefulFunction

- Có thể thấy, trong địa chỉ 0x00400620, chúng ta có lệnh gọi hàm print_file
. Tuy nhiên, đây là mục PLT nên để đảm bảo chúng ta có địa chỉ chính xác, tìm hiểu
sâu hơn một chút. Có thể thấy, địa chỉ chính xác trên thực tế là: 0x00400510 .

hình 32 : Sym.imp.print_file

4.3.4.Bước 4

- Sử dụng công cụ ROPgadget

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

24
Đề tài : Tấn công tràn bộ đệm

hình 33 : ROPgadget

- Có thể thấy, chúng ta có một động thái có thể chính xác là những gì chúng ta
cần: mov qword ptr [r14], r15 ; ret trong địa chỉ 0x0000000000400628 .

- Bây giờ chúng ta có tiện ích ROP cho phép chúng tôi lưu trữ chuỗi trong sổ
đăng ký. Bây giờ chúng ta cần một nơi (một địa chỉ) để lưu trữ chuỗi.Để làm như vậy
sử dụng lệnh sau:

hìhh 34 : readelf write4

- Phần khác của đầu ra của lệnh:

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

25
Đề tài : Tấn công tràn bộ đệm

hình 35 : Đầu ra của lệnh

hình 36 : Đầu ra của lệnh

- Công cụ readelf hiển thị thông tin liên quan đến tệp nhị phân , nó có thể giúp
chúng ta tìm một nơi để lưu trữ chuỗi. Trong tiêu đề Phần, chúng ta có danh sách các

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

26
Đề tài : Tấn công tràn bộ đệm

phần được trình bày trong tệp nhị phân.Để chọn một cái mà chúng ta có thể sử dụng,
chúng ta cần một cái cho phép chúng ta viết và chúng ta cần đảm bảo rằng làm như
vậy sẽ không làm hỏng bất cứ thứ gì có liên quan.

- Chúng ta có một mục .data có the flag W bật nên chúng ta có thể viết lên đó,
chúng ta chỉ cần biết liệu viết lên đó có làm hỏng gì không.

hình 37 : data write4

- Bây giờ chúng ta đã có một nơi để viết chuỗi của mình vào đó. Địa chỉ là:
0x00601028 .

- Bây giờ chúng ta chuyển chuỗi đó làm đối số cho hàm print_file.Để làm như
vậy, chúng ta cần xem liệu có thể tìm thấy một tiện ích ROP tương tự như thế này hay
không: pop rdi ; ret . Điều này sẽ cho phép chúng ta chuyển rdi làm đối số cho hàm.

- Chúng ta có pop rdi ; ret tiện ích ROP trong địa chỉ
0x0000000000400693 .

4.3.5.Bước 5

- Truy cập gdb

- Tạo một mẫu có 50 byte

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

27
Đề tài : Tấn công tràn bộ đệm

hìhh 38 : Gdb write4

- Chạy chương trình

- Chèn mẫu đã tạo trước đó làm đầu vào cho chương trình.

hình 39 : chạy chương trình write4

- Nó tràn ra gây ra lỗi phân đoạn (như bạn có thể thấy trong hình 40).

- Biết được điều này, bây giờ chúng ta phải tìm phần bù cho lỗi tràn.

- Để làm như vậy tôi đã kiểm tra nội dung của RSP.

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

28
Đề tài : Tấn công tràn bộ đệm

hình 40 : RSP

- Nhìn vào hình ảnh có thể tìm thấy thanh ghi RSP : 0x7fffffffde18
(“AA0AAFAAbA”)

- Tìm được phần bù.

hình 41 : Phần bù

- Phần bù là 40 byte.

4.3.6.Bước 6

- Tạo tập lệnh expliot.py và nội dung của tập lệnh

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

29
Đề tài : Tấn công tràn bộ đệm

hình 42 : tạo tập lệnh exploit.py và nội dung tập lệnh

hình 43 : tạo tập lệnh exploit.py và nội dung tập lệnh

4.3.7.Bước 7

- Chạy tập lệnh, đây là kết quả

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

30
Đề tài : Tấn công tràn bộ đệm

hình 44 : Kết quả

CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

5.1.Kết Luận

Trong quá trình nghiên cứu về buffer overflow attack , em đã tập trung vào việc
hiểu rõ cơ chế và nguyên nhân gây ra lỗ hổng bảo mật này trong hệ thống và ứng dụng
phần mềm. Các kết quả đạt được trong nghiên cứu này mang lại cái nhìn sâu sắc về
những mối đe doạ và rủi ro mà buffer overflow attack mang lại.Em đã thành công
trong việc xác định và khai thác buffer overflow attack trong môi trường kiểm thử,

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

31
Đề tài : Tấn công tràn bộ đệm

giúp chúng tôi hiểu rõ hơn về cách tấn công này có thể xảy ra và ảnh hưởng đến hệ
thống.

*Các loại tấn công và cách phòng chống:

1.Tấn công Buffer Overflow Cơ Bản

- Phương thức tấn công: Khi dữ liệu vượt quá giới hạn của bộ đệm, nó
có thể ghi đè lên vùng nhớ lân cận.

- Phòng chống: Sử dụng toàn bộ trình lập ngôn ngữ như Rust, Ada hoặc
Java hoặc thực hiện kiểm tra giới hạn dữ liệu đầu vào và đảm bảo kiểm soát bộ đệm
luồng.

2. Shellcode Injection

- Phương thức tấn công: Ghi đè trên bộ đệm với mã shellcode để thực
thi các lệnh độc hại.

- Phòng chống: Sử dụng kỹ thuật ASLR (Address Space Layout


Randomization), thực hiện mã hóa bộ đệm, sử dụng chức năng canary (canary values)
để phát hiện sự thay đổi trong bộ đệm.

3. Return-to-Libc Attack

- Phương thức tấn công: Thay đổi địa chỉ trở về (return address) để thực
hiện các chức năng trong thư viện C chuẩn.

- Phòng chống: Sử dụng kỹ thuật DEP (Data Execution Prevention) để


ngăn chặn việc thực thi mã từ vùng dữ liệu, sử dụng các biện pháp như Control Flow
Integrity (CFI).

4. Heap Overflow

- Phương thức tấn công: Tấn công tràn bộ đệm trong vùng nhớ heap thay
vì stack.

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

32
Đề tài : Tấn công tràn bộ đệm

- Phòng chống: Sử dụng các hàm quản lý bộ nhớ an toàn như ‘malloc’ và
‘free’, giữ cho việc quản lý heap được kiểm soát, sử dụng kỹ thuật heap canaries

5. Format String Attack

- Phương thức tấn công: Sử dụng chuỗi định dạng không an toàn để đọc
hoặc ghi dữ liệu trong bộ nhớ.

- Phòng chống: Sử dụng hàm in an toàn như ‘ printf ‘ với các định dạng
được xác định trước, tránh sử dụng chuỗi định dạng người dùng.

6. Integer Overflow

- Phương thức tấn công: Ghi giá trị vượt quá phạm vi cho kiểu dữ liệu số
nguyên.

- Phòng chống: Kiểm tra và xác thực giá trị dữ liệu đầu vào, sử dụng kiểu
dữ liệu phù hợp để đảm bảo không xảy ra tràn số nguyên.
5.2.Hướng Phát Triển :

Mở rộng nghiên cứu để áp dụng các biện pháp phòng chống vào ứng dụng và hệ
thống thực tế.

Tiếp tục theo dõi và đánh giá các phương pháp tấn công mới xuất hiện để cập nhật
biện pháp phòng chống.

Nghiên cứu chi tiết hơn về việc tích hợp công nghệ mới như machine learning để
phát hiện và ngăn chặn buffer overflow attack.

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

33
Đề tài : Tấn công tràn bộ đệm

TÀI LIỆU THAM KHẢO

https://web.ecs.syr.edu/~wedu/seed/Book/book_sample_buffer.pdf

https://pwn.college/software-exploitation/return-oriented-programming

https://ropemporium.com/

https://www.kali.org/tools/

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

34
Đề tài : Tấn công tràn bộ đệm

GVHD: TS. TRẦN DUY QUANG SVTH: PHAN DUY TƯỜNG

35

You might also like