Tấn công tràn bộ đệm hoạt động như thế nào? Đi sau hậu trường với tư cách là một hacker

Tấn công tràn bộ đệm hoạt động như thế nào? Đi sau hậu trường với tư cách là một hacker
Độc giả như bạn giúp hỗ trợ MUO. Khi bạn mua hàng bằng các liên kết trên trang web của chúng tôi, chúng tôi có thể kiếm được hoa hồng liên kết. Đọc thêm.

Hacker tấn công hệ thống bằng virus và phần mềm độc hại như thế nào? Đôi khi, nó có thể là phần mềm tống tiền; đôi khi, nó có thể là một cuộc tấn công tiêu tốn các yêu cầu hệ thống của bạn. Tràn bộ đệm là một trong những phương thức tấn công này—nhưng thực chất nó là gì? Làm thế nào để các cuộc tấn công làm việc?





TẠO VIDEO TRONG NGÀY CUỘN ĐỂ TIẾP TỤC VỚI NỘI DUNG

Tràn bộ đệm là gì?

Vì vậy, những gì thực sự là một bộ đệm và ngăn xếp? Bộ đệm là một trường trong đó một số thông tin đầu vào mà bạn cung cấp cho máy tính của mình sẽ đợi trước khi chúng đến bộ nhớ. Gọi lại dữ liệu từ bộ nhớ là một hoạt động mệt mỏi của hệ thống. Vì vậy, khi có đủ không gian trong vùng đệm, bạn gọi dữ liệu trực tiếp từ đây. Điều này có nghĩa là tăng hiệu suất cho thiết bị của bạn. Tất nhiên, khi không gian có sẵn cho bộ đệm đầy, cần phải ghi nó vào bộ nhớ.





Stack thực chất là một cấu trúc dữ liệu trong đó diễn ra các thao tác đẩy (thêm) và bật (xóa) dữ liệu. Các khái niệm về bộ đệm và ngăn xếp khá giống nhau; tuy nhiên, bộ đệm hoạt động giống như một ngăn xếp tạm thời lưu trữ dữ liệu đến.





cách tốt nhất để bán truyện tranh

Tràn bộ đệm có thể là một chủ đề đầy thách thức, nhưng đúng như tên gọi, nó xảy ra khi có quá tải dữ liệu. Ví dụ, bạn muốn đăng nhập vào một hệ thống. Các nhà phát triển có thể phân bổ 250 byte dung lượng cho tên người dùng. Nếu bạn nhập 300 byte dữ liệu, bộ đệm sẽ bị tràn. Việc tràn này có thể ảnh hưởng đến dữ liệu khác trong bộ nhớ, gây hại.

Điều này là tuyệt vời cho tin tặc. Tội phạm mạng có thể kết hợp mớ hỗn độn này với các vectơ tấn công khác nhau, chẳng hạn như để hack hệ thống và đăng nhập với tư cách quản trị viên.



Để hiểu lỗi tràn bộ đệm, các chủ đề chính bạn cần nhận ra sẽ là Cấu trúc bên trong của CPU , thanh ghi bộ nhớ và cách bộ nhớ xử lý dữ liệu. Dưới đây là một số thuật ngữ về CPU mà bạn cần biết.





mã hội





Một ngôn ngữ lập trình cấp thấp , tức là gần với ngôn ngữ máy.

Đệm

Kích thước cố định không gian bộ nhớ được phân bổ .

Mã byte

Một dạng mã ngôn ngữ trung gian có thể biên dịch được viết bằng ngôn ngữ cấp cao.

Trình biên dịch

Một chương trình chuyển đổi ngôn ngữ lập trình thành mã máy.

đống

Không gian bộ nhớ động, có thể thay đổi.

Nguyên tắc cơ bản của lý thuyết bộ nhớ

