Rootkit LinkPro Linux

Một vụ xâm nhập gần đây vào môi trường Amazon Web Services (AWS) đã tiết lộ một rootkit GNU/Linux chưa được ghi nhận trước đây, được theo dõi dưới tên LinkPro. Cửa hậu này đáng chú ý vì sử dụng kép các mô-đun eBPF: một bộ để ẩn các hiện vật, và một bộ khác hoạt động như một trình kích hoạt ẩn — một 'cú đánh' đánh thức chức năng lệnh từ xa chỉ sau khi phát hiện một gói TCP được thiết kế đặc biệt. Chuỗi tấn công và cơ chế của rootkit cho thấy một kẻ điều hành tinh vi kết hợp việc lạm dụng container, che giấu ở cấp độ kernel và kích hoạt mạng linh hoạt để ngăn chặn việc phát hiện và đối chiếu pháp y.

Vectơ lây nhiễm và triển khai ban đầu

Cuộc xâm nhập bắt đầu bằng việc khai thác một phiên bản Jenkins bị lộ, dễ bị tấn công bởi lỗ hổng CVE-2024-23897 (CVSS 9.8). Từ đó, kẻ tấn công đã đẩy một hình ảnh Docker độc hại (kvlnt/vv, hiện đã bị xóa khỏi Docker Hub) vào nhiều cụm Kubernetes. Hình ảnh này sử dụng nền tảng Kali Linux và chứa một thư mục ứng dụng nhỏ nhằm thiết lập tính bền vững, truy cập từ xa và tải xuống cửa hậu theo giai đoạn.

Bên trong hình ảnh Docker độc hại

Thư mục ứng dụng của hình ảnh chứa ba tệp chính có vai trò riêng biệt:

start.sh — một tập lệnh shell khởi chạy dịch vụ SSH và thực thi hai thành phần còn lại.

link — một chương trình mã nguồn mở (vnt) được biên dịch/đóng gói để hoạt động như một máy khách VPN/proxy, kết nối ra ngoài đến vnt.wherewego[.]top:29872. Điều này cho phép kẻ tấn công tiếp cận máy chủ bị xâm nhập từ bất kỳ đâu và chuyển hướng sang các mục tiêu khác thông qua máy chủ đó.

ứng dụng — trình tải xuống dựa trên Rust (được gọi là vGet) lấy tải trọng vShell được mã hóa từ thùng S3, sau đó thiết lập liên kết WebSocket tới máy chủ chỉ huy và điều khiển (C2) của nó tại 56.155.98[.]37.

Tải trọng bổ sung được phân phối đến các nút Kubernetes

Bên cạnh hình ảnh độc hại, kẻ tấn công còn cài đặt hai thành phần khác vào các nút: một dropper cài đặt một backdoor vShell khác, và LinkPro, một rootkit được viết bằng Golang. LinkPro được thiết kế để chạy ở một trong hai chế độ — thụ động (ngược) hoặc chủ động (hướng tới) — tùy thuộc vào cấu hình của nó. Ở chế độ thụ động, nó chờ được kích hoạt bởi một gói tin mạng đặc biệt; ở chế độ chủ động, nó bắt đầu kết nối với chính C2. Chế độ hướng tới hỗ trợ năm giao thức truyền tải (HTTP, WebSocket, UDP, TCP, DNS), trong khi chế độ hướng tới giới hạn giao tiếp ở HTTP.

LinkPro tồn tại như thế nào

Quá trình thực thi và hành vi tồn tại chung của phần mềm độc hại tuân theo một trình tự rõ ràng:

  • Cài đặt mô-đun Hide eBPF. Mô-đun này bao gồm các chương trình Tracepoint và Kretprobe eBPF được sử dụng để che giấu các quy trình và hoạt động mạng của LinkPro.
  • Nếu việc cài đặt mô-đun Hide eBPF không thành công — hoặc nếu mô-đun này đã bị vô hiệu hóa — hãy cài đặt thư viện chia sẻ tại /etc/libld.so và thêm đường dẫn đó vào /etc/ld.so.preload như một cơ chế ẩn dự phòng.
  • Để hoạt động ngược (thụ động), hãy cài đặt mô-đun Knock eBPF. Knock chứa một chương trình XDP và một chương trình TC, do đó kênh C2 chỉ hoạt động sau khi nhận được một 'gói ma thuật' cụ thể.
  • Thiết lập tính bền bỉ bằng cách tạo dịch vụ systemd.
  • Thực hiện các lệnh nhận được từ C2.
  • Khi tắt máy hoặc khi được báo hiệu (SIGHUP, SIGINT, SIGTERM), hãy gỡ cài đặt các mô-đun eBPF và xóa/khôi phục sửa đổi tải trước /etc/libld.so để hệ thống trở về trạng thái trước đó.

Gói ma thuật và cơ chế kích hoạt gõ

Việc kích hoạt thụ động của LinkPro phụ thuộc vào một gói tin TCP chính xác: bất kỳ gói tin TCP nào có kích thước cửa sổ bằng 54321 được coi là 'gói tin ma thuật'. Khi Knock phát hiện gói tin đó, nó sẽ lưu trữ IP nguồn và gắn thẻ hết hạn một giờ cho gói tin đó. Các gói tin TCP tiếp theo từ nguồn đó sẽ được giám sát và, khi cần thiết, Knock sẽ ghi đè tiêu đề để lưu lượng của nhà điều hành được chuyển hướng đến cổng lắng nghe của LinkPro (2333). Các gói tin gửi đi được điều chỉnh để hiển thị cổng ban đầu trở lại mạng (cổng nguồn được ghi đè thành 2233). Mục đích rất đơn giản nhưng hiệu quả: cho phép kẻ tấn công truy cập LinkPro thông qua bất kỳ cổng nào mà tường lửa front-end cho phép, đồng thời gây khó khăn cho việc đối chiếu nhật ký tường lửa bên ngoài với hoạt động mạng nội bộ của máy chủ.

