1. Trang chủ
  2. » Tất cả

Báo cáo môn học an toàn và bảo mật thông tin khai thác tràn bộ nhớ đệm trên windows 10

24 17 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Báo cáo môn học An Toàn Và Bảo Mật Thông Tin Khai Thác Tràn Bộ Nhớ Đệm Trên Windows 10
Tác giả Huỳnh Ngọc Quốc Tuấn, Nguyễn Phúc Anh Khôi, Trần Ngọc Thạch
Người hướng dẫn Lê Từ Minh Trí
Trường học Trường Đại Học Thủ Dầu Một
Chuyên ngành An Toàn Và Bảo Mật Thông Tin
Thể loại Báo cáo môn học
Năm xuất bản 2022
Thành phố Bình Dương
Định dạng
Số trang 24
Dung lượng 1,57 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

1 Trong các lĩnh vực an ninh máy tính và lập trình, một lỗi tràn bộ nhớ đệm hay gọi tắt là lỗi tràn bộ đệm là một lỗi lập trình có thể gây ra một ngoại lệ truy nhập bộ nhớ máy tính và ch

Trang 1

TRƯỜNG ĐẠI HỌC THỦ DẦU MỘT

GV: Lê T ừ Minh Trí SVTH: Hu ỳnh Ngọc Quốc Tuấn MSSV: 2024802010102

SVTH: Nguy ễn Phúc Anh Khôi MSSV: 2024802010431

SVTH: Tr ần Ngọc Thạch MSSV: 2024802010122

Bình Dương, tháng 06 năm 2022

Trang 2

i

TRƯỜNG ĐẠI HỌC THỦ DẦU MỘT

GV: Lê T ừ Minh Trí SVTH: Hu ỳnh Ngọc Quốc Tuấn MSSV: 2024802010102

SVTH: Nguy ễn Phúc Anh Khôi MSSV: 2024802010431

SVTH: Tr ần Ngọc Thạch MSSV: 2024802010122

Bình Dương, tháng 06 năm 2022

Trang 3

M ỤC LỤC

MỤC LỤC ii

DANH MỤC HÌNH iv

LỜI MỞ ĐẦU 1

CHƯƠNG 1 TỔNG QUAN 2

1.1 Tổng quan về vấn đề được nghiên cứu 2

1.1.1 Nghiên cứu: 2

1.1.2 Khảo sát thực trạng: 2

1.2 Nhiệm vụ đồ án 2

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

2.1 Giới thiệu 3

2.1.1 Khái niệm lỗi tràn bộ nhớ đệm 3

2.1.2 Nguyên nhân 3

2.2 Các kiểu khai thác thường gặp 3

2.2.1 Khai thác lỗi tràn bộ đệm trên stack 3

2.2.2 Khai thác lỗi tràn bộ đệm trên heap 4

2.2.3 Một số cách khai thác khác 4

2.3 Cách phát hiện tràn bộ nhớ đệm 4

2.4 Biện pháp ngăn chặn tràn bộ nhớ đệm 4

2.4.1 Lựa chọn ngôn ngữ lập trình 4

2.4.2 Sử dụng các thư viện an toàn 5

2.4.3 Chống tràn bộ đệm trên stack 5

2.4.4 Bảo vệ không gian thực thi 5

2.4.5 Ngẫu nhiên hóa sơ đồ không gian địa chỉ 6

2.4.6 Kiểm tra sâu đối với gói tin 6

CHƯƠNG 3 KẾT QUẢ THỰC NGHIỆM 7

3.1 Công cụ thực hiện Oracle VM VirtualBox, Easy File Sharing Web Server 7

3.2 Công cụ tấn công tập tin Python 2.7 8

3.3 Demo khai thác tràn bộ nhớ đệm trên windows 10 9

3.4 Hậu quả việc tràn bộ nhớ đệm 13

3.5 Cách phòng chống tràn bộ nhớ đệm 13

Trang 4

iii

CHƯƠNG 4 KẾT LUẬN VÀ KIẾN NGHỊ 14

1 Kết luận 14

2 Kiến nghị 14

TÀI LIỆU THAM KHẢO 15

Trang 5

DANH M ỤC HÌNH

Hình 1: Phần mềm VirtualBox 7

Hình 2: Phần mềm Easy File Sharing Web Server 7.2 7

Hình 3: Tập tin exploit.py 8

Hình 4: Máy hệ điều hành Win 10 9

Hình 5: Máy hệ điều hành Win 7 9

