Phát hiện VPS bị compromise — rkhunter, chkrootkit, auditd

Tài liệu » Quản trị VPS - Server » Phát hiện VPS bị compromise — rkhunter, chkrootkit, auditd

Vì sao cần phát hiện VPS bị compromise ngay?

Hệ thống của bạn đột ngột tăng tải CPU bất thường, băng thông mạng cạn kiệt hoặc xuất hiện các tiến trình lạ chạy ngầm. Đây là những dấu hiệu rõ ràng cho thấy VPS có thể đã bị xâm nhập (compromise) và cài cắm mã độc. Nếu không phát hiện và xử lý kịp thời, hậu quả để lại cho hệ thống production là vô cùng tàn khốc.

Dưới đây là những lý do bạn cần rà soát hệ thống ngay lập tức:
* 🚨 Ngăn chặn rò rỉ dữ liệu: Bảo vệ database khách hàng, mã nguồn và các thông tin nhạy cảm khỏi tay hacker.
* 💸 Chặn đứng cryptojacking: Tránh việc tài nguyên CPU/RAM của VPS bị vắt kiệt để đào tiền ảo trái phép.
* 🚫 Bảo vệ uy tín IP: Ngăn hacker biến VPS của bạn thành botnet để gửi spam email hoặc tấn công DDoS, dẫn đến việc IP bị đưa vào blacklist.
* 🕵️ Bóc gỡ backdoor ẩn: Phát hiện sớm các rootkit cắm sâu vào nhân hệ điều hành (kernel) nhằm duy trì quyền truy cập trái phép.
* 🛡️ Tuân thủ bảo mật: Đáp ứng các tiêu chuẩn an toàn thông tin khắt khe cho môi trường doanh nghiệp.

1. Cài đặt và tuning rkhunter (Rootkit Hunter) chuyên sâu

Tóm gọn: rkhunter so sánh mã băm (hash) của các file nhị phân cốt lõi với cơ sở dữ liệu chuẩn để phát hiện sự thay đổi bất thường do rootkit gây ra.

Cài đặt và khởi tạo database

Trên môi trường Ubuntu 22.04 hoặc 24.04, rkhunter có sẵn trong kho lưu trữ mặc định. Quá trình cài đặt rất đơn giản nhưng bước quan trọng nhất là phải khởi tạo cơ sở dữ liệu thuộc tính file (file properties database) ngay khi hệ thống còn “sạch”. Điều này tạo ra một baseline chuẩn để so sánh về sau.

# Cập nhật repository và cài đặt rkhunter
sudo apt update
sudo apt install rkhunter -y

# Cập nhật cơ sở dữ liệu nhận dạng rootkit mới nhất
sudo rkhunter --update

# Khởi tạo baseline cho các file nhị phân hệ thống
sudo rkhunter --propupd
  • --update: Tải xuống các mẫu nhận diện (signatures) rootkit mới nhất từ máy chủ dự án.
  • --propupd: Cập nhật cơ sở dữ liệu thuộc tính file cục bộ (hash, quyền, kích thước) của hệ thống hiện tại.

Cấu hình /etc/rkhunter.conf cho môi trường Advanced

Mặc định, rkhunter có thể sinh ra nhiều cảnh báo giả (false positive) do các bản cập nhật hệ điều hành. Bạn cần tinh chỉnh file cấu hình /etc/rkhunter.conf để công cụ hoạt động chính xác và im lặng hơn trong các tác vụ tự động. Hãy mở file cấu hình bằng trình soạn thảo nano hoặc vim.

# /etc/rkhunter.conf
UPDATE_MIRRORS=1
MIRRORS_MODE=0
WEB_CMD=""
ALLOW_SSH_ROOT_USER=prohibit-password
DISABLE_TESTS="suspscan hidden_ports deleted_files packet_cap_apps apps"
  • UPDATE_MIRRORS=1: Cho phép rkhunter tự động tìm kiếm các mirror server tốt nhất khi cập nhật.
  • MIRRORS_MODE=0: Sử dụng bất kỳ mirror nào khả dụng để đảm bảo quá trình tải xuống không bị gián đoạn.
  • ALLOW_SSH_ROOT_USER: Khớp với cấu hình PermitRootLogin trong sshd_config để tránh cảnh báo sai.
  • DISABLE_TESTS: Bỏ qua một số bài test không cần thiết hoặc dễ gây lỗi trên các bản phân phối Linux hiện đại.

Thực thi quét toàn diện và đọc log