Nếu không hiểu lý thuyết bộ nhớ, có thể khó giải quyết vấn đề tràn bộ đệm trong thực tế. Bạn có thể nghĩ nó giống như cố gắng xây dựng một ngôi nhà mà không biết cách xây tường.

điều gì sẽ xảy ra nếu tôi không nâng cấp lên windows 10

Hãy tưởng tượng bạn muốn chạy tràn bộ đệm từ quan điểm của tin tặc. Để làm được điều đó, bạn phải thao tác với bộ nhớ và yêu cầu CPU thực thi mã của bạn. Nếu bạn là người có mục đích xấu, mục tiêu của bạn ở đây sẽ là làm quá tải bộ nhớ và thao túng cả các vùng bộ nhớ liền kề.

  Sơ đồ hiển thị ngăn xếp tăng dần và đống tăng dần

Nhưng trước hết, bạn cần tập trung vào các khái niệm heap, stack và text segment.

Trong khi ngăn xếp đang được tạo, bộ nhớ sử dụng các địa chỉ bộ nhớ cao. Địa chỉ bộ nhớ cao có nghĩa là vùng bộ nhớ mở rộng. Sau đó, các giá trị địa chỉ bắt đầu giảm. Ngăn xếp bộ nhớ sử dụng một phương thức gọi là LIFO (Last In, First Out) trong quá trình sử dụng bộ nhớ. Các biến trong bộ nhớ ngăn xếp chỉ hợp lệ trong phạm vi mà chúng được xác định. Nếu chúng nằm ngoài phạm vi này, sẽ xảy ra lỗi.

Mặt khác, bộ nhớ ngăn xếp hoạt động linh hoạt và không phải bắt đầu ở các địa chỉ cao. Không có giới hạn được đặt cho bộ nhớ heap; tất cả các giới hạn được thiết lập bởi hệ điều hành. Có thể thay đổi bộ nhớ heap một cách linh hoạt và những giới hạn này có thể thay đổi theo nhu cầu của người dùng trong quá trình sử dụng heap. Giới hạn của bộ nhớ heap phụ thuộc vào các yếu tố được xác định bởi hệ điều hành và phần cứng. Nói cách khác, nó cung cấp cách sử dụng năng động trong các giới hạn này.

Đoạn văn bản chứa mã chương trình và đoạn dữ liệu chứa dữ liệu chung. Chia sẻ địa chỉ cao ngăn xếp và bộ nhớ heap giữa họ với nhau. Hệ thống phân bổ cả hai bộ nhớ trong thời gian chạy.

Để hiểu rõ hơn về lỗi tràn bộ đệm, bạn nên kiểm tra các thanh ghi dữ liệu có mục đích chung mà kiến ​​trúc máy tính của bạn sử dụng để lưu trữ dữ liệu. Thay vì phân tích từng bản ghi riêng lẻ, hãy tập trung vào những điều cốt yếu.

ứng dụng tìm quần áo từ hình ảnh
  • ESP (Con trỏ ngăn xếp mở rộng): Thanh ghi này giữ địa chỉ ở đầu ngăn xếp.
  • EBP (Con trỏ cơ sở mở rộng): Điều này giữ con trỏ cơ sở.
  • EIP (Con trỏ hướng dẫn mở rộng): Và thanh ghi này chứa địa chỉ của lệnh tiếp theo sẽ được thực hiện.

Những thuật ngữ kỹ thuật này nghe có vẻ hơi khó hiểu, nhưng hãy tưởng tượng tất cả chúng là những phân vùng nhỏ trên bộ nhớ.

Tấn công tràn bộ đệm hoạt động như thế nào?

Khi bạn thêm dữ liệu mới vào bất kỳ ngăn xếp nào, dữ liệu này sẽ được đặt ở trên cùng. Tất cả dữ liệu mới sau đó được chuyển xuống dưới. ESP ở trên cùng của ngăn xếp. Vì vậy, trong trường hợp này, ESP chuyển đến địa chỉ bộ nhớ thấp hơn. Hãy tưởng tượng dữ liệu được thêm ở trên đẩy ESP xuống.

  Sơ đồ hiển thị không gian bộ đệm ở đâu đó giữa ESP và EBP

