Hướng dẫn bảo vệ WordPress khỏi bị tấn công bởi XML-RPC trên Ubuntu 14.04

2 năm trước

Giới thiệu

WordPress là một hệ thống CMS (hệ thống quản lý nội dung) phổ biến và mạnh mẽ. Sự phổ biến của nó có thể mang lại sự chú ý không mong muốn dưới dạng lưu lượng độc hại đặc biệt nhắm mục tiêu tại một trang web WordPress.

Có nhiều trường hợp máy chủ không được bảo vệ hoặc tối ưu hóa có thể gặp sự cố hoặc lỗi sau khi nhận được một lượng nhỏ lưu lượng truy cập độc hại. Các cuộc tấn công này dẫn đến sự cạn kiệt các tài nguyên hệ thống làm cho các dịch vụ như MySQL không phản hồi. Các dấu hiệu trực quan phổ biến nhất của điều này sẽ là một Error connecting to database. Bảng điều khiển web cũng có thể hiển thị lỗi Out of Memory.

Bài hướng dẫn này sẽ chỉ cho bạn cách để bảo vệ WordPress khỏi bị tấn công bởi XML-RPC trên hệ  thống Ubuntu 14.04.

Điều kiện cần

Để làm theo hướng dẫn này bạn cần:

  • CloudServer Ubuntu 14.04
  •  Một người dùng sudo không root

XML-RPC là gì?

WordPress sử dụng XML-RPC để thực hiện các chức năng từ xa. Plugin phổ biến JetPack và ứng dụng di động WordPress là hai ví dụ tuyệt vời về cách WordPress sử dụng XML-RPC. Chức năng này cũng có thể được khai thác để gửi hàng ngàn yêu cầu đến WordPress trong một khoảng thời gian ngắn. Viễn cảnh này là một cuộc tấn công.

 

Nhận biết một tấn công XML-RPC 

Có 2 cách để phát hiện ra một cuộc tấn công XML-RPC:

1) Thấy tin nhắn “Error connecting to database” khi trang WordPress của bạn tắt 
2) Phát hiện nhiều mục tương tự như "POST /xmlrpc.php HTTP/1.0” trong nhật kí  server web của bạn.

Vị trí của file nhật kí server web phụ thuộc vào phân phối Linux nào bạn đang chạy và server web nào bạn đang chạy

Với Apache trên Ubuntu 14.04, sử dụng command này để tìm các tấn công XML-RPC:

$ grep xmlrpc /var/log/apache2/access.log 

Với Nginx trên Ubuntu 14.04, dùng command này để tìm các tấn công XML-RPC:

$ grep xmlrpc /var/log/nginx/access.log 

Trang WordPress của bạn đang nhận các tấn công XML-RPC nếu kết quả của các command  trong nhiều dòng output giốngn như ví dụ sau:

access.log
111.222.333.444:80 555.666.777.888 - - [01/Jan/2016:16:33:50 -0500] "POST /xmlrpc.php HTTP/1.0" 200 674 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
Phần còn lại của bài viết sẽ tập trung vào các cách khác nhau để chặn các tấn công XML-RPC

Cách 1: Cài đặt Plugin Jetpack

Để ngăn chặn các cuộc tấn công XML-RPC trước khi chúng xảy ra các plugin Jetpack cho WordPress có thể ngăn chặn các yêu cầu phương pháp XML-RPC multicall với chức năng Protect của nó. Bạn sẽ vẫn thấy các mục XML-RPC trong nhật ký máy chủ web của bạn với Jetpack được bật. Tuy nhiên, Jetpack sẽ làm giảm tải trên cơ sở dữ liệu từ các đăng nhập độc hại gần 90%

Lưu ý: Để kích hoạt plugin Jetpack chúng ta cần một tài khoản WordPress.com 

Jetpack cài đặt dễ dàng từ backend WordPress. Đầu tiên đăng nhập vào bảng điều khiển WordPress và chọn Plugins->Add New ở menu bên trái

WordPress Plugins Menu

Jetpack sẽ tự động được list vào phần Plugin của trang Add New. Nếu bạn không thấy, bạn có thể tìm Jetpack bằng cách dùng hộp tìm kiếm.

Jetpack Install Page

Nhấp vào nút Install Now để tải xuống, giải nén và cài đặt Jetpack. Một khi nó được cài đặt thành công, sẽ có một link Activate Plugin trên trang. Nhấp vào link Activate Plugin. Bạn sẽ được trả lại trang Plugins và một tiêu đề màu xanh lá cây sẽ ở đầu trang cho biết Your Jetpack is almost ready!. Nhấp vào nút Connect to Wordpress.com để hoàn thành kích hoạt Jetpack.

 

Connect to Wordpress.com button

NoĐăng nhập vào tài khoản WordPress.com. Bạn cũng có thể tạo một tài khoản nếu cần.

Log into Wordpress.com form

Sau khi đăng nhập vào tài khoản WordPress.com của bạn, Jetpack sẽ được kích hoạt. Bạn sẽ thấy một lựa chọn để chạy Jump Start cái sẽ tự động mở các tính năng thông thường của Jetpack. Click vào link Skip ở bước này.

Jump Start Screen.

Chức năng Protect được tự động kích hoạt, ngay cả khi bạn bỏ qua quá trình Khởi động. Bây giờ bạn có thể nhìn thấy bảng điều khiển Jetpack cũng hiển thị chức năng Protect đang hoạt động. Danh sách trắng Các địa chỉ IP có thể bị chặn bởi Protect bằng cách nhấp vào bánh răng bên cạnh tên Protect

Jetpack Dashboard

Nhập địa chỉ IPv4 và Ipv6 ma bạn muốn ở danh sách màu trắng và kích vào nút  Save để update danh sách Protect White

Protect Settings

 

Cách 2: Bật block-xmlrpc với a2enconf

The a2enconf block-xmlrpc tính năng đã được thêm vào CloudServer WordPress one-click vào tháng 12 năm 2015. Với bó bạn có thể chặn tất cả yêu cầu XML-RPC ở server web.

Lưu ý: Cách này chỉ khả dụng trên CloudServer One-Kick WordPres được tạo vào tháng 12 năm 2015 và sau này

Để kích hoạt tập lệnh khối XML-RPC, hãy chạy lệnh sau đây trên CloudServer của bạn với cài đặt DO WordPress one-click:

$ sudo a2enconf block-xmlrpc 

Khởi động lại Apache để kích hoạt thay đổi:

$ sudo service apache2 restart 

Cảnh báo: Cách này sẽ dừng hoạt động bất cứ thứ gì sử dụng XML-RPC, bao gồm Jetback hay ứng dụng điện thoại WordPress.

 

Cách 3: Chặn bằng tay tất cả lưu lượng truy cập XML-RPC

Ngoài ra, chặn XML-RPC có thể áp dụng bằng tay với Apache của bạn hoặc cấu hình Nginx

Với Apache trên Ubuntu 14.04, edit file cấu hình với dòng command sau:

$ sudo nano /etc/apache2/sites-available/000-default.conf 

Thêm dòng được highlight bên dưới vào giữa tag .

Apache VirtualHost Config
order allow,denydeny from all

Lưu và đóng file khi bạn xong.

Khởi động server web để kich hoạt thay đổi:

$ sudo service apache2 restart 

Với Nginx trên Ubuntu 14.04, edit file cấu hình với command sau:

$ sudo nano /etc/nginx/sites-available/example.com

Thêm dòng được highlight bên dưới trong khối server:

Nginx Server Block File
server {
…
location /xmlrpc.php {deny all;}}

Lưu và đóng file khi bạn xong.

Khởi động lại server web để kích hoạt thay đổi:

$ sudo service nginx restart 

Cảnh báo: Phương pháp này sẽ dừng hoạt động bất cứ thứ gì sử dụng XML-RPC, bao gồm cả Jetback hay ứng dụng điện thoại WordPress.

 

Xác minh các bước giảm nhẹ tấn công 

Bất cứ phương pháp nào bạn dùng để chặn các cuộc tấn công, bạn bên xác minh rằng nó đang hoạt động.

Nếu bạn bật chức năng Jetpack Protect, bạn sẽ thấy các yêu cầu XML-RPC tiếp tục trong nhật ký máy chủ web của bạn. Tần suất nên thấp hơn và Jetpack sẽ làm giảm tải mà một cuộc tấn công có thể diễn ra trên quá trình máy chủ cơ sở dữ liệu. Jetpack cũng sẽ dần dần chặn các địa chỉ IP tấn công.

Nếu bạn tự chặn tất cả lưu lượng truy cập XML-RPC, nhật ký của bạn sẽ vẫn hiển thị các lần thử, nhưng mã lỗi kết quả là gì đó thay vì 200. Ví dụ các mục trong tệp Apache access.log có thể trông giống như sau

access.log
111.222.333.444:80 555.666.777.888 - - [01/Jan/2016:16:33:50 -0500] "POST /xmlrpc.php HTTP/1.0" 500 674 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
 

Kết luận

Bằng cách thực hiện các bước để giảm thiểu lưu lượng truy cập XML-RPC nguy hiểm, trang web WordPress của bạn sẽ tiêu tốn ít tài nguyên hệ thống hơn. Tài nguyên hệ thống cạn kiệt là lý do phổ biến nhất tại sao một trang web WordPress sẽ không hoạt động trên VPS. Các phương pháp ngăn chặn các cuộc tấn công XML-RPC được đề cập trong bài này cùng với sẽ đảm bảo trang WordPress của bạn trực tuyến