Nội dung bài viết
#

Buffer Overflow là gì? Các loại tấn công và cách ngăn chặn

Nội dung bài viết

    Có vô số các cuộc tấn công nhắm vào chương trình hoặc ứng dụng để đánh cắp thông tin và dữ liệu quan trọng. Một trong số đó là Buffer Overflow nằm trong top những lỗi phần mềm gây nguy hiểm nhất đối với mọi người dùng. Vậy Buffer Overflow là gì và cách ngăn chặn nó như thế nào? Hãy cùng BKHOST tìm hiểu trong bài viết dưới đây.

    Buffer Overflow là gì?

    Buffer Overflow la gi

    Buffer Overflow là hiện tượng chương trình ghi quá mức giới hạn dữ liệu vào bộ nhớ hoặc Buffer. Trong đó, Buffer – Bộ đệm dữ liệu là vùng lưu trữ dữ liệu xác định. Nếu có dữ liệu bổ sung vào thì các chương trình sẽ ghi chúng lại và thực hiện thao tác ghi đè lên các bộ nhớ liền kề khác.

    Cách thức hoạt động của Buffer Overflow

    Những kẻ tấn công khai thác Buffer Overflow nhằm kiểm soát, sửa đổi các quá trình hoặc biến nội bộ. Buffer Overflow nằm trong CWE và top 25 SANS lỗi phần mềm nguy hiểm nhất hiện nay đối với các nhà cung cấp lớn nhỏ.

    Buffer Overflow xảy ra do nhiều nguyên nhân khác nhau, chẳng hạn như một tác nhân độc hại là code bất kỳ được gửi đầu vào đến chương trình. Các chương trình này có nhiệm vụ lưu trữ đầu vào đó trong Buffer và nếu quá mức cho phép thì các dữ liệu thừa sẽ được ghi vào bộ nhớ liền kề và ghi đề lên các dữ liệu tồn tại trước đó.

    Cach thuc hoat dong Buffer Overflow

    Các dữ liệu gốc trong Buffer là con trỏ đến địa chỉ tiếp theo của hàm bị tấn công. Kẻ tấn công có thể thay đổi các giá trị mới trỏ đến địa chỉ mong muốn như vị trí tải trọng khai thác đã được định vị. Điều này làm cho đường dẫn thực thi của quy trình và các quyền kiểm soát bị thay đổi đột ngột.

    Ví dụ: Một chương trình cần người dùng nhập tên thì kẻ tấn công sẽ nhập lệnh thực thi có kích thước lớn.

    Buffer Overflow không thực sự khả khi với các lệnh bởi nó còn yêu cầu địa chỉ trả về trỏ đến lệnh độc hại được xác định chính xác và rõ ràng. Nếu chương trình bị sập sẽ được khôi phục bằng cách truy cập địa chỉ quay lại. Tuy nhiên, địa chỉ này đã được thay đổi để trỏ đến lệnh mà kẻ tấn công đã chỉ định. Các lệnh độc hại này tồn tại ở cả hai bên đệm dựa trên NOP giúp xác định phạm vi bộ nhớ dễ dàng hơn. Buffer Overflow tấn công vào bộ nhớ khá nhanh bởi các ngôn ngữ lập trình C hay C++ không có khả năng ngăn chặn truy cập hoặc ghi đè dữ liệu.

    Một số ngôn ngữ lập trình hiện đại như C#, Java và Perl giúp hạn chế các vấn đề lỗi mã hoá ngăn chặn các nguy cơ từ Buffer Overflow. Đối với một số môi trường lập trình cho phép thao tác bộ nhớ trực tiếp và các tính năng như trình biên dịch, thư viện thời gian chạy hay tính năng ngôn ngữ.

    Các loại tấn công Buffer Overflow

    Buffer Overflow có các kỹ thuật khai thác khác nhau dựa trên OS và ngôn ngữ lập trình nhắm vào bộ nhớ của máy tính để kiểm soát việc thực thi các chương trình. Các Buffer Overflow khác nhau sẽ được phân loại theo vị trí của Buffer trong bộ nhớ xử lý của thiết bị dựa trên heap-based.

    Các loại tấn công Buffer Overflow:

    Stack Buffer Overflow

    Stack Buffer Overflow là hình thức tấn công phổ biến với các ngăn xếp lưu trữ dữ liệu theo cấu trúc xuất nhập trước. Ngoài ra với một môi trường lưu trữ liên tục cho phép triển khai các dữ liệu liên quan đến các lệnh gọi hàm như tham số, biến cục bộ và thông tin quản lý.

    Các ngăn xếp chứa chương trình với các mục nhập thông tin của người dùng như tên và mật khẩu. Bằng cách ghi địa chỉ bộ nhớ trả về vào ngăn xếp đó và gửi đầu vào của người dùng đến địa chỉ trả lại được chỉ định sẵn trước đó của chương trình.

    Mỗi ngăn xếp sẽ có kích thước giới hạn nhất định nên lập trình viên phát triển mã phải dành một không gian riêng cho nó. Nếu đầu vào của người dùng dài hơn dung lượng riêng và các chương trình không được khả thi thì ngăn xếp sẽ xảy ra hiện tượng Stack Buffer Overflow.

    Heap Buffer Overflow

    Các lập trình viên sử dụng Heap để để phân chia bộ nhớ không rõ kích thước dung lượng cần thiết tương thích với ngăn xếp và bộ nhớ được dự định sử dụng trên các lệnh gọi hàm. Vì vậy, kẻ tấn công dựa vào các không gian bộ nhớ riêng của chương trình để khai thác dữ liệu của bộ nhớ mở Heap.

    Integer overflow

    Các ngôn ngữ lập trình giúp xác định chính xác kích thước tối đa của các Integer. Khi một phép toán đưa ra kết quả là một Integer quá lớn sẽ xảy ra hiện tượng Integer Overflow.

    Ví dụ: Một bộ nhớ bất kỳ cần 8 bit để lưu trữ số 192 và nếu thêm số 64 thì kết quả sẽ là 256 không tương thích với bộ nhớ được phân bổ.

    Format strings

    Kẻ tấn công thực hiện thay đổi các Format strings như printf và sprintf để lấy quyền truy cập vào các không gian bộ nhớ của thiết bị.

    Unicode Overflow

    Kẻ tấn công nhắm vào Unicode Overflow khai thác các bộ nhớ lớn để lưu trữ string ở định dạng Unicode so với ASCII.

    Cách ngăn chặn Buffer Overflow

    Năm cách ngăn chặn Buffer Overflow như:

    1. Sử dụng biện pháp bảo vệ thời gian chạy OS giúp ngăn chặn Buffer Overflow:

    • ASLR có thể sắp xếp ngẫu nhiên các vị trí xung quanh không gian địa chỉ của vùng dữ liệu như cơ sở của tệp thực thi, các vị trí của ngăn xếp, đống và thư viện. Vì thế mà ASPL được sử dụng để ngăn chặn Buffer Overflow khá hiệu quả và nhanh chóng.
    • Bảo vệ thực thi dữ liệu và đánh dấu một số vùng bộ nhớ khả thi hoặc không khả thi nhằm ngăn chặn kẻ tấn công thực hiện các lệnh được ghi vào cùng dữ liệu.
    • Bảo vệ ghi đè xử lý các cấu trúc nhằm ngăn chặn Buffer Overflow sử dụng các kỹ thuật như trình xử lý ngoại lệ.

    2. Luôn cập nhật các bản vá lỗi và phần mềm để khắc phục các lỗ hổng Buffer Overflow.

    3. Tuân thủ các nguyên tắc của POLP làm giảm khả năng xảy ra Buffer Overflow bằng cách cung cấp ít đặc quyền hơn hoặc hạn chế cung cấp quyền nếu phát hiện hành vi đáng ngờ.

    4. Sử dụng ngôn ngữ lập trình an toàn và phù hợp với bộ nhớ như Java, Python hoặc C # để quản lý hoạt động phân bổ bộ nhớ và xác thực đầu vào từ máy khách hoặc các quy trình khác.

    5. Thực hiện xác thực các dữ liệu của ứng dụng hoặc trang web để kiểm tra đầu vào và dữ liệu được truy cập từ người dùng đáng tin cậy.

    Tổng kết về Buffer Overflow

    Hy vọng các thông tin mà chúng tôi đề cập trên đây đã giúp bạn đọc nắm rõ hơn về Buffer Overflow. Đây là một hình thức tấn công nguy hiểm và cần có những phương pháp ngăn chặn hiệu quả hơn để bảo vệ chương trình hoặc ứng dụng của bạn.

    Nếu bạn có thắc mắc về Buffer Overflow hoặc muốn tìm hiểu thêm những khía cạnh khác của lĩnh vực công nghệ thông tin, hãy để lại ở bên bình luận bên dưới, BKHOST sẽ trả lời bạn trong thời gian sớm nhất.

    P/s: Bạn cũng có thể truy cập vào Blog của BKHOST để đọc thêm các bài viết chia sẻ kiến thức về lập trình, quản trị mạng, website, domain, hosting, vps, server, email,… Chúc bạn thành công.

    Mua tên miền .VN tại BKHOST

    Giá chỉ từ 750k/năm. Kiểm tra tên miền .VN đẹp và đăng ký ngay hôm nay!

    domain vn

    Tôi là Trịnh Duy Thanh, CEO & 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 các 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 nâng cấp đầu tư hệ thống phần cứng, 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.
    Bình luận
    Trượt lên đầu trang
    Miễn phí cước gọi
    Bạn đã hài lòng với trải nghiệm trên Bkhost.vn?
    Cảm ơn lượt bình chọn của bạn, Chúc bạn 1 ngày tốt lành !