CVE-2024-3400 (Bản-tiếng-Việt)
Ref: Unit. (2024, April 12). Threat Brief: Operation MidnightEclipse, Post-Exploitation activity related to CVE-2024-3400 (Updated). Unit 42. https://unit42.paloaltonetworks.com/cve-2024-3400/
Tóm tắt quá trình viết: Ngay khi PAN công bố CVE cùng với các nhà cung cấp thông tin bảo mật thông tin khác như TheHackerNews, tôi đã thực sự quan tâm và cố gắng tìm hiểu những gì có thể về CVE này nhưng chỉ được thông báo về nó, phương pháp khắc phục sự cố và các thao tác nhanh cơ bản mà nhà cung cấp hướng dẫn. Vào ngày 17 tháng 4 năm 2024, tôi nhận được bản tin từ Unit42 và mẫu từ MalwareBazaar.
Đầu tiên, update.py
ghi vào đường dẫn /site-packages/system.pth
bằng tập lệnh được mã hóa Base64. Thư mục site-packages trong Python là nơi cài đặt các gói Python được xây dựng thủ công. Khi bạn xây dựng và cài đặt các gói Python từ nguồn (sử dụng distutils
, thường bằng cách thực thi python setup.py
), các mô-đun đã cài đặt sẽ được đặt trong thư mục site-packages theo mặc định.
Dưới đây là quá trình giải mã Base64 bằng CyberChef.
Tập lệnh python nhúng này có hai chức năng chính: protect
và check
. Chức năng protect
này đảm bảo rằng nếu tệp system.pth
bị xóa hoặc sửa đổi, nó sẽ được khôi phục về trạng thái ban đầu khi nhận được tín hiệu SIGTERM
, có thể là một cơ chế persistence.
Hàm check()
đọc tệp /proc/self/cmdline
để xác định xem quy trình hiện tại có đang chạy với monitor mp
hay không. Nếu điều kiện này được đáp ứng, nó sẽ thực thi một tập lệnh Python khác được nhúng trong mã hóa Base64, có khả năng hoạt động như một cửa hậu chức năng. Lệnh monitor mp
cung cấp ảnh chụp nhanh về việc sử dụng tài nguyên của MP (Management Plane), bao gồm cả việc sử dụng bộ nhớ và CPU, tương tự như lệnh top
trong Linux.
Sau món khai vị là món chính, nơi mà công việc thực sự của cửa hậu này thực hiện:
- Đọc thông tin tệp CSS: Nó đọc nội dung của tệp CSS có tại
/var/appweb/sslvpndocs/global-protect/portal/css/bootstrap.min.css
. Ngoài ra, nó truy xuất thời gian truy cập và sửa đổi của tệp CSS bằng cách sử dụng các hàmos.path.getatime()
vàos.path.getmtime()
. - Vòng lặp không xác định: Trong vòng lặp không xác định, hàm này liên tục kiểm tra tệp nhật ký có tại
/var/log/pan/sslvpn_ngx_error.log
. Nó tìm kiếm từng dòng của tệp nhật ký để tìm một mẫu cụ thể bằng cách sử dụng biểu thức chính quy regex ("img\[([a-zA-Z0-9+/=]+)\]"
). Sau khi tìm thấy kết quả khớp, nó sẽ tiến hành thực thi lệnh được trích xuất từ chuỗi khớp, được giải mã base64. Nếu thành công, đầu ra của lệnh sẽ được thêm vào tệp CSS.
Chức năng khôi phục: luồng mới sẽ được khởi động bằng tập lệnh để thực hiện chức năng restore
. Hàm này cung cấp nội dung gốc của tệp bootstrap.min.css
, cũng như dấu thời gian cho lần truy cập và cập nhật ban đầu của nó. Sau đó, hàm này sẽ tạm dừng trong 15 giây trước khi đặt lại dấu thời gian truy cập và sửa đổi về giá trị ban đầu và thêm lại nội dung gốc của tệp. Mục tiêu của chiến lược này là giữ cho đầu ra lệnh không thể truy cập được để phân tích. Ngoài ra, sự hiện diện của 15 giây cho thấy kẻ tấn công đã tự động hóa phía máy khách của cửa sau này, chỉ cho người dùng một khoảng thời gian ngắn để xem kết quả trước khi tệp được thay đổi.
Để biết chi tiết về IOC và các thông tin chi tiết khác, vui lòng đọc bài đăng của Unit42. Ở đây tôi chỉ trình bày quá trình giám sát và phân tích cá nhân của mình và IOC là thứ tôi không có, đặc biệt cảm ơn những người bạn MalwareBazaar và Unit42 đã cung cấp IOC cho tôi và cộng đồng bảo mật thông tin.