Tấn công mạng sử dụng AI: Cách phát hiện, ngăn chặn và phòng thủ trước các mối đe dọa thông minh

Đọc ngay
Chúng tôi sử dụng trí tuệ nhân tạo để dịch trang web và trong khi chúng tôi cố gắng đạt được độ chính xác, chúng có thể không phải lúc nào cũng chính xác 100%. Sự hiểu biết của bạn được đánh giá cao.

Khắc phục lỗ hổng CVE-2024-0517 trong Google Chrome

Được cung cấp bởi MetaDefender Endpoint
bằng cách OPSWAT
Chia sẻ bài viết này
Ảnh của OPSWAT những người tham gia chương trình học bổng, Hoài Nam Đỗ và Minh Quân Lê
OPSWAT Người tham gia chương trình học bổng

Về CVE-2024-0517

CVE-2024-0517 là lỗ hổng ghi ngoài giới hạn trong công cụ JavaScript V8 của Google Chrome trước phiên bản 120.0.6099.224, cho phép kẻ tấn công từ xa khai thác lỗi heap thông qua trang HTML được tạo thủ công. Lỗ hổng này lần đầu tiên được báo cáo bởi Toan (Suto) Pham của Qrious Secure . 

Ảnh chụp màn hình hiển thị điểm cơ sở mức độ nghiêm trọng của CVSS 3.x là 8,8 (Cao) với mô tả vectơ chi tiết từ NVD
CVE-2024-0517 trên Cơ sở dữ liệu lỗ hổng quốc gia (NVD)

Lỗ hổng này phát sinh từ sự nhầm lẫn kiểu, xảy ra khi một ứng dụng phân bổ hoặc khởi tạo một tài nguyên như con trỏ, đối tượng hoặc biến bằng một kiểu, nhưng sau đó truy cập tài nguyên đó bằng một kiểu không tương thích với kiểu ban đầu (CWE-843) . Trong CVE này, sự nhầm lẫn kiểu được kích hoạt trong quá trình phân bổ bộ nhớ được gọi là phân bổ gấp, được Maglev, một trình biên dịch tối ưu hóa cho công cụ JavaScript V8, sử dụng để tối ưu hóa bộ nhớ. 

Bằng cách khai thác lỗi nhầm lẫn kiểu và viết mã shell tùy ý bằng WebAssembly, kẻ tấn công có thể thực thi các lệnh trên máy của nạn nhân. 

Các giai đoạn tấn công

Kẻ tấn công có thể lưu trữ một trang web chứa trang HTML được tạo thủ công và lừa người dùng truy cập trang web đó thông qua email lừa đảo hoặc mạng xã hội. Khi người dùng truy cập trang web bằng phiên bản Google Chrome dễ bị tấn công, mã độc được nhúng sẽ thực thi các lệnh tùy ý. 

Sơ đồ cho thấy quy trình bốn bước để khai thác lỗ hổng bằng cách sử dụng email lừa đảo có tệp HTML độc hại dẫn đến thực thi mã từ xa
Chiến dịch tấn công từng bước 

Công cụ JavaScript V8 

Kẻ tấn công có thể lưu trữ một trang web chứa trang HTML được tạo thủ công và lừa người dùng truy cập trang web đó thông qua email lừa đảo hoặc mạng xã hội. Khi người dùng truy cập trang web bằng phiên bản Google Chrome dễ bị tấn công, mã độc được nhúng sẽ thực thi các lệnh tùy ý. 

Maglev và Phân bổ gấp

Maglev, trình biên dịch tối ưu hóa trong V8, tăng cường thực thi mã và phân bổ bộ nhớ. Maglev chỉ chạy khi mã được thực thi thường xuyên và được đánh dấu là "nóng", cho biết nhu cầu thực thi nhanh hơn thông qua biên dịch thay vì diễn giải từng dòng chậm hơn. 

