Xem mẫu

  1. SỰ TRÀN BỘ NHỚ ĐỆM GVHD: Ths Lê Tự Thanh Nhóm 13: Phạm Nguyễn Thanh Hưng Hà Xuân Hải
  2. 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àn bộ 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àn bộ đệ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à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 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”.
  3. CÁC CHỦ ĐỀ TRONG MODULE Làm cách nào khai thác sự biến đổi Sự tràn bộ nhớ đệm (BoF). của việc tràn bộ nhớ đệm Tràn bộ nhớ đệm trên stack (ngăn xếp) Xác định tràn bộ nhớ đệm Điều kiện kiểm tra tràn bộ nhớ đệm Tràn bộ nhớ đệm trên heap trên heap: heap.exe Điều khiển stack Các bước kiểm tra việc tràn bộ nhớ đệm trên stack trong chương trình sửa Các bước tràn bộ nhớ đệm lỗi OllyDbg Cách thức tấn công một chương trình Công cụ phát hiện tràn bộ nhớ đệm thực Phòng chống tràn bộ nhớ đệm Sự phá vỡ stack Công cụ đối phó với việc tràn bộ nhớ đệm Ví dụ của tràn bộ nhớ đệm Bút kiểm tra tràn bộ nhớ đệm
  4. BIỂU ĐỒ MODULE Phương Khái niệm pháp luận tràn bộ nhớ tràn bộ nhớ đệm đệm Công cụ Bút kiểm bảo mật Ví dụ tràn tra tràn bộ tràn bộ nhớ bộ nhớ đệm nhớ đệm đệm Biện pháp Phát hiện đối phó tràn bộ nhớ tràn bộ đệm đệm
  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à 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àn bộ đệm. Đây là loại dễ bị tổn thương trong hệ thống dựa trên UNIX và NT.
  6. Tại Sao Các Chương Trình Và Ứng Dụng Dễ Bị Tổn Thương ? 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.
  7. Tìm Hiểu Về Stack Các điểm SP ở Stack sử dụng cơ chế Last-In- Phần đây dưới First-Out (vào sau ra trước) để của bộ truyền hàm tham số và tham nhớ chiếu với các biến cục bộ. Bộ Đệm2 Hướng đi Nó hoạt động như một bộ đệm, (biến cục bộ 2) vào BP tại giữ tất cả các thông tin mà hàm các nơi cần. bên Bộ Đệm1 trong Được tạo ra vào thời điểm bắt khung (biến cục bộ 1) đầu của hàm và giải phóng lúc stack kết thúc hàm. Điểm quay trở về Phần Chức năng gọi Hướng tăng trên của stack của bộ các đối số nhớ
  8. 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 Một số dữ liệu Dữ liệu trên đoạn Dữ liệu trên đoạn stack. có thể bị ghi đè stack. stack. Địa chỉ quay về Địa chỉ quay về mới Dữ liệu bị ghi đè Các dữ liệu khác Dữ liệu trên đoạn stack trên đoạn stack mới Phần cuối của Stack Phần cuối của Stack Stack khi bị kẻ tấn công gọi Stack sau khi bị một chức Một Stack bình thường một chức năng năng phá hoại.
  9. Tìm Hiểu Về Heap 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. Dung lượng Dung lượng Dung lượng bộ nhớ Trường điều bộ nhớ bộ nhớ Trường điều khiển Trường điều khiển khiển Dung lượng Heap đơn giản
  10. Sự Tràn Bộ Nhớ Đệm Trên Heap 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. 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.
  11. Hoạt Động Của Stack "Hủy bỏ" một Đặt một mục mục trên Các hoạt động lên trên đỉnh cùng của ngăn Pop quan trọng của Push của ngăn xếp. xếp ngăn xếp. Hoạt động của Push và Pop Quay trở về nội dung được chỉ bởi con trỏ và thay đổi con trỏ. Mở rộng con trỏ lệnh Mở rộng con trỏ Stack Mở rộng con trỏ nền hiện hành (EIP) (ESP) (EBP) EIP trỏ đến đoạn mã mà bạn ESP trỏ đến vị trí hiện tại trên ngăn Các máy chủ EBP như một điểm xếp và cho phép vài thứ được thêm đang thực hiện. Khi bạn gọi tĩnh để tra cứu thông tin trên vào và loại bỏ từ ngăn xếp bằng một hàm, chúng sẽ được lưu ngăn xếp giống như các biến và cách sử dụng hoạt động push và trữ trên ngăn xếp để sử dữ liệu trong một hàm sử dụng pop hoặc thao tác trực tiếp con trỏ dụng sau. các hiệu số. ngăn xếp.
  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 ư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àn bộ đệ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.
  13. Không Xử Lý (NOPs) Hầu hết các CPU đều có một Kẻ tấn công các miếng đệm lệnh No Operation (Không nhằm mục đích bắt đầu lỗi hoạt động) – nó không làm tràn bộ đệm bằng các lệnh gì nhưng thúc đẩy lệnh con dài hạn của NOP (một NOP trỏ. chuyển động hoặc trượt) vi thế CPU sẽ không làm gì cả Thông thường, bạn có thể cho tới khi nó nhận được “sự đặt một trong số chúng kiện chính” (trước “con trỏ trước chương trình của bạn quay về). (trong chuỗi). ADMutate (bởi K2) chấp nhận một lỗi tràn bộ đệm nhằm Hầu hết các xâm nhập hệ khai thác như là đầu vào và thống phát hiện (IDSs) bằng ngẫu nhiên tạo ra một phiên cách tìm kiếm chữ ký trượt bản có chức năng tương của NOP. đương (đa hình).
  14. BIỂU ĐỒ MODULE Phương Khái niệm pháp luận tràn bộ nhớ tràn bộ nhớ đệm đệm Công cụ bảo Bút kiểm tra Ví dụ tràn mật tràn bộ tràn bộ nhớ bộ nhớ đệm nhớ đệm đệm Biện pháp Phát hiện đối phó tràn tràn bộ nhớ bộ đệm đệm
  15. Kiến Thức Cần Thiết Để Khai Thác Lỗi Tràn Bộ Đệm Trong Chương Trình Hiểu biết về hoạt động của bộ nhớ Hiểu biết về cách hệ Quen với các công stack và heap thống gọi công việc cụ biên dịch và sửa ở cấp độ mã máy lỗi như gdb Kiến thức về lắp ráp Kiến thức ngôn ngữ và ngôn ngữ máy lập trình C và Perl
  16. Các Bước Tràn Bộ Đệm Bước 2 Bước 1 Ghi nhiều dữ liệu vào bộ Tìm sự hiện diện và vị trí đệm hơn mức mà nó có của lỗ hổng tràn bộ đệm thể xử lý. Bước 4 Bước 3 Thay đổi luồng thực hiện Ghi đè lên địa chỉ quay về hàm bằng các mã hacker. của hàm.
  17. Tấn Công Một Chương Trình Thực Giả sử rằng một hàm chuỗi bị khai thác, kẻ tấn công có thể gửi một chuỗi dài đầu vào. Con trỏ trả về của hàm tiến hành ghi đè, và kẻ tấn công thành công trong việc thay đổi luồng thực hiện lệnh. Nếu người sử dụng chèn vào mã đầu vào, anh ta hoặc cô ta có thể 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 mình để thực hiện chỉ thị.
  18. Chuỗi Định Dạng Có Vấn Đề Có vấn đề nếu người dùng =“%%%%%%%%%%%” Chương trình có thể sụp đổ gây Trong C, xét ví dụ của chuỗi định ra một Dos. dạng có vấn đề. Nếu không, chương trình sẽ in nội dung bộ nhớ Lỗi toàn diện xảy ra bằng cách sử dụng người dùng =“%n” Int func(char *user) { Fprintf ( stdout, user); } Hình thức đúng Int func (char *user) { Fprintf ( stdout, “%s”, user) ; }
  19. Gây Tràn Bộ Đệ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 Như thế nào nếu người dùng = chuỗi định dạng có vấn đề. “%500d ” Sẽ bỏ qua giới hạn “%400s” Sẽ tràn biến outbuf.
  20. Phá Vỡ Stack Ý tưởng chung là gây Khi hàm được thực ra tràn bộ đệm để sau hiện xong nó sẽ nhảy đó ghi đè lên địa chỉ tới bất kz địa chỉ nào trả về. trên ngăn xếp. Tràn bộ nhớ đệm cho Đặt một số mã trong bộ phép chúng ta thay đổi đệm và thiết lập địa chỉ địa chỉ trả về của một trở về. hàm.
nguon tai.lieu . vn