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, themesupload. 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ục themes đ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 upload 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 upload 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.

mkdir ~/malware
find wp-content/upload -type f -exec file {} \; | \
    grep 'PHP script' | \
    awk -F: '{print $1}' | \
    tr '\n' ' ' \
    xargs -I {} mv {} ~/malware

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.phpwp-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.