Cross-Site Request Forgery (CSRF hoặc XSRF) là một trong những hack nghiêm trọng nhất đối với website WordPress. Hack này xảy ra do lỗ hổng trong plugin WordPress cài trên site.
Ở đây, hacker lừa user thực hiện hành động độc hại gây hại cho cả chủ site và user. Tấn công CSRF có hậu quả tàn khốc cho cả hai và cần ngăn chặn ngay từ đầu!
Dùng CSRF, hacker có thể giành toàn bộ quyền kiểm soát website và dùng nó chạy bất kỳ hoạt động độc hại nào. Chúng có thể redirect visitor đến site độc hại hoặc lừa họ tải malware. Thậm chí có thể cắp tiền của bạn và khách hàng!
Không chỉ đó. Việc có thể lan rộng: Google có thể blacklist site, hosting provider có thể suspend site.
Nếu bạn là nạn nhân hoặc muốn ngăn chặn, chúng tôi hỗ trợ. Bài viết này chỉ cách khắc phục tấn công CSRF và cách ngăn chặn.
TL;DR: Nếu website bị hack, cần khắc phục ngay. Gợi ý: tải và cài Plugin xóa tấn công CSRF trên website để quét sâu & dọn dẹp tức thì. Sau khi sạch, plugin bảo vệ site khỏi hack tương lai.
Mục lục
→ Tấn công CSRF (Cross-Site Request Forgery) là gì?
→ Lỗ hổng CSRF WordPress xảy ra như thế nào trên site bạn?
→ Cách ngăn chặn tấn công CSRF trên WordPress?
→ Biện pháp phòng ngừa CSRF cho Developer Plugin
→ Biện pháp phòng ngừa CSRF cho Chủ sở hữu Website WordPress
Tấn công CSRF (Cross-Site Request Forgery) là gì?
Tấn công CSRF WordPress hơi phức tạp nhưng chúng tôi sẽ giải thích chi tiết.
Trên website có đăng ký user, thành viên, hoặc đăng nhập, mỗi user có quyền truy cập đặc quyền vào tài khoản của mình. Ví dụ: tài khoản Amazon, Gmail, hoặc ngân hàng trực tuyến.
Website cung cấp thông tin đăng nhập – username và mật khẩu – để xác thực user. Khi user muốn đăng nhập, nhập username/password để verify. Cách này, website thiết lập niềm tin với user và trình duyệt của họ.
Trong tấn công CSRF, hacker lừa user đã xác thực thực hiện hành động độc hại.
1. Hiểu 'Cross Site' (Cross-site)
Để giải thích, dùng ví dụ. Giả sử user đã đăng nhập Site A và để mở trên tab trình duyệt. (Nhớ: Site A đã đăng nhập – quan trọng.)
Giả sử hacker có email của user. Gửi email về giảm giá sắp hết hạn. User bị lừa click link trong email. Mở Site B (do hacker điều khiển).
Trên Site B, yêu cầu điền form hoặc nhập email để nhận giảm giá. User click nút 'submit' có vẻ bình thường.
Nhưng bên dưới nút 'submit' trên Site B, hacker đã chèn script độc hại.
Nhớ Site A mở trên tab kia. Script này gửi request đến Site A và chạy hành động độc hại trên đó. Do đó gọi là 'cross-site'.
2. Hiểu 'Request' (Yêu cầu)
Script của hacker gửi request từ Site B đến Site A thay mặt user. Hành động độc hại có thể là bất cứ thứ gì: đổi mật khẩu admin, thậm chí chuyển tiền khỏi tài khoản ngân hàng!
3. Hiểu 'Forgery' (Giả mạo)
Cuối cùng, vì hacker dùng xác thực của user để lừa Site A, đó là 'giả mạo'. Do đó tên 'Cross-site Request Forgery'.
Tóm lại, hacker khiến Site A nghĩ lệnh độc hại là request hợp lệ từ user đã xác thực. Nhưng Site B làm sao gửi request đến Site A? Sẽ đi sâu ở phần sau.
Lưu ý: Phần này kỹ thuật, dành cho user WordPress kỳ cựu hoặc developer. Muốn bỏ qua đến phòng ngừa CSRF cho chủ site, nhảy đến Biện pháp phòng ngừa CSRF cho Chủ sở hữu Website WordPress.
[Quay lại đầu trang ↑]
Lỗ hổng CSRF WordPress xảy ra như thế nào trên site bạn?
Để giải thích, cần hiểu cách browser user và website giao tiếp.
1. Hiểu Request của Browser
Thảo luận 2 loại HTTP request và cookie trình duyệt:
i. HTTP GET Request
Khi truy cập website, bạn gửi HTTP GET request đến server site. Request yêu cầu dữ liệu hiển thị front-end. Server phản hồi và gửi dữ liệu. Nội dung website load trên trình duyệt.
Khi chưa đăng nhập, là user chưa xác thực. GET và POST request không dùng cookie. Không vấn đề bảo mật. Nhưng khi user đăng nhập, họ trở thành user đã xác thực.
Website dùng cookie để nhận diện và phục vụ user. Có thể dùng cookie tạo dữ liệu chỉ liên quan đến unique ID đó. Giúp login dễ dàng, hiển thị quảng cáo/ sản phẩm theo sở thích user, v.v.
ii. Quy trình CSRF
Quay lại cách lỗ hổng CSRF xảy ra. Để tấn công hiệu quả, hacker cần user đã xác thực dùng cookie.
Giải thích bằng ví dụ. Cho thấy hacker lấy quyền tài khoản user và dùng nó hack website qua lỗ hổng CSRF.
→ Phía User xảy ra gì?
- User đăng nhập targetwebsite.com trên trình duyệt.
- Hacker dụ user click trickwebsite.com bằng email nói truy cập site và đăng ký nhận $50. (Link cũng có thể chèn trên targetwebsite.com qua lỗ hổng khác)
- Giả sử nạn nhân tin site lừa là hợp pháp và bị lừa. Điền form và click 'Submit'.
- Trên trickwebsite.com, hacker đã đặt HTML code sau nút 'Submit'. Khi click, sẽ gửi POST request đến targetwebsite.com (nơi user đã đăng nhập) thay mặt user này.
→ Phía Website xảy ra gì?
- Dùng cookie, targetwebsite.com verify user (và trình duyệt) và chấp nhận request. Request trông hợp pháp vì từ user đã xác thực.
- Nhưng POST request chứa script độc hại có thể hại website. Ví dụ: script chứa lệnh đổi mật khẩu tài khoản thành "newpassword123".
- Khi request được chấp nhận bởi targetwebsite.com, code chạy và đổi mật khẩu. Rồi, hacker đăng nhập được tài khoản dùng mật khẩu mới và kiểm soát hoàn toàn.
- Hacker chạy thêm tấn công trên website. Tùy đặc quyền của user, có thể truy cập database targetwebsite.com và kiểm soát chức năng.
Chỉ là một ví dụ hacker làm được với CSRF. Có nhiều kịch bản khác. Cả user và website đều bị ảnh hưởng.
[Quay lại đầu trang ↑]
Cách ngăn chặn tấn công CSRF trên WordPress?
Website WordPress bị lộ CSRF vì plugin có lỗ hổng cho phép.
Theo báo cáo full disclosure của PluginVulnerabilities.com, nhiều plugin phổ biến có vấn đề bảo mật làm site dễ bị CSRF. Để ngăn chặn, developer plugin cần triển khai biện pháp bảo mật. Sẽ nói sơ qua rồi nói chủ site có thể làm gì.
- Biện pháp phòng ngừa CSRF cho Developer Plugin
- Biện pháp phòng ngừa CSRF cho Chủ sở hữu Website WordPress
i. Biện pháp phòng ngừa CSRF cho Developer Plugin
Nếu bạn là developer plugin, đây là vài biện pháp ngăn chặn CSRF:
1. Anti-CSRF Tokens
Anti-CSRF token là giá trị ẩn gửi kèm cookie và request của user. Hoạt động:
- Web server sinh token và đặt làm hidden field trên form.
- Khi user điền và submit form, token đưa vào POST request.
- Server so sánh token sinh ra và token user gửi.
Nếu khớp, request hợp lệ. Không khớp = request không hợp lệ. Ngăn chặn CSRF.
Developer thêm token khi tạo/cập nhật plugin.
2. Sử dụng Nonces
Dù thường dùng thay thế nhau, Anti-CSRF Token và Nonce khác nhau. Nonce (số dùng một lần) giống one-time password cho request.
Khi submit HTTP request, nonce sinh ra để verify request. Dùng xong, nonce vô hiệu, user không submit lại với cùng nonce.
3. Same-Site Cookies
CSRF xảy ra do cross-site request dùng cùng cookie. Same-site cookie nghĩa là cookie chỉ gửi nếu request từ cùng website tạo cookie.
Vấn đề: ngoài Chrome, Firefox và vài trình duyệt khác, không phải trình duyệt nào cũng hỗ trợ same-site cookie.
Có thể dùng làm lớp phòng thủ thêm nhưng không nên dùng đơn lẻ để ngăn CSRF.
Không đi sâu thêm vì hầu hết biện pháp này bị hacker bypass ngày nay. Hacker ngày càng khôn, phát triển kỹ thuật mới vượt qua biện pháp phòng ngừa.
Chuyển sang biện pháp chủ động và phản ứng bạn có thể làm sebagai chủ site WordPress để bảo vệ khỏi CSRF.
[Quay lại đầu trang ↑]
ii. Biện pháp phòng ngừa CSRF cho Chủ sở hữu Website WordPress
Như đã nói, creator plugin nên làm an toàn. Nhưng nếu họ không làm? Bạn biết plugin nào đã triển khai anti-CSRF?
WordPress hiếm khi đứng độc lập. Plugin đóng vai trò quan trọng cho chức năng và thiết kế website. Vậy mà WordPress cần plugin, bạn có tin mù mịt rằng plugin đã làm bảo mật phù hợp?
Không! Chủ site cần canh chừng và tự có biện pháp bảo mật dù developer plugin không làm.
Đây là những gì bạn có thể làm để bảo vệ khỏi CSRF:
1. Dùng Plugin Anti-CSRF
Không nhiều plugin trong kho WordPress dành riêng cho CSRF. Tìm được 2 plugin:
(A) Comment Form CSRF Protection – Thêm anti-CSRF token vào form comment. Token có giá trị duy nhất, giữ bí mật, khó đoán. User submit form, token bí mật gửi kèm. Chỉ khớp mới chấp nhận request.
(B) Same-site cookies – Hoạt động trên trình duyệt hỗ trợ: Chrome, Firefox, IE, Edge. Đảm bảo khi submit HTTP request, cookie gửi đến từ cùng site. Chặn cross-site request, do đó chặn mọi tấn công CSRF.
2. Cài Plugin bảo mật WordPress toàn diện
Nhiều plugin bảo mật cho WordPress. Chúng giữ site an toàn khỏi mọi hacker bao gồm CSRF. Nhưng không phải plugin nào cũng cấp cùng mức bảo mật.
Hơn nữa, tấn công CSRF khó phát hiện. Hacker ngụy trang tốt từ chủ site và user, nên lọt lưới. Cần plugin phát hiện được malware ngụy trang này.
Chọn plugin bảo mật, đảm bảo nó làm sau đây để chống CSRF:
- Quét thường xuyên website tìm script độc hại.
- Duyệt qua mọi file và database website.
- Khả năng phát hiện mọi loại malware – bao gồm mới, ẩn, ngụy trang. (Plugin chỉ tìm malware đã biết.)
- Cảnh báo nếu có hoạt động đáng ngờ.
- Cung cấp dashboard độc lập để dọn dẹp site ngay cả khi hacker khóa bạn khỏi admin.
Plugin cung cấp bảo vệ và tính năng đó là MalCare. Cài lên WordPress, nó cho phép xóa mọi tấn công CSRF. Cũng xóa malware WordPress hacker chèn khi hack.
Website được bảo vệ bởi tường lửa chủ động chặn IP độc hại và bad bot.
Nếu hacker hack site bằng cross-site request độc hại, plugin bảo mật này cảnh báo ngay. Bạn hành động ngay bằng cùng plugin.
3. Hardening Website
WordPress khuyến khích biện pháp hardening nhất định. Làm cho hacker cực khó xâm nhập. Đã nói sơ vài điểm nhưng khuyên đọc hướng dẫn chi tiết WordPress Hardening.
Vì nhiều điểm kỹ thuật, hướng dẫn chi tiết giúp hiểu rõ hơn. Vài biện pháp hardening ngăn chặn/giảm thiệt hại CSRF:
a. Dùng Xác thực 2 yếu tố (2FA)
2FA thêm lớp verify user. User nhập login credentials, sau đó cần mật khẩu thứ 2. Có thể là OTP gửi email/số điện thoại đăng ký, hoặc số sinh bởi app như Google Authenticator.
b. Chặn thực thi PHP trong thư mục không tin cậy
Nếu CSRF cho hacker truy cập file website, chúng có thể thực thi hàm PHP để làm việc độc hại. (Hàm PHP = khối code trong chương trình). Có thể vô hiệu hóa PHP execution nơi không cần thiết.
c. Vô hiệu hóa File Editor
Nếu hacker vào tài khoản WordPress Admin, kiểm soát toàn bộ site. Trên dashboard, truy cập "Editor" dưới plugin/theme. Chỉnh sửa hoặc upload script của họ để hiển thị nội dung, deface site, SEO spam user, v.v.
d. Đổi Security Keys
Có nhận thấy không cần nhập login credentials mỗi lần truy cập WordPress? Đã điền sẵn ở trường chỉ định. Để an toàn thông tin này, WordPress dùng security keys mã hóa và lưu trữ. Nếu hacker xâm nhập qua CSRF, chúng có thể truy cập thông tin này. Chúng đổi thành cái khác và dùng để login admin site khi muốn.
- Có thể áp dụng thủ công như hướng dẫn khuyên. Hoặc dùng MalCare triển khai chỉ trong vài click.
4. Xóa tất cả Theme & Plugin không dùng
Càng nhiều plugin/theme cài, càng nhiều cơ hội hacker khai thác. Tốt nhất xóa plugin/theme không dùng, chỉ giữ những cái dùng.
Bên cạnh đó, có thể làm thêm: chuyển HTTP sang HTTPS, cài plugin bảo mật, bảo vệ trang đăng nhập.
[Quay lại đầu trang ↑]
Tổng kết
Tấn công CSRF hậu quả nghiêm trọng cho cả user và website.
Nếu hacker thành công chạy script qua HTTP request, chiếm được site. Sau đó, không biết họ làm gì. Có thể deface site hiển thị propaganda hoặc bán hàng cấm/ma túy. Có thể redirect visitor đến site của họ.
Các site đó thường là site người lớn, bán hàng cấm, hoặc lừa visitor tải malware.
- Là chủ site, cần biện pháp an toàn chống tấn công. Khuyên giữ plugin bảo mật như MalCare active trên WordPress vì cung cấp bảo vệ toàn diện.
- Khuyên triển khai hardening website để hacker khó xâm nhập.
- Cuối cùng, thận trọng khi dùng plugin/theme. Cài theme/plugin uy tín từ kho WordPress hoặc marketplace như ThemeForest, CodeCanyon.
Chúng tôi tin chắc sau khi triển khai các biện pháp này trên WordPress, bạn sẽ an toàn trước hacker!
Bảo vệ WordPress Site với MalCare!