
Vào ngày 13 tháng 8 năm 2024, MSTC (Trung tâm phản hồi bảo mật của Microsoft) đã tiết lộ CVE-2024-38063, một lỗ hổng nghiêm trọng trong ngăn xếp TCP/IP của Windows có thể bị khai thác để gây nguy hiểm cho các chức năng mạng quan trọng trong hệ điều hành. Tại đây, những người tham gia OPSWAT Chương trình học bổng sau đại học cung cấp một cuộc kiểm tra toàn diện về các chi tiết kỹ thuật và tác động tiềm ẩn của lỗ hổng này, cũng như các chiến lược giảm thiểu được đề xuất cho lỗ hổng này.
OPSWAT Đối tượng tham gia chương trình học bổng: Phạm Ngọc Thiện - Trường Đại học Công nghệ thông tin TP.HCM
Tổng quan
CVE-2024-38063 là lỗ hổng nghiêm trọng của ngăn xếp TCP/IP Windows với điểm CVSS là 9,8, ảnh hưởng đến quá trình xử lý các gói tin IPv6. Kẻ tấn công từ xa có thể khai thác lỗ hổng này bằng cách sử dụng tràn số nguyên khi xử lý tiêu đề mở rộng IPv6 để thực thi mã độc hại hoặc gây ra DoS (Từ chối dịch vụ).
Vì IPv6 được bật theo mặc định trên hầu hết các hệ thống hiện đại, nên lỗi zero-click này gây ra rủi ro đáng kể. Do đó, tất cả các phiên bản chưa vá của Windows 10, Windows 11 và Windows Server Các phiên bản 2008, 2012, 2016, 2019 và 2022 bật IPv6 đều dễ bị ảnh hưởng bởi lỗ hổng CVE này.
Các khái niệm chính
Ngăn xếp TCP/IP của Windows
Ngăn xếp TCP/IP của Windows là một thành phần nền tảng của hệ điều hành chịu trách nhiệm cho giao tiếp mạng thông qua bộ Giao thức điều khiển truyền/Giao thức Internet (TCP/IP). Nó xử lý tất cả các tương tác mạng, tạo điều kiện thuận lợi cho giao tiếp giữa các thiết bị trên mạng cục bộ và toàn cầu.
IPv6 và Tiêu đề mở rộng
IPv6 được phát triển để giải quyết những hạn chế của IPv4. Nó giới thiệu nhiều cải tiến khác nhau, chẳng hạn như tính mô-đun và tính linh hoạt thông qua các tiêu đề mở rộng. Các tiêu đề, được định vị giữa tiêu đề IPv6 và tải trọng, hỗ trợ dữ liệu tùy chọn và các tính năng nâng cao.
Các tiêu đề mở rộng IPv6 chính bao gồm:
- Tùy chọn Hop-by-Hop (Tiêu đề tiếp theo = 0)
- Tiêu đề định tuyến (Tiêu đề tiếp theo = 43)
- Tiêu đề phân đoạn (Tiêu đề tiếp theo = 44)
- Tiêu đề Tùy chọn đích (Tiêu đề tiếp theo = 60)
- Tiêu đề xác thực (AH) (Tiêu đề tiếp theo = 51)
- Đóng gói tải trọng bảo mật (ESP) (Tiêu đề tiếp theo = 50)
Mỗi tiêu đề mở rộng trỏ đến tiêu đề tiếp theo thông qua trường Tiêu đề tiếp theo, tạo ra một chuỗi tuần tự. Tính mô-đun này làm tăng tính phức tạp cho quy trình xử lý gói tin và các vectơ khai thác tiềm năng.
Tràn số nguyên
Tràn số nguyên xảy ra khi phép tính tạo ra giá trị nhỏ hơn giá trị biểu diễn tối thiểu cho một kiểu dữ liệu. Ví dụ, trừ một giá trị lớn hơn từ một giá trị nhỏ hơn vào một số nguyên không dấu có thể khiến kết quả trở thành một giá trị dương rất lớn.
Tràn số nguyên xảy ra khi giá trị vượt quá giới hạn tối đa của kiểu dữ liệu và "tràn" trở lại giá trị biểu diễn tối thiểu (ví dụ: 0 trong phạm vi 0-10). Cả hai trường hợp đều xảy ra do xử lý không đúng các điều kiện biên trong các phép toán số học, dẫn đến lỗ hổng nghiêm trọng trong hệ thống phần mềm.
Phân tích lỗ hổng bảo mật
Quy trình xử lý IPv6
Sau khi nhận được một gói tin IPv6, Windows đầu tiên phân tích cú pháp tiêu đề IPv6. Sau đó, hàm IppReceiveHeaderBatch kiểm tra giá trị của trường Tiêu đề tiếp theo để chọn trình xử lý thích hợp cho các tiêu đề tiếp theo. Đối với mỗi tiêu đề mở rộng trong chuỗi, IppReceiveHeaderBatch gọi trình tự tương ứng để xử lý tiêu đề cụ thể đó.
Mặc dù cơ chế này có thiết kế linh hoạt và dạng mô-đun, nhưng nó lại tạo ra một vectơ tấn công tiềm ẩn. Trong IPv6, các gói tin bị phân mảnh thường được lắp ráp lại tại đích đến, nơi tồn tại lỗ hổng trong quá trình lắp ráp lại phân mảnh và xử lý tiêu đề.
Kẻ tấn công có thể gây ra lỗi quản lý bộ nhớ và kích hoạt tràn bộ đệm bằng cách gửi nhiều gói tin không đúng định dạng với tiêu đề mở rộng bị thao túng. Điều này cho phép dữ liệu dư thừa ghi đè lên các vùng bộ nhớ không mong muốn, có khả năng cho phép thực thi mã tùy ý. Lỗ hổng này được xác định là CVE-2024-38063.
Lỗi nghiêm trọng trong ngăn xếp TCP/IP của Windows
Bản vá của Microsoft để giải quyết lỗ hổng CVE-2024-38063 đã được nhà nghiên cứu bảo mật Marcus Hutchins kiểm tra kỹ lưỡng. Blog kỹ thuật của ông cung cấp thông tin chi tiết về nguyên nhân gốc rễ của lỗ hổng này. Dựa trên những phát hiện của mình, đồng nghiệp của chúng tôi đã khám phá thêm vấn đề này để hiểu rõ hơn về khai thác.
Phân tích bản vá
Bản vá bao gồm bản cập nhật cho tệp tcpip.sys, bao gồm một sửa đổi trong hàm Ipv6pProcessOptions. Một thay đổi một dòng đã thay thế lệnh gọi từ IppSendErrorList() bằng lệnh gọi đến IppSendError(), cho biết rằng IppSendErrorList() có thể đã góp phần vào CVE.
Kích thước gói bằng không
Kiểm tra kỹ hơn hàm IppSendErrorList() cho thấy hàm này xử lý danh sách liên kết các gói tin bằng cách gọi hàm IppSendError() cho từng gói tin. Hàm IppSendError() gán trạng thái STATUS_DATA_NOT_ACCEPTED cho các gói tin bị lỗi. Sau đó, hàm này tạo thông báo lỗi ICMP chứa thông tin về gói tin có vấn đề và gửi lại. Tuy nhiên, khi hàm IppSendErrorList() được gọi với always_send_icmp = true trên nhiều gói tin, hàm này sẽ đặt trường packet_size thành 0 cho mỗi gói tin.
Hàm Ipv6pProcessOptions được thiết kế để xử lý các tiêu đề mở rộng chứa các trường giá trị tùy chọn, bao gồm cả tiêu đề Hop-by-Hop Options và Destination Options. Bằng cách đặt Option Type thành bất kỳ giá trị nào lớn hơn 0x80, kẻ tấn công có thể kích hoạt lỗi cụ thể trong quá trình xử lý tiêu đề tùy chọn, buộc always_send_icmp phải được đặt thành true và do đó dẫn đến kích thước gói tin được đặt thành 0.
Trong khi một gói tin có kích thước bằng không thường bị loại bỏ, kẻ tấn công có thể thao túng trường Tiêu đề tiếp theo trong gói tin IPv6 gốc. Thao tác này cho phép kẻ tấn công kiểm soát cách diễn giải gói tin trong các giai đoạn xử lý tiếp theo, tránh bị từ chối ngay lập tức và tạo cơ hội khai thác.
Tràn số nguyên trong xử lý phân đoạn
Bằng cách đặt trường Next Header thành 44, biểu thị Fragment Header, một gói tin được xử lý bởi các quy trình phân mảnh hoặc lắp ráp lại IPv6. Khi gói tin đến trình phân tích cú pháp phân mảnh, Ipv6pReceiveFragment(), nó chỉ định rằng:
- Kích thước gói tin là 0.
- Tiêu đề phân đoạn cho biết vẫn còn dữ liệu bổ sung cần được xử lý.
Trong hàm Ipv6pReceiveFragment(), kích thước phân bổ cho fragment_size được tính bằng cách trừ 0x30 (độ dài tiêu đề gói) khỏi kích thước gói mà không cần bất kỳ xác thực nào. Nếu kích thước gói bằng không, phép trừ này sẽ tràn, dẫn đến giá trị 16 bit lớn (khoảng 0xFFD0 hoặc 65488), khiến trình phân tích xử lý bộ nhớ quá mức bên ngoài ranh giới hợp lệ của gói và dẫn đến hỏng bộ nhớ.
Từ Underflow đến Overflow và Không phù hợp trong Phân bổ
Hàm Ipv6pReassemblyTimeout() chịu trách nhiệm dọn dẹp các đoạn IPv6 chưa hoàn thành sau một khoảng thời gian xác định bằng cách sử dụng phép tính số học 16 bit để xác định kích thước bộ đệm và các hoạt động sao chép. Do tràn dưới ở bước trước, khi packet_length hoặc fragment_size trở thành 0xFFD0, tràn xảy ra trong quá trình phân bổ.
Kết quả tính toán khiến thanh ghi đặt lại về 0, dẫn đến việc chỉ phân bổ 48 byte bộ nhớ. Tuy nhiên, vì lượng dữ liệu được sao chép (65.488 byte từ reassembly->payload) không tương ứng với bộ nhớ được phân bổ, nên tràn bộ đệm có thể kiểm soát xảy ra trong nhóm hạt nhân.
Sự khác biệt này mở ra cánh cửa cho kẻ tấn công thực thi mã độc thông qua một gói tin được thiết kế đặc biệt nhằm khai thác lỗ hổng trong quá trình xử lý IPv6.
CVE-2024-38963 Bằng chứng về khái niệm
Trong nỗ lực tái tạo lỗ hổng CVE-2024-38963, các cộng sự của chúng tôi đã tạo ra một loạt các gói tin bị lỗi được thiết kế để khai thác lỗ hổng. Quy trình họ thực hiện là:
1. Tạo các gói IPv6 không đúng định dạng
Chèn tiêu đề mở rộng Tùy chọn đích IPv6 (kiểu 60) theo sau tiêu đề IPv6 cơ sở, sau đó nhúng tùy chọn không hợp lệ (ví dụ: tùy chọn kiểu 0x81).
Thao tác này buộc hạt nhân Windows (tcpip.sys) phải đặt always_send_icmp = true, kích hoạt việc tạo lỗi ICMPv6 thông qua hàm IppSendErrorList().
2. Buộc xử lý danh sách bộ đệm ròng (NBL)
Việc làm ngập mục tiêu bằng các đợt bùng phát nhanh chóng các gói tin bị lỗi này làm tăng khả năng hạt nhân nhóm nhiều gói tin vào một Net-Buffer List (NBL) duy nhất. Khi hai hoặc nhiều gói tin được nhóm lại, vòng lặp IppSendErrorList() dễ bị tấn công sẽ được kích hoạt, đặt lại siêu dữ liệu DataLength và Offset không đúng cách trong các đoạn tiếp theo (kích thước gói tin hiện bằng 0).
3. Tiêm các gói tin IPv6 bị phân mảnh
Sau khi truyền các gói tin bị lỗi, các gói tin IPv6 bị phân mảnh bao gồm tiêu đề mở rộng Fragment được gửi đi. Các phân mảnh này được xử lý bằng cách sử dụng các giá trị DataLength đã bị hỏng.
4. Khai thác thời gian chờ lắp ráp lại
Nhân giữ các mảnh trong 60 giây (do Ipv6pReassemblyTimeout quản lý) để cho phép lắp ráp lại gói tin. Trong thời gian chờ này, các giá trị DataLength bị hỏng sẽ kích hoạt tràn số nguyên trong Ipv6pReceiveFragment, dẫn đến kích thước mảnh được tính toán không chính xác (quá lớn).
5. Kích hoạt tràn bộ đệm Heap
Nhân phân bổ một bộ đệm heap dựa trên các giá trị tràn dưới. Hai phép tính khác nhau xảy ra trong quá trình lắp ráp lại: một phép tính xác định kích thước phân bổ bộ nhớ (do tràn 16 bit, trở nên quá nhỏ) và phép tính còn lại tính độ dài bản sao bằng cách sử dụng giá trị tràn dưới lớn.
Sự không khớp này dẫn đến việc ghi vượt giới hạn, gây ra lỗi tràn bộ đệm dựa trên heap có thể bị khai thác để kích hoạt Từ chối dịch vụ (DoS) hoặc Thực thi mã từ xa.
Mã nguồn được sử dụng để tái tạo CVE này cho một cuộc tấn công từ chối dịch vụ:
Khi lỗ hổng này bị kẻ tấn công khai thác, hệ thống của nạn nhân có thể bị sập ngay lập tức, dẫn đến màn hình xanh chết chóc:
Khắc phục
Việc không cập nhật hệ điều hành thường xuyên sẽ khiến thiết bị của bạn gặp phải các mối đe dọa bảo mật, bao gồm cả các mối đe dọa liên quan đến CVE (Các lỗ hổng và sự cố phổ biến). Để giảm thiểu những rủi ro này, MetaDefender Endpoint™ cung cấp khả năng bảo vệ mạnh mẽ bằng cách phát hiện phiên bản hệ điều hành của bạn và kiểm tra các lỗ hổng, bao gồm các CVE đã biết, chẳng hạn như CVE-2024-38063.
MetaDefender Endpoint được thiết kế để bảo vệ các thiết bị bên trong mạng CNTT/OT quan trọng khỏi các mối đe dọa phương tiện ngoại vi và phương tiện di động. Nó đảm bảo hệ điều hành và các ứng dụng đã cài đặt của bạn được cập nhật, đánh dấu bất kỳ phiên bản lỗi thời hoặc dễ bị tấn công nào và liệt kê các ứng dụng có lỗ hổng và CVE đã biết, cùng với các bản sửa lỗi được đề xuất. Nó cũng giúp bảo vệ các thiết bị khỏi các rủi ro phương tiện di động bằng cách chặn quyền truy cập vào USB ổ đĩa cho đến khi được quét và phát hiện sạch bằng nhiều công cụ chống phần mềm độc hại trong khi thực hiện Deep CDR™ trên hơn 180 loại tệp.
Hãy nói chuyện với một trong những chuyên gia của chúng tôi ngay hôm nay để xem MetaDefender Endpoint có thể thay đổi thế trận an ninh của bạn bằng công nghệ thông tin hàng đầu trong ngành.