Thông thường, việc phân bổ xảy ra ở các vùng bộ nhớ không liền kề, dẫn đến việc sử dụng bộ nhớ thưa thớt và không hiệu quả. Để giải quyết vấn đề này, V8 sử dụng một kỹ thuật gọi là phân bổ gấp, phân bổ nhiều biến liên tục và đồng thời. Maglev cũng tối ưu hóa việc phân bổ bằng cách sử dụng phân bổ gấp trong quá trình thực hiện. 

Biểu đồ hiển thị các biểu diễn được mã hóa màu của các phân bổ thư mục có và không có thư mục được chỉ định
Malev & phân bổ thư mục

Thu gom rác thải thế hệ 

Để dọn dẹp các vùng bộ nhớ chưa sử dụng, V8 sử dụng kỹ thuật thu gom rác theo thế hệ (GC), chia bộ nhớ thành hai không gian: thế hệ trẻ và thế hệ cũ. Ngoài ra, có hai trình thu gom rác: trình thu gom rác phụ, có trách nhiệm dọn dẹp không gian trẻ và trình thu gom rác chính, xử lý việc dọn dẹp không gian cũ. Thế hệ trẻ là vùng bộ nhớ nơi các đối tượng mới được tạo ban đầu được phân bổ và thế hệ cũ là vùng bộ nhớ nơi các đối tượng tồn tại lâu dài được lưu trữ. Các đối tượng đã tồn tại qua nhiều chu kỳ GC phụ trong thế hệ trẻ cuối cùng sẽ được thăng cấp lên thế hệ cũ. 

Sơ đồ cho thấy quá trình phân bổ đối tượng trong các thế hệ bộ nhớ trẻ, trung gian và cũ trong quá trình thu gom rác (GC)
Không gian ký ức: thế hệ trẻ và thế hệ già

Phân tích lỗ hổng bảo mật

Tổng quan

Lỗ hổng này phát sinh khi một đối tượng được tạo từ một lớp kế thừa từ một lớp cơ sở mà không có hàm tạo được xác định rõ ràng (hàm tạo mặc định cơ sở) và một đối tượng khác được tạo sau đó. Do phân bổ gấp, việc phân bổ đối tượng đầu tiên có thể được theo sau bởi việc phân bổ đối tượng thứ hai. Nếu một sự kiện như thu gom rác xảy ra giữa hai lần phân bổ này, lỗ hổng nhầm lẫn kiểu có thể phát sinh.

Phân tích nguyên nhân gốc rễ 

OPSWAT Các nghiên cứu sinh đã tiến hành phân tích chi tiết quy trình làm việc V8 trong quá trình phân bổ và xác định rằng các chức năng sau đây được gọi trong quá trình này: 

Sơ đồ minh họa quy trình làm việc của V8 trong quá trình phân bổ đối tượng, từ tìm kiếm hàm tạo đến mở rộng phân bổ thô
Quy trình làm việc V8 trong quá trình phân bổ 

Trong quy trình này, một sự cố đã được xác định trong hàm TryBuildFindNonDefaultConstructorOrConstruct: Hàm BuildAllocateFastObject mở rộng current_raw_allocation_ (một con trỏ đến vùng bộ nhớ được phân bổ cho nhiều biến cùng lúc) để xây dựng thể hiện lớp con, nhưng không xóa được thể hiện này bằng cách đặt thành null. 

Kết quả là, đối tượng tiếp theo được tạo luôn được phân bổ ngay sau bộ nhớ được trỏ tới bởi current_raw_allocation_, bất kể bất kỳ sự kiện nào xảy ra trước lần phân bổ thứ hai. 

Sơ đồ hiển thị quá trình tạo đối tượng mới trong bộ nhớ, di chuyển từ "phân bổ thô hiện tại" sang "đối tượng tiếp theo"
'current_raw_allocation' và 'Đối tượng tiếp theo' trong vùng bộ nhớ

