1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đề tài tìm hiểu về tấn công gây tràn bộ Đệm buffer overflow xây dựng và demo 1 kịch bản chèn mã Độc gây tràn và thực thi mã vừa chèn

16 2 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 đề Tìm Hiểu Về Tấn Công Gây Tràn Bộ Đệm Buffer Overflow
Tác giả Hoàng Quốc Hòa, Cù Xuân Hòa, Thân Xuân Hạnh, Đinh Bá Đạt
Người hướng dẫn Đinh Trường Duy
Trường học Học Viện Công Nghệ Bưu Chính Viễn Thông
Chuyên ngành An Toàn & Bảo Mật HTTT
Thể loại Báo Cáo Bài Tập Lớn
Định dạng
Số trang 16
Dung lượng 1,42 MB

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

Nội dung

 Buffer Overflow là hiện tượng khi một chương trình ghi quá mức giới hạn dữ liệu vào bộ nhớ hoặc buffer.. Các chương trình này có nhiệm vụ lưu trữ đJu vào đó trong Buffer và nếu quá mức

Trang 1

BÁO CÁO BÀI TẬP LỚN MÔN HỌC: AN TOÀN & BẢO MẬT HTTT

Đề tài: Tìm hiểu về tấn công gây tràn bộ đệm buffer overflow Xây dựng và demo 1 kịch bản chèn mã độc gây tràn và thực thi mã vừa

chèn.

Giảng viên: Đinh Trường Duy

Nhóm lớp: 03

Nhóm bài tập lớn: 15

Thành viên:

B21DCCN377 – Hoàng Quốc Hòa

B21DCCN375 – Cù Xuân Hòa

B21DCCN330 – Thân Xuân Hạnh

B21DCCN210 – Đinh Bá Đạt

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

KHOA CÔNG NGHỆ THÔNG TIN

1

Trang 2

Mục lục

Giới thiệu 3

1 Kiến trúc 3

1.1 Buffer Overflow là gì? 3

1.2 Cách thức hoạt động của Buffer Overflow 4

1.3 Tác hại 5

2 Giải thuật 7

2.1 Stack-based buffer overflow 7

2.2 Heap-based buffer overflow 8

2.3 Format string overflow 9

2.4 Integer overflow 10

3 Các điểm yếu 10

3.1 Các kiểu lỗi Buffer Overflow thường gặp 10

3.2 Cách phát hiện ra lỗi buffer overflow 11

4 Các biện pháp khắc phục 13

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

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

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

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

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

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

5 Kết luận 15

6 TÀI LIỆU THAM KHẢO 15

Trang 3

Giới thiệu

Trong lĩnh vực an ninh máy tính và lập trình, lỗi Buffer overflow hay tiếng Việt gọi

là lỗi tràn bộ nhớ đệm/lỗi tràn bộ đệm là khi mà bộ nhớ bG ghi đH nhiIu lJn trên ngăn xếp Lỗi này thường xuyên xảy ra do người dùng gửi một lượng lớn dữ liệu tới server ứng dụng, điIu này làm cho dữ liệu bG bắt phải đH lên các vG trí bộ nhớ liIn kI đó Đây 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 bG kết thúc, hoặc khi người dùng cố tình phá hoại, có thể lợi dụng lỗi này để phá vỡ an ninh hệ thống

1 Kiến trúc

Buffer Overflow (tràn bộ đệm) là một lỗ hổng phổ biến trong lập trình,

có thể gây ra những hậu quả nghiêm trọng Hãy cùng tìm hiểu về kiến trúc lỗi này:

1.1 Buffer Overflow là gì?

 Buffer Overflow là hiện tượng khi một chương trình ghi quá mức giới hạn dữ liệu vào bộ nhớ hoặc buffer

 Buffer (bộ đệm) là vùng lưu trữ dữ liệu xác đGnh Khi có dữ liệu bổ sung, chương trình sẽ ghi chúng vào buffer và thực hiện ghi đH lên các vùng bộ nhớ liIn kI khác

 Lỗi này thường xảy ra do người dùng gửi một lượng lớn dữ liệu tới chương trình, làm cho dữ liệu bG đH lên các vG trí bộ nhớ liIn kI

3

Trang 4