Hình 6: Web mạng cục bộ localhost 10

Hình 7: Ổ đĩa có trên localhost 11

Hình 8: Truy cập python 2.7 trên win 10 11

Hình 9: Tấn công IP, Port của máy nạn nhân (Win 7) 12

Hình 10: Tấn công thành công 12

Trang 6

1

Trong các lĩnh vực an ninh máy tính và lập trình, một lỗi tràn bộ nhớ đệm hay gọi tắt là lỗi tràn bộ đệm là một lỗi lập trình có thể gây ra một ngoại lệ truy nhập bộ nhớ máy tính và chương trình bị kết thúc, hoặc khi người dùng có ý phá hoại, họ có thể lợi dụng lỗi này để phá vỡ an ninh hệ thống

Năm 1988, một sự cố máy tính đã thu hút sự chú ý của toàn thể cộng đồng sử dụng mạng internet, đó là sự ra đời của sâu internet Con sâu này đã làm nhiều máy chủ phải ngưng hoạt động bởi một lỗi ít được biết đến là “tràn bộ đệm” Cho tới nay, lỗi tràn bộ đệm vẫn tiếp tục được tìm thấy trong nhiều phần mềm trên nhiều hệ điều hành khác nhau Đó thực sự là một nguy cơ nghiêm trọng, một vấn đề đã tồn tại khá lâu và cần được quan tâm một cách nghiêm túc

Đa phần các lỗi tràn bộ đệm dẫn đến việc chiếm quyền điều khiển toàn bộ trên hệ thống Tràn bộ đệm xảy ra trên nhiều hệ điều hành, đặc biệt là trên UNIX và Windows,

và trên nhiều ứng dụng khác nhau như web, mail, dns, database, Tháng 8-2001, sâu máy tính Code Red đã khiến thế giới thiệt hại hàng tỉ USD cũng bắt nguồn từ một lỗ hổng tràn bộ đệm trong phần mềm máy chủ Microsoft Internet Information Server Vậy tràn bộ đệm là gì và tại sao xảy ra tràn bộ đệm lại tạo ra lỗ hổng bảo mật Làm

thế nào để ngăn chặn lỗi tràn bộ đệm Đó chính là lý do chúng em nghiên cứu đề tài:

“Khai thác tràn bộ nhớ đệm trên windows 10” Để có thể tìm hiểu sâu về tràn bộ nhớ đệm và đưa ra giải pháp cách khắc phục hiểu quả

Trang 7

CHƯƠNG 1 TỔNG QUAN 1.1 Tổng quan về vấn đề được nghiên cứu

Về mặt bảo mật, tuy Windows không được bảo mật toàn diện như các nền tảng khác như: Linux, Mac OS … nhưng Microsoft vẫn làm việc chăm chỉ hằng ngày để thường xuyên cung cấp cho bạn những bản vá các lỗ hổng bảo mật

Windows 10 đi kèm với bản cập nhật tự động kích hoạt, vì vậy sẽ có được tất cả các tính năng mới nhất và an toàn nhất

Trang 8

3

CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 2.1 Giới thiệu

2.1.1 Khái niệm lỗi tràn bộ nhớ đệm

Lỗi tràn bộ đệm (Buffer Overflow) là một điều kiện bất thường khi tiến trình lưu

trữ dữ liệu vượt ra ngoài biên của bộ nhớ đệm có chiều dài cố định Kết quả là dữ liệu

có thể đè lên các bộ nhớ liền kề Dữ liệu bị ghi đè có thể bao gồm các bộ nhớ đệm khác, các biến và dữ liệu điều khiển luồng chảy của cả chương trình (program flow control)

2.1.2 Nguyên nhân

Nguyên nhân gây ra lỗi Buffer Overflow của các chương trình, ứng dụng:

 Phương thức kiểm tra bên (boundary) không được thực hiện đầy đủ hoặc là được

2.2 Các kiểu khai thác thường gặp

2.2.1 Khai thác lỗi tràn bộ đệm trên stack

 Ghi đè một biến địa phương nằm gần bộ nhớ đệm trong stack để thay đổi hành

vi của chương trình nhằm tạo thuận lợi cho kẻ tấn công

 Ghi đè địa chỉ trả về trong một khung stack (stack frame) Khi hàm trả về, thực thi sẽ được tiếp tục tại địa chỉ mà kẻ tấn công đã chỉ rõ, thường là tại một bộ đệm chứa

