Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 43 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
43
Dung lượng
8,26 MB
Nội dung
SỰ TRÀN BỘ NHỚ ĐỆM 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. !" #$ % &' ()( #$ * !+ !,! &- *. ' &/ (+ 0("112 &3 ' !4 (56 7/ 8 9) " (1 :; !5 (<= !"#$%&'%()'*+)(, +-(%./ #(!,)0'1(2 (2)34 567 )(896&:'/);)<(%$= %(%>?$@ABCD4)E$F226)G !>?$@'HA6I)E&(,++1-JK +L,)2MN,$@0LN(G;'H O;P0QL,)&R2)226)$ ,HJK0!>2R@NPSTUVQ, F4 5677V66W6BOX&(%./ +1?Y(G+$,HSTUV:1(O 0&'+,))8Z HO/2 Z0WB[4 >?> >@ AB CD 0DEF Sự tràn bộ nhớ đệm (BoF). Tràn bộ nhớ đệm trên stack (ngăn xếp) Tràn bộ nhớ đệm trên heap Điều khiển stack Các bước tràn bộ 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à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ộ nhớ đệm trên stack trong chương trình sửa lỗi OllyDbg Công cụ phát hiện tràn bộ nhớ đệm Phòng chống tràn bộ nhớ đệm Công cụ đối phó với việc tràn bộ nhớ đệm Bút kiểm tra tràn bộ nhớ đệm GHIE AJ 0DEF Khái niệm tràn bộ nhớ đệm Phương pháp luận tràn bộ nhớ đệm Công cụ bảo mật tràn bộ nhớ Bút kiểm tra tràn bộ nhớ đệm Ví dụ tràn bộ nhớ đệm Biện pháp đối phó tràn bộ đệm Phát hiện tràn bộ nhớ đệm 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. 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. Tìm Hiểu Về Stack 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ộ \%](D P#Y%DQ \%](^ P#Y%^Q ]1(,)< ' V7_` 200 Các điểm SP ở đây Hướng đi vào Hướng tăng của stack nhớ K 9% (+ !(: K 9% (+ !(: UF$O 4 K 9% (+ !(: UF$O 4 %0F$ +1a AL (M 7 N/ AL (M 7 N/ % >-( 9O *' :-( !" &1 !(: O *' O *' #L &P !" &1 !(: % K (4 (+ !(: K (4 (+ !(: $! (Q( R !(: : #L $! (Q( R 6- 1= 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 4 UF $ O 0$! !(: #S !T !(: : #L :; !5 (< U một lớp hoặc một đối tượng. *V #$ % "T &/ *V #$ % *V #$ % "T &/ :3 :3 *V W6 &X "T &/ :3 " G$ % A' " W6 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. Y !"1 K Z! (-( < !"T[ &/ \ (1 6]6 :; !5 (< :3 1-! &V( N'( !( ! (+ (X !"S= Hoạt Aộng >ủa Stack "Hủybỏ"một mụctrên cùngcủangăn xếp b ,`% _>#4 b ]L(%(Y $c _>#4 <%M$ PSdbQ SdbM#O(G(O N4e O ` (%(&fg!$ F _ ># 1 ? Y4 hO%b'b i)<'%!c<M ')M4 <%MX PSXbQ V2O SXbM#'jO_ >#'-'7!( ' ' $O M k _ ># R 2 ? Y O % ' L2N"#M _>#4 <%M PS\bQ V2(2)S\b(%1( l17 " _>#02#' F$(%(?Y 204 W**(19W * $! ^ _ &V( 8 9) !"1 N'( : !-( *` a (+ $! 6K /= G$ &' * )( b !c( (+ (-( :; !5 (< NS (d "5! 9 !" Z e " &/ :' 6f V6= W**(19W !" #$ &'[ NZ! #g V6 O[ : !-( (-( *` a !"1 R eZ6 N #$ % 7 *c W6= h< 8 i jDk hZ#2VbT+(% $m6"Pe O%Qn+ $( ofp)$ M4 5 J&O+1 L(%0f HoO P=Q4 hZ#2>;(8 [...]... năng tương đương (đa hình) BIỂU ĐỒ MODULE Khái niệm tràn bộ nhớ đệm Phương pháp luận 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 Ví dụ tràn bộ nhớ đệm Phát hiện tràn bộ nhớ đệm 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ớ stack và heap Hiểu biết về cách hệ thống gọi công việc ở cấp độ... lười biếng Berkeley) BOON Stack Shield (Lá chắn ngăn xếp) BIỂU ĐỒ MODULE Khái niệm 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 Phòng Chống Tràn Bộ Đệm Phương pháp luận tràn bộ nhớ đệm Ví dụ tràn bộ nhớ đệm Phát hiện tràn bộ nhớ đệm 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 thực thi... 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 BIỂU ĐỒ MODULE Khái niệm tràn bộ nhớ đệm phương pháp luận tràn bộ nhớ đệm Ngẫu nhiên chỉnh sửa LSB của con trỏ hướng tới khu vực của NOP 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 ví dụ tràn bộ nhớ đệm phát hiện tràn bộ nhớ đệm Xác Định Tràn. .. bị biên dịch (bởi nhà cung cấp gốc) với các biện pháp bảo mật cụ thể Khái niệm trà Phương pháp luận tràn bộ n nhớ đệm bộ nhớ đệm Công cụ bảo mật Bút kiểm tra tràn bộ nhớ tràn bộ nhớ đệm đệm Ví dụ tràn bộ nhớ đệm Biện pháp đối phó tràn b ộ đệm phát hiện tràn bộPhát hiệmtràn bộ nhớ đệm Tấn công tràn bộ đệm tận dụng các bài tập áp dụng mã hóa kém của các lập trình viên khi viết và xử lý các hàm chuỗi C... bảo mật Bút kiểmbtranhớ tràn bộ nhớ bộ nhớ mệm đệm Ví dụ tràn bộ nhớ đệm Biện pháp đối phó tràn bộ đệm Phát hiện tràn bộ nhớ đệm Lỗi Tràn Bộ Đệ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*/ 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*/ /*sao... lỗi tràn bộ đệ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ù BIỂU ĐỒ MODULE 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 tràn ộ tràn đ đ Khái niệm tràn bộ nhớ đệm Phương pháp luận tràn bộ nhớ đệm. .. 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 10 ký tự) lệnh này trong Linux Mã Phân Tích “Các lệnh nguy hiểm tới hệ thống” có biến dài Trànbyte.ra bộ đệm 128 đầu Bạn phải hiểu rằng trong C, khối bộ nhớ cho các biến sẽ được đặt trực tiếp bên cạnh nhau trong không gian bộ nhớ ảo dành cho chương trình “Mã nhận được”,... 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 Các Bước Tràn Bộ Đệm Bước 1 Tìm sự hiện diện và vị trí của lỗ hổng tràn bộ đệ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... 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) { Fprint ( stdout, “%s”, user) ; } 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 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àn bộ đệm. ..thống phát hiện (IDSs) bằng cách tìm kiếm chữ ký trượt của NOP Kẻ tấn công các miếng đệm nhằm mục đích bắt đầu lỗi tràn bộ đệ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àn bộ đệm nhằm khai thác như là đầu vào và ngẫu nhiên tạo . HO/2 Z0WB[4 >?> >@ AB CD 0DEF Sự tràn bộ nhớ đệm (BoF). Tràn bộ nhớ đệm trên stack (ngăn xếp) Tràn bộ nhớ đệm trên heap Điều khiển stack Các bước tràn bộ 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à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ộ nhớ đệm trên stack trong chương trình sửa lỗi OllyDbg Công cụ phát hiện tràn bộ nhớ đệm Phòng chống tràn bộ nhớ đệm Công cụ đối phó với việc tràn bộ nhớ đệm Bút kiểm tra tràn bộ nhớ đệm GHIE AJ 0DEF Khái niệm tràn bộ nhớ đệm Phương pháp luận tràn bộ nhớ đệm Công cụ bảo mật tràn bộ nhớ Bút kiểm tra tràn bộ nhớ đệm Ví dụ tràn bộ nhớ đệm Biện pháp đối phó tràn bộ đệm Phát hiện tràn bộ nhớ đệm 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. 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. Tìm Hiểu Về Stack 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ộ \%](D P#Y%DQ \%](^ P#Y%^Q ]1(,)< ' V7_` 200 Các điểm SP ở đây Hướng đi vào Hướng tăng của stack nhớ K 9% (+ . HO/2 Z0WB[4 >?> >@ AB CD 0DEF Sự tràn bộ nhớ đệm (BoF). Tràn bộ nhớ đệm trên stack (ngăn xếp) Tràn bộ nhớ đệm trên heap Điều khiển stack Các bước tràn bộ 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à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ộ nhớ đệm trên stack trong chương trình sửa lỗi OllyDbg Công cụ phát hiện tràn bộ nhớ đệm Phòng chống tràn bộ nhớ đệm Công cụ đối phó với việc tràn bộ nhớ đệm Bút kiểm tra tràn bộ nhớ đệm GHIE AJ 0DEF Khái niệm tràn bộ nhớ đệm Phương pháp luận tràn bộ nhớ đệm Công cụ bảo mật tràn bộ nhớ Bút kiểm tra tràn bộ nhớ đệm Ví dụ tràn bộ nhớ đệm Biện pháp đối phó tràn bộ đệm Phát hiện tràn bộ nhớ đệm 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. 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. Tìm Hiểu Về Stack 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ộ \%](D P#Y%DQ \%](^ P#Y%^Q ]1(,)< ' V7_` 200 Các điểm SP ở đây Hướng đi vào Hướng tăng của stack nhớ K 9% (+ . HO/2 Z0WB[4 >?> >@ AB CD 0DEF Sự tràn bộ nhớ đệm (BoF). Tràn bộ nhớ đệm trên stack (ngăn xếp) Tràn bộ nhớ đệm trên heap Điều khiển stack Các bước tràn bộ 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à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ộ nhớ đệm trên stack trong chương trình sửa lỗi OllyDbg Công cụ phát hiện tràn bộ nhớ đệm Phòng chống tràn bộ nhớ đệm Công cụ đối phó với việc tràn bộ nhớ đệm Bút kiểm tra tràn bộ nhớ đệm GHIE AJ 0DEF Khái niệm tràn bộ nhớ đệm Phương pháp luận tràn bộ nhớ đệm Công cụ bảo mật tràn bộ nhớ Bút kiểm tra tràn bộ nhớ đệm Ví dụ tràn bộ nhớ đệm Biện pháp đối phó tràn bộ đệm Phát hiện tràn bộ nhớ đệm 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. 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. Tìm Hiểu Về Stack 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ộ \%](D P#Y%DQ \%](^ P#Y%^Q ]1(,)< ' V7_` 200 Các điểm SP ở đây Hướng đi vào Hướng tăng của stack nhớ K 9% (+