Phân tích lỗ hổng 0day hệ thống Windows: từ việc nâng quyền win32k đến rủi ro an ninh Web3

robot
Đang tạo bản tóm tắt

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 đã khắc phục một lỗ hổng nâng quyền win32k đang bị khai thác tích cực. Lỗ hổng này chủ yếu ảnh hưởng đến các phiên bản hệ điều hành Windows cũ, và dường như không thể kích hoạt trên Windows 11. Bài viết này sẽ phân tích cách mà các kẻ tấn công có thể tiếp tục khai thác những lỗ hổng như vậy trong bối cảnh an ninh hiện tại. Phân tích dưới đây được thực hiện dựa trên môi trường Windows Server 2016.

Numen độc quyền: Lỗ hổng 0day của Microsoft có thể lật đổ hệ thống + mặt vật lý của trò chơi Web3

Bối cảnh lỗ hổng

Lỗ hổng 0day chỉ những lỗ hổng bảo mật chưa được công khai và chưa được sửa chữa, tương tự như khái niệm giao dịch T+0 trong thị trường tài chính. Khi những lỗ hổng này bị khai thác bởi kẻ xấu, có thể gây ra thiệt hại nghiêm trọng. Lỗ hổng 0day được phát hiện trên hệ thống Windows lần này cho phép kẻ tấn công lấy quyền kiểm soát hoàn toàn hệ thống, từ đó thực hiện các cuộc tấn công như đánh cắp thông tin, phá hoại hệ thống, cài đặt phần mềm độc hại, v.v. Từ góc độ Web3, điều này có thể dẫn đến việc bị đánh cắp khóa riêng, tài sản kỹ thuật số bị chuyển nhượng, thậm chí đe dọa toàn bộ hệ sinh thái Web3 dựa trên cơ sở hạ tầng Web2.

Numen độc quyền: Lỗ hổng 0day của Microsoft có thể lật đổ hệ thống + mặt vật lý trong trò chơi Web3

Phân tích bản vá

Phân tích mã vá cho thấy, chủ yếu sửa chữa một vấn đề xử lý số lượng tham chiếu đối tượng. Kết hợp với chú thích mã nguồn win32k sớm hơn có thể thấy, mã gốc chỉ khóa đối tượng cửa sổ, mà không khóa đối tượng menu trong cửa sổ, có thể dẫn đến việc đối tượng menu bị tham chiếu sai.

Numen độc quyền: Lỗ hổng 0day của Microsoft có thể lật đổ hệ thống + mặt vật lý trong trò chơi Web3

Khái niệm kiểm chứng khai thác lỗ hổng ( PoC )

Phân tích cho thấy, hàm xxxEnableMenuItem có thể trả về MenuItemState cho menu chính của cửa sổ hoặc menu con. Chúng tôi đã xây dựng một cấu trúc menu bốn lớp đặc biệt, bao gồm các đặc điểm sau:

  1. ID của menu cấp thấp nhất D phải là loại menu hệ thống.
  2. Menu cấp cao A cũng phải là menu hệ thống, nhưng cần xóa các mục có ID giống với menu D.
  3. Xóa tham chiếu của menu C trong menu B.
  4. Sự tồn tại của menu B dường như giúp cho việc phát hành menu C.

Khi kích hoạt lỗ hổng, xóa liên kết của menu C và B khi xxxRedrawTitle trả về lớp người dùng, giải phóng menu C. Điều này dẫn đến việc tham chiếu đến đối tượng menu C không hợp lệ trong hàm xxxEnableMenuItem.

Numen độc quyền: Lỗ hổng 0day của Microsoft có thể lật đổ Web3 từ hệ thống + mặt vật lý

Khai thác lỗ hổng ( Exp ) thực hiện

Tổng thể tư duy

Cân nhắc hai hướng sử dụng khả thi:

  1. Thực thi shellcode: Tham khảo các lỗ hổng như CVE-2017-0263, nhưng có thể gặp nhiều rào cản trong phiên bản Windows mới.

  2. Sử dụng nguyên thủy đọc ghi để sửa đổi token: Trong những năm gần đây vẫn có exp công khai có thể tham khảo, chủ yếu cần giải quyết vấn đề làm thế nào để kiểm soát giá trị cbwndextra lần đầu tiên.