Sau khi đã tuning cấu hình, bạn có thể chạy một bản quét toàn diện. Quá trình này sẽ kiểm tra các file nhị phân, các module kernel đang tải và các file cấu hình mạng.

# Thực thi quét rkhunter với chế độ chỉ in ra cảnh báo
sudo rkhunter -c --enable all --disable none --rwo
Warning: The file properties have changed:
         File: /usr/bin/curl
         Current hash: a1b2c3d4e5f6...
Warning: Network interface 'eth0' is in promiscuous mode.
  • -c (--check): Lệnh bắt đầu quá trình quét hệ thống.
  • --enable all: Kích hoạt toàn bộ các module kiểm tra có sẵn.
  • --rwo (--report-warnings-only): Lọc output, chỉ hiển thị các dòng cảnh báo thực sự, bỏ qua các dòng “OK”.

💡 Mẹo: Luôn chạy lệnh sudo rkhunter --propupd ngay sau khi bạn thực hiện apt upgrade. Nếu không, rkhunter sẽ báo động đỏ vì hash của các file hệ thống (như curl, wget, sshd) đã bị thay đổi bởi bản cập nhật chính thống.

2. Quét Rootkit tĩnh cấp tốc bằng chkrootkit

Tóm gọn: chkrootkit là một script gọn nhẹ, kiểm tra trực tiếp các dấu hiệu (signatures) của các rootkit đã biết trên file system mà không cần dựa vào baseline.

Triển khai chkrootkit trên Ubuntu

Khác với rkhunter, chkrootkit không yêu cầu khởi tạo cơ sở dữ liệu ban đầu. Nó hoạt động bằng cách tìm kiếm các chuỗi ký tự đặc trưng, các file ẩn hoặc các tiến trình bị che giấu trong thư mục /proc. Bạn có thể cài đặt nó trực tiếp từ apt.

# Cài đặt chkrootkit
sudo apt install chkrootkit -y

Phân tích kết quả quét

Chạy chkrootkit rất đơn giản, nhưng output mặc định của nó khá dài và khó theo dõi. Để tối ưu hóa cho việc giám sát tự động hoặc kiểm tra nhanh, bạn nên sử dụng cờ -q để giảm bớt độ nhiễu. Nếu phát hiện rootkit, công cụ sẽ trả về từ khóa INFECTED.

# Quét hệ thống ở chế độ im lặng
sudo chkrootkit -q
Checking `bindshell'... INFECTED (PORTS:  465)
Checking `lkm'... You have 2 hidden process(es).
  • -q (--quiet): Chế độ im lặng, chỉ in ra các dòng có phát hiện bất thường hoặc bị nhiễm (INFECTED).
  • bindshell: Dấu hiệu cho thấy có một cổng mạng đang mở lén lút chờ kết nối từ hacker.
  • lkm (Loadable Kernel Module): Phát hiện các module nhân Linux độc hại đang che giấu tiến trình.

⚠️ Cảnh báo: chkrootkit thỉnh thoảng sẽ báo cáo sai (false positive) với lỗi Suckit rootkit. Lỗi này thường xảy ra trên các phiên bản kernel mới do cách quản lý bộ nhớ thay đổi. Hãy luôn đối chiếu chéo kết quả với rkhunter trước khi kết luận VPS bị hack.

3. Giám sát hành vi cấp Kernel với auditd

Tóm gọn: auditd theo dõi mọi system call ở tầng kernel, giúp ghi nhận chính xác tiến trình nào, user nào đã sửa đổi file hệ thống hoặc thực thi lệnh độc hại.

Cài đặt và kích hoạt auditd

Các công cụ quét tĩnh như rkhunter hay chkrootkit chỉ phát hiện mã độc sau khi chúng đã được cài đặt. Để theo dõi hành vi theo thời gian thực (real-time), bạn cần auditd. Đây là một framework auditing mạnh mẽ tích hợp sâu vào nhân Linux.

# Cài đặt auditd và các plugin đi kèm
sudo apt install auditd audispd-plugins -y

# Bật service khởi động cùng hệ thống và chạy ngay lập tức
sudo systemctl enable --now auditd

# Kiểm tra trạng thái hoạt động
sudo systemctl status auditd

Viết rules tùy chỉnh cho auditd

Sức mạnh của auditd nằm ở bộ quy tắc (rules). Bạn cần định nghĩa rõ những file hoặc hành động nào cần được giám sát. Hãy tạo một file cấu hình mới trong thư mục /etc/audit/rules.d/ để theo dõi các file nhạy cảm và các lệnh thực thi.

