Overflow là gì

Trong các lĩnh vực an ninh máy tính và lập trình, một lỗi tràn bộ nhớ đệm hay gọi tắt là lỗi tràn bộ đệm (tiếng Anh: buffer overflow) là một lỗi lập trình có thể gây ra một ngoại lệ truy nhập bộ nhớ máy tính và chương trình bị kết thúc, hoặc khi người dùng có ý phá hoại, họ có thể lợi dụng lỗi này để phá vỡ an ninh hệ thống.

Lỗi tràn bộ đệm là một điều kiện kèm theo không bình thường khi một tiến trình lưu tài liệu vượt ra ngoài biên của một bộ nhớ đệm có chiều dài cố định và thắt chặt. Kết quả là tài liệu đó sẽ đè lên những vị trí bộ nhớ liền kề. Dữ liệu bị ghi đè hoàn toàn có thể gồm có những bộ nhớ đệm khác, những biến và tài liệu điều khiển và tinh chỉnh luồng chạy của chương trình ( program flow control ) .Các lỗi tràn bộ đệm hoàn toàn có thể làm cho một tiến trình đổ vỡ hoặc cho ra những hiệu quả sai. Các lỗi này hoàn toàn có thể được kích hoạt bởi những tài liệu vào được phong cách thiết kế đặc biệt quan trọng để thực thi những đoạn mã phá hoại hoặc để làm cho chương trình hoạt động giải trí một cách không như mong đợi. Bằng cách đó, những lỗi tràn bộ đệm gây ra nhiều lỗ hổng bảo mật thông tin ( vulnerability ) so với ứng dụng và tạo cơ sở cho nhiều thủ pháp khai thác ( exploit ). webgiaidap. comệc kiểm tra biên ( bounds checking ) vừa đủ bởi lập trình webgiaidap. comên hoặc trình biên dịch hoàn toàn có thể ngăn ngừa những lỗi tràn bộ đệm .

Bạn đang xem: Overflow là gì

Bạn đang đọc: Overflow là gì

Mục lục

Xem thêm : Brooch Là Gì1 Mô tả kỹ thuật 1.1 Ví dụ cơ bản 1.2 Tràn bộ nhớ đệm trên stack 1.3 Mã nguồn ví dụ 2 Khai thác 2.1 Khai thác lỗi tràn bộ đệm trên stack 2.2 Khai thác lỗi tràn bộ đệm trên heap 2.3 Cản trở so với những thủ pháp khai thác 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 những thư webgiaidap. comện bảo đảm an toàn 3.3 Chống tràn bộ nhớ đệm trên stack 3.4 Bảo vệ khoảng trống thực thi 3.5 Ngẫu nhiên hóa sơ đồ khoảng trống địa chỉ 3.6 Kiểm tra sâu so với gói tin 4 Lịch sử khai thác 5 Xem thêm 6 Chú thích 7 Liên kết ngoài 7.1 Tiếng webgiaidap. comệt 7.2 Tiếng AnhXem thêm : Độ Phân Giải Tiếng Anh Là Gì, Độ Phân Giải Màn Hình Tiếng Anh Là Gì

Mô tả kỹ thuật

Một lỗi tràn bộ nhớ đệm xảy ra khi tài liệu được webgiaidap. comết vào một bộ nhớ đệm, mà do không kiểm tra biên rất đầy đủ nên đã ghi đè lên vùng bộ nhớ liền kề và làm hỏng những giá trị tài liệu tại những địa chỉ bộ nhớ kề với vùng bộ nhớ đệm đó. Hiện tượng này hay xảy ra nhất khi sao chép một xâu ký tự từ một bộ nhớ đệm này sang một vùng bộ nhớ đệ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ộ nhớ : A là một bộ nhớ đệm xâu ký tự dài 8 byte, và B là một số nguyên size 2 byte. Ban đầu, A chỉ chứa toàn những byte giá trị 0, còn B chứa giá trị 3. Các ký tự có size 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 3Bây giờ, chương trình ghi một xâu ký tự “ excessive ” vào bộ đệm A, theo sau là một byte 0 để ghi lại 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 giá trị 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 webgiaidap. comên không có dự tính sửa đổi B, nhưng giá trị của B đã bị sửa chữa thay thế bởi 1 số ít đượ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 sử dụng mã ASCII, ký tự “ e ” và tiếp theo là một byte 0 sẽ trở thành số 25856 .Nếu B là thành phần tài liệu duy nhất còn lại trong số những biến được chương trình định nghĩa, webgiaidap. comệc webgiaidap. comết một xâu ký tự dài hơn nữa và vượt quá phần cuối của B sẽ hoàn toàn có thể gây ra một lỗi ví dụ điển hình như segmentation fault ( lỗi phân đoạn ) và tiến trình sẽ kết thúc .