Khi một chương trình bắt đầu chạy, hệ thống sẽ tạo một khung ngăn xếp với các biến cục bộ. Mục đích chính của tấn công tràn bộ đệm là giành quyền truy cập vào EIP hoặc địa chỉ trả về. Một hacker có quyền truy cập vào địa chỉ này có thể ra lệnh cho nó trỏ đến bất kỳ mã độc nào họ muốn, sau đó sẽ ảnh hưởng đến hệ thống rộng lớn hơn.

  Sơ đồ hiển thị dữ liệu trong ESP nhắm mục tiêu Địa chỉ trả lại

Với mỗi bit dữ liệu mới, ngăn xếp phát triển theo hướng EBP. Câu hỏi thực sự ở đây là, nếu chúng tôi nhập quá nhiều dữ liệu, liệu chúng tôi có thể đẩy EBP về phía EIP không? Bằng cách đó, dữ liệu hoặc mã bạn muốn được đặt trên EIP và bạn có thể thấy kết quả mình muốn. Tất cả những gì còn lại là để chạy nó. Khi bạn chạy chương trình, nó sẽ trỏ đến mã EIP của bạn và bắt đầu thực thi. Kết quả là, nếu bạn là một hacker, bạn sẽ thực hiện cuộc tấn công tràn bộ đệm đầu tiên của mình.

Để lấy ví dụ từ một góc độ khác, bạn có thể xem xét các chất lỏng có mật độ khác nhau, được gọi là ESP, EBP và EIP, trong một thùng chứa. Hãy tưởng tượng rằng ESP được đặt ở trên cùng của thùng chứa vì mật độ của nó thấp hơn. Cũng giống như dầu ô liu và nước, chúng không nên trộn lẫn với nhau. Khi đó, mã độc là một chất lỏng khác—khi bạn thêm nó vào thùng chứa, nó sẽ làm xáo trộn sự cân bằng này, chiếm chỗ của một số chất lỏng và trộn lẫn với EIP. Điều này sẽ chỉ ra lỗi tràn bộ đệm.

Làm thế nào để bảo vệ chống lại các cuộc tấn công tràn bộ đệm

Vì vậy, làm thế nào để bạn ngăn chặn điều này xảy ra?

Đầu tiên, điều quan trọng là phải áp dụng thực hành viết mã tốt trong suốt quá trình phát triển phần mềm để giảm thiểu các lỗ hổng bảo mật. Mã được viết cẩn thận có thể làm giảm khả năng tràn bộ đệm.

Một bước nữa là sử dụng các cơ chế phòng thủ để cho phép giám sát các vùng bộ nhớ, kiểm tra giới hạn của bộ đệm và phát hiện các cuộc tấn công. Cuối cùng, bạn cần thường xuyên cập nhật hệ thống và áp dụng các bản vá lỗi. Các bản cập nhật sửa lỗ hổng khiến kẻ tấn công khó khai thác lỗ hổng đã biết hơn. Ngoài ra, việc sử dụng các công cụ phòng thủ như phần mềm và tường lửa sẽ cung cấp thêm một lớp bảo mật.

Thực hiện hành động chống tràn bộ đệm

Các cuộc tấn công tràn bộ đệm gây ra mối đe dọa đáng kể đối với an ninh mạng của bạn và việc thực hiện các biện pháp phòng ngừa chống lại chúng là rất quan trọng. May mắn thay, có thể chặn các cuộc tấn công này và tăng cường các cơ chế phòng thủ. Nhiều phương pháp bảo mật tốt, chẳng hạn như luôn cập nhật phần mềm để sửa các bản vá, giúp bảo vệ chống lại các cuộc tấn công như vậy, cũng như các lỗ hổng khác.