# Tạo file rules tùy chỉnh
sudo nano /etc/audit/rules.d/custom-security.rules
# Giám sát thay đổi đối với file cấu hình user/password
-w /etc/passwd -p wa -k passwd_changes
-w /etc/shadow -p wa -k shadow_changes

# Giám sát các kết nối SSH mới
-w /etc/ssh/sshd_config -p wa -k sshd_config_changes

# Ghi log mọi lệnh thực thi bởi root (cực kỳ tốn log, cân nhắc khi dùng)
-a always,exit -F arch=b64 -F euid=0 -S execve -k root_actions
  • -w: Đường dẫn tuyệt đối đến file hoặc thư mục cần theo dõi (watch).
  • -p wa: Quyền truy cập cần giám sát, ở đây là w (write) và a (append/attribute change).
  • -k: Gán một khóa (key) tùy chỉnh cho rule này để dễ dàng tìm kiếm log sau này.
  • -S execve: Theo dõi system call execve, tức là mọi lệnh được thực thi trên hệ thống.

Áp dụng và kiểm tra rules

Sau khi viết xong rules, bạn không nên khởi động lại service auditd bằng systemctl vì có thể gây lỗi gián đoạn. Thay vào đó, hãy sử dụng công cụ augenrules để biên dịch và tải các rules mới vào kernel.

# Biên dịch và tải rules mới
sudo augenrules --load

# Liệt kê các rules đang hoạt động trong kernel
sudo auditctl -l

💡 Mẹo: Đừng log toàn bộ system call của mọi user vì sẽ làm tràn ổ cứng (Disk I/O spike) chỉ trong vài giờ. Hãy sử dụng bộ lọc -F euid=0 để chỉ theo dõi các hành động của user root, hoặc chỉ watch các file cấu hình quan trọng nhất.

4. Phân tích log auditd bằng ausearch và aureport

Tóm gọn: Sử dụng ausearch và aureport để trích xuất, giải mã và tổng hợp các hành vi đáng ngờ từ hàng vạn dòng log thô của auditd.

Truy vấn sự kiện theo khóa (key)

Log thô của auditd nằm tại /var/log/audit/audit.log và cực kỳ khó đọc vì chứa nhiều mã số thay vì tên người dùng. Công cụ ausearch giúp bạn tìm kiếm log dựa trên các “key” đã định nghĩa ở bước trước và tự động giải mã các thông số.

# Tìm kiếm các hành động thay đổi file /etc/passwd
sudo ausearch -k passwd_changes -i
----
type=PATH msg=audit(10/24/2023 14:32:11.123:456): item=0 name=/etc/passwd inode=123456 dev=08:01 mode=file,644 ouid=root ogid=root rdev=00:00 nametype=NORMAL
type=SYSCALL msg=audit(10/24/2023 14:32:11.123:456): arch=x86_64 syscall=openat success=yes exit=3 a0=AT_FDCWD a1=/etc/passwd a2=O_WRONLY|O_CREAT|O_TRUNC a3=0666 items=1 ppid=1234 pid=5678 auid=admin uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts0 ses=1 comm=nano exe=/usr/bin/nano subj=unconfined key=passwd_changes
  • -k passwd_changes: Lọc ra các sự kiện khớp với key passwd_changes đã gán trong file rules.
  • -i (--interpret): Tự động dịch các giá trị số (như UID, thời gian epoch, system call IDs) sang định dạng con người có thể đọc được (ví dụ: uid=0 thành uid=root).
  • exe=/usr/bin/nano: Cho biết công cụ nano đã được sử dụng để can thiệp vào file.

Báo cáo tổng quan hệ thống với aureport

Nếu bạn muốn có một cái nhìn toàn cảnh về những gì đang diễn ra trên VPS thay vì tìm kiếm từng sự kiện lẻ tẻ, aureport là công cụ lý tưởng. Nó có thể tạo ra các báo cáo tóm tắt về đăng nhập, thực thi lệnh hoặc các nỗ lực truy cập thất bại.

# Tạo báo cáo tóm tắt về các lệnh đã được thực thi
sudo aureport --executable --summary

# Tạo báo cáo về các lần đăng nhập thất bại
sudo aureport --login --failed
Executable Summary Report
=================================
total  file
=================================
1542  /usr/bin/bash
843   /usr/bin/sudo
12    /usr/bin/wget
5     /usr/bin/curl

💡 Mẹo: Nếu bạn thấy các lệnh như wget, curl, hoặc nc (netcat) xuất hiện với tần suất cao bất thường trong báo cáo --executable, rất có thể hacker đang cố gắng tải payload độc hại hoặc mở reverse shell từ VPS của bạn.