1.2 Cách thức hoạt động của Buffer Overflow.

 Những kẻ tấn công khai thác Buffer Overflow nhằm kiểm soát, sửa đổi các quá trình hoặc biến nội bộ Buffer Overflow nằm trong CWE và top 25 SANS lỗi phJn mIm nguy hiểm nhất hiện nay đối với các nhà cung cấp lớn nhỏ

 Buffer Overflow xảy ra do nhiIu nguyên nhân khác nhau, chẳng hạn như một tác nhân độc hại là code bất kỳ được gửi đJu vào đến chương trình Các chương trình này có nhiệm vụ lưu trữ đJu vào đó trong Buffer và nếu quá mức cho phép thì các dữ liệu thừa sẽ được ghi vào bộ nhớ liIn kI và ghi đI lên các dữ liệu tồn tại trước đó

 Các dữ liệu gốc trong Buffer là con trỏ đến đGa chỉ tiếp theo của hàm bG tấn công Kẻ tấn công có thể thay đổi các giá trG mới trỏ đến đGa chỉ mong muốn như vG trí tải trọng khai thác đã được đGnh vG ĐiIu này làm cho đường dẫn thực thi của quy trình và các quyIn kiểm soát bG thay đổi đột ngột

Ví dụ: Một chương trình cJn người dùng nhập tên thì kẻ tấn công sẽ nhập lệnh thực thi có kích thước lớn

 Buffer Overflow không thực sự khả khi với các lệnh bởi nó còn yêu cJu đGa chỉ trả vI trỏ đến lệnh độc hại được xác đGnh chính xác và rõ ràng Nếu chương trình bG sập sẽ được khôi phục bằng cách truy cập đGa chỉ quay lại Tuy nhiên, đGa chỉ này đã được thay đổi để trỏ đến lệnh mà kẻ tấn công đã chỉ đGnh Các lệnh độc hại này tồn tại ở cả hai bên đệm dựa trên NOP giúp xác đGnh phạm vi bộ nhớ dễ dàng hơn Buffer Overflow tấn công vào bộ nhớ

Trang 5

khá nhanh bởi các ngôn ngữ lập trình C hay C++ không có khả năng ngăn chặn truy cập hoặc ghi đH dữ liệu

 Một số ngôn ngữ lập trình hiện đại như C#, Java và Perl giúp hạn chế các vấn đI lỗi mã hoá ngăn chặn các nguy cơ từ Buffer Overflow Đối với một số môi trường lập trình cho phép thao tác bộ nhớ trực tiếp và các tính năng như trình biên dGch, thư viện thời gian chạy hay tính năng ngôn ngữ

Hình ảnh minh họa một tấn công tràn bộ đệm (buffer overflow attack) trên ngăn xếp (stack).

1.3 Tác hại

 Gây sự cố hệ thống:

o Buffer overflow có thể gây ra sự cố hệ thống bằng cách thay đổi dữ liệu trong bộ nhớ của chương trình và làm cho nó hoạt động không đúng cách hoặc thậm chí làm hỏng hệ thống Trong một số trường hợp, buffer overflow có thể làm cho chương trình rơi vào vòng lặp vô

5

Trang 6

hạn, nghĩa là nó không thể thoát ra khỏi một loạt lệnh hoặc hành động

và không còn thể hiện phản hồi

 Làm hỏng dữ liệu:

o Một cuộc tấn công buffer overflow có thể cho phép kẻ tấn công thay đổi luồng thực thi của ứng dụng và ghi đH các phJn tử của bộ nhớ, điIu này sửa đổi đường dẫn thực thi của chương trình để làm hỏng các tệp hiện có hoặc tiết lộ dữ liệu Dữ liệu bổ sung mà kẻ tấn công gửi cho chương trình sẽ chứa mã độc cho phép kẻ tấn công kích hoạt các hành động bổ sung và gửi các chỉ dẫn mới cho ứng dụng

 Đánh cắp thông tin:

o Khi buffer overflow xảy ra, kẻ tấn công có khả năng kiểm soát vùng

bộ nhớ bG quá tải và truy cập, đọc, và đánh cắp thông tin quan trọng từ

bộ nhớ của chương trình hoặc hệ thống Những thông tin này có thể là

dữ liệu nhạy cảm như tên, mật khẩu, thông tin cá nhân và dữ liệu quan trọng khác

 Mất quyIn kiểm soát:

o Kẻ tấn công có thể chiếm quyIn kiểm soát toàn bộ máy tính hoặc máy chủ, cho phép họ thực hiện các hành động xấu khác

