Một bộ công cụ Linux chưa từng được ghi nhận trước đây đã được tìm thấy khi được biên dịch trực tiếp vào các bộ cân bằng tải HAProxy bị Trojan hóa của hai tổ chức tại Hàn Quốc. Tại đây, nó đã đánh chặn lưu lượng web và cung cấp các trang web đã bị thay đổi cho những khách truy cập được chọn lọc.
Các kẻ tấn công đã đặt tên cho bản cấy này là ted trong các chuỗi debug còn sót lại trong tệp nhị phân. Đây không phải là một lỗ hổng của HAProxy, và việc cài đặt nó yêu cầu quyền thực thi mã trên máy chủ cũng như khả năng thay thế tệp nhị phân đang chạy.
Rapid7 Labs đã gán bộ công cụ này cho các tác nhân đe dọa được nhà nước Triều Tiên bảo trợ với độ tin cậy trung bình, và xác định hai nạn nhân nằm trong lĩnh vực ô tô và truyền thông của Hàn Quốc.
Các yêu cầu Command-and-control (C2) không bao giờ tiếp cận được máy chủ backend và bị xóa khỏi các bộ đếm kết nối của chính HAProxy, do đó cả nhật ký backend lẫn số liệu thống kê của bộ cân bằng tải đều không ghi lại chúng.
"Cần thêm bằng chứng để đưa ra đánh giá chắc chắn hơn," Rapid7 cho biết.
Cơ chế hoạt động của Ted Backdoor
Theo một báo cáo được công bố vào thứ Sáu, một yêu cầu cho một đường dẫn hình ảnh cụ thể sẽ đưa bộ lọc vào chế độ C2. Bản cấy sẽ giảm bộ đếm kết nối trực tiếp của HAProxy, từ đó loại bỏ kết nối khỏi các số liệu thống kê. Nó ghi nội dung lệnh vào một named pipe dưới thư mục /tmp. Việc xóa kênh yêu cầu sau đó sẽ không để lại gì để chuyển tiếp, và lệnh kết thúc tại bộ cân bằng tải.
Kết quả trả về trên raw socket dưới tiêu chuẩn HTTP/1.0 200 OK header, giúp quá trình trao đổi trông giống như lưu lượng web thông thường.
Thông qua kênh đó, kẻ điều hành có thể gửi beacon, tải lên và tải xuống các tệp, chạy các lệnh shell và thay thế cấu hình của bản cấy. Chỉ những yêu cầu vượt qua bốn bước kiểm tra mới nhận được trang web đã bị sửa đổi.
Yêu cầu phải mang theo User-Agent và khớp với một quy tắc mà cả mẫu URL và referer đều phù hợp. Việc phân phối sau đó phụ thuộc vào việc địa chỉ khách có nằm trong whitelist hay không (được kiểm tra chính xác và ở cấp độ /24), hoặc một khóa điều hành trong header Accept-Language có thể ghi đè hoàn toàn bộ lọc địa chỉ.
Bản cấy sẽ ghi lại nội dung (content type) và độ dài (length) khi gửi ra, ép trạng thái phản hồi thành 200 và xóa tiêu đề Accept-Ranges để khách hàng không thể yêu cầu các dải byte và nhận thấy sự thay đổi kích thước.
Nguồn gốc và Các thành phần khác của bộ công cụ
Rapid7 cho biết bằng chứng của họ chưa đủ để thiết lập một mốc thời gian hoặc xác định cách thức kẻ tấn công xâm nhập lần đầu.
Giả thuyết cho rằng chúng xâm nhập thông qua một cổng Groupware (một loại phần mềm cộng tác doanh nghiệp của Hàn Quốc) dựa trên nghiên cứu của ENKI. Báo cáo đó đã ghi lại việc Kimsuky xâm nhập một nhà cung cấp groupware thông qua lỗi máy chủ thư.
Trình stager chỉ triển khai ở những nơi HAProxy hoặc cron đã chạy, và nó xác minh quyền Root trước khi thực hiện bất cứ điều gì. Nó ghi đè lên tệp nhị phân crond hợp lệ và gán cho tệp thay thế mốc thời gian tạo của /usr/bin/ssh. Sau đó, nó xóa các từ khóa tmp, wget, cron và crond khỏi lịch sử bash của Root và từ sáu nhật ký hệ thống, bao gồm auth.log và audit/audit.log.
Một sshd bị Trojan hóa trong cùng bộ công cụ sẽ mã hóa các mật khẩu dạng văn bản thuần túy (plaintext) thu được và ghi chúng vào một đường dẫn cố định.
Rapid7 cũng tìm thấy mã tương tự trong các tệp nhị phân agetty, atd và polkitd bị Trojan hóa. Một Trojan truy cập từ xa (RAT) đồng hành mà Rapid7 gọi là curlRAT sẽ gửi beacon mỗi 12 giờ theo mặc định và giảm xuống khoảng thời gian 30 giây khi kẻ điều hành thiết lập một cờ (flag). Nó sẽ tự hủy trừ khi tìm thấy một tệp đánh dấu cho thấy máy chủ đã được ảo hóa.
curlRAT khác biệt với CurlBack RAT, một dòng mã độc khác thuộc nhóm SideCopy có liên quan đến Pakistan.
Các chỉ số thỏa hiệp (IoCs)
- Domain - img.monderhouse[.]space
- Domain - img.smartnords[.]site
- Domain - img.darklights[.]store
- Domain - img.responsive.pstatic[.]autos
- Domain - img.socialteams[.]store
- Domain - img.worksongo[.]store
- File - ~/cache/haproxy-1000.cache
- File - /var/lib/sshd/c8c68e629bba773a10ac80012d10bf19
- File - /var/lib/snapd/g580
- File - /tmp/jasper-log
- SHA-256 - 72e70936f0dbe459142a1d867617c35f8d0cce5d18c6a49e1090a2a5adc8e558
- SHA-256 - 4bb923eb040aa13ca8fd409c31ee4729c60ddff32e350efe1c5a4a9168a065f5
Phân tích và Khuyến nghị
Việc gán trách nhiệm dựa trên danh sách các tên miền thuộc APT37 trong dự án maltrail. Cả sáu tên miền đều được gắn nhãn là cơ sở hạ tầng của APT37.
Phần gán trách nhiệm thu hút sự chú ý từ ba nhóm Triều Tiên riêng biệt: APT37 cho danh sách tên miền, Lazarus cho mô hình phân phối và Kimsuky cho giả thuyết truy cập ban đầu.
"Chúng tôi tin rằng điều này sẽ khiến việc xác định chính xác kẻ tấn công trở nên khó khăn hơn," Mandiant cho biết vào năm 2023.
Cả hai nạn nhân đều chạy HAProxy 2.8.12, được phát hành vào ngày 8 tháng 11 năm 2024. Bản cấy đọc các cấu trúc nội bộ của HAProxy tại các khoảng chênh lệch (offset) cố định cho phiên bản đó.
Việc nâng cấp không làm sạch máy chủ nếu bản cấy đã tồn tại, vì kẻ tấn công thay thế tệp nhị phân thay vì khai thác lỗ hổng trong đó. Rapid7 khuyến nghị tương quan mạng độc lập, phân tích hành vi bộ nhớ và kiểm tra tính toàn vẹn của tệp nhị phân.