Chặn XML-RPC: Bảo vệ trang web của bạn khỏi các mối đe dọa tiềm ẩn

Với những mối đe dọa không ngừng trên mạng, việc thực hiện các biện pháp bảo vệ trang web WordPress của bạn khỏi các lỗ hổng là hết sức quan trọng. Một trong những cách để làm điều này là thông qua việc chặn XML-RPC. Trong bài viết này, chúng ta sẽ tìm hiểu về XML-RPC là gì?, Tại sao nó có thể gây nguy hại cho trang web của bạn và cách bảo vệ nó hiệu quả.

XML-RPC là gì?

XML-RPC là một giao thức gửi dữ liệu giữa máy tính qua mạng thông qua XML (Extensible Markup Language) để truyền tải thông tin và thực hiện các thao tác từ xa giữa các ứng dụng và máy chủ khác nhau. Nó sử dụng HTTP để truyền tải dữ liệu, thông thường dưới dạng các yêu cầu HTTP POST và nhận kết quả dưới dạng các phản hồi HTTP.

Tại sao XML-RPC có thể là mối đe dọa?

XML-RPC không phải là một mối đe dọa trong bản thân nó, nhưng nó có thể trở thành mối đe dọa khi được sử dụng không an toàn hoặc không được cấu hình đúng cách.

Trong thời kỳ đầu, những người sử dụng Blog thường viết những nội dung của họ ngoại tuyến, sau đó mới thực hiện truy cập vào WordPress để xuất bản nội dung.

Những nền tảng hạ tầng, kỹ thuật internet có hiệu xuất xử lý vẫn còn chậm và có nhiều khó khăn. Vì vậy, XML-RPC ra đời để khắc phục điều đó, nó cho phép người dùng xuất bản nội dung thông qua email hoặc các thiết bị khác một cách dễ dàng hớn.

Về sau, REST API được tích hợp, nó đã thay đổi rất nhiều về cách lập trình và vận hành của WordPress cho tới tận ngày nay.

XML-RPC không còn được sử dụng nhiều như trước kia, kèm với đó các hacker, Random Software cố gắng dò tìm trên các website để khai thác và XML-RPC trở thành miếng mồi ngon béo bở.

Dưới đây là một vài cách mà XML-RPC có thể dễ dàng bị khai thác:

  1. Khả năng tấn công DDoS (Distributed Denial of Service): XML-RPC cho phép người dùng gửi yêu cầu từ xa mà không cần xác thực mạnh mẽ. Điều này có thể dẫn đến việc tấn công DDoS, trong đó tấn công viên gửi một lượng lớn yêu cầu đến máy chủ XML-RPC, gây quá tải và làm cho máy chủ trở nên không thể hoạt động.
  2. Khả năng tấn công Brute Force: Nếu XML-RPC được sử dụng cho việc xác thực bằng mật khẩu và không có biện pháp bảo vệ chống tấn công Brute Force, thì người tấn công có thể thử nhiều mật khẩu khác nhau để tìm ra mật khẩu đúng và xâm nhập vào hệ thống.
  3. Khả năng tấn công thực thi mã từ xa (Remote Code Execution): Nếu máy chủ XML-RPC không được cấu hình cẩn thận, người tấn công có thể sử dụng nó để thực thi mã từ xa trên máy chủ, dẫn đến việc kiểm soát hệ thống và thậm chí là việc tấn công xâm nhập.
  4. Thiếu kiểm tra đầu vào và bảo mật yếu: Nếu ứng dụng sử dụng XML-RPC không kiểm tra đầu vào một cách cẩn thận hoặc không thực hiện các biện pháp bảo mật cơ bản như kiểm tra dữ liệu đầu vào và kiểm tra quyền truy cập, thì nó có thể trở thành điểm yếu cho các cuộc tấn công XSS (Cross-Site Scripting), SQL Injection và các cuộc tấn công khác.
  5. Thiếu quản lý phiên: Nếu không có quản lý phiên đúng đắn, người tấn công có thể thu thập thông tin phiên của người dùng và sử dụng nó để xâm nhập vào tài khoản của họ.

Làm sao để biết XML-RPC của bạn có đang bị ai đó dòm ngó?

Có 3 cách chính bạn có thể áp dụng để xác định XML-RPC có đang bị khai thác hay không.

Kiểm tra Log: Kiểm tra các tệp nhật ký (logs) của máy chủ web/hosting để xem liệu có bất kỳ hoạt động không bình thường nào được ghi lại không. Các yêu cầu XML-RPC đáng ngờ có thể xuất hiện trong các logs này.