Nếu GC được gọi, vùng bộ nhớ bên cạnh vùng bộ nhớ liền kề với current_raw_allocation_ có thể được gán cho các đối tượng khác. Điều này có thể dẫn đến tình huống sau khi GC được kích hoạt và một đối tượng khác được tạo, hai con trỏ tham chiếu đến cùng một vùng bộ nhớ nhưng có các kiểu dữ liệu khác nhau, dẫn đến lỗ hổng nhầm lẫn kiểu.

Sơ đồ hiển thị quy trình lỗ hổng nhầm lẫn kiểu, minh họa trình kích hoạt thu gom rác và phân bổ đối tượng dẫn đến các vấn đề tiềm ẩn
Lỗ hổng nhầm lẫn loại 

Khai thác

Để khai thác lỗ hổng này, OPSWAT Các nghiên cứu sinh đã tạo ra các phiên bản WebAssembly chứa shellcode và cố gắng kích hoạt nhầm lẫn kiểu bằng GC để kiểm soát bộ nhớ và thực thi shellcode: 

Sơ đồ từng bước về cách kích hoạt thực thi mã từ xa thông qua nhầm lẫn kiểu trong công cụ V8, từ kích hoạt nhầm lẫn kiểu đến thực thi shellcode
Các bước để kích hoạt Thực thi mã từ xa trong V8 Engine 

Sự nhầm lẫn về loại kích hoạt

Trong quá trình khởi tạo, trước tiên chúng ta định nghĩa một mảng (_arrayObject) chứa các đối tượng rỗng. Tiếp theo, chúng ta xây dựng một thể hiện của lớp con cũng như một trình thu gom rác kích hoạt. Cuối cùng, chúng ta định nghĩa một mảng khác với số dấu phẩy động, có tên là _arrayDouble. 

Một đoạn mã minh họa một hàm kích hoạt thu gom rác trong JavaScript, tạo ra một bộ đệm mảng

Những cấu trúc này phải được lặp lại để mã được thực thi nhiều lần, khiến V8 đánh dấu nó là "hot" và kích hoạt trình biên dịch Maglev. Chúng ta đạt được điều này bằng cách gọi hàm tạo của lớp con trong một vòng lặp như sau: 

Một đoạn mã JavaScript ngắn minh họa một vòng lặp tạo ra nhiều phiên bản của một lớp con

Sự nhầm lẫn về kiểu sẽ xảy ra sau khi khởi tạo các đối tượng này nhiều lần trong một vòng lặp.

Tạo các lệnh đọc và ghi nguyên thủy

Sau khi kích hoạt nhầm lẫn kiểu thành công, việc thực thi shellcode đòi hỏi phải đọc bộ nhớ và ghi đè bộ nhớ tại một địa chỉ được kiểm soát. Để thực hiện việc này, chúng tôi đã tạo các nguyên hàm đọc và ghi. Các nguyên hàm khai thác sẽ tận dụng siêu dữ liệu trong các đối tượng để cung cấp cho chúng tôi các vùng bộ nhớ đọc/ghi tùy ý và sử dụng vùng đó để chạy mã tùy ý. 

Biểu diễn trực quan của nguyên thủy đọc và ghi, hiển thị các vùng bộ nhớ và giá trị đang được ghi đè
Đọc và ghi nguyên thủy 

Đọc và ghi các nguyên hàm trong bước này sẽ cho phép chúng ta kiểm soát con trỏ bảng Jump của phiên bản WebAssembly ở bước tiếp theo. 

Tạo các phiên bản WebAssembly

Tiếp theo, chúng tôi tạo hai phiên bản WebAssembly: một để lưu trữ shellcode và một để kích hoạt shellcode. Để tránh ghi trực tiếp shellcode vào bộ nhớ của phiên bản WebAssembly thông qua các nguyên hàm đọc và ghi, chúng tôi định nghĩa một số giá trị hằng số dấu phẩy động trong phiên bản WebAssembly. 

Một đoạn mã được viết bằng WebAssembly minh họa chức năng truy cập bộ nhớ và lưu trữ

Kiểm soát con trỏ bảng nhảy của phiên bản WebAssembly

