Bot tấn công không chọn mục tiêu theo quy mô website. Chúng quét hàng loạt, không phân biệt shop nhỏ hay doanh nghiệp lớn. Nếu web đang dùng WordPress với đường dẫn đăng nhập mặc định và mật khẩu đơn giản, nhiều khả năng đang có ai đó thử mật khẩu vào ngay lúc này mà bạn chưa biết. Đây là cách brute force (tấn công thử mật khẩu) hoạt động và lý do nó đáng chú ý hơn nhiều người nghĩ.
Brute force là gì
Brute force là kiểu tấn công vào hệ thống bằng cách thử lần lượt các tổ hợp mật khẩu hoặc thông tin xác thực cho đến khi tìm ra thông tin đúng. Không có kỹ thuật gì phức tạp ở đây, chỉ là sức mạnh tính toán: thử nhiều đủ, cuối cùng sẽ đúng.
Theo định nghĩa của OWASP (tổ chức bảo mật ứng dụng web quốc tế), brute force có thể nhắm vào mật khẩu, khoá mã hoá, hoặc bất kỳ dạng thông tin xác thực nào có không gian giá trị hữu hạn. Trong thực tế với website WordPress, mục tiêu thường là trang đăng nhập quản trị. Nguồn: OWASP: Brute Force Attack.
Bot thực hiện việc này tự động, không mệt mỏi. Một bot được cấu hình tốt có thể thử hàng trăm đến hàng nghìn tổ hợp mỗi phút. Nếu mật khẩu là “admin123” hay “123456”, thời gian dò ra chỉ vài giây vì đây là những mật khẩu nằm ở đầu danh sách bot thường dùng.

Vì sao WordPress là mục tiêu phổ biến
WordPress chiếm hơn 40% tổng số website trên internet. Con số đó có nghĩa là nếu bot muốn tấn công ngẫu nhiên, đặt cược vào WordPress là cách hiệu quả nhất về xác suất. Không phải vì WordPress kém bảo mật hơn các nền tảng khác, mà vì số lượng mục tiêu quá lớn.
Đường dẫn đăng nhập mặc định /wp-login.php là thông tin công khai, ai cũng biết. Bot tự động thử ngay địa chỉ đó mà không cần do thám gì thêm. Ngoài ra, WordPress còn có /xmlrpc.php, một file giao thức cũ cho phép thử nhiều tổ hợp tên người dùng và mật khẩu trong một yêu cầu, thay vì từng cái một, giúp bot tấn công nhanh gấp nhiều lần.
Tên người dùng quản trị mặc định “admin” cũng là vấn đề. Nhiều người cài WordPress rồi giữ nguyên tên này, vô tình giúp kẻ tấn công hoàn thành được một nửa công việc (đoán username) mà không cần thử. Chỉ còn mỗi mật khẩu cần dò.
Brute force, credential stuffing và phishing khác nhau ở đâu
Ba kiểu tấn công này đều nhắm vào thông tin đăng nhập nhưng hoạt động theo cơ chế khác nhau. Nhầm lẫn chúng với nhau sẽ dẫn đến chọn sai cách phòng.