o Để ngăn chặn lỗ hổng buffer overflow, các nhà phát triển cJn phải viết

mã an toàn hơn và kiểm tra dữ liệu đJu vào một cách cẩn thận để đảm bảo rằng bộ đệm không thể bG lợi dụng Các biện pháp bảo mật như kiểm tra mã độc hại và tường lửa cũng cJn được triển khai để bảo vệ khỏi cuộc tấn công này

 Có hai kiểu lỗi buffer overflow phổ biến:

o Stack overflow: Ghi đH biến đGa phương trong stack để thay đổi hành

vi của chương trình hoặc ghi đH đGa chỉ trả vI trong khung stack

o Format String: Lỗi tràn bộ đệm chuỗi đGnh dạng, tận dụng lợi thế của các kiểu dữ liệu hỗn hợp và kiểm soát thông tin trong chức năng nhất đGnh

Trang 7

2 Giải thuật

Có nhiều giải thuật tấn công tràn bộ đệm khác nhau, mỗi giải thuật có ưu và nhược điểm riêng Dưới đây là một số giải thuật phổ biến:

2.1 Stack-based buffer overflow

 Cách thức hoạt động:

o Kẻ tấn công cung cấp một lượng dữ liệu đJu vào lớn hơn kích thước của bộ đệm được cấp phát trên ngăn xếp

o Dữ liệu dư thừa sẽ ghi đH lên các biến đGa phương hoặc đGa chỉ trả vI nằm gJn bộ đệm trong ngăn xếp

o Khi chương trình trả vI từ hàm hiện tại, đGa chỉ trả vI bG ghi đH sẽ khiến chương trình nhảy đến vG trí do kẻ tấn công chỉ đGnh, thường là một đoạn mã độc được chHn vào bộ đệm

 Ưu điểm:

o Dễ thực hiện

o Hiệu quả cao

o Phổ biến trong các chương trình được viết bằng ngôn ngữ C/C++

 Nhược điểm:

o Khó kiểm soát đGa chỉ ghi đH

o Có thể bG ảnh hưởng bởi các biện pháp bảo vệ stack

7

Trang 8

Ví dụ về Stack-based buffer overflow.

Trong ví dụ trên, nếu kẻ tấn công nhập hơn 10 ký tự vào buffer, dữ liệu dư thừa sẽ ghi đè lên địa chỉ trả về của hàm main Khi hàm main trả về, chương trình sẽ nhảy đến vị trí do kẻ tấn công chỉ định.

2.2 Heap-based buffer overflow

 Cách thức hoạt động:

o Kẻ tấn công cấp phát một lượng lớn bộ nhớ trên heap và ghi đH lên các vùng dữ liệu lân cận

o Kỹ thuật này thường được sử dụng để thực hiện các cuộc tấn công

"use-after-free" hoặc "double-free"

 Ưu điểm:

o Dễ dàng kiểm soát đGa chỉ ghi đH

o Ít bG ảnh hưởng bởi các biện pháp bảo vệ stack

 Nhược điểm:

o Khó thực hiện hơn stack-based buffer overflow

o Ít phổ biến hơn stack-based buffer overflow

Trang 9

Ví dụ về Heap-based buffer overflow

Trong ví dụ trên, sau khi giải phóng ptr, kẻ tấn công vẫn có thể ghi đè lên vùng bộ nhớ đã được giải phóng Điều này có thể dẫn đến việc chương trình

bị sập hoặc thực thi mã độc.

2.3 Format string overflow

 Cách thức hoạt động:

o Kẻ tấn công khai thác lỗ hổng trong các hàm đGnh dạng chuỗi như printf và scanf

o Kẻ tấn công thêm các ký tự đặc biệt vào chuỗi đGnh dạng để ghi đH lên các biến hoặc đGa chỉ trên ngăn xếp

 Ưu điểm:

o Không cJn ghi đH lên stack hoặc heap

o Có thể thực hiện trên các hệ thống có bảo vệ stack và heap

 Nhược điểm:

o Khó thực hiện hơn các loại tấn công khác

o Ít phổ biến hơn các loại tấn công khác

9

Trang 10

Ví dụ về Format string overflow

Trong ví dụ trên, kẻ tấn công có thể nhập %100s vào buffer Điều này sẽ khiến printf cố gắng in 100 ký tự, dẫn đến ghi đè lên các biến trên ngăn xếp.