Sử dụng phầm mềm tường lửa tích hợp: Có nhiều công cụ an ninh mạng được thiết kế để phát hiện các cuộc tấn công hoặc hoạt động không mong muốn. Sử dụng các công cụ như firewall, intrusion detection system (IDS), hoặc web application firewall (WAF) để giám sát và cũng như ngăn chặn các yêu cầu XML-RPC đáng ngờ.

Kiểm tra Thống kê Lưu Lượng Mạng: Sử dụng phần mềm giám sát network trên máy chủ web/hosting để xem xét lưu lượng mạng đến và đi từ máy chủ của bạn. Nếu bạn thấy một lượng lớn yêu cầu đến địa chỉ XML-RPC của bạn từ một nguồn không xác định, đó có thể là một dấu hiệu của cuộc tấn công.

Cách chặn XML-RPC trên trang web của bạn

Để bảo vệ trang web của bạn khỏi các mối đe dọa tiềm ẩn của XML-RPC, bạn có thể thực hiện các biện pháp sau đây:

Cách 1: Chặn XML-RPC bằng .htaccess

.htaccess là cách phổ biến nhất và dễ sử dụng nhất bởi các máy chủ Apache hoặc Litespeed luôn thực thi .htaccess trước các tập tin khác.

block xml rpc with htaccess 1

Việc của bạn là chỉ cần tìm tệp .htaccess, file này thường nằm ở trong File Manager của máy chủ web/hosting và thường có đường dẫn như sau /home/username/public_html/.htaccess

Sau đó hay chèn vào .htaccess RewriteRule sau:

# Chặn tất cả yêu cầu đến xmlrpc.php ngoại trừ địa chỉ IP 102.102.102.102
<Files xmlrpc.php>
    order allow,deny
    deny from all
    allow from 102.102.102.102
</Files>
block xml rpc with htaccess 2

Hãy nhớ sửa lại địa chỉ 102.102.102.102 thành ip máy chủ web/hosting của bạn hoặc các dịch vụ mà bạn tin cậy.

Cách 2: Chặn XML-RPC thông qua tệp Nginx Config

Đối với các máy chủ web/hosting sử dụng Nginx, thì tệp cấu hình thường nằm ở cấp độ máy chủ, cho nên bạn có thể phải liên hệ với đơn vị cung cấp dịch vụ lưu trữ hoặc quản trị hệ thống để thao tác giúp cho bạn.

Nếu bạn đang toàn quyền quản lý máy chủ Nginx, hãy tìm đến tệp nginx.conf, tệp này thường nằm ở đường dẫn /etc/nginx/nginx.conf hoặc /usr/local/nginx/conf/nginx.conf hoặc /usr/local/etc/nginx/nginx.conf

Sau khi tìm thấy nginx.conf, hãy chèn vào rule sau:

location = /xmlrpc.php {
	deny all;
	access_log off;
	log_not_found off;
	return 444;
}

Tệp nginx.conf sau khi đã chèn sẽ có dạng gần giống như thế này

Tạo rule chặn xml-rpc trên server nginx

Sau khi đã lưu lại tệp nginx.conf, hãy chạy restart lại nginx bằng lệnh

sudo systemctl reload nginx

Cách 3: Chặn XML-RPC thông qua file functions.php

Nếu bạn không có quyền truy cập ở cấp độ máy chủ hoặc không tìm thấy file .htaccess, hãy thử chặn XML-RPC thông qua file functions.php của giao diện.

Bạn có thể chỉnh sửa file functions.php thông qua File Manager của web/hosting hoặc các phần mềm sử dụng giao thức FTP như Filezilla.

Chặn xml-rpc bằng file functions.php 1

functions.php thường có vị trí như sau: /home/username/public_html/wp-content/themes/ten_themes/functions.php

Tuy nhiên tôi khuyến khích bạn nên chèn functions.php của Child Theme thay vì chèn vào Parent Themes.

Nếu trang WordPress của bạn chưa có Child Theme, tôi có sẵn hướng dẫn khởi tạo Child Theme cho bạn ngay tại đây: Hướng dẫn tạo Child Theme cho WordPress

Sau khi tìm thấy file functions.php, hãy chèn vào đoạn có sau:

// Chặn XML-RPC
add_filter( 'xmlrpc_enabled', '__return_false' );

// Vô hiệu hóa tính năng X-Pingback
function disable_x_pingback( $headers ) {
    unset( $headers['X-Pingback'] );
    return $headers;
}
add_filter( 'wp_headers', 'disable_x_pingback' );

// Loại bỏ phương thức pingback.ping
add_filter( 'xmlrpc_methods', function( $methods ) {
    unset( $methods['pingback.ping'] );
    return $methods;
} );
Chặn xml-rpc bằng file functions.php 2

Cuối cùng hãy lưu lại file functions.php và tiến hành kiểm tra.

Cách 4: Chặn XML-RPC bằng plugin

Plugin là một phương án dễ dàng cho tất cả người dùng WordPress, tuy nhiên trước khi sử dụng phương pháp này, bạn nên cân nhắc một số điều sau.

Tính năng chặn XML-RPC thường có sẵn trong các plugin bảo mật chuyên dụng như Itheme Security, WordFence, Defender Security, Sucuri Security,… Các plugin này cũng đi kèm nhiều tính năng bảo mật toàn diện khác để bạn có thể bảo vệ tương đối website của mình.

Vì vậy, nếu Website của bạn đã có sẵn một trong các plugin trên thì đừng nên cài thêm các plugin khác để giúp cho trang web sạch sẽ, tránh xung đột và có hiệu xuất tốt hơn.

Bạn cũng nên thử 2 cách trên mà tôi đã đề cập, nó hoàn toàn có thể thực hiện một cách nhanh chóng mà vẫn đảm bảo được hiệu xuất của máy chủ và website.

Về phần thao tác cấu hình, bạn hãy truy cập vào Dashboard > Plugins > Addnew > Cài đặt và kích hoạt plugin Disable XML-RPC hoặc bất kỳ plugin bảo mật nào mà tôi đã đề cập ở trên.

Cách 5: Chặn XML-RPC thông qua CloudFlare

Để chặn XML-RPC thông qua dịch vụ Cloudflare, bạn có thể sử dụng các chức năng bảo mật của Cloudflare để tắt XML-RPC. Dưới đây là hướng dẫn cụ thể:

Bước 1: Đăng nhập vào tài khoản Cloudflare: Truy cập trang web của Cloudflare và đăng nhập vào tài khoản của bạn.

Bước 2: Chọn trang web bạn muốn cấu hình: Nếu bạn có nhiều trang web trong tài khoản Cloudflare của mình, hãy chọn trang web bạn muốn cấu hình để chặn XML-RPC.

Bước 3: Chọn mục “Security” (Bảo mật): Tại đây, chọn mục Security > WAF > Create rule

Bước 4: Thêm quy tắc chặn XML-RPC:

Trường Rule name (required),bạn đặt tên quy tắc để phân biệt với các quy tắc khác, tôi thường đặt là Block XML-RPC.

Tại phần If incoming requests match, hãy chọn lần lượt là

  • Field: URI Path
  • Operator: contains
  • Value: xml-rpc.php

and

  • Field: IP Source Address
  • Operator: is not in
  • Value: 102.102.102.102

Bạn có thể tạo nhanh điều kiện này bằng cách nhấn Edit Expression và dán đoạn quy tác sau:

(http.request.uri.path contains "xml-rpc.php" and not ip.src in {102.102.102.102})

Hãy nhớ sửa lại ip 102.102.102.102 ở 2 cách trên thành địa chỉ ip của máy chủ web/hosting hoặc ứng dụng mà bạn muốn nó nằm ngoài quyền kiểm soát của bộ lọc.

Phần Choose action, bạn đặt hành động cho quy tắc, chẳng hạn như “Block” (Chặn) hoặc “Challenge” (Thách thức), dựa trên những gì bạn muốn làm với các yêu cầu XML-RPC bị chặn.

Lưu và kích hoạt quy tắc: Sau khi bạn đã cấu hình quy tắc, hãy nhấn “Deploy” (Triển khai) hoặc “Save and Deploy” (Lưu và Triển khai) để áp dụng nó.

Tạo rule chặn xml-rpc trên cloudflare

Khi bạn hoàn tất các bước này, Cloudflare sẽ áp dụng quy tắc chặn XML-RPC cho trang web của bạn và từ chối các yêu cầu đến /xmlrpc.php. Hãy nhớ kiểm tra rằng trang web của bạn vẫn hoạt động bình thường sau khi áp dụng quy tắc này, và đảm bảo rằng bạn đã thử nghiệm tất cả các tính năng của trang web để đảm bảo không có ảnh hưởng không mong muốn.