dữ liệu vào người dùng

 Nếu không biết địa chỉ của phần dữ liệu người dùng cung cấp, nhưng biết rằng địa chỉ của nó được lưu trong một thanh ghi, thì có thể ghi đè lên địa chỉ trả về một giá trị địa chỉ của một opcode mà opcode này sẽ có tác dụng làm cho thực thi nhảy đến phần

dữ liệu người dùng

 Cụ thể: nếu địa chỉ đoạn mã độc hai muốn chạy được ghi trong một thanh ghi

R, thì một lệnh nhảy đến vị trí chứ opcode cho một lệnh jump R, call R (hay một lệnh

Trang 9

tương tự với hiệu ứng nhảy đến địa chỉ ghi trong R) sẽ làm cho đoạn mã trong phần dữ

liệu người dùng được thực thi

2.2.2 Khai thác lỗi tràn bộ đệm trên heap

 Một hiện tường tràn bộ đệm xảy ra trong khu vực dữ liệu heap được gọi là hiện tượng tràn heap và có thể khai thác được bằng các kỹ thuật khác với các lỗi tràn stack

 Bộ nhớ heap được cấp phát động bởi các ứng dụng tại thời gian chạy và thường chứa dữ liệu của chương trình

 Việc khai thác được thực hiện bằng cách phá dữ liệu này theo các cách đặc biệt

để làm cho ứng dụng ghi đè lên các cấu trúc dữ liệu nội bộ chẳng hạn các con trỏ của danh sách liên kết

Công nghệ biên dịch lý tưởng nhất để phát hiện là dùng chương trình C hoặc C++

để biết được thông tin về kích thước của dữ liệu trong mã nguồn Một số thông tin có thể xuất phát từ lời khai báo của các biến, mô tả kiểu biến được sử dụng Các thông tin khác đến từ các lệnh gọi chức năng trong chương trình Trình biên dịch cần phải hiểu tất cả các thông tin này để tạo ra mã đúng

2.4 Biện pháp ngăn chặn tràn bộ nhớ đệm

2.4.1 Lựa chọn ngôn ngữ lập trình

Lựa chọn về ngôn ngữ lập trình có thể có một ảnh hưởng lớn đối với sự xuất hiện của lỗi tràn bộ đệm Năm 2006, C và C++ nằm trong số các ngôn ngữ lập trình thông dụng nhất, với một lượng khổng lồ các phần mềm đã được viết bằng hai ngôn ngữ này

C và C++ không cung cấp sẵn các cơ chế chống lại việc truy nhập hoặc ghi đè dữ liệu lên bất cứ phần nào của bộ nhớ thông qua các con trỏ bất hợp lệ; cụ thể, hai ngôn ngữ này không kiểm tra xem dữ liệu được ghi vào một mảng (cài đặt của một bộ nhớ đệm)

có nằm trong biên của mảng đó hay không Tuy nhiên, cần lưu ý rằng các thư viện chuẩn

Trang 10

5

của C++, thư viện khuôn mẫu chuẩn - STL, cung cấp nhiều cách an toàn để lưu trữ dữ

liệu trong bộ đệm, và các lập trình viên C cũng có thể tạo và sử dụng các tiện ích tương

tự Cũng như đối với các tính năng bất kỳ khác của C hay C++, mỗi lập trình viên phải

tự xác định lựa chọn xem họ có muốn chấp nhận các hạn chế về tốc độ chương trình để thu lại các lợi ích tiềm năng (độ an toàn của chương trình) hay không

Một số biến thể của C, chẳng hạn Cyclone, giúp ngăn chặn hơn nữa các lỗi tràn bộ đệm bằng việc chẳng hạn như gắn thông tin về kích thước mảng với các mảng Ngôn ngữ lập trình D sử dụng nhiều kỹ thuật đa dạng để tránh gần hết việc sử dụng con trỏ và kiểm tra biên do người dùng xác định

Nhiều ngôn ngữ lập trình khác cung cấp việc kiểm tra tại thời gian chạy, việc kiểm tra này gửi một cảnh báo hoặc ngoại lệ khi C hoặc C++ ghi đè dữ liệu

2.4.2 Sử dụng các thư viện an toàn

Sử dụng các thư viện được viết tốt và đã được kiểm thử dành cho các kiểu dữ liệu trừu tượng mà các thư viện này thực hiện tự động việc quản lý bộ nhớ, trong đó có kiểm tra biên có thể làm giảm sự xuất hiện và ảnh hưởng của các hiện tượng tràn bộ đệm