2.4 Integer overflow

 Cách thức hoạt động:

o thực hiện phép toán tràn số nguyên để ghi đH lên các biến hoặc đGa chỉ trên bộ nhớ

 Ưu điểm:

o Dễ thực hiện

o Có thể thực hiện trên nhiIu loại chương trình

 Nhược điểm:

o Khó kiểm soát đGa chỉ ghi đH

o Ít hiệu quả hơn các loại tấn công khác

3 Các điểm yếu

3.1 Các kiểu lỗi Buffer Overflow thường gặp.

Đây là các điểm yếu trên buffer mà những tin tặc có thể tận dụng, khai thác và tấn công vào trong hệ thống dũ liệu của người dùng Có thể kể đến như sau:

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

bỏ qua

Trang 11

Các ngôn ngữ lập trình như là ngôn ngữ C, bản thân nó đã tiIn ẩn các lỗi mà tin tặc

có thể khai thác

Các phương thức strcat(), strcpy(), sprintf(), bcopy(), gets(), canf() trong ngôn ngữ

C có thể được khai thác vì các hàm này không kiểm tra những buffer được cấp phát trên stack có kích thước lớn hơn dữ liệu được copy vào buffer hay không

3.2 Cách phát hiện ra lỗi buffer overflow

 Đây là những cách phổ biến, thường gặp mà cả người dùng và tin tặ có thể

sử dụng để phát hiện ra lỗi buffer overflow

 Công nghệ biên dGch 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 vI 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 dGch cJn phải hiểu tất cả các thông tin này để tạo ra

mã đúng

Ví dụ:

 Trong ví dụ trên, trình biên dGch có thể hiểu một đại diện trong gian (IR) có kích thước bộ đệm là 10 và nó biết rằng dữ liệu đến từ một tham số quen thuộc Tuy nhiên, nếu chỉ nhìn vào các tham số đó sẽ không đủ thông tin để biết làm thế nào các dữ liệu được đại diện từ số bé đến số lớn Trình biên dGch tối ưu hóa điIu này bằng các bước tạo mã code ĐJu tiên, nhìn vào tất

cả các mã code trong dòng tiếp theo Tiếp theo là tìm vào các đoạn mã từ những lệnh gọi thường xuyên Và nó được gọi là phân tích interprocedural Tưởng tượng rằng ví dụ trên cũng bao gồm mã này

11

Trang 12

 Các yourfunc() gọi myfunc() trong bộ đệm cục bộ của mình chứa đJu vào dữ liệu Sử dụng phân tích interprocedural, trình biên dGch xây dựng một đồ thG kết nối yourfunc() với myfunc() bằng cách kết hợp kiến thức của yourfunc()

và myfunc() Và có thể hiểu rằng nó đang cố gắng để sao chép 50 byte dữ liệu vào bộ đệm 10byte dữ liệu Và như vậy lỗi tràn bộ đệm có thể xảy ra

 Tưởng tượng “ yourbuffer” sẽ bG đJy như sau:

fread (yourbuffer, 1, 49, file);

 Một trình biên dGch mà hiểu các thuộc tính của thư viện thời gian tiêu chuẩn

sẽ biết rằng bộ đệm bây giờ chứa dữ liệu từ một thời điểm không xác đGnh trong hệ thống tập tin bên ngoài chương trình và có khả năng bG nguy hiểm

Mã myfunc() chính là mã mở cửa cho một cuộc tấn công độc hại và

yourbuffer được làm đJy với một chuỗi liên tục

 Sử dụng phân tích mã nguồn để tìm lỗi tràn bộ đệm trong mã thực thi một cách chính xác đòi hỏi phải hiểu biết sâu vI code Và công nghệ của trình biên dGch được thiết kế với mục đích tìm kiếm lỗi tràn bộ đệm Nó hiệu quả

và chính xác hơn các phương pháp khác và cung cấp các cách nhìn sâu sắc

vI tình trạng bảo mật của từng đoạn mã mà nó phân tích

4 Các biện pháp khắc phục

