Phần 1: Dấu hiệu website WordPress bị nhiễm mã độc
Đừng đợi đến khi Google cảnh báo mới hành động. Hãy chú ý các “red flags” sau:
-
Tài nguyên Server cạn kiệt bất thường: CPU (đặc biệt là tiến trình
php-fpmhoặclsphp), RAM hoặc Disk I/O tăng vọt 100% dù traffic không tăng. -
Redirect lạ (Chuyển hướng trái phép): Khi truy cập từ Google Search hoặc trên thiết bị di động, website tự động chuyển hướng sang các trang cá độ, khiêu dâm, lừa đảo. (Thường không bị redirect nếu gõ trực tiếp URL để qua mặt admin).
-
Xuất hiện file/thư mục lạ: Thường có chuỗi ký tự ngẫu nhiên (VD:
wp-content/uploads/2026/04/xtyd.phphoặc thư mụcwp-admin/includes/class-wp-...). -
Trình duyệt & Google cảnh báo: Màn hình đỏ “Deceptive site ahead” hoặc “The site ahead contains malware”.
-
Mất index hoặc Index tiếng Nhật/Trung: Search
site:domain.comtrên Google thấy xuất hiện hàng ngàn link lạ chứa ký tự tiếng Nhật, Trung Quốc.
Phần 2: Kiểm tra nhanh (Quick Scan)
Trước khi can thiệp sâu vào server, hãy làm các bước test nhanh từ bên ngoài:
-
View Source (Ctrl + U): Tìm kiếm các thẻ
<script>,<iframe>tải từ các domain lạ, thường nằm ẩn ở đầu/cuối thẻ<head>hoặc trước</body>. Chú ý các đoạn code JavaScript bị mã hóa (obfuscated) dạng chuỗi dài ngoằng. -
Sử dụng Google Transparency Report: Truy cập Google Safe Browsing → Nhập domain để xem Google có đang đánh dấu site bạn chứa malware không.
-
Check Blacklist: Quét domain qua VirusTotal hoặc Sucuri SiteCheck để phát hiện nhanh các payload front-end.
Phần 3: Scan mã độc bằng công cụ (Plugin)
Sử dụng plugin là bước đệm tốt trước khi đào sâu vào server.
| Công cụ | Ưu điểm | Nhược điểm | Phù hợp cho |
|---|---|---|---|
| Wordfence | So sánh chính xác file core/theme/plugin với kho của WordPress.org. | Quét trực tiếp trên server nên tốn CPU/RAM, có thể làm tạch các host yếu. | Cần tìm file core bị sửa đổi. |
| MalCare | Quét trên Cloud của MalCare (không tốn tài nguyên server của bạn). Cực nhạy với malware ẩn. | Bản miễn phí chỉ báo “Có nhiễm”, bắt mua bản trả phí để xem chính xác file nào. | Web bị quá tải không chạy được Wordfence. |
| Sucuri | Tích hợp tường lửa (WAF) tốt, quét front-end cực nhanh. | Quét sâu file hệ thống (server-side) kém hơn Wordfence. | Check nhanh mã độc chèn trên giao diện. |
Phần 4: Kiểm tra thủ công trên server (QUAN TRỌNG)
Đây là kỹ năng sống còn. Plugin có thể bị bypass, nhưng log và file hệ thống thì không. Yêu cầu: Kết nối SSH vào server với quyền root hoặc user quản trị.
(Ví dụ đường dẫn gốc của website là: /var/www/html)
4.1. Tìm file chứa hàm PHP nguy hiểm phổ biến
Hacker thường dùng các hàm này để mã hóa và thực thi backdoor. Chạy lệnh grep để quét toàn bộ mã nguồn:
# Di chuyển vào thư mục web
cd /var/www/html
# Tìm các hàm thường bị lợi dụng để giấu mã độc (Lưu ý: Có thể ra cả file sạch của plugin, cần đọc kỹ)
grep -rnw . -e 'eval' -e 'base64_decode' -e 'gzinflate' -e 'shell_exec' -e 'str_rot13' -e 'preg_replace(.*\/e(.*'
# Quét tìm các chuỗi base64 độ dài lớn (dấu hiệu rõ nhất của malware obfuscation)
grep -rE "([a-zA-Z0-9+/]{100,})" .
4.2. Tìm các file mới được tạo/chỉnh sửa gần đây
Nếu bạn biết web bị hack khoảng 7 ngày trước, hãy tìm các file bị thay đổi trong vòng 7 ngày:
Tìm file bị sửa trong 7 ngày qua
find /var/www/html -type f -mtime -7
Tìm các file có đuôi lạ hoặc file ẩn (bắt đầu bằng dấu chấm)
find /var/www/html -type f -name “.*”
4.3. So sánh tính toàn vẹn của Core WordPress (Dùng WP-CLI)
Công cụ tuyệt vời nhất để xem file gốc của WordPress có bị “nhúng” mã độc không.
# Chạy lệnh wp-cli để verify
wp core verify-checksums --allow-root
# Nếu kết quả trả về báo lỗi ở file nào (vd: wp-includes/version.php), file đó chắc chắn đã bị sửa đổi.
4.4. Kiểm tra User Admin ẩn trong Database
Hacker thường tạo user ẩn, không hiển thị trong bảng Dashboard của WordPress.
# Dùng WP-CLI liệt kê toàn bộ user admin
wp user list --role=administrator --allow-root
Nếu thấy email/user lạ (ví dụ: wpsysadmin, support@wordpress.org), hãy xóa ngay lập tức.
4.5. Kiểm tra Cron Jobs (Tiến trình chạy ngầm)
Mã độc thường tự thiết lập Cron để “hồi sinh” sau khi bị xóa.
# Kiểm tra Cron của hệ điều hành (Server-level)
crontab -l
ls -la /etc/cron.d/
# Kiểm tra Cron của WordPress (Dùng WP-CLI)
wp cron event list --allow-root
Phần 5: Kiểm tra Database
Đôi khi file sạch nhưng mã độc nằm thẳng trong Database (như JavaScript chèn vào Post hoặc Option gây redirect). Truy cập phpMyAdmin hoặc dùng MySQL command:
Tìm kiếm trong wp_options: (Nơi hay chứa script redirect lạ)
SELECT * FROM wp_options WHERE option_value LIKE '%<script>%' OR option_value LIKE '%eval(%';
Tìm kiếm trong wp_posts: (Nơi chèn mã độc vào cuối bài viết)
SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%<iframe%' OR post_content LIKE '%<script src="%';
Phần 6: Rà soát các Backdoor ngụy trang phổ biến
Hacker thường giấu file ở các vị trí đánh lừa mắt thường:
-
File ảnh chứa mã PHP: File tải lên có tên
image.pngnhưng bên trong chứa<?php eval(...); ?>.- Cách check:
find wp-content/uploads/ -type f -name "*.png" | xargs grep -i "<?php"
- Cách check:
-
Giả mạo file hệ thống: Các file như
wp-config.php.bak,wp-config-sample.phpbị chèn backdoor. -
Thư mục
wp-includesvàwp-admin: Bình thường 2 thư mục này không bao giờ chứa các file có tên ngẫu nhiên kiểuxpt.phphay123.php. Thấy hãy xóa. -
Sửa file
index.phpgốc: Luôn mởindex.phpở thư mục ngoài cùng ra xem dòng đầu tiên có bị chèn đoạn mã lạ không.
Phần 7: Kiểm tra Log Server (Phát hiện nguồn lây)
Tìm mã độc là để xóa, nhưng đọc Log là để biết hacker vào bằng đường nào để bịt lỗ hổng.
# Tùy hệ thống mà log nằm ở /var/log/nginx/ hoặc /var/log/apache2/
# 1. Tìm các IP có hành vi POST dữ liệu liên tục vào các file lạ (Dấu hiệu tải mã độc lên)
cat access.log | grep "POST" | awk '{print $1, $7}' | sort | uniq -c | sort -nr | head -n 20
# 2. Xem file nào bị gọi liên tục (Ví dụ xmlrpc.php bị brute-force)
awk '{print $7}' access.log | sort | uniq -c | sort -rn | head -n 10
# 3. Kiểm tra Error Log để xem các lỗi PHP Fatal Error (Do mã độc code lỗi gây ra)
tail -n 100 /var/log/nginx/error.log
Phần 8: Sai lầm phổ biến khi xử lý Malware
-
Chỉ xóa file mã độc mà không tìm nguyên nhân: Nếu bạn xóa file
shell.phpnhưng không update cái plugin lỗi đã tạo ra file đó, ngày mai malware sẽ tự mọc lại. -
Không xóa các file zip/tar backup trên server: Hacker có thể tải file
backup.zip(chứa db và wp-config) bạn để ởpublic_htmlvề máy để đọc password. -
Quên đổi Salt Keys: Sau khi bị hack, bắt buộc phải vào
wp-config.phpđể đổi toàn bộ chuỗi bảo mật Auth/Salt Keys, ép tất cả user hiện tại văng ra ngoài. -
Chỉ tin vào Plugin Scan: Mã độc thế hệ mới (Zero-day) thường được viết riêng và mã hóa, Wordfence hay Sucuri sẽ không thể nhận diện được các mẫu hash này. Bắt buộc phải check bằng tay và đọc log.