Khi bot tự động ghé thăm website của bạn: Câu chuyện từ log thực tế

Một ngày bình thường, khi kiểm tra access log, bạn phát hiện hàng chục ngàn request bất thường trong thời gian ngắn — tất cả từ một nguồn duy nhất. Không phải người dùng thật. Không phải Googlebot. Đây là một con bot quét lỗ hổng tự động, và nó vừa “đánh giá” toàn bộ website từ đầu đến cuối chỉ trong vài chục giây. Bài viết này là câu chuyện về những gì bot đó đã làm, tại sao nó làm vậy, và điều quan trọng nhất — bạn cần làm gì để bảo vệ website của mình khi những con bot tương tự ghé thăm.

Khi bot tự động ghé thăm website của bạn: Câu chuyện từ log thực tế

Vậy bot này đang “quét” cái gì?

Nói đơn giản, đây là hình thức mass vulnerability scanning kết hợp credential harvesting. Bot này không biết website của bạn chạy gì, nó chỉ bắn hàng loạt payload vào mọi IP public và chờ xem cái nào trúng đích. Giống như một tên trộm đi thử chìa khóa từng ngôi nhà trong khu phố — không biết nhà nào mở cửa, nhưng thử đủ thì sẽ có nhà mở.

1. Khai thác CVE-2017-9841 — PHPUnit Remote Code Execution

Đây là vector tấn công chính. Bot đã thử truy cập file eval-stdin.php của PHPUnit qua nhiều đường dẫn khác nhau:

  • /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
  • /laravel/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
  • /yii/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
  • /zend/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
  • /lib/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
  • /vendor/phpunit/phpunit/Util/PHP/eval-stdin.php

CVE-2017-9841 là lỗ hổng RCE trong PHPUnit phiên bản trước 4.8.28 và 5.x trước 5.6.3. File eval-stdin.php chứa dòng code eval('?>'.file_get_contents('php://input')), cho phép attacker thực thi mã PHP tùy ý qua HTTP POST request. Đây là một trong những lỗ hổng được khai thác nhiều nhất trong lịch sử web application security, với CVSS 9.8 (Critical) và EPSS 94.2%.

Bot đã thử nhiều đường dẫn khác nhau để tìm PHPUnit trong các vị trí cài đặt không chuẩn, phản ánh chiến thuật path enumeration tinh vi của các công cụ mass-scanning hiện đại.

2. Tìm kiếm Stripe API Keys

Bot đã quét hàng loạt đường dẫn liên quan đến Stripe:

  • /stripe-keys.json
  • /config/stripe.json
  • /.stripe/
  • /stripe/.env
  • /.well-known/stripe/
  • /stripe.yaml
  • /stripe.env
  • /payment/stripe.json
  • /config/stripe.yaml

Đây là hình thức credential harvesting — tìm kiếm các file chứa API keys của Stripe để đánh cắp thông tin thanh toán, sau đó có thể sử dụng cho các giao dịch gian lận hoặc bán trên chợ đen.

3. Tìm kiếm File Môi Trường (.env)

Các request tìm kiếm file .env.env.local nhằm thu thập thông tin nhạy cảm như database credentials, API keys, JWT secrets, và các biến môi trường khác.

4. WordPress Sensitive Files

Bot quét các file nhạy cảm của WordPress:

  • /wp-config.php — File cấu hình chứa DB credentials
  • /wp-login.php — Trang đăng nhập admin
  • /wp-admin/ — Dashboard quản trị

5. Webmin CGI RCE

Nhiều request nhắm vào các script CGI của Webmin:

  • /software/install-updates.cgi
  • /package-updates/download.cgi
  • /package-updates/perform.cgi
  • /package-updates/yum.cgi
  • /servers/save.cgi
  • /proc/index.cgi
  • /package-updates/apt.cgi

Đây là các endpoint quản trị hệ thống của Webmin, thường bị khai thác để thực thi lệnh từ xa.

6. n8n Workflow Automation API

Nhiều request nhắm vào REST API của n8n:

  • /rest/variables
  • /rest/settings
  • /rest/credentials-for-node
  • /rest/node-types
  • /rest/logout
  • /rest/oauth2-credential/auth

n8n là công cụ automation workflow phổ biến. Bot đang tìm cách truy cập các endpoint quản lý credentials và settings.

7. Next.js Internal Endpoints

Nhiều request nhắm vào các endpoint nội bộ của Next.js:

  • /_next
  • /_next/image
  • /_next/data/*/index.json
  • /_next/data/*/about.json
  • /_rsc
  • /__rsc
  • /__nextjs_action
  • /.action

Các endpoint này có thể bị khai thác để lấy thông tin nội bộ của ứng dụng Next.js hoặc thực thi các server actions không được phép.

8. Các Vector khác

  • GraphQL: /graphql — Tìm kiếm introspection để lấy schema
  • SharePoint: /_vti_bin/*, /_api/*, /_layouts/15/*
  • MongoDB: /:27017 — Quét cổng MongoDB mặc định
  • Wildcard scanning: /*, /admin/*, /api/*, /dashboard/*, /cms/*, /media/*, /publish/*, /billing/*, /pages/*, /console/*, /manage/*, /chat/*, /webhook-waiting/*, /actions/*, /products, /docs, /signup, /[[...optional]]

Phân tích hành vi bot

Đặc điểm nhận dạng

  • Tốc độ cực nhanh: Hàng chục ngàn request trong vài phút
  • Đơn nguồn: Tất cả request từ một điểm xuất phát duy nhất
  • Đa vector: Kết hợp RCE, credential harvesting, và reconnaissance
  • Path enumeration: Thử nhiều đường dẫn cho cùng một lỗ hổng
  • Không có User-Agent đặc trưng: Có thể sử dụng User-Agent phổ thông để tránh phát hiện

Thông tin nguồn tấn công

IP nguồn thuộc dải được đăng ký bởi một nhà cung cấp hosting tại châu Âu. Theo dữ liệu từ AbuseIPDB, IP này đã bị báo cáo hàng nghìn lần từ hàng trăm nguồn khác nhau. Đây là một IP đã bị gắn cờ rõ ràng trong cộng đồng bảo mật.

Mối liên hệ với các chiến dịch Botnet

Các mẫu quét này có đặc điểm rất giống với các chiến dịch của botnet Androxgh0st — một malware Python-based được FBI và CISA cảnh báo. Androxgh0st khai thác CVE-2017-9841 kết hợp với việc tìm kiếm file .env để đánh cắp credentials AWS, Office 365, Twilio, và Stripe. Ngoài ra, các botnet khác như Kinsing, KashmirBlack, Sysrv, và RondoDox cũng sử dụng chiến thuật tương tự.

Cách phòng thủ

1. Chặn IP tấn công

Thêm IP vào blacklist ngay lập tức tại tầng firewall hoặc WAF:

# Nginx
location / {
    deny xxx.xxx.xxx.xxx;
    # ...
}

# Apache
<RequireAll>
    Require all granted
    Require not ip xxx.xxx.xxx.xxx
</RequireAll>

# Cloudflare / WAF
Thêm rule block IP xxx.xxx.xxx.xxx

2. Chặn truy cập vendor/ và .env

# Nginx
location ~* /(vendor|\.env) {
    deny all;
    return 403;
}

# Apache
<DirectoryMatch "vendor|\.env">
    Require all denied
</DirectoryMatch>

3. Cấu hình Fail2Ban

[phpunit-scan]
enabled = true
filter = phpunit-scan
logpath = /var/log/nginx/access.log
maxretry = 1
findtime = 60
bantime = 86400

# Filter: /etc/fail2ban/filter.d/phpunit-scan.conf
[Definition]
failregex = ^<HOST>.*(eval-stdin\.php|\.env|wp-config\.php).*

4. Kiểm tra và cập nhật PHPUnit

Nếu website sử dụng PHP, đảm bảo:

  • Không đưa thư mục vendor/ lên production
  • Chạy composer install --no-dev khi deploy
  • Cập nhật PHPUnit lên phiên bản 4.8.28+ hoặc 5.6.3+

5. Kiểm tra IOCs (Indicators of Compromise)

Nếu đã từng có file eval-stdin.php hoặc .env trên server:

  • Kiểm tra access log cho các POST request đến eval-stdin.php
  • Tìm kiếm webshell mới được upload
  • Kiểm tra cron jobs và scheduled tasks bất thường
  • Rà soát file hệ thống có dấu hiệu bị sửa đổi

6. Sử dụng WAF

Cấu hình WAF rules để chặn các pattern quét phổ biến:

  • Block request đến */eval-stdin.php
  • Block request đến *.env, .env.*
  • Block request đến wp-config.php
  • Rate limiting cho các request bất thường

Kết luận

Đợt quét này là một ví dụ điển hình của automated mass vulnerability scanning trong thời đại hiện nay. Bot không cần biết website của bạn chạy gì — nó chỉ cần bắn hàng loạt payload vào mọi IP public, hy vọng một trong số đó sẽ trúng đích. Điều đáng lo ngại là CVE-2017-9841 đã gần 9 năm tuổi nhưng vẫn là một trong những lỗ hổng được khai thác nhiều nhất, với hơn 80,000 lần tấn công chỉ trong 30 ngày gần đây.

Thực tế cho thấy, chỉ cần một file eval-stdin.php bị quên xóa hoặc một file .env bị expose, attacker có thể chiếm quyền toàn bộ hệ thống trong vài giây. Việc duy trì hygiene cơ bản — không đưa dev dependencies lên production, chặn truy cập thư mục nhạy cảm, và giám sát log thường xuyên — là những biện pháp đơn giản nhưng hiệu quả nhất để bảo vệ website khỏi các đợt quét tự động như thế này.

Hãy kiểm tra log của bạn ngay hôm nay. Có thể bot đã ghé thăm mà bạn không hề hay biết.

Tham khảo

  • CVE-2017-9841 — NVD National Vulnerability Database
  • FBI/CISA Joint Advisory on Androxgh0st Malware
  • VulnCheck Blog: “9 Year-Old PHP Vulnerability Keeps Swinging”
  • AbuseIPDB — IP Reputation Database
  • FortiGuard Labs — PHPUnit RCE Outbreak Alert

Bình luận


  • Không có bình luận.

Công cụ trực tuyến

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...