Kiểm tra trạng thái XML-RPC

Để kiểm tra trạng thái của dịch vụ XML-RPC trên một trang web hoặc máy chủ, bạn có thể sử dụng một số cách sau:

Kiểm tra bằng URL

Thử truy cập URL của dịch vụ XML-RPC bằng trình duyệt web. Ví dụ, nếu dịch vụ XML-RPC của bạn nằm tại đường dẫn https://example.com/xmlrpc.php, hãy truy cập đường dẫn đó và xem xem nó có hoạt động không.

Nếu bạn nhận được một phản hồi từ máy chủ là màn hình trắng, tức là XML-RPC đang được bật. Nếu màn hình trả về một trang lỗi cụ thể 403 Forbidden,… điều này có nghĩa là XML-RPC đang được chặn.

trang thai xml rpc bi chan

Sử dụng công cụ trực tuyến

Có nhiều công cụ trực tuyến miễn phí có thể giúp bạn kiểm tra trạng thái của dịch vụ XML-RPC bằng cách nhập URL của nó.

Bạn có thể thử sử dụng công cụ WordPress XML-RPC Validation Service và nhập link website của bạn, công cụ này sẽ kiểm tra trang thái bật/tắt của XML-RPC trên website, cũng như cho phép bạn kiểm tra nhiều hơn với một tài khoản và mật khẩu được cấp phép.

trang thai xml rpc bi chan khi dung tool kiem tra

Sử dụng mã nguồn mở:

Nếu bạn là một nhà phát triển hoặc có kiến thức về lập trình, bạn có thể viết mã kiểm tra XML-RPC bằng cách sử dụng một thư viện hỗ trợ XML-RPC trong ngôn ngữ lập trình của bạn.

Thư viện này sẽ giúp bạn tạo yêu cầu và kiểm tra kết quả từ dịch vụ XML-RPC.

Kiểm tra log hệ thống

Kiểm tra log của máy chủ web hoặc ứng dụng để xem liệu có thông tin về hoạt động của dịch vụ XML-RPC hoặc các lỗi liên quan không.

Nếu Log ghi nhận mã trạng thái 403 trên các request gọi đến XML-RPC thì có nghĩa XML-RPC đang bị chặn.

trang thai xml rpc bi trong logs

Liên hệ với nhà cung cấp dịch vụ

Nếu bạn không thể tự kiểm tra hoặc xác định trạng thái của dịch vụ XML-RPC, bạn có thể liên hệ với nhà cung cấp dịch vụ lưu trữ web/hosting hoặc quản trị viên hệ thống để họ kiểm tra và báo cáo về trạng thái của dịch vụ này.

Tổng kết

Bảo vệ trang web của bạn khỏi các mối đe dọa tiềm ẩn của XML-RPC là một phần quan trọng của việc duy trì tính toàn vẹn và an toàn của trang web. Bằng cách áp dụng các biện pháp bảo mật và theo dõi thường xuyên, bạn có thể đảm bảo rằng trang web của bạn luôn hoạt động một cách an toàn và ổn định.

Câu hỏi thường gặp

Q. Tôi có thể tìm địa chỉ ip của máy chủ web/hosting hoặc ứng dụng mà tôi muốn cho phép kết nối XML-RPC ở đâu?

A. Thông thường, ip của dịch vụ web/hosting sẽ do nhà cung cấp dịch vụ web/hosting gửi cho bạn qua email hoặc có sẵn trên trang quản trị của họ. Đối với ip của các ứng dụng bên thứ 3 như Jetpack,… bạn có thể truy cập trang chủ dịch vụ của họ để lấy được các thông tin cần thiết.

Q. Trang web WordPress của tôi bị lỗi sau khi chặn XML-RPC?

A. Nếu xảy ra lỗi, hãy mở lại XML-RPC bằng cách hoàn nguyên thao tác mà bạn đã thực hiện. Bạn cũng có thể liên hệ đơn vị quản lý web/hosting hoặc quản trị viên hệ thống để được hỗ trợ.

Q. Tôi đã chặn tệp XML-RPC nhưng cuộc tấn công DDOS vẫn không dừng lại?

A. Điều đó vẫn luôn xảy ra, vì XML-RPC chỉ là một trong những mục tiêu mà kẻ xấu đang khai thác trên website của bạn. Hãy thử dùng một dịch vụ chống DDOS chuyên nghiệp hoặc liên hệ quản trị viên hệ thống để được hỗ trợ.

Viết một bình luận