1 / 32

MÔN AN NINH MẠNG

TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN HỮU NGHỊ VIỆT HÀN. MÔN AN NINH MẠNG. CHƯƠNG 17 : BUFFER OVERFLOW. Người thực hiện: Lê Long Bảo Ngành : Mạng Máy Tính Lớp : MM03A. Tin tức bảo mật. Lỗi “zero day” vượt qua sự kiểm soát của người sử dụng Window

Download Presentation

MÔN AN NINH MẠNG

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN HỮU NGHỊ VIỆT HÀN MÔN AN NINH MẠNG CHƯƠNG 17 : BUFFER OVERFLOW Người thực hiện: Lê Long Bảo Ngành : Mạng Máy Tính Lớp : MM03A

  2. Tin tứcbảomật Lỗi “zero day” vượt qua sự kiểm soát của người sử dụng Window Sự tràn bộ nhớ đệm là thủ thuật đánh lừa hệ điều hành của Microsoft để hệ thống cấp quyền 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 trước tới nay chưa được tiết lộ, việc tràn bộ đệm do lỗi “zero day” 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 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”.

  3. Mụctiêu của chương • Đ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 bộ nhớ đệm • Phòng chống và công cụ đối phó

  4. LUỒNG BÀI HỌC

  5. Buffer Overflow là gì? • 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. Đâylàloạidễbịtổnthươngtronghệthốngdựatrên UNIX và NT.

  6. Tại sao các chương trình và ứng dụng dễ bị tổn thươ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 Các ngôn ngữ lập trình như C thường chứa những lỗ hổng 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ácchứcnăngtrongngônngữlậptrình C : strcat(), strcpy(), sprintf(), vsprintf(), bcopy(), gets() vàscanf() cóthểbịkhaithácvì các hàm này không kiểmtrakíchthướccủabộđệm.

  7. Tìm hiểu về ngăn xếp (stack) + 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. Các điểm SP nằm ở đây Phần dưới của bộ nhớ Bộ đệm 2 (Biến cục bộ 2) Hướng đi vào Bộ đệm 1 (Biến cục bộ 1) Thanh ghi dùng để ghi địa chỉ bên trong stack Quay lại con trỏ Hàm gọi các tham số Phần trên của bộ nhớ Hướng tăng dần của stack

  8. Sự tràn bộ đệm trên Stack • 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. 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 Một stack bình thường

  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. Khung nhớ Heap

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

  11. Shell code 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. I 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. II 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. III

  12. Không xử lý (NOPs) +Kẻ tấn công làm tràn bộ đệm với các lệnh dài của NOP , lúc này 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 ra một phiên bản có chức năng tương đương (đa hình). + Hầu hết các CPU đều có một lệnh No Operation (Không hoạt động) – nó không làm gì nhưng thúc đẩy lệnh con trỏ. +Thông thường, bạn có thể đặt một trong số chúng trước chương trình của bạn (trong chuỗi). +Hầu hết các hệ thống phát hiện xâm nhập (IDSs) bằng cách tìm kiếm ký hiệu của NOP.

  13. Kiến thức cần thiết để khai thác lỗi tràn bộ nhớ đệm của chương trình Hiểu biết về tiến trình, bộ nhớ stack và heap. Hiểu biết về cách hệ thống gọi các công việc ở cấp độ 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.

  14. Các bước tràn bộ đệm I II III IV

  15. Tấn công 1 chương trình thực

  16. Chuỗi định dạng có vấn đề Có vấn đề nếu người dùng nhập =“%%%%%%%%%%%” + Chương trình có thể bị lỗi . + Nếu không, chương trình 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” Trong C, xét ví dụ của chuỗi định dạng có vấn đề. Int func(char *user) { Fprintf ( stdout, user); } Hình thức đúng Int func (char *user) { Fprintf ( stdout, “%s”, user) ; }

  17. Tràn bộ nhớ đệ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 Như thế nào nếu user = %500stràn bộ đệm sẽ xảy ra

  18. Phá vỡ Stack Ý tưởng chung là gây ra tràn một bộ đệm để sau đó ghi đè lên địa chỉ trả về Khi hàm được thực hiện xong nó sẽ nhảy tới bất kỳ địa chỉ nào trên ngăn xếp. Tràn bộ nhớ đệm cho phép chúng ta thay đổi địa chỉ trả về của một hàm. Đặt một số mã trong bộ đệm và thiết lập địa chỉ trở về.

  19. Một khi Stack bị phá vỡ • 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. Ví dụ tràn bộ nhớ đệm 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 /*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 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*/

  21. Bộ nhớ đệm đơn giản trong 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 10 ký tự). Các lệnh nguy hiểm sẽ cho biến có bộ nhớ 128 byte. 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.

  22. Phân tích mã • “mã nhận được”, được đọc từ chuỗi đầu vào, chúng được đưa lên bộ nhớ, và không quy định về độ dài chuỗi • Điều này có nghĩa là nó sẽ đọc các ký tự mà nó thấy cần thiết đến khi kết thúc dòng, ngay cả khi nó vượt qua vị trí cuối cùng được phân bổ của bộ nhớ. • 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.

  23. Khai thác tràn bộ đệm Đối với sự kiện chính Đối với NOP Đối với Con trỏ quay về Á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. 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) Ngẫu nhiên chỉnh sửa LSB của con trỏ hướng tới khu vực NOP.

  24. Xác định tràn bộ nhớ đệm Nếu máy chủ web bị treo, tìm kiếm $$$$$$$” để biết vị trí tràn Chạy máy chủ Web trên máy cục bộ Phát yêu cầu với mọi thẻ dài kết thúc = “$$$$$$$$” Bước 3 Bước 1 Bước 2 Sử dụng IDA-Pro để xây dụng lại chỗ bị khai thác Sử dụng bộ phận, phân tách trình gỡ lỗi Sử dụng các công cụ phát hiện tràn bộ đệm Bước 6 Bước 5 Bước 4

  25. Phát hiện tràn bộ đệm trong chương trình • 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 Biến cục bộ Hàm tiêu chuẩn 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.

  26. Tiện ích tràn bộ đệm 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.

  27. Kiểm tra điều kiện tràn Heap Các biến thể của tràn heap Kiểm tra tràn heap bằng cách cung cấp các chuỗi đầu vào dài hơn dự kiến. Hai thanh ghi EAX và ECX, có thể được đặt cùng với địa chỉ mà người sử dụng cung cấp. • Cho phép ghi đè lên con trỏ hàm. • Khai thác cấu trúc quản lý bộ nhớ để thực thi mã tùy ý 1. Một trao đổi con trỏ diễn ra sau khi trình quản lí thường xuyên heap đi vào hoạt động. 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.

  28. Phòng chống tràn bộ đệ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 việc thực thi ngăn xếp

  29. Ngăn chặn tràn bộ đệm • 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. • Phân tích mã nguồn tĩnh. • Thực hiện kiểm tra thời gian thực • Để những địa chỉ rắc rối • Đặt ngẫu nhiên vị trí của hàm trong thư viện

  30. Các biện pháp đối phó trong lập trình • Thiết kế chương trình với trọng tâm bảo mật. • Kiểm tra và sửa mã để tìm lỗi. • Xem xét việc sử dụng các trình biên dịch an toàn như StackGuard • Xác nhận các tham số và giảm số lượng của các mã chạy với đặc quyền root • Vô hiệu hóa việc thực thi ngăn xếp (có thể thực hiện trên Solaris) • 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. Chống thực thi dữ liệu DEP • 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.

More Related