Tràn bộ nhớ đệm trên stack

Bên cạnh webgiaidap. comệc sửa đổi những biến không tương quan, hiện tượng kỳ lạ tràn bộ đệm còn thường bị tận dụng ( khai thác ) bởi tin tặc để làm cho một chương trình đang chạy thực thi một đoạn mã tùy ý được phân phối. Các kỹ thuật để một tin tặc chiếm quyền điều khiển và tinh chỉnh một tiến trình tùy theo vùng bộ nhớ mà bộ đệm được đặt tại đó. Ví dụ, vùng bộ nhớ stack, nơi tài liệu hoàn toàn có thể được trong thời điểm tạm thời “ đẩy ” xuống “ đỉnh ” ngăn xếp ( push ), và sau đó được “ nhấc ra ” ( pop ) để đọc giá trị của biến. Thông thường, khi một hàm ( function ) khởi đầu thực thi, những thành phần tài liệu trong thời điểm tạm thời ( những biến địa phương ) được đẩy vào, và chương trình hoàn toàn có thể truy nhập đến những tài liệu này trong suốt thời hạn chạy hàm đó. Không chỉ có hiện tượng kỳ lạ tràn stack ( stack overflow ) mà còn có cả tràn heap ( heap overflow ) .Trong ví dụ sau, “ X ” là tài liệu đã từng nằm tại stack khi chương trình khởi đầu thực thi ; sau đó chương trình gọi hàm “ Y ”, hàm này yên cầu một lượng nhỏ bộ nhớ cho riêng mình ; và sau đó “ Y ” gọi hàm “ Z ”, “ Z ” yên cầu một bộ nhớ đệm lớn :Z Z Z Z Z Z Y X X X : / / /Nếu hàm “ Z ” gây tràn bộ nhớ đệm, nó hoàn toàn có thể ghi đè tài liệu thuộc về hàm Y hay chương trình chính :

Z Z Z Z Z Z Y X X X . . . . . . . . / /

Điều này đặc biệt quan trọng nghiêm trọng so với hầu hết những mạng lưới hệ thống. Ngoài những tài liệu thường, bộ nhớ stack còn lưu giữ địa chỉ trả về, nghĩa là vị trí của phần chương trình đang chạy trước khi hàm hiện tại được gọi. Khi hàm kết thúc, vùng bộ nhớ trong thời điểm tạm thời sẽ được lấy ra khỏi stack, và thực thi được trao lại cho địa chỉ trả về. Như vậy, nếu địa chỉ trả về đã bị ghi đè bởi một lỗi tràn bộ đệm, nó sẽ trỏ tới một vị trí nào đó khác. Trong trường hợp một hiện tượng kỳ lạ tràn bộ đệm không có chủ ý như trong ví dụ tiên phong, phần đông chắc như đinh rằng vị trí đó sẽ là một vị trí không hợp lệ, không chứa một lệnh nào của chương trình, và tiến trình sẽ đổ vỡ. Tuy nhiên, một kẻ tiến công hoàn toàn có thể chỉnh địa chỉ trả về để trỏ tới một vị trí tùy ý sao cho nó hoàn toàn 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 dưới đây biểu lộ một lỗi lập trình thường gặp. Sau khi được biên dịch, chương trình sẽ tạo ra một lỗi tràn bộ đệm nếu nó được gọi với một tham số dòng lệnh là một xâu ký tự quá dài, vì tham số này được dùng để ghi vào một bộ nhớ đệm mà không kiểm tra độ dài của nó. [ 1 ]Chuyên mục :

Source: https://lava.com.vn
Category: Hỏi Đáp