| Tiêu chí | Brute force | Credential stuffing | Phishing |
|---|---|---|---|
| Cách thức | Thử mật khẩu ngẫu nhiên hoặc từ danh sách phổ biến | Dùng email + mật khẩu bị rò rỉ từ dịch vụ khác | Lừa người dùng tự nhập vào trang giả mạo |
| Cần thông tin từ trước | Chỉ cần username | Cần danh sách rò rỉ từ vụ khác | Không cần |
| Tốc độ thành công | Chậm, phụ thuộc độ dài mật khẩu | Nhanh nếu nạn nhân dùng lại mật khẩu | Tùy vào người dùng có nhập hay không |
| Ngăn bằng gì | Giới hạn số lần thử, 2FA, đổi đường dẫn đăng nhập | 2FA, cảnh báo đăng nhập từ thiết bị lạ | Ý thức người dùng, khoá cứng FIDO2 |
Brute force tự sinh hoặc thử mật khẩu từ danh sách phổ biến, không cần thông tin gì từ trước về nạn nhân ngoài username. Credential stuffing thì ngược lại: cần danh sách email và mật khẩu đã bị rò rỉ từ một dịch vụ khác. Nhiều người dùng lại mật khẩu ở nhiều nơi, nên danh sách rò rỉ từ một site có thể mở khoá được tài khoản ở site khác. Còn phishing không thử mật khẩu mà lừa người dùng tự nhập vào trang giả mạo.
Điểm quan trọng với chủ website: brute force và credential stuffing đều nhắm vào trang đăng nhập và có thể ngăn bằng cùng một nhóm biện pháp kỹ thuật. Phishing lại cần người dùng đề phòng phía bản thân, không hoàn toàn kiểm soát được từ phía server.
Nhận biết web đang bị brute force
Dấu hiệu rõ ràng nhất là server load bất thường. Khi có hàng nghìn yêu cầu đăng nhập thất bại dồn vào trong thời gian ngắn, tài nguyên server bị kéo lên cao, web tải chậm hoặc có lúc trả về lỗi 500 mà không rõ nguyên nhân.
Trong WordPress, plugin bảo mật hoặc nhật ký lỗi (wp-content/debug.log nếu bật) ghi lại số lần đăng nhập thất bại. CPanel cũng có nhật ký truy cập nơi có thể thấy hàng loạt yêu cầu POST tới /wp-login.php từ cùng một địa chỉ IP hoặc nhiều IP khác nhau. Nếu thấy hàng trăm dòng như vậy trong vài phút, đó là brute force.
Khi tài khoản admin bị khoá do quá nhiều lần nhập sai, đó cũng là dấu hiệu ai đó đang thử mật khẩu. Đây là lý do nên đặt ngưỡng khoá ở mức hợp lý, không quá thấp (gây phiền cho người dùng thật nhập nhầm) nhưng cũng không quá cao (để bot thử thoải mái).
3 cách chặn brute force hiệu quả nhất cho WordPress

Giới hạn số lần đăng nhập: đây là cách hiệu quả nhất và dễ làm nhất. Sau 3-5 lần nhập sai, khoá địa chỉ IP đó trong một khoảng thời gian (15-60 phút). Bot không thể tiếp tục vòng lặp, toàn bộ cuộc tấn công bị bẻ gãy. Plugin phổ biến: Limit Login Attempts Reloaded (miễn phí) hoặc WP Cerber Security. Cài xong cấu hình ngưỡng và thời gian khoá là hoàn thành.
Đổi đường dẫn đăng nhập: thay /wp-login.php mặc định bằng đường dẫn khác, ví dụ /quan-tri-web22. Bot tự động không biết địa chỉ mới, tất cả yêu cầu tới URL cũ trả về 404 và bị bỏ qua. Plugin WPS Hide Login thực hiện việc này mà không sửa code. Đây là bước đơn giản nhưng cắt gần 100% lượng bot tự động.
Bật xác thực 2 lớp (2FA): ngay cả khi kẻ tấn công dò ra đúng mật khẩu, họ vẫn cần lớp xác thực thứ hai từ điện thoại của bạn. Mật khẩu đúng cũng trở nên vô dụng. Phân tích của Microsoft cho thấy 2FA ngăn chặn được 99,9% các vụ xâm phạm tài khoản. Nếu bạn chưa rõ các dạng 2FA khác nhau, bài viết xác thực 2 lớp là gì và dạng nào an toàn hơn giải thích chi tiết cách chọn phương thức phù hợp.
Tại sao mật khẩu mạnh thôi chưa đủ
Mật khẩu mạnh (dài, có chữ hoa, số, ký tự đặc biệt) làm cho brute force tốn thời gian hơn đáng kể. Một mật khẩu ngẫu nhiên 12 ký tự có thể mất hàng chục năm để dò nếu không có cơ chế giới hạn số lần thử.
Nhưng mật khẩu mạnh không giải quyết được tình huống dữ liệu bị rò rỉ từ nơi khác (credential stuffing), cũng không ngăn được phishing. Ngoài ra, không ít người dùng lại mật khẩu ở nhiều nơi, làm mật khẩu mạnh đó mất giá trị nếu một trong số đó bị rò rỉ.
Tổ hợp “mật khẩu mạnh + không dùng lại + 2FA” mới là lớp phòng đủ vững. Mật khẩu mạnh tăng thời gian dò, 2FA vô hiệu hóa ngay cả khi mật khẩu bị lộ. Cả hai cần nhau.
Chi phí phòng ngừa nhỏ hơn thiệt hại rất nhiều