5. Kết hợp cronjob và cảnh báo tự động

Tóm gọn: Tích hợp rkhunter và chkrootkit vào cronjob để quét định kỳ hàng ngày và tự động đẩy cảnh báo qua Telegram khi phát hiện dấu hiệu compromise.

Viết Bash Script giám sát tổng hợp

Thay vì phải đăng nhập vào VPS mỗi ngày để chạy lệnh thủ công, bạn nên tạo một bash script tự động hóa quy trình này. Script sẽ chạy lần lượt rkhunterchkrootkit, sau đó gom kết quả lại.

# Tạo file script trong thư mục cron.daily
sudo nano /etc/cron.daily/security-scan.sh
#!/bin/bash
# Script tự động quét malware và rootkit

LOG_FILE="/var/log/security-scan.log"
HOSTNAME=$(hostname)

# Chạy chkrootkit và lọc kết quả INFECTED
CHK_OUTPUT=$(/usr/sbin/chkrootkit -q | grep -i "INFECTED")

# Chạy rkhunter và lọc các cảnh báo
RK_OUTPUT=$(/usr/bin/rkhunter -c --enable all --disable none --rwo)

# Kiểm tra nếu có cảnh báo thì ghi log và gửi alert
if [ -n "$CHK_OUTPUT" ] || [ -n "$RK_OUTPUT" ]; then
    echo "Phát hiện bất thường trên $HOSTNAME" > $LOG_FILE
    echo "=== CHKROOTKIT ===" >> $LOG_FILE
    echo "$CHK_OUTPUT" >> $LOG_FILE
    echo "=== RKHUNTER ===" >> $LOG_FILE
    echo "$RK_OUTPUT" >> $LOG_FILE

    # Kích hoạt hàm gửi cảnh báo (định nghĩa ở bước sau)
    /usr/local/bin/send_telegram_alert.sh "$LOG_FILE"
fi
  • grep -i "INFECTED": Chỉ bắt các dòng chứa từ khóa báo hiệu hệ thống đã bị nhiễm mã độc.
  • -n "$CHK_OUTPUT": Toán tử kiểm tra chuỗi không rỗng trong bash. Nếu có output, tức là có cảnh báo.

Gửi cảnh báo về Telegram

Để nhận thông báo ngay lập tức trên điện thoại, bạn có thể tạo một script nhỏ sử dụng curl để gọi API của Telegram Bot. Hãy đảm bảo bạn đã tạo bot qua BotFather và có Chat ID.

# Tạo script gửi Telegram
sudo nano /usr/local/bin/send_telegram_alert.sh
#!/bin/bash
BOT_TOKEN="YOUR_TELEGRAM_BOT_TOKEN"
CHAT_ID="YOUR_CHAT_ID"
MESSAGE=$(cat $1)

curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
    -d chat_id="${CHAT_ID}" \
    -d text="${MESSAGE}"

⚠️ Cảnh báo: Tuyệt đối phải phân quyền thực thi và giới hạn quyền đọc/ghi cho các script này bằng lệnh sudo chmod 700 /etc/cron.daily/security-scan.sh. Nếu không, hacker có thể sửa đổi nội dung script để vô hiệu hóa hệ thống cảnh báo của bạn.

Pitfalls & lỗi thường gặp

Trong quá trình vận hành các công cụ bảo mật nâng cao, người quản trị thường xuyên gặp phải các lỗi cấu hình dẫn đến cảnh báo giả hoặc sập hệ thống. Dưới đây là các case phổ biến và cách xử lý triệt để.

1. rkhunter liên tục báo “Warning: The file properties have changed”
* Nguyên nhân: Bạn vừa chạy apt update && apt upgrade. Các gói phần mềm cốt lõi (như bash, sshd) được cập nhật phiên bản mới, làm thay đổi mã hash của file nhị phân.
* Cách fix: Chạy lại lệnh sudo rkhunter --propupd ngay sau khi cập nhật hệ thống để rkhunter ghi nhận mã hash mới làm baseline chuẩn.

2. Ổ cứng VPS đầy 100% do file /var/log/audit/audit.log
* Nguyên nhân: Bạn viết rules auditd quá rộng (ví dụ log toàn bộ system call open của mọi user), khiến log sinh ra hàng GB mỗi ngày. Mặc định auditd không tự xóa log cũ.
* Cách fix: Mở file /etc/audit/auditd.conf, chỉnh sửa tham số max_log_file_action = ROTATEnum_logs = 5. Đồng thời, tối ưu lại file rules chỉ để watch các file thực sự quan trọng.