Chúng tôi áp dụng phương án thứ hai, chia exp thành hai bước là kiểm soát giá trị cbwndextra và thiết lập nguyên lý đọc ghi ổn định.

Numen độc quyền: Lỗ hổng 0day của Microsoft có thể lật đổ Web3 từ cả hệ thống lẫn mặt vật lý

lần ghi dữ liệu đầu tiên

Sử dụng đối tượng tên của lớp cửa sổ WNDClass chiếm dụng bộ nhớ của đối tượng menu đã giải phóng. Tìm vị trí có thể ghi dữ liệu trong hàm xxxRedrawWindow, bằng cách kiểm soát dữ liệu bộ nhớ của đối tượng trước để đáp ứng kiểm tra cờ trong hàm.

Numen độc quyền: Lỗ hổng 0day của Microsoft có thể lật đổ hệ thống + mặt vật lý trong trò chơi Web3

Bố trí bộ nhớ ổn định

Thiết kế bố cục bộ nhớ của ba đối tượng HWND 0x250 byte liên tiếp, giải phóng đối tượng ở giữa và sử dụng đối tượng HWNDClass. Các đối tượng HWND phía trước và phía sau được sử dụng để kiểm tra thông qua hàm và thực hiện nguyên thủy đọc/ghi. Định vị chính xác sự sắp xếp của các đối tượng thông qua rò rỉ địa chỉ tay cầm kernel.

Numen độc quyền: Lỗ hổng 0day của Microsoft có thể lật đổ hệ thống + mặt vật lý của trò chơi Web3

thực hiện nguyên thủy đọc và ghi

Để đọc tùy ý, sử dụng hàm GetMenuBarInfo, để ghi tùy ý, sử dụng hàm SetClassLongPtr. Ngoài việc ghi TOKEN, các thao tác ghi khác đều được thực hiện thông qua đối tượng class của đối tượng cửa sổ đầu tiên.

Numen độc quyền: Lỗ hổng 0day của Microsoft có thể lật đổ hệ thống + mặt vật lý của Web3

Kết luận

  1. Microsoft đang sử dụng Rust để tái cấu trúc mã win32k, có thể hoàn toàn giải quyết các lỗ hổng như vậy trong tương lai.

  2. Lợi dụng lỗ hổng này chủ yếu phụ thuộc vào việc rò rỉ địa chỉ tay cầm ngăn xếp trên máy tính để bàn, vẫn tạo ra nguy cơ an ninh đối với các hệ thống cũ.

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

  4. Việc giám sát bố cục bộ nhớ bất thường và việc đọc ghi dữ liệu cửa sổ giúp phát hiện các lỗ hổng tương tự.

Xem bản gốc
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Phần thưởng
  • 6
  • Chia sẻ
Bình luận
0/400
TestnetNomadvip
· 13giờ trước
Bạn đang nói gì về Rust vậy?
Xem bản gốcTrả lời0
StealthDeployervip
· 13giờ trước
Đã sớm chuyển sang sử dụng linux rồi, thông minh.
Xem bản gốcTrả lời0
CryptoMotivatorvip
· 13giờ trước
Lại gây rối, lỗi này của Microsoft thật sự đã rất truyền thống.
Xem bản gốcTrả lời0
LiquidatedDreamsvip
· 13giờ trước
Luôn sử dụng Microsoft thì chỉ có thiệt hại.
Xem bản gốcTrả lời0
MondayYoloFridayCryvip
· 13giờ trước
Tôi là bán lẻ Web3 tệ nhất

Nhận xét về bài viết:

rust có thể cứu win à? Thực sự buồn cười.
Xem bản gốcTrả lời0
CrashHotlinevip
· 13giờ trước
Rác winxp lại gặp vấn đề rồi
Xem bản gốcTrả lời0
  • Ghim
Giao dịch tiền điện tử mọi lúc mọi nơi
qrCode
Quét để tải xuống ứng dụng Gate
Cộng đồng
Tiếng Việt
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)