Tìm hiểu lỗ hổng trong quản lý bộ nhớ trong hệ điều hành và nêu rõ nguyên nhân

15 577 0
Tìm hiểu lỗ hổng trong quản lý bộ nhớ trong hệ điều hành và nêu rõ nguyên nhân

Đ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

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNH TIN VÀ TRUYỀN THÔNG TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNH TIN VÀ TRUYỀN THÔNG BÁO CÁO THÍ NGHIỆM BÀI TẬP LỚN ĐIỆN TỬMÔN SỐ HỌC HỆ ĐIỀU HÀNH Đề tài: Tìm hiểu lỗ hổng quản lý nhớ hệ điều hành nêu rõ nguyên nhân Sinh viên thực hiện: Sinh viên thực hiện: Xuândẫn: Tiến GiáoNguyễn viên hướng 20082662 GV:MSSV: Đỗ Quốc Huy Kĩ thuật máy tính K53 Giáo viên hướng dẫn: GV: Trần Thị Thúy HÀ NỘI - 2011 HÀ NỘI - 2011 Mục lục A.Lời nói đầu…………………………………………………………………… B.Nội dung……………………………………………………………………… I Nhiệm vụ quản lý nhớ……………………………………………….2 II Các cấu trúc chương trình…………………………………………… III Các kỹ thuật cấp phát nhớ…………………………………………… IV Kỹ thuật bộ nhớ ảo……………………………………… V Các lỗ hổng quản lý nhớ………………………………………… C.Kết luận…………………………………………………………………………13 Tài liệu tham khảo……………………………………………………………… 14 A LỜI NÓI ĐẦU Bộ nhớ thiết bị lưu trữ mà CPU truy xuất cách trực tiếp.Khi tổ chức chương trình,sau biên dịch chương trình chuyển sang ngôn ngữ máy tính,khi có đỉa tương đối.Khi thực hiện,chương trình nạp vào nhớ,các địa tương đối chuyển đổi thành địa vật lý xác định để CPU truy xuất trình xử lý đó,đó trình sinh địa Sau chương trình hoạt động xong,hệ thống cần phải giải phóng địa vật lý cấp phát(giải phóng nhớ).Để tăng hiệu suất xử lý hệ thống,tại thời điểm hệ thống cho phép nhiều chương trình tồn nhớ.Hệ điều hành chịu trách nhiệm cấp phát không gian nhớ cho tiến trình có yêu cầu.Các phương pháp tổ chức nhớ khác gây lỗ hổng,những lỗ hổng hoàn toàn khắc phục chế cụ thể hóa hệ điều hành Tuy nhiên,khi chương trình lập trình mà không quan tâm đến bảo vệ nhớ cấp phát,giải phóng(ví dụ hàm cấp phát giải phóng nhớ C malloc,free…hoặc C++ new,delete…) gây lỗi quản lý nhớ hệ điều hành,các lỗi xảy chống lại,các kể có ý đồ xấu lợi dụng lỗ hổng để phá vỡ an ninh hệ thống,truy nhập thao túng chương trình B NỘI DUNG I Nhiệm vụ quản lý nhớ Trong hệ thống đơn chương trình (uniprogramming), nhớ hệ điều hành, có chương trình thực Trong hệ thống đa chương (multiprogramming) nhớ hệ điều hành, có nhiều tiến trình hoạt động Do nhiệm vụ quản lý nhớ hệ điều hành hệ thống đa chương trình phức tạp nhiều so với hệ thống đơn chương trình Trong hệ thống đa chương phận quản lý nhớ phải có nhiệm vụ đưa tiến trình vào nhớ có yêu cầu, kể nhớ không không gian trống, phải bảo vệ hệ điều hành tiến trình nhớ tránh trường hợp truy xuất bất hợp lệ xảy Như việc quản lý nhớ hệ thống đa chương quan trọng cần thiết Bộ phận quản lý nhớ phải thực nhiệm vụ sau đây:  Sự tái định vị (Relocation): Trong hệ thống đa chương, không gian nhớ thường chia sẻ cho nhiều tiến trình khác yêu cầu nhớ tiến trình lớn không gian nhớ vật lý mà hệ thống có Do dó, chương trình hoạt động nhớ bị đưa đĩa (swap-out) đưa vào lại (swap-in) nhớ thời điểm thích hợp sau Vấn đề đặt đưa chương trình vào lại nhớ hệ điều hành phải định vị vào vị trí mà nạp trước Để thực điều hệ điều hành phải có chế để ghi lại tất thông tin liên quan đến chương trình bị swapout, thông tin sở để hệ điều hành swap-in chương trình vào lại nhớ cho tiếp tục hoạt động Hệ điều hành buộc phải swap-out chương trình không gian nhớ để nạp tiến trình khác, dó sau swap-out chương trình hệ điều hành phải tổ chức lại nhớ để chuẩn bị nạp tiến trình vừa có yêu cầu Các nhiệm vụ phần quản lý nhớ hệ điều hành thực Ngoài nhiệm vụ hệ điều hành phải có khả chuyển đổi địa nhớ ghi code chương trình thành địa vật lý thực tế nhớ chương trình thực thao tác truy xuất nhớ, người lập trình trước trạng nhớ vị trí mà chương trình nạp chương trình họ hoạt động Trong số trường hợp khác chương trình bị swap-out swap-in vào lại nhớ vị trí khác với vị trí mà nạp trước  Bảo vệ nhớ (Protection): Mỗi tiến trình phải bảo vệ để chống lại truy xuất bất hợp lệ vô tình hay có chủ ý tiến trình khác Vì tiến trình chương trình khác tham chiếu đến vùng nhớ dành cho tiến trình khác để thực thao tác đọc/ghi mà không phép (permission), mà truy xuất đến không gian địa nhớ mà hệ điều hành cấp cho tiến trình Để thực điều hệ thống quản lý nhớ phải biết không gian địa tiến trình khác nhớ phải kiểm tra tất yêu cầu truy xuất nhớ tiến trình tiến trình đưa địa truy xuất Điều khó thực xác định địa chương trình nhớ trình biên dịch mà phải thực việc tính toán địa thời điểm chạy chương trình Hệ điều hành có nhiều chiến lược khác để thực điều Điều quan trọng mà hệ thống quản lý nhớ phải thực không cho phép tiến trình người sử dụng truy cập đến vị trí hệ điều hành, ngoại trừ vùng liệu rountine mà hệ điều hành cung cấp cho chương trình người sử dụng  Chia sẻ nhớ (Sharing): Bất kỳ chiến lược cài đặt phải có tính mềm dẻo phép nhiều tiến trình truy cập đến địa nhớ Hệ thống quản lý nhớ phải điều khiển việc truy cập đến không gian nhớ chia sẻ mà không vi phạm đến yêu cầu bảo vệ nhớ Ngoài ra, môi trường hệ điều hành đa nhiệm hệ điều hành phải chia sẻ không gian nhớ cho tiến trình để hệ điều hành nạp nhiều tiến trình vào nhớ để tiến trình hoạt động đồng thời với  Tổ chức nhớ logic (Logical organization): Bộ nhớ hệ thống máy tính tổ chức dòng mảng, không gian địa bao gồm dãy có thứ tự byte word Bộ nhớ phụ tổ chức tương tự Mặc dù việc tổ chức có kết hợp chặt chẽ với phần cứng thực tế máy không phù hợp với chương trình Đa số chương trình chia thành modun, vài số thay đổi (read only, execute only) vài số chứa liệu thay đổi Nếu hệ điều hành phần cứng máy tính giao dịch cách hiệu với chương trình người sử dụng liệu modun số thuận lợi thấy rõ sau đây:  Các modun viết biên dịch độc lập, với tất tham chiếu từ modun đến modun khác giải hệ thống thời điểm chạy  Các mức độ khác bảo vệ, read-only, execute-only, cho modun khác  Nó đưa chế để modun chia sẻ tiến trình • Tổ chức nhớ vật lý (Physical organization): Như biết nhớ máy tính tổ chức theo cấp: nhớ nhớ phụ Bộ nhớ cung cấp tốc độ truy cập liệu cao, liệu phải làm tươi thường xuyên tồn lâu dài Bộ nhớ phụ có tốc độ truy xuất chậm rẻ tiền so với nhớ không cần làm tươi thường xuyên Vì nhớ phụ có khả lưu trữ lớn cho phép lưu trữ liệu chương trình khoảng thời gian dài, nhớ để giữ (hold) khối lượng nhỏ chương trình liệu sử dụng thời điểm Trong giản đồ cấp này, việc tổ chức luồng thông tin nhớ nhớ phụ nhiệm vụ quan trọng hệ thống Sự chịu trách nhiệm cho luồng gán cho người lập trình riêng, điều không hợp lý gây rắc rối, hai nguyên nhân: • Không gian nhớ dành cho chương trình với liệu thường không đủ, trường hợp này, người lập trình phải tiến hành thao tác hiểu Overlaying, theo chương trình liệu tổ chức thành modun khác gán vùng nhớ, có chương trình chịu trách nhiệm chuyển modun vào cần • Trong môi trường đa chương trình, người lập trình biết thời điểm xác định có không gian nhớ trống không gian nhớ trống Như nhiệm vụ di chuyển thông tin cấp nhớ phải hệ thống thực Đây nhiệm vụ mà thành phần quản lý nhớ phải thực II Các cấu trúc chương trình Có nhiều phương pháp tổ chức chương trình nhớ để thực Các phương pháp khác kiểu định vị chương trình nhớ thời điểm thực phép ánh xạ địa tương đối thành địa tuyệt đối Cấu trúc chương trình thể cách quản lý nhớ logic cho ta thấy hình ảnh chương trình nhớ vật lý thực hiện.Mỗi chương trình có dạng cấu trúc sau: Cấu trúc tuyến tính Là cấu trúc sau biên dịch,các modul tập hợp thành chương trình hoàn thiện,chứa đầy đủ thông tin để thực hiện;mọi biến gán địa cụ thể Khi thực cần định vị chương trình lần vào nhớ Cấu trúc động Trong cấu trúc động,các modul chương trình biên tập cách riêng biệt Khi thực hiện,chương trình cần định vị modul gốc.trong trình thực hiện,cần tới modul hệ thống cấp phát không gian nhớ nạp modul vào nhớ Khi hoạt động xong giải phóng modul khỏi nhớ,thu hồi không gian nhớ Cấu trúc Overlay Trong cấu trúc overlay,các modul chương trình sau biên dịch chia thành mức Mức 0: chứa modul gốc dùng để nạp chương trình Mức 1:chứa modul gọi mức Mức 2: chứa modul gọi bới mức … Bộ nhớ chương trình chia thành mức tương ứng với mức chương trình Để tạo thành chương trình cấu trúc Overlay,người sử dụng cần cung cấp thông tin mức cho trình biên dịch thông qua sơ đồ Overlay(file OVL),modul gốc lưu trữ file chương trình riêng.Khi thực chương trình,modul gốc định vị vào nhớ chương trình có cấu trúc tuyến tính Cần tới modul hệ thống tìm kiếm sơ đồ Overlay nạp vào nhớ tương ứng Cấu trúc phân đoạn Chương trình người sử dụng biên dịch thành modul độc lập Thông tin modul chứa bảng điều khiển gọi bảng quản lý đoạn(Segment Control Block-SCB).Khi thực chương trình,hệ thống dựa vào bảng quản lý đoạn để nạp modul cần thiết vào nhớ hết khả năng.Khi cần nạp modul thiếu nhớ hệ thống đưa bớt modul có khả không sử dụng Cấu trúc phân trang Chương trình biên dịch,sau phân chia thành phần gọi trang Thông tin trang chứa bảng quản lý trang(Page Control BlockPCB) Mỗi phần tử bảng quản lý trang tương ứng với trang chương trình người sử dụng.Khi thực hiện,hệ thống dựa vào bảng quản lý trang để nạp trang cần thiết vào nhớ III Các kỹ thuật cấp phát nhớ(nạp chương trình vào nhớ) Kỹ thuật phân vùng cố định Bộ nhớ chia thành n phần, không thiết phải phần sử dụng nhớ độc lập gọi phân vùng Mỗi phân vùng nạp chương trình tổ chức thực cách đồng thời vậy, lý thuyết có n phân vùng nạp n chương trình thực cách đồng thời(n gọi hệ số song song hệ thống) Vì phân vùng coi nhớ độc lập, nên chương trình có danh sách quản lý không gian nhớ tự riêng Chương trình nạp vào phân vùng kết thúc Mỗi phân vùng gắn với số lớp phục vụ, chương trình định vị vào nhớ phân lớp theo khai báo người sử dụng phân vùng phục vụ chương trình thuộc lớp quản lý Như tránh trượng hợp định vị chương trình nhỏ vào vùng nhớ lớn, tránh lãng phí nhớ Để sửa đổi cấu trúc phân vùng cần phải nạp lại hệ điều hành để tránh thông tin phải chờ chương trình kết thúc Cũng có số công cụ cho phép kết hợp số phân vùng liền kề thành phân vùng có cấu trúc lớn mà thông tin phân vùng khác bảo toàn Kỹ thuật phân vùng động Để khắc phục vài hạn chế kỹ thuật phân vùng cố định, kỹ thuật phân vùng động đời Kỹ thuật thường sử dụng hệ điều hành gần hệ điều hành mainframe IBM, hệ điều hành OS/MVT, Trong sơ đồ này, nhớ có bảng quản lý không gian nhớ tự thống thực chương trình, hệ thống dựa vào kích thước chương trình để phân bổ không gian nhớ thích hợp, tạo thành vùng nhớ độc lập tạo bảng quản lý riêng Khi chương trình kết thúc nhớ dành cho bị thu hồi Kỹ thuật phân trang Trong kỹ thuật không gian địa nhớ vật lý chia thành phần có kích thước cố định nhau, đánh số địa gọi khung trang (page frame) Không gian địa tiến trình chia thành phần có kích thước kích thước khung trang, gọi trang (page) tiến trình Khi tiến trình nạp vào nhớ trang tiến trình nạp vào khung trang trống bất kỳ, không liên tiếp nhau, nhớ Khi hệ điều hành cần nạp tiến trình có n trang vào nhớ phải tìm đủ n khung trang trống để nạp tiến trình Nếu kích thước tiến trình bội số kích thước khung trang xảy tượng phân mảnh khung trang chứa trang cuối tiến trình Ở không xảy tượng phân mảnh Trên nhớ tồn trang nhiều tiến trình khác Khi tiến trình bị swap-out(hoán chuyển nhớ ngoài) khung trang mà tiến trình chiếm giữ giải phóng để hệ điều hành nạp trang tiến trình khác Trong kỹ thuật hệ điều hành phải đưa chế thích hợp để theo dõi trạng thái khung trang (còn trống hay cấp phát) nhớ khung trang chứa trang tiến trình tiến trình khác nhớ Hệ điều hành sử dụng danh sách để ghi số hiệu khung trang trống nhớ, hệ điều hành dựa vào danh sách để tìm khung trang trống trước định nạp tiến trình vào nhớ, danh sách cập nhật sau hệ điều hành nạp tiến trình vào nhớ, kết thúc bị swap out bên Hệ điều hành sử dụng bảng trang (PCT: page control table) để theo dõi vị trí trang tiến trình nhớ, tiến trình có bảng trang riêng  Kỹ thuật phân trang loại bỏ tượng phân mảnh ngoài, xảy tượng phân mảnh kích thước tiến trình không bội số kích thược trang, khung trang cuối không sử dụng hết Kỹ thuật phân đoạn Trong kỹ thuật không gian địa nhớ vật lý chia thành phần cố định có kích thước không nhau, đánh số 0, gọi phân đoạn (segment) Mỗi phân đoạn bao gồm số hiệu phân đoạn kích thước Không gian địa tiến trình kể liệu liên quan chia thành đoạn khác không thiết phải có kích thước nhau, thông thường thành phần chương trình/tiến trình như: code, data, stack, subprogram, , đoạn Để theo dõi đoạn tiến trình khác nhớ, hệ điều hành sử dụng bảng phân đoạn (SCT: Segment control Table) tiến trình, thông thường tiến trình có bảng phân đoạn riêng  Vì segment có kích thước không nên phân đoạn tương tự phân vùng động Sự khác với phân đoạn chương trình chiếm giữ phân vùng, phân vùnh không liền kề với Sự phân vùng loại trừ phân mảnh nội vi, phân vùng động xuất hiện tượng phân mảnh ngoại vi Kết hợp phân trang với phân đoạn Kỹ thuật phân trang đảm bảo hiệu nhớ dử dụng không phụ thuộc vào cấu trúc chương trình người sử dụng, điều khiển trang thuận tiện đơn giản Tuy nhiên, chương trình có kích thước lớn kích thước bảng quản lý trang lơn theo, dẫn đến lãng phí nhớ Mặt khác, kích thước trang nhỏ kích thước bảng quản lý trang lớn khả phải thường xuyên nạp lại tràn cao Ngược lại, kích thước trang lớn số trang nạp để xử lý giảm gây tác động đáng kể đến hiệu sử dụng nhớ Kỹ thuật phân đoạn linh hoạt độ dài đoạn đọ dài đoạn khác nên phức tạp thực cấp phát nhớ Để phát huy ưu điểm hạn chế nhược điểm sơ đồ người ta thường dùng sơ đồ kết hợp phân trang phân đoạn IV Kỹ thuật nhớ ảo Bộ nhớ ảo (Virtual Memory): kỹ thuật cho phép xử lý tiến trình không nạp toàn vào nhớ vật lý.Bộ nhớ ảo mô hình hóa nhớ bảng lưu trữ lớn đồng nhất, tách biệt hẳn khái niệm không gian địa ảo (virtual address space) không gian vật lý (physical space).Một điểm lợi quan trọng chế chương trình chạy lớn hợn nhớ vật lý.Ngoài ra, nhớ ảo phóng đại nhớ thành nhớ luận lý cực lớn hiển thị người dùng.Kỹ thuật giải phóng người lập trình từ việc quan tâm đến giới hạn kích thước nhớ.Bộ nhớ ảo cho phép trình dễ dàng chia tập tin không gian địa chỉ, cung cấp chế hữu cho trình Minh họa nhớ ảo lớn nhớ vật lý V Các lỗ hổng quản lý nhớ Lỗ hổng kỹ thuật cấp phát nhớ • Phân mảnh Phân mảnh tượng tổng nhớ trống đủ lớn để đáp ứng yêu cầu khoảng trống không liên tục mà rải rác toàn bộ nhớ • Nguyên nhân Là nhiều tiến trình tải vào,sau giải phóng nhớ,không gian nhớ trống bị phân thành nhiều mảnh nhỏ • Phân mảnh Phân mảnh tượng kích thước vùng nhớ hệ điều hành cấp phát lớn so với kích thước vùng nhớ mà tiến trình yêu cầu,theo chi phí quản lý khoảng nhớ thừa lớn nhiều so với giá trị khoảng nhớ Phân mảnh xảy kỹ thuật phân vùng cố định kỹ thuật phân trang.do vung nhớ chia thành vùng nhớ cố định • Page Fault Page faults xảy chương trình truy cập đến ánh xạ không gian địa ảo chưa lưu vào nhớ vật lý • Nguyên nhân: Một lỗi trang xảy xử lý truy cập tới địa mà trang tương ứng với địa không đánh dấu cácMMU (đơn vị quản lý nhớ) nạp nhớ Các lỗi phần cứng lỗi 10 phát sinh trường hợp phụ thuộc vào kiến trúc tập lệnh xử lý Với số tập lệnh kiến trúc, lỗi phần cứng câu hỏi tạo điều kiện khác truy cập vào địa trang không tải vào nhớ, điều có nghĩa xử lý cho lỗi phần cứng phải tìm xem có tương ứng với trang lỗi hay không Lỗ hổng chương trình • Memory leak Rò rỉ nhớ xảy chương trình sử dụng nhớ lại khả trả lại cho hệ điều hành • Nguyên nhân: Nguyên nhân sâu xa rò rỉ nhớ xảy trục trặc hay nhiều chương trinh.về bản,chươn trình lỗi giải phóng nhớ,bộ nhớ không tái sử dụng thành vùng nhớ trống.kết vùng nhớ sử dụng không xóa để sử dụng cho chương trình khác vậy,làm giảm khả điều hành máy tính Bất chương trình nguồn cho rò rỉ nhớ.trong vài trường hợp,đó chương trình ứng dụng,như sở liệu ổ cứng.ngoài ra,nguyên nhân rò rỉ nhớ file chương trình thiết yếu điều khiển hệ điều hành • Dangling Pointer Trong nhiều chương trình,bộ nhớ cấp phát thành đối tượng chứa liệu,sau sử dụng đối tượng đó, ,để tiết kiện nguồn tài nguyên hệ thống,ứng dụng cuối thu hồi lại đối tượng đó.khi thực hiện, ứng dụng sử dụng trỏ để trỏ đến đối tượng thực cấp phát đó.tuy nhiên,trong nhiều trường hợp, chương trình thực thi mà trỏ lại trỏ đến vùng nhớ mà không chứa đối tượng chứa liệu,hoặc trỏ đến vùng nhớ mà đối tượng bị thu hồi(vùng nhớ giải phóng),dẫn đến chương trình bị đổ vỡ tiềm ẩn nhiều lỗ hổng • Nguyên nhân: Có nguyên nhân dẫn đến Dangling Pointer: • Chương trình sử dụng đối tượng(như C++ )sau vùng nhớ giải phóng,được giải phóng,và truy nhập vào vùng nhớ giá trị • Khi trỏ trỏ tới vùng nhớ chưa cấp phát(còn gọi wild pointer) 11 Dangling pointer(wild pointer) Vùng nhớ chưa cấp phát Pointer Object Pointer Pointer Dangling Pointer Deleted object Object Dangling pointer trỏ tới vùng nhớ bị thu hồi Trong trường hợp trên, sử dụng dangling pointer cho kết không mong muốn.hầu hết kết chung lỗi gây cố chương trình luồng chạy xảy lỗi dangling pointer,một người điều khiển liệu mà dangling pointer trỏ tới,nếu điều xảy ra,người thay đổi trạng thái chương trình,thậm chí chèn mã độc vào • Buffer overflow(Lỗi tràn nhớ đệm) Lỗi tràn nhớ đệm điều kiện bất thường tiến trình lưu liệu vượt biên nhớ đệm có chiều dài cố định, Kết liệu đè lên vị trí nhớ liền kề Dữ liệu bị ghi đè bao gồm nhớ đệm khác, biến liệu điều khiển luồng chạy chương trình (program flow control) • Nguyên nhân: Một lỗi tràn nhớ đệm xảy liệu viết vào nhớ đệm, mà không kiểm tra biên đầy đủ nên ghi đè lên vùng nhớ liền kề làm hỏng giá trị liệu địa nhớ kề với vùng nhớ đệm Các lỗi tràn đệm làm cho tiến trình đổ vỡ cho kết sai Các lỗi kích hoạt liệu vào thiết kế đặc biệt để thực thi đoạn mã phá hoại để làm cho chương trình hoạt động cách không mong đợi Bằng cách đó, lỗi tràn đệm gây nhiều lỗ hổn bảo mật (vulnerability) phần mềm tạo sở cho nhiều thủ thuật khai thác (exploit) Việc kiểm tra biên (bounds checking) đầy đủ lập trình viên trình biên dịch ngăn chặn lỗi tràn đệm • Ví dụ bản: Mã nguồn C thể lỗi lập trình thường gặp Sau biên dịch, chương trình tạo lỗi tràn đệm gọi với tham số dòng lệnh xâu ký tự dài, tham số dùng để ghi vào nhớ đệm mà không kiểm tra độ dài 12 /* overflow.c - demonstrates a buffer overflow */ #include #include int main(int argc, char *argv[]) { char buffer[10]; if (argc < 2) { fprintf(stderr, "USAGE: %s string\n", argv[0]); return 1; } strcpy(buffer, argv[1]); return 0; } Các xâu ký tự độ dài không không gây tràn đệm Các xâu ký tự gồm từ 10 ký tự trở lên gây tràn đệm • Có loại lỗi tràn đệm: Tràn nhớ đệm stack(stack buffer overflow) Tràn nhớ đệm xảy chương trình ghi đè lên địa nhớ vùng call stack (vùng cấu trúc liệu lưu trữ thông tin thủ tục,các chương trình con)bên vùng cấu trúc liệu định sẵn,thường có độ dài cố định.lỗi tràn đệm xảy chương trình ghi nhiều liệu so với vùng đệm mà cấp phát.điều dẫn đến sai lệch liệu vùng gần kề stack.trong trường hợp tràn gây lỗi sai,sẽ làm cho chương trình đổ vỡ chạy không Tràn nhớ heap(heap overflow) Heap overflow lối tràn nhớ đệm xảy vùng liệu heap,bộ nhớ heap cấp phát động ứng dụng thời điểm thực thi thường chứa liệu chương trình.lỗi khai thác liệu cách cho ứng dụng ghi đè lên cấu trúc liệu nội chẳng hạn trỏ danh sách liên kết.Ví dụ: Lỗ hổng Microsoft JPEGGDI+ 13 • Segmentation fault Một segmentation fault xảy chương trình cố gắng truy nhập vào vùng nhớ không phép truy nhập,hoặc cố gắng truy nhập vào vùng nhớ bị hạn chế phương thức truy nhập(ví dụ,cố ghi lên vùng nhớ để đọc(read-only) ghi đè lên phần vùng nhớ dành cho hệ điều hành) • Nguyên nhân : Một vài nguyên nhân lỗi phân đoạn tóm tắt sau: • Cố gắng thực chương trình mà chương trình không biên dịch đúng.chú ý hầu hết trình biên dịch không xuất mã máy xảy lỗi thời gian biên dịch • Xảy lỗi tràn đệm • Sử dụng trỏ chưa cấp phát • Truy cập vào vùng nhớ trỏ Null • cố gắng truy cập nhớ chương trình không sở hữu • cố gắng làm thay đổi nhớ chương trình không sở hữu C KẾT LUẬN Quản lý nhớ hệ điều hành phải đảm bảo yếu tố quan trọng tiết kiệm nhớ bảo vệ nhớ,việc tổ chức cấu trúc chương trình cấp phát nhớ tốt giảm nguy gây lãng phí nhớ.các lỗi lập trình nguyên nhân dẫn đến lỗi bảo vệ nhớ,các lỗi xảy chống đỡ,chính mà kẻ có ý đồ xấu thường lợi dụng vào lỗi để khai thác công vào hệ thống,các chương trình ứng dung,tranh quyền,làm tăng nguy bảo mật… Việc quan tâm tới bảo vệ nhớ(,lựa chọn ngôn ngữ,kiểm tra biên,xử lí ngoại lệ…) làm giảm nguy 14 Tài liệu tham khảo: Giao trình nguyên lý hệ điều hành-Đặng Vũ Tùng,nhà xuất Hà Nội Bài giảng nguyên lý Hệ Điều Hành - Khoa CNTT trường ĐH Bách Khoa Hà Nội Wikipedia.com 15 [...]... không sở hữu • cố gắng làm thay đổi bộ nhớ các chương trình không sở hữu C KẾT LUẬN Quản lý bộ nhớ trong hệ điều hành phải luôn đảm bảo 2 yếu tố quan trọng nhất đó là tiết kiệm bộ nhớ và bảo vệ bộ nhớ, việc tổ chức cấu trúc chương trình và cấp phát bộ nhớ tốt sẽ giảm nguy cơ gây lãng phí bộ nhớ. các lỗi lập trình là nguyên nhân chính dẫn đến các lỗi về bảo vệ bộ nhớ, các lỗi này khi đã xảy ra là không thể... rỉ bộ nhớ xảy ra khi một chương trình sử dụng bộ nhớ nhưng lại không có khả năng trả lại cho hệ điều hành • Nguyên nhân: Nguyên nhân sâu xa của rò rỉ bộ nhớ là do xảy ra trục trặc của một hay nhiều chương trinh.về cơ bản,chươn trình lỗi giải phóng bộ nhớ ,bộ nhớ không còn được tái sử dụng thành vùng bộ nhớ trống.kết quả là vùng nhớ đã được sử dụng không được xóa đi để sử dụng cho chương trình khác và. ..phát sinh trong trường hợp này phụ thuộc vào kiến trúc tập lệnh của bộ xử lý Với một số tập lệnh kiến trúc, các lỗi phần cứng trong câu hỏi có thể được tạo ra bởi các điều kiện khác hơn là một truy cập vào một địa chỉ trong một trang không được tải vào bộ nhớ, điều này có nghĩa là bộ xử lý cho rằng lỗi phần cứng sẽ phải tìm xem nó có tương ứng với một trang lỗi hay không 2 Lỗ hổng do chương trình... độc vào trong đó • Buffer overflow(Lỗi tràn bộ nhớ đệm) Lỗi tràn bộ nhớ đệm là một điều kiện bất thường khi một tiến trình lưu dữ liệu vượt ra ngoài biên của một bộ nhớ đệm có chiều dài cố định, Kết quả là dữ liệu đó sẽ đè lên các vị trí bộ nhớ liền kề Dữ liệu bị ghi đè có thể bao gồm các bộ nhớ đệm khác, các biến và dữ liệu điều khiển luồng chạy của chương trình (program flow control) • Nguyên nhân: ... vậy,làm giảm khả năng điều hành của máy tính Bất cứ chương trình nào cũng có thể là nguồn cho rò rỉ bộ nhớ .trong một vài trường hợp,đó có thể là một chương trình ứng dụng,như một cơ sở dữ liệu trên ổ cứng.ngoài ra ,nguyên nhân của rò rỉ bộ nhớ có thể là do một trong những file chương trình thiết yếu điều khiển hệ điều hành • Dangling Pointer Trong nhiều chương trình ,bộ nhớ được cấp phát thành những đối tượng... control) • Nguyên nhân: Một lỗi tràn bộ nhớ đệm xảy ra khi dữ liệu được viết vào một bộ nhớ đệm, mà do không kiểm tra biên đầy đủ nên đã ghi đè lên vùng bộ nhớ liền kề và làm hỏng các giá trị dữ liệu tại các địa chỉ bộ nhớ kề với vùng bộ nhớ đệm đó Các lỗi tràn bộ đệm có thể làm cho một tiến trình đổ vỡ hoặc cho ra các kết quả sai Các lỗi này có thể được kích hoạt bởi các dữ liệu vào được thiết kế đặc biệt... đồ xấu thường lợi dụng vào các lỗi này để khai thác và tấn công vào hệ thống,các chương trình ứng dung,tranh quyền,làm tăng các nguy cơ bảo mật… Việc quan tâm tới bảo vệ bộ nhớ( ,lựa chọn ngôn ngữ,kiểm tra biên,xử lí ngoại lệ…) sẽ làm giảm được các nguy cơ đó 14 Tài liệu tham khảo: 1 Giao trình nguyên lý hệ điều hành- Đặng Vũ Tùng,nhà xuất bản Hà Nội 2 Bài giảng nguyên lý Hệ Điều Hành - Khoa CNTT trường... hành) • Nguyên nhân : Một vài nguyên nhân của một lỗi phân đoạn có thể được tóm tắt như sau: • Cố gắng thực hiện chương trình khi mà chương trình không được biên dịch đúng.chú ý rằng hầu hết các trình biên dịch sẽ không xuất ra một mã máy khi xảy ra lỗi thời gian biên dịch • Xảy ra lỗi tràn bộ đệm • Sử dụng một con trỏ chưa được cấp phát • Truy cập vào vùng nhớ con trỏ Null • cố gắng truy cập bộ nhớ chương... bị đổ vỡ hoặc tiềm ẩn nhiều lỗ hổng • Nguyên nhân: Có 2 nguyên nhân cơ bản dẫn đến một Dangling Pointer: • Chương trình sử dụng đối tượng(như C++ )sau khi vùng nhớ đó đã được giải phóng,được giải phóng ,và do đó sẽ truy nhập vào vùng nhớ không có giá trị • Khi một con trỏ trỏ tới một vùng nhớ chưa được cấp phát(còn gọi là wild pointer) 11 Dangling pointer(wild pointer) Vùng nhớ chưa được cấp phát Pointer... được cấp phát .điều này dẫn đến sự sai lệch dữ liệu vùng gần kề đó trên stack .trong trường hợp tràn gây ra lỗi sai,sẽ làm cho chương trình đổ vỡ hoặc chạy không còn đúng nữa 2 Tràn bộ nhớ heap(heap overflow) Heap overflow là lối tràn bộ nhớ đệm xảy ra trong vùng dữ liệu heap ,bộ nhớ heap được cấp phát động bởi các ứng dụng tại thời điểm thực thi và thường chứa dữ liệu của chương trình.lỗi này có thể

Ngày đăng: 30/12/2015, 20:29

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan