WordPress là một Open source CMS phổ biến bậc nhất trên thế giới, vì vậy không lạ là có rất nhiều các thể loại malware hướng đến nền tảng này.
Nguyên nhân website dính mã độc đôi khi vì trót dại cài đặt plugin hoặc theme không rõ nguồn gốc, hoặc bị khai thác lỗ hổng trong phiên bản WordPress cũ quên chưa update.
Cần làm gì khi website WordPress bị dính malware?
Cũng may không có nhiều malware có ý định tàn phá database của chúng ta (Cái này mà hỏng là hỏng bét tất cả luôn). Đa phần chỉ tìm cách redirect sang website quảng cáo với mục đích trục lợi nên phần bị thay đổi chủ yếu là các file mã nguồn PHP.
Trong thư mục mã nguồn WordPress chỉ có 2 thứ liên quan đến cài đặt riêng của chúng ta đó là thư mục wp-content
và file wp-config.php
. Những thứ khác là mã nguồn core của WordPress nên yên tâm ghi đè thoải mái. Vì vậy đầu tiên ta phải cách ly 2 cái này ra xử lý riêng.
wp-config.php
File này có nội dung tương đối đơn giản, chủ yếu là các lệnh define
khai báo các hằng số của WordPress sau đó gọi wp-settings.php
nên việc phát hiện có mã độc hay không cũng không khó.
Bản thân các lệnh define
là vô hại nên các malware sẽ tìm cách gọi một script PHP khác. Nếu thấy xuất hiện các directive như @include
thì 100% là mã độc vì chúng thường dùng @
để ngăn cản hiển thị lỗi nếu có, trong khi các phần mềm mã nguồn mở như WordPress sẽ không bao giờ làm như vậy.
wp-content
Thư mục wp-content
có 3 thư mục con là plugins
, themes
và uploads
. Nguồn gốc của malware khả năng cao sẽ nằm trong này.
Nếu muốn chắc ăn, ta cứ xóa hết các plugin trong thư mục
plugins
và theme trong thư mụcthemes
đi, sau đó copy theme mặc định từ bộ cài WordPress vào. Khi activate lại, WordPress sẽ chủ động chọn lấy một theme để activate.
Thư mục uploads
thì đúng là khó nhằn vì nếu website có nhiều content thì số lượng file trong này sẽ rất nhiều. Điều này gây khó khăn trong việc tìm kiếm xem trong này liệu có malware hay không. Phần mở rộng của chúng thậm chí còn không phải .php
để “trá hình” và sẽ được @include
ở một file PHP nào đó khác trong core.
Lệnh dưới đây sẽ giúp tôi phát hiện file mã nguồn PHP trong thư mục uploads
bất kể phần mở rộng thế nào và di chuyển chúng đi chỗ khác ví dụ ở đây là thư mục ~/malware
.
/bin/grep -rnw -m 1 -F "<?php " wp-content/uploads | \ awk -F: '{print $1}' | \ while read f; do dest="~/malware/$(dirname $f)" mkdir -p "$dest" mv "$f" "$dest" done
Cài đặt lại WordPress với wp-cli
Sau khi “làm sạch” file wp-config.php
và thư mục wp-content
chúng ta có thể cài lại WordPress. Ngoài cách tải xuống và ghi đè thì ta có thể dùng dòng lệnh wp-cli
.
Đầu tiên chúng ta tải file script wp
theo hướng dẫn chi tiết trên trang chủ của wp-cli hoặc thực hiện nhanh như dưới đây. Lưu ý, wp
cần có PHP để hoạt động.
wget -O wp https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar chmod +x wp
Cài đặt lại WordPress core
Trước khi thực hiện quy trình reinstall, ta nên xóa tất tật trừ wp-config.php
và wp-content
.
rm -rf !("wp-content"|"wp-config.php")
Sau đó tải mã nguồn WordPress để ghi đè lên phiên bản hiện thời.
wp core download --force --skip-content --locale=vi --version=5.3.2
Các tham số như sau:
--force
để ghi đè các file mã nguồn đang có.--skip-content
sẽ không cài đặt plugin và theme mặc định.--locale=vi
để tải phiên bản tiếng Việt. Bỏ qua để tải bản tiếng Anh (en_US).--version
để chỉ định một phiên bản cụ thể. Bỏ qua để cài phiên bản mới nhất.
Cài đặt lại các plugin đang active
Nếu không đang tâm xóa hết các plugin thì sau đây là một cách để ghi đè các plugin bằng phiên bản “sạch”. Điều kiện là các plugin này phải được tải từ trang WordPress.org.
wp-cli
sẽ bỏ qua các plugin do bạn tự phát triển hoặc …plugin có malware; vì thế hãy để ý nội dung log khi thực thi lệnh sau.
wp plugin list --status=active --field=name | \ while read plugin; do wp plugin install ${plugin} --force done
Làm sao để phòng ngừa lây nhiễm malware?
Việc quan trọng hàng đầu là chủ động bảo vệ dữ liệu của mình vì nếu bị mất hoặc hư hỏng sẽ khó có thể tìm lại được.
Trước hết là phải backup database và thư mục upload
trong wp-content
thường xuyên. Hãy đặt lịch backup liên tục bằng cron của Linux, Task Scheduler của Windows hoặc dịch vụ của bản thân Hosting đó.
Luôn cập nhật phiên bản WordPress mới nhất và hãy lưu tâm đến các cảnh báo bảo mật trên Dashboard.
Bạn nên tích hợp một plugin như All In One WP Security – cung cấp nhiều tùy chọn bảo mật nâng cao và lên lịch báo cáo những thay đổi trong mã nguồn qua email.