Trong số những lĩnh vực bảo mật an ninh máy vi tính and lập trình, một lỗi tràn bộ lưu trữ đệm hay gọi tắt là lỗi tràn bộ đệm (tiếng Anh: buffer overflow) là 1 lỗi lập trình rất có thể tạo ra một ngoại lệ truy nhập bộ lưu trữ máy vi tính and chương trình bị kết thúc, hoặc khi quý khách có ý phá hoại, họ rất có thể tận dụng lỗi này để phá tan bảo mật an ninh mạng lưới hệ thống.
Lỗi tràn bộ đệm là 1 điều kiện phi lý khi 1 giai đoạn lưu tài liệu vượt ra phía bên ngoài biên của 1 bộ lưu trữ đệm có chiều dài cố định và thắt chặt. Tác dụng là tài liệu này sẽ đè lên các nơi đặt đặt bộ lưu trữ liền kề. Tài liệu bị ghi đè rất có thể kể cả các bộ lưu trữ đệm khác, các biến and tài liệu tinh chỉnh và điều khiển luồng chạy của chương trình (program flow control).
Các lỗi tràn bộ đệm rất có thể làm cho một giai đoạn đổ vỡ hoặc cho ra các tác dụng sai. Các lỗi này rất có thể được Action bởi các tài liệu vào được gia công nổi biệt để xúc tiến các đoạn mã phá hoại hoặc để làm cho chương trình hoạt động một phương pháp không giống như chờ đợi. Bằng phương pháp đó, các lỗi tràn bộ đệm tạo ra nhiều lỗ hổng bảo mật thông tin (vulnerability) nếu như với phần mềm and tạo cơ sở cho nhiều thủ pháp khai quật (exploit). hethongbokhoe.vnệc kiểm tra biên (bounds checking) khá đầy đủ bởi lập trình hethongbokhoe.vnên hoặc trình biên dịch rất có thể chặn lại các lỗi tràn bộ đệm.
Bài Viết: Overflow là gì
Mục lục
Xem Ngay: Brooch Là Gì
1 Miêu tả kỹ thuật 1.1 Ví dụ cơ bản 1.2 Tràn bộ lưu trữ đệm trên stack 1.3 Mã nguồn ví dụ 2 Khai quật 2.1 Khai quật lỗi tràn bộ đệm trên stack 2.2 Khai quật lỗi tràn bộ đệm trên heap 2.3 Cản trở nếu như với các thủ pháp khai quật 3 Chống tràn bộ đệm 3.1 Lựa chọn ngôn từ lập trình 3.2 Sử dụng các thư hethongbokhoe.vnện tin cậy và an toàn và tin cậy 3.3 Chống tràn bộ lưu trữ đệm trên stack 3.4 Bảo đảm khoảng không xúc tiến 3.5 Ngẫu nhiên hóa sơ đồ khoảng không Chỗ đứng 3.6 Kiểm tra sâu nếu như với gói tin 4 Lịch sử dân tộc khai quật 5 Xem Ngay 6 Chú thích 7 Liên kết ngoài 7.1 Tiếng hethongbokhoe.vnệt 7.2 Tiếng Anh
Xem Ngay: Độ Phân Giải Tiếng Anh Là Gì, Độ Phân Giải Màn Hình Tiếng Anh Là Gì
Miêu tả kỹ thuật
Một lỗi tràn bộ lưu trữ đệm xẩy ra khi tài liệu được hethongbokhoe.vnết vào trong 1 bộ lưu trữ đệm, mà do không kiểm tra biên khá đầy đủ nên đã ghi đè lên vùng bộ lưu trữ liền kề and làm hỏng các chi phí tài liệu tại các Chỗ đứng bộ lưu trữ kề với vùng bộ lưu trữ đệm đó. Hiện tượng kỳ lạ này hay xẩy ra nhất lúc sao chép một xâu ký tự xuất phát điểm từ 1 bộ lưu trữ đệm này qua một vùng bộ lưu trữ đệm khác.
Ví dụ cơ bản
Trong ví dụ sau, một chương trình đã định nghĩa hai thành phần tài liệu kề nhau trong bộ lưu trữ: A là 1 bộ lưu trữ đệm xâu ký tự dài 8 byte, and B là 1 số nguyên kích cỡ 2 byte. Khởi đầu, A chỉ chứa toàn các byte chi phí 0, còn B chứa chi phí 3. Các ký tự có kích cỡ 1 byte.
Tên biến A A A A A A A A B B Giá trị 0 0 0 0 0 0 0 0 0 3
Hiện nay, chương trình ghi một xâu ký tự “excessive” vào bộ đệm A, theo sau là 1 byte 0 để khắc ghi kết thúc xâu. Vì không kiểm tra độ dài xâu, nên xâu ký tự mới đã đè lên chi phí của B:
Tên biến A A A A A A A A B B Giá trị “e” “x” “c” “e” “s” “s” “i” “v” “e” 0
Tuy lập trình hethongbokhoe.vnên không tồn tại dự định chỉnh sửa B, nhưng chi phí của B đã biết thành sửa chữa thay thế bởi một số trong những được tạo nên từ phần cuối của xâu ký tự. Trong ví dụ này, trên một mạng lưới hệ thống big-endian áp dụng mã ASCII, ký tự “e” and tiếp sau là 1 byte 0 sẽ trở thành số 25856.
Nếu B là thành phần tài liệu độc tôn sót lại Một trong những biến được chương trình định nghĩa, hethongbokhoe.vnệc hethongbokhoe.vnết một xâu ký tự dài không chỉ có thế and vượt quá phần cuối của B sẽ sở hữu được thể tạo ra một lỗi ví dụ điển hình như segmentation fault (lỗi phân đoạn) and giai đoạn sẽ kết thúc.
Tràn bộ lưu trữ đệm trên stack
Sát bên hethongbokhoe.vnệc chỉnh sửa các biến không tác động, hiện tượng lạ tràn bộ đệm còn thường bị tận dụng (khai quật) bởi Hacker để làm cho một chương trình đang hoạt động xúc tiến một đoạn mã tùy ý được tán thành có nhu cầu. Các kỹ thuật để một Hacker chiếm quyền tinh chỉnh và điều khiển một giai đoạn tùy thuộc theo vùng bộ lưu trữ mà bộ đệm được để ở đó. Ví dụ, vùng bộ lưu trữ stack, nơi tài liệu rất có thể được trong thời điểm tạm thời “đẩy” xuống “đỉnh” ngăn xếp (push), and kế tiếp được “nhấc ra” (pop) để đọc chi phí của biến. Thông thường, khi 1 hàm (function) ban sơ xúc tiến, các thành phần tài liệu trong thời điểm tạm thời (các biến bản địa) được đẩy vào, and chương trình rất có thể truy nhập tới các tài liệu này nhìn trong quãng thời gian chạy hàm đó. Không chỉ là có hiện tượng lạ tràn stack (stack overflow) mà còn sinh tồn cả tràn heap (heap overflow).
Trong ví dụ sau, “X” là tài liệu đã từng trưng bày tại stack khi chương trình ban sơ xúc tiến; kế tiếp chương trình gọi hàm “Y”, hàm này đòi hỏi một lạng nhỏ bộ lưu trữ cho riêng mình; and kế tiếp “Y” gọi hàm “Z”, “Z” đòi hỏi một bộ lưu trữ đệm lớn:
Z Z Z Z Z Z Y X X X : / / /
Nếu hàm “Z” gây tràn bộ lưu trữ đệm, nó rất có thể ghi đè tài liệu thuộc sở hữu hàm Y hay chương trình chính:
Z Z Z Z Z Z Y X X X . . . . . . . . / /
Điều này nổi biệt nghiêm trọng nếu như với hầu hết các mạng lưới hệ thống. Ngoài các tài liệu thường, bộ lưu trữ stack còn lưu giữ Chỗ đứng trả về, có nghĩa là nơi đặt đặt của phần chương trình đang hoạt động trước lúc hàm hiên giờ được gọi. Khi hàm kết thúc, vùng bộ lưu trữ trong thời điểm tạm thời sẽ được lấy thoát khỏi stack, and xúc tiến được trao lại cho Chỗ đứng trả về. Như vậy, nếu Chỗ đứng trả về đã biết thành ghi đè bởi một lỗi tràn bộ đệm, nó sẽ ảnh hưởng trỏ tới một nơi đặt đặt gì đấy khác. Trong điều kiện một hiện tượng lạ tràn bộ đệm không tồn tại ý kiến như trong ví dụ đầu tiên, đông đảo khẳng định rằng nơi đặt đặt này sẽ là 1 nơi đặt đặt chưa phù hợp lệ, không tồn tại một lệnh nào của chương trình, and giai đoạn sẽ đổ vỡ. Thế nhưng, một kẻ tấn công rất có thể chỉnh Chỗ đứng trả về để trỏ tới một nơi đặt đặt tùy ý làm thế nào cho nó rất có thể làm tổn hại bảo mật an ninh mạng lưới hệ thống.
Mã nguồn ví dụ
Mã nguồn C phía bên dưới đây biểu hiện một lỗi lập trình thường gặp. Sau thời điểm được biên dịch, chương trình sẽ tạo nên nên một lỗi tràn bộ đệm nếu như nó được gọi với 1 tham số dòng lệnh là 1 xâu ký tự quá dài, vì tham số này được áp dụng để ghi vào trong 1 bộ lưu trữ đệm mà hoàn toàn không kiểm tra độ dài của chính bản thân nó.[1]
Thể Loại: Chia sẻ trình bày Kiến Thức Cộng Đồng