2.4.3 Chống tràn bộ đệm trên stack

Stack – smashing protection là kỹ thuật dùng để phát hiện các hiện tượng tràn bộ đệm phổ biến nhất Kỹ thuật này kiểm tra xem stack đã bị sửa đổi hay chưa khi một hàm trả về Nếu stack đã bị sửa đổi, chương trình kết thúc bằng một lỗi segmentation fault Chế độ Data Execution Prevention (cấm thực thi dữ liệu) của Microsoft bảo vệ các con trỏ và không cho chúng bị ghi đè.Có thể bảo vệ stack bằng cách phân tán stack thành hai phần, một phần dành cho dữ liệu và một phần dành cho các bước trả về hàm, sự phân chia này được dùng trong ngôn ngữ Forth

2.4.4 Bảo vệ không gian thực thi

Kỹ thuật này ngăn chặn việc thực thi mã tại stack hay heap Hacker có thể sử dụng tràn bộ đệm để chèn một đoạn mã tùy ý vào bộ nhớ của chương trình, với việc bảo vệ không gian thực thi thì mọi cố gắng chạy đoạn mã đó sẽ gây ra một ngoại lệ Một số CPU hỗ trợ tính năng có thể nó không kiểm tra dữ liệu copy vào một mảng có phù hợp với kích thước của mảng hay không

Trang 11

2.4.5 Ngẫu nhiên hóa sơ đồ không gian địa chỉ

Là một tính năng an ninh máy tính có liên quan đến việc sắp xếp các vùng dữ liệu quan trọng (thường bao gồm nơi chứa mã thực thi và vị trí các thư viện, heap và stack) một cách ngẫu nhiên trong không gian địa chỉ của một tiến trình

2.4.6 Kiểm tra sâu đối với gói tin

Có thể phát hiện việc cố gắng khai thác lỗi tràn bộ đệm từ xa ngay từ biên giới mạng Các kỹ thuật này có khả năng ngăn chặn các gói tin có chứa chữ ký của một vụ

tấn công đã biết hoặc chứa các chuỗi dài các lệnh No- Operation (NOP – lệnh rỗng không làm gì) Việc rà quét gói tin không phải một phương pháp hiệu quả vì nó chỉ có thể ngăn chặn các cuộc tấn công đã biết và có nhiều cách để mã hóa một lệnh NOP

Trang 12

Oracle VM VirtualBox cho phép bạn thiết lập một hoặc nhiều máy ảo (VM) trên một máy tính vật lý và sử dụng chúng đồng thời cùng với máy tính vật lý thật Mỗi máy

ảo có thể cài đặt và thực thi hệ điều hành riêng của mình, bao gồm các phiên bản Microsoft Windows, Linux, BSD và MS-DOS

Hình 1: Phần mềm VirtualBox

Easy File Sharing Web Server là một công cụ rất tốt giúp người dùng dễ dàng chia

sẻ file của mình cho người thân, đồng nghiệp hoặc khách hàng Nói cách khác Easy File Sharing Web Server là một Web server có hệ thống cơ sở dữ liệu lớn, cho phép share

và download file từ xa thông qua một trình duyệt và qua mạng internet

Trang 13

3.2 Công cụ tấn công tập tin Python 2.7

Python là ngôn ngữ lập trình hướng đối tượng đa năng có cấu trúc dữ liệu cấp cao

mạnh mẽ và hệ thống thư viện lớn Python hoàn toàn tạo kiểu động và sử dụng cơ chế cấp phát bộ nhớ tự động, cú pháp rõ ràng, đơn giản

Python 2.7 di chuyển một ứng dụng lớn viết bằng một phiên bản cũ hơn của một ngôn ngữ hoặc viết lại nó bằng ngôn ngữ khác nhìn chung có thể là một công việc lớn

Trang 14

9

3.3 Demo khai thác tràn bộ nhớ đệm trên windows 10

Khởi động Oracle VM VirtualBox và chuẩn bị hai máy :

 Một máy hệ điều hành Windows 7 (32 bit)

 Máy hệ điều hành Windows 10 (32 bit)

Downloaded by nhung nhung (nhungnguyen949595@gmail.com)

Trang 15

Các bước thực hiện:

Bước 1: Khởi động Easy File Sharing Web Server phiên bản 7.2 kiểm tra IP, Port Bước 2: Mở Web mạng cục bộ localhost của Easy File Sharing Web Server phiên bản 7.2

Bước 3: Mở python 2.7 tạo một file exploit.py

Bước 4: Cấu hình khai thác lỗi python

Bước 5: Mở Command Prompt của win 10 truy cập python 2.7 theo đoạn code sau:

Trang 16

11

Downloaded by nhung nhung (nhungnguyen949595@gmail.com)

Trang 17

Hình 9: T ấn công IP, Port của máy nạn nhân (Win 7)

Trang 18

13

3.4 Hậu quả việc tràn bộ nhớ đệm

Lỗi tràn bộ đệm xảy ra khi một ứng dụng cố gắng ghi dữ liệu vượt khỏi phạm vi

Lỗi tràn bộ đệm có thể khiến ứng dụng ngừng hoạt động, gây mất dữ liệu hoặc thậm chí giúp kẻ tấn công kiểm soát hệ thống hoặc tạo cơ hội cho kẻ tấn công thực hiện nhiều thủ thuật khai thác khác nhau

Lỗi tràn bộ đệm (Buffer Overflow) là một điều kiện bất thường Khi tiến trình lưu trữ dữ liệu vượt ra ngoài biên của bộ nhớ đệm có chiều dài cố định Kết quả là dữ liệu

Các biến và dữ liệu điều khiển luồng chảy của cả chương trình (program flow control)

3.5 Cách phòng chống tràn bộ nhớ đệm

Address Space Layout Randomization (ASLR) – di chuyển ngẫu nhiên xung quanh các không gian địa chỉ của vùng dữ liệu Thông thường, các cuộc tấn công Buffer Overflow cần biét được vị trí của executable code, và việc ngẫu nhiên các không gian địa chỉ sẽ hoàn toàn vô hiệu hóa cách thức tấn công này

Bảo vệ việc thực thi dữ liệu – Falg một số vùng bộ nhớ là non-executable (không thể thực thi) hoặc executable (có thể thực thi) để ngăn chặn các cuộc tấn công chạy mã

ở trong vùng non-executable

Structured exception handler overwrite protection (SEHOP) – giúp ngăn chặn các code độc hại tấn công SEH (Ngoại lệ có cấu trúc) – một hệ thống được tích hợp sẵn để quản lý các ngoại lệ (exception) của phần cứng và phần mềm Từ đó, ngăn chặn các hacker lợi dụng kỹ thuật khai thác ghi đè SEH Ở cấp độ chức năng, việc ghi đè SEH có thể đạt được bằng cách sử dụng một stack-based Buffer Overflow dể ghi đè một bản ghi đăng ký ngoại lệ, được lưu trữ trong stack của thread

Downloaded by nhung nhung (nhungnguyen949595@gmail.com)

Trang 19

CHƯƠNG 4 KẾT LUẬN VÀ KIẾN NGHỊ

2 Ki ến nghị

Hiện nay, hầu hết các máy tính đều có thể bị tấn công Buffer Overflow, do đó việc tìm hiểu về cuộc tấn công Buffer Overflow là cần thiết cho bất kỳ một người quản trị, hay một người dùng máy tính thông thường

Tấn công Buffer Overflow có thể được thực hiện một cách dễ dàng, và kẻ tấn công

có thể khai thác dữ liệu bằng những ngôn ngữ lập trình rất phổ biến Vì vậy, để phòng chống, các doanh nghiệp, tổ chức, cá nhân ngoài việc sử dụng các ngôn ngữ lập trình cao hơn hay những thư viện an toàn, thì còn phải thường xuyên tổ chức các cuộc rà quét để tìm ra các lỗ hổng, ngăn chặn kịp thời các cuộc tấn công tràn bộ đệm

Trang 20

15

Ti ếng Việt

1 Tài liệu môn học An toàn và bảo mật thông tin, Trường Đại học Thủ Dầu Một

2 Tài liệu Nguyễn Hữu Tuân, An toàn và bảo mật thông tin, NXB Hải Phòng 2008

Ti ếng Anh

1 Stack based Buffer Overflow Exploitation Tutorial – Saif IE Sherei

2 Buffer Overflow Vulnerabilities and Attacks – Lecture Notes (Syracuse University)

Downloaded by nhung nhung (nhungnguyen949595@gmail.com)

Trang 22

17 Downloaded by nhung nhung (nhungnguyen949595@gmail.com)

Trang 24

19 Downloaded by nhung nhung (nhungnguyen949595@gmail.com)

Ngày đăng: 31/01/2023, 18:16

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w