LinkPro ẩn mình như thế nào

LinkPro sử dụng chiến lược che giấu hai lớp:

Ẩn Kernel/eBPF : Mô-đun Hide eBPF cài đặt các chương trình Tracepoint và Kretprobe chặn các lệnh gọi hệ thống như getdents (để ẩn tệp/thư mục) và sys_bpf (để ẩn các chương trình BPF của chính nó). Phương pháp này yêu cầu một kernel được xây dựng với CONFIG_BPF_KPROBE_OVERRIDE được bật.

Dự phòng LD_PRELOAD không gian người dùng : Nếu không có khả năng kernel, LinkPro sẽ ghi một thư viện dùng chung (libld.so) và đặt đường dẫn của nó vào /etc/ld.so.preload. Vì /etc/ld.so.preload khiến thư viện được chỉ định được tải vào mọi tiến trình được liên kết động (những tiến trình sử dụng /lib/ld-linux.so và glibc), libld.so được cấy ghép sẽ móc các hàm libc sớm (trước khi glibc thực hiện hành vi riêng) và thay đổi kết quả trả về từ các lệnh gọi libc để ẩn các hiện vật có thể làm lộ sự hiện diện của nó.

Khả năng và bộ lệnh của Rootkit

LinkPro hỗ trợ cả thao tác từ xa tương tác và tự động. Các tính năng được tích hợp bao gồm:

  • Khởi động trình giả lập /bin/bash và chạy các phiên shell tương tác.
  • Thực hiện các lệnh shell tùy ý.
  • Liệt kê các tập tin và thư mục và thực hiện các thao tác với tập tin.
  • Tải xuống và ghi tệp vào đĩa.
  • Thiết lập đường hầm proxy SOCKS5 để chuyển hướng và proxy di động.

Hỗ trợ giao thức mạng và hành vi C2

Ở chế độ chủ động (chuyển tiếp), LinkPro rất linh hoạt: nó có thể giao tiếp bằng HTTP, WebSocket, UDP, TCP hoặc DNS. Ở chế độ thụ động (ngược), giao tiếp của nó bị giới hạn ở HTTP nhưng lại được hưởng lợi từ tính năng ẩn (stealth) vì nó chỉ lắng nghe sau khi gói tin Knock magic mở một cửa sổ lệnh tạm thời trong một giờ.

Hành vi dọn dẹp và gỡ cài đặt

Nếu quy trình nhận được tín hiệu kết thúc, LinkPro sẽ xóa dấu vết: gỡ cài đặt các mô-đun eBPF đã cài đặt và xóa hoặc khôi phục /etc/libld, nhóm nó về trạng thái trước đó để hệ thống trông không thay đổi. Quy trình dọn dẹp có chủ đích này cho thấy người vận hành quan tâm đến việc trốn tránh và giảm thiểu dấu vết pháp y dài hạn.

Bối cảnh hoạt động và sự quy kết

Chiến dịch này sử dụng một lỗ hổng Jenkins nghiêm trọng, các hình ảnh container độc hại, nhiều biến thể cửa hậu và khả năng tàng hình ở cấp độ nhân — một sự kết hợp cho thấy một kẻ tấn công có động cơ và năng lực. Chưa có thông tin xác thực nào được công bố; tuy nhiên, bộ công cụ và việc sử dụng lỗ hổng để ủy quyền và truy cập từ xa liên tục cho thấy rõ ràng đây là hành vi có động cơ tài chính (chuyển hướng, ủy quyền cho các cuộc xâm nhập bổ sung hoặc bán lại quyền truy cập).

Sự phụ thuộc của hạt nhân và hành vi dự phòng

Vì LinkPro dựa vào các tính năng ghi đè BPF kprobe để chặn kernel một cách bí mật, nó chỉ áp dụng kỹ thuật ẩn cấp kernel khi kernel chủ phơi bày CONFIG_BPF_KPROBE_OVERRIDE. Khi khả năng kernel đó bị thiếu, LinkPro cố tình quay lại phương thức thư viện dùng chung LD_PRELOAD để ẩn mình trong không gian người dùng, đảm bảo khả năng ẩn danh trên nhiều môi trường.

Ghi chú kết thúc

LinkPro chứng minh cách các cuộc xâm nhập hiện đại có thể kết hợp việc xâm nhập container, trình tải theo giai đoạn, công cụ đo lường kernel (eBPF) và các thủ thuật mạng thông minh (kích hoạt gói ma thuật và ghi lại cổng) để duy trì tính ẩn danh và tính linh hoạt. Việc phát hiện và khắc phục đòi hỏi phải kiểm tra cẩn thận các chương trình eBPF trái phép, các mục nhập bất ngờ trong /etc/ld.so.preload, các dịch vụ systemd bất thường và các kết nối mạng đến cơ sở hạ tầng được chỉ định (các chỉ số pháp y bao gồm IP 56.155.98[.]37, các cổng 29872, 2333, 2233 và tên ảnh Docker đã xóa kvlnt/vv).

xu hướng

Xem nhiều nhất

Đang tải...