Cơ chế lỗi tràn bộ đệm và cách khai thác năm 2024

Trong lĩnh vực an ninh máy tính và lập trình, tràn bộ đệm Buffer Overflow là một lỗi rất phổ biến. Nó không chỉ làm cho ứng dụng ngừng hoạt động và mất dữ liệu mà lỗi Buffer Overflow còn ẩn chứa rất nhiều rủi ro bảo mật khác khi hacker có thể lợi dụng nó để tấn công kiểm soát hệ thống. Ở bài viết dưới đây, bạn hãy cùng Hoàng Hà PC tìm hiểu về các biện pháp ngăn chặn lỗi Buffer Overflow nhé!

Bộ đệm Buffer Overflow là gì?

Bộ đệm Buffer Overflow là gì?

Lỗi tràn bộ đệm Buffer Overflow là lỗi phổ biến trong lĩnh vực an ninh máy tính và lập trình khi mà bộ nhớ bị ghi đè nhiều lần trên ngăn xếp. Lỗi này xuất hiện khi mà bộ nhớ bị ghi đè nhiều lần trên ngăn xếp.

Lỗi Buffer Overflow thường xuyên xảy ra do người dùng gửi một lượng lớn dữ liệu đến 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 của bạn và chương trình bị kết thúc, hoặc khi người dùng cố tình phá hoại. Hacker hoàn toàn có thể lợi dụng lỗi tràn bộ đệm Buffer Overflow để phá vỡ an ninh hệ thống.

Nguyên nhân gây ra lỗi bộ đệm Buffer Overflow

Nguyên nhân gây ra lỗi tràn bộ đệm Buffer Overflow

Có 2 nguyên nhân chính gây ra lỗi tràn bộ đệm Buffer Overflow:

  • Không thực hiện đầy đủ hay 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 có thể 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 đến 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.

Biện pháp chặn lỗi tràn bộ đệm Buffer Overflow

Biện pháp chặn lỗi tràn bộ đệm Buffer Overflow

Chúng ta có thể thấy nguyên nhân tấn công Buffer Overflow tương tự như tấn công SDL Injection. Khi người dùng truy cập hay cả những hacker đưa ra 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 hãy 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 cho các hacker từ đó chèn các mã độc hoặc các lệnh không đúng vào máy tính của bạn chiếm đoạt lấy quyền kiểm soát từ xa. Vậy biện pháp chặn lỗi tràn bộ đệm Buffer Overflow là gì?

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

Để gây ra tình trạng lỗi Buffer Overflow, hacker có thể ghi đè một biến địa phương nằm gần bộ đệm trong stack, biến này sẽ làm thay đổi hành vi của hệ thống máy tính để tạo điều kiện tấn công cho kẻ xấu.

Người dùng có thể khai thác lỗi Buffer Overflow bằng cách 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 sẽ thuộc khu vực bộ đệm chứa dữ liệu của người dùng.

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

Hiện tượng lỗi tràn Buffer Overflow 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ể dễ dàng 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 của máy tính trong thời gian chạy. Hacker thực hiện tấn công máy tính 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ộ.

Một số biện pháp chặn lỗi Buffer Overflow khác

Một số biện pháp chặn lỗi Buffer Overflow khác là người dùng hãy 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 của hệ thống (đa số các phần mềm hiện nay được viết bằng ngôn ngữ lập trình C). Hoặc có thể 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,…

Trên đây, Hoàng Hà PC đã cung cấp đế bạn đọc các thông tin về Buffer Overflow cũng như các biện pháp ngăn chặn lỗi tràn bộ đệm Buffer Overflow. Mong rằng bài viết sẽ đem đến cho bạn đọc nhiều thông tin thú vị, bổ ích về Buffer Overflow.

Ngày nay, trong bối cảnh bùng nổ thông tin của mạng Internet, bên cạnh các lợi ích mà Internet mạng lại, cũng đồng thời có vô số cuộc tấn công nhằm đánh cắp thông tin diễn ra hàng ngày, hàng giờ… Một trong số đó là Buffer Overflow , một loại tấn công gây nguy hiểm nhất đối với người dùng. Vậy Buffer Overflow là gì và các hình thức tấn công Buffer Overflow như thế nào, chúng ta cùng tìm hiểu qua bài viết này nhé.

Buffer Overflow (Lỗ hổng tràn bộ đệm) là lỗ hổng trong lập trình, cho phép dữ liệu được ghi vào một buffer có thể tràn ra ngoài buffer đó, ghi đè lên dữ liệu khác và dẫn tới hoạt động bất thường của chương trình.

II. 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 đó.

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ữ.

III. Một số hình thức 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:

1. 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.

2. 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.

3. 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ổ.

4. 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ị.

5. 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.

IV. Một số cách ngăn chặn Buffer Overflow

– 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ệ.

– 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.

– 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ờ.

– 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.

– 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.

V. Tổng kết

Buffer Overflow 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. Thực tế cho thấy, các cuộc tấn công tràn bộ đệm vẫn thường xuyên xảy ra và gây hậu quả nghiêm trọng cho hệ thống vì nó có thể can thiệp trực tiếp vào mã nguồn.

Mặc dù nhiều viết đã chỉ ra các dạng cơ bản của tấn công Buffer Overflow và các cách phòng chống nhưng với sự phát triển của công nghệ, các hacker không ngừng phát triển các cách tấn công mới vào hệ thống.

Vì vậy, các bài viết chỉ có thể giúp người đọc phần nào biết đến cách tấn công Buffer Overflow và mức độ nguy hiểm của các cuộc tấn công bằng phương pháp Buffer Overflow để làm cơ sở phần nào giúp người đọc dựa vào đó để có thể nghiên cứu sâu hơn về cuộc tấn công này từ đó đưa ra những biện pháp phòng chống hiệu quả và triệt để nhất.

Chủ đề