Cài plugin giới hạn đăng nhập: miễn phí. Thay URL trang quản trị mặc định bằng đường dẫn tùy chỉnh: miễn phí. Bật 2FA với ứng dụng Google Authenticator: miễn phí. Ba bước này cộng lại mất khoảng 30 phút và không tốn tiền.
So với thiệt hại nếu bị đột nhập: gỡ mã độc và khôi phục web thường tốn từ 1-5 triệu đồng, chưa kể thời gian downtime. Google đánh dấu web là “nguy hiểm” làm traffic tự nhiên có thể sụt 50-90% trong nhiều tuần, ảnh hưởng trực tiếp đến đơn hàng từ tìm kiếm. Với web thương mại điện tử, một tuần không bán được qua web là thiệt hại đáng kể. Nghị định 13/2023/NĐ-CP về quyền riêng tư và thông tin người dùng cũng đặt trách nhiệm pháp lý lên người vận hành website nếu dữ liệu khách hàng bị lộ ra ngoài.
Bài toán đơn giản: phòng rẻ hơn chữa rất nhiều, và thời gian đầu tư để phòng cũng ít hơn nhiều lần so với thời gian khắc phục khi có sự cố.
Câu hỏi thường gặp về brute force
Brute force có thể phá khoá mật khẩu nào cũng được không?
Về lý thuyết thì có, nhưng thời gian cần thiết tăng theo hàm mũ cùng với độ dài mật khẩu. Mật khẩu 8 ký tự chữ thường có thể bị dò trong vài giờ trên phần cứng hiện đại. Mật khẩu 16 ký tự ngẫu nhiên kết hợp chữ hoa, chữ thường, số và ký tự đặc biệt thì brute force cần hàng chục năm mới dò ra, dùng phần cứng hiện đại nhất hiện nay. Đây là lý do kết hợp thêm giới hạn số lần thử và 2FA quan trọng hơn chỉ tăng độ dài mật khẩu.
Bot tấn công từ một địa chỉ IP hay nhiều IP?
Cả hai. Bot đơn giản dùng một IP và dễ bị chặn. Bot tinh vi hơn phân tán qua nhiều IP, thậm chí qua mạng lưới thiết bị bị nhiễm (botnet), mỗi IP chỉ thử vài lần nên tránh được ngưỡng khoá thông thường. Đây là lý do bên cạnh giới hạn số lần thử theo IP, cần thêm CAPTCHA hoặc đổi đường dẫn đăng nhập để giảm bề mặt tấn công tổng thể.
xmlrpc.php có nên tắt không?
Nếu không dùng các ứng dụng kết nối với WordPress qua API cũ này (ứng dụng di động WordPress.com, Jetpack theo một số tính năng), tắt đi là hợp lý. File này cho phép thực hiện nhiều yêu cầu đăng nhập trong một lần gọi, là công cụ khuếch đại tốc độ brute force. Plugin bảo mật như Wordfence hoặc WP Cerber có tùy chọn tắt xmlrpc.php mà không cần sửa code.
Có cách nào biết ai đã thử đăng nhập vào web không?
Có. Plugin bảo mật như Wordfence, WP Activity Log, hoặc WP Cerber ghi lại nhật ký đăng nhập thất bại kèm địa chỉ IP và thời gian. Hosting có nhật ký truy cập (access log) cũng cho thấy thông tin tương tự. Xem định kỳ hoặc bật cảnh báo qua email giúp phát hiện sớm khi có hoạt động bất thường.
Nếu bạn muốn Web22 kiểm tra và gia cố trang đăng nhập cùng các điểm yếu bảo mật khác trên website, xem thêm cách tiếp cận tại dịch vụ bảo mật website của Web22.
