Trang chủ / Blog / Buffer Overflow là gì? Nguyên nhân gây lỗi Buffer Overflow
#

Lỗi Buffer Overflow và các biện pháp ngăn chặn

 29/11/2019 10:09:00 Trịnh Duy Thanh

    Buffer Overflow là gì?

    Trong lĩnh vực an ninh máy tính và lập trình, lỗi Buffer overflow hay tiếng Việt gọi là lỗi tràn bộ nhớ đệm/lỗi tràn bộ đệm là khi mà bộ nhớ bị ghi đè nhiều lần trên ngăn xếp. Lỗi này thường xuyên xảy ra do người dùng gửi một lượng lớn dữ liệu tới server ứng dụng, điều này làm cho dữ liệu bị bắt phải đè lên các vị trí bộ nhớ liền kề đó. Đây 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ố tình phá hoại, có thể lợi dụng lỗi này để phá vỡ an ninh hệ thống.

    Nguyên nhân gây ra lỗi Buffer Overflow

    • Không thực hiện đầy đủ, hoặc không kiểm tra biên.
    • Các ngôn ngữ lập trình như C, bản thân nó đã luôn có những tiềm ẩn các lỗ hổng mà hacker dễ dàng có thể tấn công vào. Trong ngôn ngữ lập trình C còn tồn tại các hàm không kiểm tra những buffer được cấp phát trên stack có kích thước lớn hơn dữ liệu được copy và bộ đệm hay không.

    Lỗi buffer overflow

    Lỗi tràn bộ nhớ đệm

    Các cách khai thác lỗi Buffer Overflow

    Tấn công Buffer overflow có thể thấy nguyên nhân gần tương tự với tấn công SQL Injection, khi người truy cập hay cả những hacker đưa các biên đầu vào, các dữ liệu tới vượt khỏi tầm xử lý của hệ thống thì điều này sẽ làm cho hệ thống bị treo, lỗi quá tải, chúng cũng sẽ từ chối xử lý dịch vụ và chính điều này sẽ tạo ra những lỗ hổng, các hacker từ đó chèn các mã độc hoặc các lệnh không đúng chiếm đoạt lấy quyền kiểm soat từ xa.

    Để có thể bảo vệ trang web của bạn không bị các hacker copy nội dung thì hãy thì hãy tham khảo những thông tin về dmca protected là gì mà BKHost chia sẻ và áp dụng cho website của mình nhé.

    Khai thác lỗi Buffer Overflow trên stack

    • Để gây ra tình trạng lỗi tràn bộ đệm, hacker có thể ghi đè một biến địa phương nằm gần bộ đệm trong stack, biến này làm thay đổi hành vi của hệ thống để tạo điều kiện tấn công cho kẻ xấu.
    • Ghi đè lên địa chỉ trả về trong khung stack. Khi hàm trả về, thực thi sẽ vẫn tiếp tục tại địa chỉ mà hacker đã chỉ định, thông thường địa chỉ này thuộc khu vực bộ đệm chứa dữ liệu người dùng.

    Lỗi Buffer Overflow trên Heap

    • Hiện tượng lỗi tràn bộ đệm xảy ra tại khu vực dữ liệu Heap hay cũng chính là hiện tượng tràn Heap, hacker có thể khai thác lỗ hổng này bằng các kỹ thuật (khác với các lỗi tràn stack).
    • Bộ nhớ heap là bộ phận thường để chứa dữ liệu của chương trình, nó được cấp phát tự động bởi các ứng dụng thời gian chạy.
    • Hacker thực hiện tấn công bằng cách phá những dữ liệu này để làm ứng dụng ghi đè lên các dữ liệu của nội bộ (ví dụ như các con trỏ của danh sách liên kết).

    Một số cách khai thác lỗi Buffer overflow khác

    Khai thác vào các lỗ hổng phần mềm thông qua các ngôn ngữ lập trình (đa số các phần mềm hiện nay được viết bằng ngôn ngữ lập trình C).

    Nếu muốn có quyền truy cập internet thì bạn cần phải có địa chỉ cung cấp cho bạn dịch vụ đó. Vậy để truy cập internet thì hãy tìm hiểu isp là gì nhé.

    Tấn công vào các website có lượng tương tác với người dùng khá, tốt nhưng lại không yêu cầu hay bắt buộc người dùng phải khai báo tên đăng nhập và mật khẩu đăng nhập tài khoản,…

    lỗi buffer overflow head

    Ví dụ về tấn công qua Heap

    Các biện pháp chống tràn bộ nhớ đệm

    • Kĩ càng lựa chọn ngôn ngữ lập trình: ngôn ngữ lập trình đóng một vai trò vô cùng quan trọng và mang ảnh hưởng lớn trong việc phát sinh, có khả năng xảy ra lỗi tràn bộ đệm.
    • Chỉ nên sử dụng các thư viện an toàn: thư viện được viết tốt, được test thử với các dạng dữ liệu trừu tượng mà các thư viện này tự động quản lý bộ nhớ.
    • Để hạn chế nhất việc phát sinh lỗi Buffer overflow, chương trình cần phải đảm bảo diễn ra việc xác nhận đầu vào. Khi có bất kì một field, form đăng ký, các phương pháp khác yêu cầu nhập đầu vào thì đều mang những nguy cơ tiềm ẩn về lỗ hổng cho việc tấn công. Không chỉ là những yếu tố như HTTP header, field, giao diện XML mà tất cả các giá trị input ở bất kì khu vực nào của ứng dụng phần mềm thì các bạn cũng cần phải có sự kiểm tra kĩ lưỡng.

    Thông qua bài viết này, Bkhost cung cấp đến bạn các thông tin về khái niệm của Buffer overflow là gì, những nguyên nhân gây ra và cách phòng trách để bị tấn công lỗi tràn bộ đệm. Mặt khác, nếu như có bất kỳ thắc mắc nào về hosting , đăng ký tên miền, mua SSL giá rẻ... thì hãy đón đọc trên blog của Bkhost nhé!

    Tôi là Trịnh Duy Thanh, hiện đang là CEO & Co - Founder Công ty Cổ Phần Giải Pháp Mạng Trực Tuyến Việt Nam - BKHOST. Với sứ mệnh mang tới dịch vụ trên Internet tốt nhất cho các cá nhân và doanh nghiệp trong nước và quốc tế, tôi luôn nỗ lực hết mình chủ động đầu tư vào phần cứng và nâng cao chất lượng dịch vụ chăm sóc khách hàng để đem đến những sản phẩm hoàn hảo nhất cho người tiêu dùng. Vì vậy, tôi tin tưởng sẽ đem đến các giải pháp CNTT mới nhất, tối ưu nhất, hiệu quả nhất và chi phí hợp lý nhất cho tất cả các doanh nghiệp với mọi quy mô.