3. chkrootkit báo lỗi giả “Suckit rootkit… Warning”
* Nguyên nhân: Đây là một false positive kinh điển trên các phiên bản kernel Linux hiện đại. chkrootkit nhầm lẫn cách kernel cấp phát bộ nhớ ẩn với hành vi của Suckit rootkit.
* Cách fix: Không có cách fix triệt để từ chkrootkit. Bạn cần xác minh chéo bằng cách kiểm tra xem có tiến trình nào đang ẩn không bằng công cụ unhide (apt install unhide), hoặc xem log của rkhunter.

4. Không thể khởi động auditd do xung đột rules
* Nguyên nhân: Bạn viết sai cú pháp trong file /etc/audit/rules.d/ hoặc có nhiều file rules định nghĩa trùng lặp một system call.
* Cách fix: Chạy lệnh sudo augenrules --check để tìm dòng bị lỗi cú pháp. Xóa các file rules cũ không dùng đến, sau đó chạy sudo augenrules --load và restart lại service auditd.

Key takeaways

  • rkhunter mạnh mẽ trong việc phát hiện sự thay đổi của file nhị phân cốt lõi, nhưng bắt buộc phải cập nhật baseline (--propupd) sau mỗi lần update OS.
  • chkrootkit là công cụ quét tĩnh nhanh gọn, không cần cấu hình phức tạp, lý tưởng để kiểm tra chéo nhưng dễ dính false positive trên kernel mới.
  • auditd là “camera giám sát” cấp kernel. Nó ghi lại bằng chứng không thể chối cãi về việc ai đã sửa file gì, nhưng cần tuning rules cẩn thận để tránh tràn ổ cứng.
  • ausearch và aureport là bộ đôi bắt buộc phải biết để giải mã và tổng hợp hàng vạn dòng log thô của auditd thành thông tin có thể đọc hiểu.
  • Tự động hóa là chìa khóa: Luôn đưa các tác vụ quét vào cronjob và thiết lập cảnh báo qua Telegram/Email để phản ứng kịp thời ngay khi VPS có biến.

FAQ

Các công cụ này có làm chậm VPS không?

rkhunterchkrootkit chỉ tiêu tốn tài nguyên (CPU/Disk I/O) trong lúc chạy quét (thường vài phút mỗi ngày). Tuy nhiên, auditd chạy ngầm liên tục; nếu bạn viết rules quá rộng, nó có thể làm giảm hiệu suất Disk I/O đáng kể. Hãy chỉ theo dõi các file cấu hình thật sự cần thiết.

Làm sao để biết cảnh báo là thật hay false positive?

Bạn cần kết hợp nhiều yếu tố. Nếu rkhunter báo file /usr/bin/curl bị đổi hash, hãy kiểm tra log apt (/var/log/apt/history.log) xem gần đây có cập nhật gói curl không. Nếu không có bản cập nhật nào mà hash vẫn đổi, 99% VPS của bạn đã bị compromise.

Có cần dùng cả rkhunter và chkrootkit không?

Có. Hai công cụ này sử dụng cơ chế phát hiện khác nhau. rkhunter dựa trên baseline và file properties, trong khi chkrootkit tìm kiếm các signatures tĩnh trực tiếp. Việc dùng cả hai giúp tăng tỷ lệ phát hiện và giảm thiểu rủi ro bỏ lọt mã độc.

Nếu phát hiện VPS đã bị hack, tôi nên làm gì tiếp theo?

Tuyệt đối không khởi động lại VPS ngay lập tức vì sẽ làm mất dấu vết trên RAM. Hãy sao lưu các log quan trọng, cô lập mạng của VPS (chặn các port không cần thiết), phân tích log để tìm lỗ hổng, và cuối cùng là rebuild lại một VPS mới hoàn toàn. Không nên cố gắng “làm sạch” một VPS đã bị nhiễm rootkit cấp kernel.

Cần VPS chạy Phát hiện VPS bị compromise — rkhunter, chkrootkit, auditd?

Để triển khai các hệ thống giám sát bảo mật chuyên sâu như auditd, bạn cần một hạ tầng máy chủ ổn định, toàn quyền truy cập root và hiệu suất Disk I/O vượt trội. Đừng để hệ thống của bạn trở thành nạn nhân tiếp theo của hacker.
👉 Thuê ngay VPS bảo mật cao tại: vsis.net/vps để bắt đầu xây dựng pháo đài phòng thủ cho dữ liệu của bạn ngay hôm nay!

Lên đầu trang