Phân tích và khai thác lỗ hổng 0day trên hệ thống Windows của Microsoft
Gần đây, bản vá bảo mật được Microsoft phát hành đã sửa chữa một lỗ hổng tăng quyền trên Windows đang bị hacker lợi dụng. Lỗ hổng này chủ yếu ảnh hưởng đến các phiên bản hệ điều hành Windows sớm hơn, không thể kích hoạt trên Windows 11.
Lỗ hổng loại này đã tồn tại nhiều năm, bài viết này sẽ khám phá cách mà các kẻ tấn công có thể tiếp tục khai thác những lỗ hổng này trong bối cảnh các biện pháp bảo vệ an ninh ngày càng được củng cố. Phân tích dưới đây được thực hiện dựa trên môi trường Windows Server 2016.
Lỗ hổng 0day là những lỗ hổng chưa được công khai và sửa chữa, có thể bị tin tặc khai thác một cách độc hại mà không bị phát hiện, mang tính phá hoại rất cao. Lỗ hổng 0day được phát hiện lần này cho phép kẻ tấn công chiếm quyền kiểm soát hoàn toàn hệ thống Windows, từ đó gây ra hậu quả nghiêm trọng như rò rỉ thông tin cá nhân, hệ thống bị sập, mất dữ liệu, v.v. Nhỏ thì bị đánh cắp khóa riêng của tiền điện tử, lớn thì có thể ảnh hưởng đến an ninh của toàn bộ hệ sinh thái Web3.
Phân tích bản vá
Phân tích mã vá cho thấy, chủ yếu đã sửa một vấn đề xử lý tham chiếu đối tượng quá mức. Qua các chú thích mã nguồn trước đây có thể biết, mã trước đây chỉ khóa đối tượng cửa sổ, không khóa đối tượng menu trong cửa sổ, điều này có thể dẫn đến việc tham chiếu sai đối tượng menu.
Tái hiện lỗ hổng
Phân tích cho thấy, menu được truyền vào xxxEnableMenuItem() thường đã bị khóa trong hàm cấp trên, nhưng cụ thể bảo vệ đối tượng menu nào thì vẫn chưa rõ ràng. Phân tích thêm cho thấy, menu mà hàm MenuItemState trả về có thể là menu chính của cửa sổ, cũng có thể là menu con hoặc menu ở cấp sâu hơn.
Chúng tôi đã xây dựng một cấu trúc menu nhiều cấp độ đặc biệt để kích hoạt lỗ hổng, bao gồm các menu hệ thống với loại ID cụ thể, và đã xử lý đặc biệt các mối quan hệ tham chiếu giữa các menu. Cuối cùng, khi xxxRedrawTitle trả về lớp người dùng, nó giải phóng đối tượng menu cụ thể, dẫn đến việc tham chiếu đối tượng không hợp lệ trong hàm xxxEnableMenuItem.
Khai thác lỗ hổng
Lợi dụng lỗ hổng chủ yếu xem xét hai hướng: thực thi shellcode và sử dụng nguyên thủy đọc ghi để sửa đổi token. Sau khi phân tích toàn diện, chúng tôi đã chọn hướng thứ hai.
Các bước quan trọng bao gồm:
Sử dụng lỗ hổng UAF để kiểm soát giá trị của cbwndextra
Thực hiện các nguyên tử đọc/ghi ổn định
Chúng tôi đã thiết kế cẩn thận bố cục bộ nhớ, sử dụng đối tượng cửa sổ và đối tượng HWNDClass để xây dựng các nguyên thủy đọc/ghi có thể kiểm soát. Sử dụng GetMenuBarInfo() để thực hiện đọc tùy ý, SetClassLongPtr() để thực hiện ghi tùy ý. Cuối cùng có thể thực hiện các thao tác như thay thế token của tiến trình.
Tóm tắt
Microsoft đang sử dụng Rust để tái cấu trúc mã liên quan đến win32k, trong tương lai những lỗ hổng này có thể được loại bỏ.
Quy trình khai thác lỗ hổng tương đối đơn giản, chủ yếu dựa vào việc lộ địa chỉ của ngăn xếp trên máy tính để bàn.
Việc phát hiện lỗ hổng này có thể nhờ vào việc kiểm tra độ bao phủ mã hoàn thiện hơn.
Việc phát hiện bố cục bộ nhớ bất thường và đọc ghi dữ liệu cửa sổ sẽ giúp phát hiện các lỗ hổng như vậy.
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
Lỗ hổng nâng quyền Windows 0day: Ví tiền mã hóa đối mặt với mối đe dọa mới
Phân tích và khai thác lỗ hổng 0day trên hệ thống Windows của Microsoft
Gần đây, bản vá bảo mật được Microsoft phát hành đã sửa chữa một lỗ hổng tăng quyền trên Windows đang bị hacker lợi dụng. Lỗ hổng này chủ yếu ảnh hưởng đến các phiên bản hệ điều hành Windows sớm hơn, không thể kích hoạt trên Windows 11.
Lỗ hổng loại này đã tồn tại nhiều năm, bài viết này sẽ khám phá cách mà các kẻ tấn công có thể tiếp tục khai thác những lỗ hổng này trong bối cảnh các biện pháp bảo vệ an ninh ngày càng được củng cố. Phân tích dưới đây được thực hiện dựa trên môi trường Windows Server 2016.
Lỗ hổng 0day là những lỗ hổng chưa được công khai và sửa chữa, có thể bị tin tặc khai thác một cách độc hại mà không bị phát hiện, mang tính phá hoại rất cao. Lỗ hổng 0day được phát hiện lần này cho phép kẻ tấn công chiếm quyền kiểm soát hoàn toàn hệ thống Windows, từ đó gây ra hậu quả nghiêm trọng như rò rỉ thông tin cá nhân, hệ thống bị sập, mất dữ liệu, v.v. Nhỏ thì bị đánh cắp khóa riêng của tiền điện tử, lớn thì có thể ảnh hưởng đến an ninh của toàn bộ hệ sinh thái Web3.
Phân tích bản vá
Phân tích mã vá cho thấy, chủ yếu đã sửa một vấn đề xử lý tham chiếu đối tượng quá mức. Qua các chú thích mã nguồn trước đây có thể biết, mã trước đây chỉ khóa đối tượng cửa sổ, không khóa đối tượng menu trong cửa sổ, điều này có thể dẫn đến việc tham chiếu sai đối tượng menu.
Tái hiện lỗ hổng
Phân tích cho thấy, menu được truyền vào xxxEnableMenuItem() thường đã bị khóa trong hàm cấp trên, nhưng cụ thể bảo vệ đối tượng menu nào thì vẫn chưa rõ ràng. Phân tích thêm cho thấy, menu mà hàm MenuItemState trả về có thể là menu chính của cửa sổ, cũng có thể là menu con hoặc menu ở cấp sâu hơn.
Chúng tôi đã xây dựng một cấu trúc menu nhiều cấp độ đặc biệt để kích hoạt lỗ hổng, bao gồm các menu hệ thống với loại ID cụ thể, và đã xử lý đặc biệt các mối quan hệ tham chiếu giữa các menu. Cuối cùng, khi xxxRedrawTitle trả về lớp người dùng, nó giải phóng đối tượng menu cụ thể, dẫn đến việc tham chiếu đối tượng không hợp lệ trong hàm xxxEnableMenuItem.
Khai thác lỗ hổng
Lợi dụng lỗ hổng chủ yếu xem xét hai hướng: thực thi shellcode và sử dụng nguyên thủy đọc ghi để sửa đổi token. Sau khi phân tích toàn diện, chúng tôi đã chọn hướng thứ hai.
Các bước quan trọng bao gồm:
Chúng tôi đã thiết kế cẩn thận bố cục bộ nhớ, sử dụng đối tượng cửa sổ và đối tượng HWNDClass để xây dựng các nguyên thủy đọc/ghi có thể kiểm soát. Sử dụng GetMenuBarInfo() để thực hiện đọc tùy ý, SetClassLongPtr() để thực hiện ghi tùy ý. Cuối cùng có thể thực hiện các thao tác như thay thế token của tiến trình.
Tóm tắt
Microsoft đang sử dụng Rust để tái cấu trúc mã liên quan đến win32k, trong tương lai những lỗ hổng này có thể được loại bỏ.
Quy trình khai thác lỗ hổng tương đối đơn giản, chủ yếu dựa vào việc lộ địa chỉ của ngăn xếp trên máy tính để bàn.
Việc phát hiện lỗ hổng này có thể nhờ vào việc kiểm tra độ bao phủ mã hoàn thiện hơn.
Việc phát hiện bố cục bộ nhớ bất thường và đọc ghi dữ liệu cửa sổ sẽ giúp phát hiện các lỗ hổng như vậy.