Sử dụng các nguyên hàm đọc và ghi; chúng tôi điều chỉnh con trỏ bảng nhảy của phiên bản WebAssembly thứ hai để bỏ qua một số byte của mã đã biên dịch của các hằng số trong phiên bản WebAssembly đầu tiên để các hằng số dấu phẩy động sẽ được diễn giải thành shellcode theo ý định của chúng tôi:

Đoạn mã lắp ráp hiển thị hướng dẫn di chuyển dữ liệu đến các thanh ghi

Chạy WebAssembly Instance để thực thi Shellcode 

Cuối cùng, sau khi kích hoạt nhầm lẫn kiểu và sử dụng các nguyên hàm đọc/ghi để kiểm soát các con trỏ bảng nhảy của các thể hiện WebAssembly, chúng tôi đã gọi hàm được xuất của thể hiện WebAssembly thứ hai, hàm này khiến cho shellcode trong thể hiện WebAssembly đầu tiên được thực thi. 

Mã lệnh shellcode mà chúng tôi đang sử dụng được thiết kế để chấm dứt mọi tiến trình trên máy Linux, bằng lệnh sau: 

Một đoạn lệnh đầu cuối đơn giản với lệnh 'kill' để chấm dứt các tiến trình

Mã lệnh để thực thi lệnh này, được chuyển đổi từ số dấu phẩy động, sẽ như sau: 

Một đoạn mã lắp ráp cho một cuộc gọi hệ thống kết thúc một tiến trình bằng lệnh 'kill'

Mô phỏng lỗ hổng bảo mật 

Để mô phỏng việc khai thác này trong một kịch bản thực tế, OPSWAT Các nghiên cứu sinh đã tạo ra một trang HTML có chủ đích. 

Một đoạn mã WebAssembly được thiết kế để thực thi shellcode bằng cách truy cập bộ nhớ và thao tác dữ liệu

Một email lừa đảo có nhúng liên kết đến tên miền lưu trữ trang HTML được tạo thủ công này sẽ được gửi đến nạn nhân. 

Ảnh chụp màn hình hiển thị email lừa đảo cùng với công cụ giám sát hệ thống, minh họa quá trình thực hiện tấn công

Nếu nạn nhân truy cập liên kết bằng phiên bản Google Chrome dễ bị tấn công, shellcode sẽ được thực thi, khiến tất cả các quy trình bị chấm dứt. Kết quả là người dùng sẽ bị đăng xuất, như được hiển thị bên dưới: 

Ảnh chụp màn hình đăng nhập cho Kali Linux

Khắc phục

MetaDefender Endpoint™ đã được sử dụng để chủ động giảm thiểu CVE này bằng cách tận dụng khả năng "Ứng dụng dễ bị tấn công" của nó. Giải pháp này xác định và hiển thị hiệu quả tất cả các CVE liên quan cho các ứng dụng Google Chrome trong môi trường điểm cuối. Để vô hiệu hóa mối đe dọa, người dùng có thể nhanh chóng gỡ cài đặt Chrome hoặc áp dụng bản vá bảo mật mới nhất. Bằng cách triển khai bất kỳ biện pháp đối phó nào, CVE sẽ được chứa hoàn toàn, giúp giảm đáng kể nguy cơ tấn công mạng thành công vào điểm cuối.

MetaDefender Endpoint giao diện hiển thị các lỗ hổng của Google Chrome, bao gồm thông tin chi tiết về CVE

Cấp độ tiếp theo Endpoint Bảo vệ 

Khám phá lý do tại sao các tổ chức, cơ quan và thực thể trên toàn thế giới tin tưởng MetaDefender Endpoint để bảo vệ các điểm cuối quan trọng. Hãy trao đổi với chuyên gia ngay hôm nay để tìm hiểu thêm và tự mình xem qua bản demo miễn phí.  


Luôn cập nhật với OPSWAT!

Đăng ký ngay hôm nay để nhận thông tin cập nhật mới nhất về công ty, câu chuyện, thông tin sự kiện và nhiều thông tin khác.