1. Trang chủ
  2. » Công Nghệ Thông Tin

Kỹ thuật tấn công BUFFER OVERFLOW

32 1,2K 2

Đ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

Định dạng
Số trang 32
Dung lượng 3,3 MB

Nội dung

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 đ

Trang 1

Người thực hiện: Lê Long Bảo Ngành : Mạng Máy Tính Lớp : MM03A

CHƯƠNG 17 : BUFFER OVERFLOW

1

Trang 2

Lỗi “zero day” vượt qua sự kiểm soát của người sử dụng

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 các mã.

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”.

2

Trang 3

Sự phá vỡ ngăn

xếp

Khai thác sự biến đổi của tràn bộ nhớ đệm

Cách xác định tràn bộ nhớ đệm

Điều khiển, kiểm tra tràn

bộ nhớ đệm

Công cụ phát hiện tràn bộ nhớ đệm

Các bước kiểm tra tràn

Trang 4

4

Trang 5

 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à

Trang 6

Các chức năng trong ngôn ngữ lập trình C : strcat(), strcpy(),

sprintf(), vsprintf(), bcopy(), gets() và scanf() có thể bị khai thác

vì các hàm này không kiểm tra kích thước của bộ đệm.

Các lập trình viên thường không tuân thủ đúng

theo các chuẩn đã đặt ra khi tạo 1 phần mềm

Các ngôn ngữ lập trình như C thường chứa

những lỗ hổng

Các bước kiểm tra phần mềm thường không

được thực hiện đầy đủ, trong nhiều trường hợp

chúng bị bỏ qua hoàn toàn

Trang 7

Bộ đệm 2(Biến cục bộ 2)

Bộ đệm 1(Biến cục bộ 1)

Quay lại con trỏ

Hàm gọi các tham số

Phần dưới của bộ nhớ

Phần trên của bộ nhớ

Thanh ghi dùng để ghi địa chỉ bên trong stack

Các điểm

SP nằm

ở đây

Hướng tăng dần của stack

Hướng

đi vào

+ Stack truy xuất các phần tử theo

kiểu LIFO (Last in First out) sử

dụng hàm chức năng , và tham

chiếu tới các biến cục bộ.

+ Nó hoạt động như một bộ đệm,

giữ 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

+SP là một thanh ghi lưu giữ địa

chỉ trỏ đến ô nhớ hiện tại của vùng

nhớ stack.

Trang 8

 Sự tràn bộ đệm trên stack xảy ra khi không gian bộ đệm trong stack không còn trống.

 Kẻ tấn công truyền các mã độc hại lên stack và khi sự tràn bộ đệm xảy ra các mã độc hại này liền ghi đè lên các mã trước đó, các con trỏ phải trỏ lại để điều khiển mã độc hại.

Một stack bình thường Stack khi bị kẻ tấn

công gọi chức năng

Stack khi một chức năng nào

đó bị phá hoại

Trang 9

 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.

Khung nhớ Heap

Trang 10

 Nếu một ứng dụng sao chép dữ liệu mà không kiểm tra mặc 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 lê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 trường hợp, điều này sẽ cho phép kẻ tấn công kiểm soát được việc thực hiện của chương trình

Trang 11

11

Trang 12

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 mềm cho các kẻ tấn công vì chúng rất dễ tràn nếu có điều kiện phù hợp

Trang 13

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)

Trang 14

mã 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 về lắp ráp và ngôn ngữ máy.

Kiến thức ngôn ngữ lập trình C và Perl.

Trang 15

Tìm sự hiện diện và

vị trí của lỗ hổngtràn bộ đệm

Ghi nhiều dữ liệuvào bộ đệm hơnmức nó có thể xử lý

Ghi đè lên địa chỉquay về của hàm

Thay đổi luồng thựcthi bằng mã đượchacker chèn vào

I

II

III

IV

Trang 16

ta hoặc cô ta 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 anh ta để thực hiện chỉ thị.

Trang 17

sẽ in nội dung bộ nhớ+ Lúc này khai thác hoàn toàn có thể xảy ra bằng cách

sử dụng user =“%n”

Hình thức đúngInt func (char *user){

Fprintf ( stdout,

“%s”, user) ; }

Trang 19

Tràn bộ nhớ đệm cho

phép chúng ta thay đổi

địa chỉ trả về của một

hàm

Trang 20

 Một khi lỗ hổng bị phát hiện và bị phá vỡ bởi hacker, hacker

có thể có đặc quyền tương tự 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.

 Sau khi chiếm được, kẻ tấn công có thể dùng backdoor làm cửa sau để tạo lại kết nối cho lần sau

20

Trang 21

Bof(): /*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*/

/*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 bị mất

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*/

Ví dụ của việc tràn heap không thể kiểm soát

Trang 22

Điều đầu tiên của bất kì chươngtrì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

Trang 23

 Biết được điều này, một kẻ tấn công có thể gây tràn bộ nhớ lên 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

Trang 24

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 NOP

Á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 sự kiện

chính

Ngẫu nhiên chỉnh sửa LSB của con trỏ hướng tới khu vực

NOP

Đối với Con trỏ quay

về

Trang 25

Chạy máy chủ Web trên

Bước 4

Sử dụng bộ phận, phân tách trình gỡ lỗi

Bước 5

Sử dụng IDA-Pro để xây

dụng lại chỗ bị khai thác

Bước 6

Trang 26

 Cung cấp một số lượng lớn các ứng dụng, dữ liệu và kiểm tra các

hành vi bất thường

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.

Trang 27

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 2 đầ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

Trang 28

dự kiến.

Hai thanh ghi EAX

và ECX, có thể đượcđặt cùng với địa chỉ

mà người sử dụngcung 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

Trang 29

 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 việc thực thi ngăn xếp

29

Trang 30

 Dùng các ngôn ngữ an toàn hơn như Java,C#

 Đánh dấu ngăn xếp khi không thực hiện, và để vị trí

ngăn xếp ngẫu nhiên.

Trang 31

 Thiết kế chương trình với trọng tâm bảo mật.

 Ngăn chặn sử dụng các hàm nguy hiểm: gets, strcpy, …

 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 đè

31

Trang 32

 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.

32

Ngày đăng: 19/08/2015, 10:17

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN

w