Sổ tay kỹ thuật

Nghi máy Linux bị xâm nhập – checklist phản ứng ban đầu

troubleshooting#linux#incident-response#security· cập nhật 2026-11-06

Dùng trong giờ đầu khi nghi một server Linux bị xâm nhập, để cô lập, giữ bằng chứng và kiểm tra user, cron, process, network trước khi dọn dẹp.

Sửa trang này
Mục lục

Triệu chứng chính: CPU cao bất thường (thường là coin miner), process/user lạ, kết nối ra ngoài tới IP lạ, file trong /tmp hoặc /dev/shm có quyền chạy, authorized_keys có key không rõ nguồn gốc, cảnh báo từ IDS/cloud provider, log bị xoá ngắt quãng.

Thứ tự ưu tiên: cô lập → thu thập bằng chứng → phân tích → khôi phục. Không reboot, không xoá file độc, không kill ngay: mất bằng chứng trong RAM và attacker có thể có cơ chế phá huỷ. Báo cho người phụ trách bảo mật trước khi hành động lớn. Máy đã bị chiếm root thì cài lại từ image sạch, không "dọn dẹp" rồi dùng tiếp.

Lỗi thường gặp

Triệu chứng Nguyên nhân Cách xử lý
Tắt máy/reboot ngay khi phát hiện Phản xạ "dập lửa" Mất bằng chứng RAM, process, kết nối. Cô lập mạng trước, thu thập rồi mới tắt
Chạy lệnh trên máy bị chiếm và tin kết quả ps, ls, netstat có thể bị thay (rootkit, LD_PRELOAD) Đối chiếu với góc nhìn bên ngoài: flow log, firewall, snapshot disk mount trên máy sạch
Ghi output thu thập vào chính disk nghi nhiễm Ghi đè dữ liệu đã xoá, attacker sửa được Ghi ra máy khác qua SSH pipe hoặc USB/volume riêng
Đổi mật khẩu từ chính máy bị chiếm Keylogger/agent hijack lấy luôn mật khẩu mới Đổi credential từ máy sạch; xoay vòng mọi secret máy đó từng có
Chỉ xoá file miner, máy "chạy lại bình thường" Persistence còn (cron, systemd, key SSH) Tìm toàn bộ persistence; tốt nhất rebuild
Không biết mốc thời gian Không có log tập trung Đối chiếu log tập trung (xem audit logging), log cloud

Các bước khoanh vùng

1. Cô lập

  • Cloud: đổi security group thành chỉ cho IP quản trị vào SSH, chặn mọi egress; tạo snapshot disk ngay.
  • On-prem: chặn ở switch/firewall phía trên (ACL, shutdown port, VLAN cách ly) thay vì chạy lệnh trên chính máy.
  • Thu hồi credential máy đó dùng: API token, SSH key deploy, credential Vault (Vault), kubeconfig.

2. Thu thập (dữ liệu dễ mất trước)

Ghi lại thời gian, người thao tác, từng lệnh đã chạy. Chuyển output ra ngoài:

# Từ máy quản trị: chạy lệnh trên host nghi nhiễm, lưu kết quả tại máy quản trị
H=ops@203.0.113.40; OUT=ir-$(date +%Y%m%dT%H%M); mkdir -p "$OUT"
ssh "$H" 'date -u; uptime; who -a; last -Faiw | head -50'        > "$OUT/time-users.txt"
ssh "$H" 'sudo ps auxwwf; sudo ls -l /proc/*/exe 2>/dev/null'    > "$OUT/process.txt"
ssh "$H" 'sudo ss -tunap; ip addr; ip route; ip neigh'            > "$OUT/network.txt"
ssh "$H" 'sudo lsof -nP 2>/dev/null'                              > "$OUT/lsof.txt"
ssh "$H" 'sudo journalctl --since "-7d" -o short-iso --no-pager'  > "$OUT/journal.txt"
ssh "$H" 'sudo tar czf - /var/log /etc /root/.ssh /home/*/.ssh /tmp /var/tmp /dev/shm 2>/dev/null' > "$OUT/files.tgz"
sha256sum "$OUT"/* > "$OUT/SHA256SUMS"

Bản RAM đầy đủ cần công cụ chuyên dụng (LiME, AVML) và nên do đội forensics làm.

3. Kiểm tra từng nơi hay bị lợi dụng

Khu vực Kiểm tra
User /etc/passwd có UID 0 khác root, user mới, shell lạ; /etc/sudoers, /etc/sudoers.d/
SSH Mọi authorized_keys (root và user), AuthorizedKeysFile trong sshd_config, key lạ
Cron/timer /etc/crontab, /etc/cron.*, /var/spool/cron/, systemctl list-timers --all
Service Unit mới trong /etc/systemd/system/, ~/.config/systemd/user/, /etc/rc.local
Process Process chạy từ /tmp, /dev/shm, binary đã bị xoá ((deleted) trong /proc/*/exe), tên giả [kworker] mà không phải kernel thread
Network Kết nối ra port lạ (3333, 4444, 14444 hay gặp ở miner), process đang listen bất thường
Shell init ~/.bashrc, ~/.profile, /etc/profile.d/, /etc/ld.so.preload
Package File hệ thống bị sửa: dpkg --verify (Debian/Ubuntu), rpm -Va (RHEL)
Web/app Webshell trong thư mục upload, file .php/.jsp mới, log access có request lạ

4. Khôi phục

  1. Xác định đường vào (CVE app, credential lộ, SSH password yếu) và vá trước khi đưa máy mới lên.
  2. Rebuild từ image sạch, deploy lại bằng IaC/Ansible, restore dữ liệu từ backup trước thời điểm xâm nhập.
  3. Xoay vòng mọi secret liên quan, rà các máy khác có cùng credential/key.
  4. Bổ sung phát hiện: audit rule, log tập trung, SSH hardening, firewall egress.

Kiểm tra nhanh

# User và quyền
awk -F: '$3==0 {print}' /etc/passwd
sudo find /etc/sudoers /etc/sudoers.d -type f -newermt "-14 days" -ls
sudo find / -xdev -name authorized_keys -exec ls -l {} \; -exec cat {} \;
lastb -n 30; last -n 30
 
# Persistence
sudo ls -la /etc/cron.* /var/spool/cron/crontabs 2>/dev/null; cat /etc/crontab
systemctl list-timers --all
sudo find /etc/systemd/system /usr/lib/systemd/system -name '*.service' -newermt "-14 days"
cat /etc/ld.so.preload 2>/dev/null
 
# Process và network
ps -eo pid,ppid,user,lstart,pcpu,cmd --sort=-pcpu | head -20
sudo ls -l /proc/*/exe 2>/dev/null | grep -E '\(deleted\)|/tmp/|/dev/shm/'
sudo ss -tunap state established
sudo ss -tulpn
 
# File lạ có quyền chạy ở thư mục tạm, file sửa gần đây
sudo find /tmp /var/tmp /dev/shm -type f -perm -u+x -ls
sudo find /etc /usr/bin /usr/sbin -xdev -type f -mtime -7 -ls
 
# Toàn vẹn package
sudo dpkg --verify 2>/dev/null | head -50     # RHEL: sudo rpm -Va

Tham khảo: NIST SP 800-61 (Incident Handling Guide), SANS Linux forensics cheat sheets.