Trang 13

 Nếu các tin tặc ứng dụng buffer overflow để có thể gây ra những hệ quả như phJn trước đã trình bày, thì người dùng cũng có thể ứng dụng các hiểu biết của mình vI buffer overflow để có thể ngăn chặn những tin tặc có ý đồ xấu đó

 Việc xử lý bộ đệm trước khi đọc hay thực thi có thể làm thất bại các cuộc khai thác lỗi tràn bộ đệm nhưng vẫn không ngăn chặn được một cách tuyệt đối

 Việc xử lý bao gồm: Chuyển từ chữ hoa thành chữ thường; loại bỏ các ký tự đặc biệt và lọc các xâu không chứa kí tự là chữ số hoặc chữ cái

 Ngoài ra, vẫn còn có các kỹ thuật để tránh việc lọc và xử lý này:

Alphanumeric code: mã gồm toàn chữ và số; Polumorphic code: mã đa hình; Seft-modifying code: mã tự sửa đổi; Tấn công kiểu return – to – libc

 Vì vậy, để tránh các nguy cơ bG khai thác lỗi buffer overflow chúng ta cJn sử dụng các biện pháp phòng tránh hiệu quả hơn

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

 Ngôn ngữ lập trình có một ảnh hưởng lớn đối với sự xuất hiện lỗi tràn bộ đệm - Ngôn ngữ lập trình C và C++ là hai ngôn ngữ lập trình thông dụng, nhưng hạn chế của nó là không kiểm tra việc truy cập hoặc ghi đH dữ liệu thông qua các con trỏ Cụ

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 Các thư viện an toàn gồm có: The Better String Library, Arri Buffer API, Vstr

13

Trang 14

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 đã bG sửa đổi hay chưa khi một hàm trả vI Nếu stack đã bG 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 bG ghi đH.Có thể bảo vệ stack bằng cách phân tán stack thành hai phJn, một phJn dành cho dữ liệu và một phJn dành cho các bước trả vI hàm, sự phân chia này được dùng trong ngôn ngữ Forth

4.4 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à vG trí các thư viện, heap và stack) một cách ngẫu nhiên trong không gian đGa chỉ của một tiến trình

4.5 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ó nhiIu cách để mã hóa một lệnh NOP

4.6 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 để chHn một đoạn mã tùy ý vào bộ nhớ của chương trình,

Trang 15

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ó tin bit NX (No eXecute) hoặc bit XD (eXecute Disable) Khi kết hợp với phJn mIm các tính năng này có thể được dùng để đánh dấu những trang dữ liệu (chẳng hạn như các trang chứa stack

và heap) là đọc được nhưng không thực hiện được

5 Kết luận

Thực tế chỉ ra rằng, các cuộc tấn công tràn bộ đệm vẫn thường xuyên xảy ra và gây hậu quả nghiêm trọng cho hệ thống vì nó có thể can thiệp trực tiếp vào mã nguồn Tuy rằng bài báo đã chỉ ra các dạng cơ bản của tấn công Buffer Overflow và các cách phòng chống nhưng với sự phát triển của công nghệ, 293 các hacker không ngừng phát triển các cách tấn công mới vào hệ thống Vì vậy, bài báo chỉ có thể giúp người đọc phJn nào biết đến cách tấn công Buffer Overflow và mức độ nguy hiểm của các cuộc tấn công bằng phương pháp Buffer Overflow Bài báo cũng có thể là cơ sở phJn nào giúp người đọc dựa vào đó để có thể nghiên cứu sâu hơn vI cuộc tấn công này từ đó đưa ra những biện pháp phòng chống hiệu quả và triệt để nhất

6 TÀI LIỆU THAM KHẢO.

- Stack based Buffer Overflow Exploitation

Tutorial – Saif IE Sherei

- Buffer Overflow Vulnerabilities and

Attacks – Lecture Notes (Syracuse

University)

- Different Techniques to Prevent Buffer

Overflow – Kamanashis Biswas

- Buffer Overflow Attacks – James

15

Ngày đăng: 14/02/2025, 15:35

HÌNH ẢNH LIÊN QUAN

Hình ảnh minh họa một tấn công tràn bộ đệm (buffer overflow attack) trên  ngăn xếp (stack). - Đề tài  tìm hiểu về tấn công gây tràn bộ Đệm buffer overflow  xây dựng và demo 1 kịch bản chèn mã Độc gây tràn và thực thi mã vừa chèn
nh ảnh minh họa một tấn công tràn bộ đệm (buffer overflow attack) trên ngăn xếp (stack) (Trang 5)

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