Kho lưu trữ PyPI phân phối phần mềm độc hại WhiteSnake
TỔNG QUAN
PyPI là kho lưu trữ mở gồm các gói phần mềm được cộng đồng Python phát triển nhằm giúp rút ngắn thời gian xây dựng hoặc cập nhật ứng dụng. Mặc dù hầu hết các gói được tải lên PyPI đều được thực hiện bởi những cá nhân tận tâm nhằm hỗ trợ cộng đồng Python, nhưng các tác nhân đe dọa cũng đã lợi dụng kho lưu trữ này để phát tán các gói bị nhiễm phần mềm độc hại.
Các gói chứa phần mềm độc hại được đặt tên là nigpal, figflix, telerer, seGMM, fbdebug, sGMM, myGens, NewGends và TestLibs11, được tải lên bởi một tác nhân đe dọa có tên “WS”. Các gói này kết hợp mã nguồn PE được mã hóa Base64 hoặc các tập lệnh Python khác trong các tệp setup.py của chúng. Tùy thuộc vào hệ điều hành trên thiết bị nạn nhân, payload độc hại cuối cùng sẽ bị loại bỏ và thực thi khi các gói Python này được cài đặt.
Hình 1. Dòng thời gian về các gói độc hại trên kho lưu trữ PyPI của tài khoản WS
Các gói được phát hành trước tháng 12/2023 rất giống với các gói đã từng được Fortinet công bố. Cụ thể, các gói trên PyPI triển khai phần mềm độc hại WhiteSnake PE nếu thiết bị của nạn nhân chạy trên Windows hoặc có thể phân phối tập lệnh Python được thiết kế để đánh cắp thông tin từ các thiết bị Linux. Một điểm khác biệt đặc biệt nằm ở phương pháp mới hiện đang được tập lệnh Python sử dụng để truyền dữ liệu bị đánh cắp. Thay vì dựa vào một URL cố định duy nhất, các biến thể phần mềm độc hại mới này sử dụng nhiều địa chỉ IP làm đích đến, có khả năng đảm bảo truyền dữ liệu thành công ngay cả khi một máy chủ bị lỗi.
GÓI PAYLOAD ĐỘC HẠI
Payload PE của gói sGMM
Không giống như các payload WhiteSnake PE trước đây được phát triển bằng .NET, payload trong các gói độc hại lần này biểu hiện dưới dạng tệp thực thi do Python biên dịch được tạo bằng công cụ PyInstaller. Sau khi kiểm tra nội dung của gói sau khi trích xuất, tệp tập lệnh chính được hiển thị dưới dạng main.pyc với bản sao addresses.py.
Hình 2. Tệp được giải nén
Khi dịch ngược main.pyc, các nhà nghiên cứu nhận thấy rằng mã nguồn có phần chưa được hoàn thiện. Trong Hình 3, tập lệnh bao gồm các hành động sao chép chính nó vào thư mục Startup Windows để tự động chạy khi khởi động. Ngoài ra, tập lệnh này cũng cố gắng sao chép chính nó vào các ổ đĩa vật lý khác.
Hình 3. Dịch ngược tệp main.pyc
Cuối cùng, tập lệnh truy xuất nội dung trong clipboard và so sánh chúng với các mẫu địa chỉ tiền điện tử được xác định trước. Việc phát hiện ra các mẫu trùng khớp sẽ nhắc tập lệnh ghi đè lên clipboard bằng các địa chỉ tương ứng có nguồn gốc từ tệp addresses.py. Điều này có thể đánh lừa những nạn nhân không nghi ngờ hướng những thứ như giao dịch tiền điện tử đến một điểm đến không mong muốn.
Hình 4. Tệp addresses.py
Payload PE của các gói myGens và NewGends
Payload này là một tệp thực thi .NET được mã hóa. Sau khi được cài đặt trên thiết bị của người dùng, payload sẽ khởi chạy một cửa sổ vô hình cmd.exe. Sau đó, sử dụng tiến trình powershell.exe thông qua cửa sổ này để thêm chính nó vào danh sách loại trừ của Windows Defender để vượt qua kiểm tra bảo mật.
Hình 5. Payload thêm vào danh sách loại trừ của Windows Defender
Payload này tự sao chép vào thư mục Windows Application và tạo một tác vụ theo lịch trình để tự động chạy mỗi giờ sau khi thiết bị bị nhiễm:
- %LOCALAPPDATA%\Gói\Microsoft.Windows.Accounts.ControlRCP_ruzxpnew4af.
- HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Schedule\TaskCache\Tasks\{070B9798-7C59-4A69-BB25-F353628999B0}\Path|\MicrosoftWindowsControlRCP.
Hình 6. Payload xác nhận việc sao chép chính nó và lập lịch tác vụ
Mỗi khi thực thi tác vụ, payload sẽ thiết lập kết nối đến IP độc hại tại địa chỉ: 194[.]36[.]177[.]30, sử dụng socket.io để kết nối máy chủ với máy khách. Bằng cách này, nếu mất kết nối, nó sẽ tự động thử kết nối lại.
Hình 7. Giải mã “socket.io” và IP
Chức năng chính của payload này là cố gắng thu thập thông tin người dùng, chẳng hạn như địa chỉ IP, thông tin đăng nhập máy chủ,…
Hình 8. Thu thập thông tin người dùng
Hình 9, 10 và 11 dưới đây thể hiện rõ hơn về khả năng đánh cắp thông tin của payload. Các nhà nghiên cứu tiết lộ rằng payload không chỉ ghi lại các tương tác chuột và bàn phím mà còn thu thập và truyền dữ liệu ví điện tử cũng trình duyệt đến máy chủ từ xa do tin tặc kiểm soát.
Hình 9. Danh sách thuộc tính của chức năng đánh cắp thông tin
Hình 10. Đoạn mã hiển thị việc thu thập ví điện tử
Hình 11. Chức năng hiển thị đánh cắp thông tin trên trình duyệt
Payload PE của gói TestLibs111
Khi thử nghiệm với gói TestLibs111, các nhà nghiên cứu có thể quan sát dữ liệu được gửi đến một địa chỉ IP đáng ngờ (194[.]36[.]177[.]30), như trong Hình 12. Qua phân tích, các nhà nghiên cứu nhận thấy đây là một tệp .zip được bảo vệ trong nhiều lớp mã hóa. Điều này làm dấy lên mối lo ngại nghiêm trọng về hành vi của nó.
Hình 12. Lưu lượng gửi đến địa chỉ IP 194[.]36[.]177[.]30
Khi giải mã, các nhà nghiên cứu xác định “PK” là byte ban đầu, biểu thị định dạng tệp .zip.
Hình 13. Trích xuất định dạng hex của tệp .zip
Sau khi gỡ lỗi, có một số dấu hiệu cho thấy những thông tin nào được các tác nhân đe dọa thu thập. Hình 14 thể hiện một số chuỗi mã ASCII có thể cho thấy hoạt động đánh cắp thông tin từ các dịch vụ khác nhau, chẳng hạn như trình duyệt, ứng dụng và dịch vụ tiền điện tử, bao gồm Chrome, Discord, Filezilla và Coinbase.
Hình 14. Các chuỗi tìm thấy trong mã hợp ngữ
Khi giải nén tệp .zip, có thể thấy một số nội dung được thu thập (Hình 15). Sau đó, các thông tin này sẽ được lọc và gửi đến máy chủ.
Hình 15. Nội dung giải nén
KẾT LUẬN
Không giống như các cuộc tấn công trước đó nhắm vào cả người dùng Windows và Linux, các gói độc hại trên kho lưu trữ PyPI tập trung chủ yếu vào người dùng Windows. Mặc dù payload thực thi của mỗi gói có đôi chút khác nhau nhưng chúng luôn nhằm mục đích chung là đánh cắp thông tin nhạy cảm từ nạn nhân.
Đáng chú ý, một số gói giả mạo mới được phát hiện cũng được quan sát thấy kết hợp chức năng clipper để ghi đè nội dung clipboard bằng địa chỉ ví do kẻ tấn công kiểm soát để thực hiện các giao dịch trái phép. Một số khác đã được cấu hình để đánh cắp dữ liệu từ trình duyệt, ứng dụng và dịch vụ tiền điện tử.
Thành Vinh
(Tổng hợp)