Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 58 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
58
Dung lượng
4,87 MB
Nội dung
SỰTRÀNBỘNHỚĐỆM GVHD: Ths Lê Tự Thanh Nhóm 13: Phạm Nguyễn Thanh Hưng Hà Xuân Hải TIN TỨC BẢO MẬT THÔNG TIN TRONG TUẦN Lỗi ngày trở về 0 vượt qua sự kiểm soát của Người sử dụng Windows. Sựtrànbộnhớđệm cục bộ là thủ thuật đánh lừa hệ điều hành của Microsoft để hệ thống cấp quyền sử dụng riêng cho kẻ tấn công. Nhiều phiên bản của hệ điều hành Microsoft dễ bị tổn thương nhưng không được tiết lộ, việc trànbộđệm ngày về 0 có nguy cơ bị tổn thương mà qua đó cho phép một 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ànbộđệ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 phông chữ. 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”. Sựtrànbộnhớđệm (BoF). Trànbộnhớđệm trên stack (ngăn xếp) Trànbộnhớđệm trên heap Điều khiển stack Các bước trànbộnhớđệm Cách thức tấn công một chương trình thực Sự phá vỡ stack Ví dụ của trànbộnhớđệm Làm cách nào khai thác sự biến đổi của việc trànbộnhớđệm Xác định trànbộnhớđệm Điều kiện kiểm tra trànbộnhớđệm trên heap: heap.exe Các bước kiểm tra việc trànbộnhớđệm trên stack trong chương trình sửa lỗi OllyDbg Công cụ phát hiện trànbộnhớđệm Phòng chống trànbộnhớđệm Công cụ đối phó với việc trànbộnhớđệm Bút kiểm tra trànbộnhớđệm CÁC CHỦ ĐỀ TRONG MODULE Khái niệm trànbộnhớđệm Phương pháp luận trànbộnhớđệm Ví dụ trànbộnhớđệm Công cụ bảo mật trànbộnhớđệm Phát hiện trànbộnhớđệm Biện pháp đối phó trànbộđệm Bút kiểm tra trànbộnhớđệm BIỂU ĐỒ MODULE Lỗi trànbộđệ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à nó có thể xử lý. Khi chương trình được biên dịch và chạy, nó sẽ chỉ định một phần của bộnhớ có độ dài 11 bytes để chứa chuỗi tấn công. Hàm Strcpy sẽ sao chép chuỗi “DDDDDDDDDDDDDD” vào chuỗi tấn công, lúc này bộđệm sẽ vượt quá kích thước 11 bytes, dẫn tới trànbộ đệm. Đây là loại dễ bị tổn thương trong hệ thống dựa trên UNIX và NT. Phương thức kiểm tra biên không được thực hiện đầy đủ hoặc, trong nhiều trường hợp, chúng bị bỏ qua hoàn toàn. Ngôn ngữ lập trình, chẳng hạn như C, có các lỗ hổng bảo mật trong chính chúng. Chương trình và các ứng dụng không tuân thủ đúng các hoạt động mà chúng được lập trình. Các chức năng trong ngôn ngữ lập trình C như strcat(), strcpy(), sprintf(), vsprintf(), bcopy(), gets() và scanf() có thể bị khai thác như việc chúng không kiểm tra kích thước của bộ đệm. Tại Sao Các Chương Trình Và Ứng Dụng Dễ Bị Tổn Thương ? Stack sử dụng cơ chế Last-In- First-Out (vào sau ra trước) để truyền hàm tham số và tham chiếu với các biến cục bộ. Nó hoạt động như một bộ đệm, giữ tất cả 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. Phần dưới của bộnhớ BP tại các nơi bên trong khung stack Phần trên của bộnhớ Các điểm SP ở đây Hướng đi vào Hướng tăng của stack Tìm Hiểu Về Stack Bộ Đệm2 (biến cục bộ 2) Bộ Đệm1 (biến cục bộ 1) Điểm quay trở về Chức năng gọi các đối số Một Stack bình thường Stack khi bị kẻ tấn công gọi một chức năng Stack sau khi bị một chức năng phá hoại. Phần dưới của Stack Phần dưới của Stack Phần dưới của Stack Dữ liệu trên đoạn stack. Dữ liệu trên đoạn stack. Dữ liệu trên đoạn stack. Địa chỉ quay về Địa chỉ quay về mới Các dữ liệu khác trên đoạn stack Dữ liệu bị ghi đè trên đoạn stack Phần cuối của Stack Phần cuối của Stack Dữ liệu mới Một số dữ liệu có thể bị ghi đè 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. Tìm Hiểu Về Heap Dung lượng Heap đơn giản Dung lượng bộnhớ Trường điều khiển Trường điều khiển Dung lượng bộnhớ Dung lượng bộnhớ Trường điều khiển Nếu một ứng dụng sao chép dữ liệu mà không kiểm tra 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 trê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. SựTrànBộNhớĐệm Trên Heap Lưu {: trong hầu hết các môi trường, điều này sẽ cho phép kẻ tấn công kiểm soát được việc thực thi của chương trình. [...]... 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 “Con trỏ quay về” Ngẫu nhiên chỉnh sửa LSB của con trỏ hướng tới khu vực của NOP BIỂU ĐỒ MODULE Khái niệm trànbộnhớđệm công cụ bảo mật trànbộnhớđệm phương pháp luận trànbộnhớđệm bút kiểm tra trànbộnhớđệm biện pháp đối phó trànbộđệm ví dụ trànbộnhớđệm phát hiện trànbộnhớđệm Xác Định TrànBộNhớĐệm Bước 1 Chạy... Phương pháp luận trànbộnhớđệm bút kiểm tra Bút trànbộnhớ kiểm tra trànbộnhớđệmđệm Biện pháp đối phó trànbộđệm Ví dụ trànbộnhớđệm Phát hiện tràn bộnhớđệm Lỗi TrànBộĐệm Không Thể Kiểm Soát Đơn Giản 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*/ /*sao chép 20 bytes của A và bộ đệm* / Return 1; /*quay... đương (đa hình) BIỂU ĐỒ MODULE Khái niệm trànbộnhớđệm Công cụ bảo mật trànbộnhớđệm Phương pháp luận trànbộnhớđệm Bút kiểm tra trànbộnhớđệm Biện pháp đối phó trànbộđệm Ví dụ trànbộnhớđệm Phát hiện trànbộnhớđệm Kiến Thức Cần Thiết Để Khai Thác Lỗi TrànBộĐệm Trong Chương Trình Hiểu biết về hoạt động của bộnhớ stack và heap Hiểu biết về cách hệ thống gọi công việc ở cấp độ mã máy... lỗi trànbộđệm cục bộ để đạt được quyền truy cập của siêu người dùng Sử dụng Netcat Tạo một cửa sau Sử dụng (UNIX cụ thể) inetd Sử dụng FTP ít quan trọng (TFTP) bao gồm cả Windows 2000 và một số UNIX đặc thù Sử dụng Netcat để làm thô và kết nối tương tác Giao diện UNIX cụ thể Chụp lại một kết nối đầu cuối X BIỂU ĐỒ MODULE Khái niệm trànbộnhớđệm Công cụ bảo mật trànbộnhớđệm Phương pháp luận tràn. .. thể tiến hành được vì thời điểm này bộđệm bị tràn* / /*rời khỏi các chức năng chính*/ Ví dụ của việc tràn heap không thể kiểm soát /*đơn giản nhất của việc tràn heap*/ TrànBộĐệm Đơn Giản Trong C Chương trình C dễ bị tổn thương overrun.C Điều đầu tiên của bất kì chương trì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... các miếng đệm nhằm mục đích bắt đầu lỗi trànbộđệm bằng các lệnh dài hạn của NOP (một NOP chuyển động hoặc trượt) vi thế CPU 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ànbộđệ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) BIỂU ĐỒ MODULE Khái niệm trànbộnhớđệm Công... thể gây trànbộnhớ “tên” hướng tới bộnhớ “các lệnh nguy hiểm”, và chạy bất kz lệnh nào mà anh ấy hay cô ấy muốn Để biên dịch chương trình overrun.c, chạy lệnh này trong Linux Địa chỉ cho biến “lệnh hệ thống nguy hiểm” là 16 byte bắt đầu từ biến “tên” 6 byte thêm là chi phí được sử dụng bởi hệ thống “maHoc” để cho phép bộnhớ trở lại để sử dụng chung khi nó được giải phóng Tràn đầu ra bộđệm Khai... dung bộnhớ Lỗi toàn diện xảy ra bằng cách sử dụng người dùng =“%n” Hình thức đúng Int func (char *user) { Fprintf ( stdout, “%s”, user) ; } Gây TrànBộĐệm Bằng Cách Sử Dụng Chuỗi Định Dạng Trong C, xét ví dụ của BoF sử dụng chuỗi định dạng có vấn đề Như thế nào nếu người dùng = “%500d ” Sẽ bỏ qua giới hạn “%400s” Sẽ tràn biến outbuf Phá Vỡ Stack Ý tưởng chung là gây ra trànbộ đệm. .. thức về lắp ráp và ngôn ngữ 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 ngôn ngữ lập trình C và Perl Các Bước TrànBộĐệm Bước 1 Tìm sự hiện diện và vị trí của lỗ hổng trànbộđệm Bước 3 Ghi đè lên địa chỉ quay về của hàm Bước 2 Ghi nhiều dữ liệu vào bộđệm hơn mức mà nó có thể xử lý Bước 4 Thay đổi luồng thực hiện hàm bằng các mã hacker Tấn Công Một Chương Trình Thực Giả sử rằng... hàm sử dụng các hiệu số 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 ưu thích của các kẻ tấn công vì chúng rất dễ tràn nếu xảy ra điều kiện phù hợp Shellcode gây trànbộ đệm, viết bằng hợp ngữ, khai thác các lỗ hổng trong ngăn xếp và bộnhớ quản lí heap Không Xử Lý (NOPs) Hầu hết các CPU đều có một lệnh No Operation (Không hoạt động) – nó không . nhớ đệm CÁC CHỦ ĐỀ TRONG MODULE Khái niệm tràn bộ nhớ đệm Phương pháp luận tràn bộ nhớ đệm Ví dụ tràn bộ nhớ đệm Công cụ bảo mật tràn bộ nhớ đệm Phát hiện tràn bộ nhớ đệm. tràn bộ nhớ đệm Làm cách nào khai thác sự biến đổi của việc tràn bộ nhớ đệm Xác định tràn bộ nhớ đệm Điều kiện kiểm tra tràn bộ nhớ đệm trên heap: heap.exe Các bước kiểm tra việc tràn bộ. tràn bộ nhớ đệm Phát hiện tràn bộ nhớ đệm Ví dụ tràn bộ nhớ đệm Công cụ bảo mật tràn bộ nhớ đệm Bút kiểm tra tràn bộ nhớ đệm Biện pháp đối phó tràn bộ đệm BIỂU ĐỒ MODULE Kiến