CSRF (Cross-Site Request Forgery), hay còn gọi là tấn công giả mạo yêu cầu liên trang, là một hình thức tấn công lợi dụng việc xác thực phiên làm việc (session) thông qua cookie để thực hiện các hành động trái phép trên danh nghĩa người dùng. Bài viết này sẽ giúp bạn hiểu rõ hơn về CSRF và các biện pháp phòng chống hiệu quả.
CSRF (Cross-site Request Forgery) Là Gì?
CSRF (Cross-Site Request Forgery) là một kiểu tấn công lợi dụng sự tin tưởng của ứng dụng web đối với trình duyệt của nạn nhân. Hacker có thể lợi dụng cookie để tạo ra các yêu cầu (request) mà người dùng không hề hay biết, từ đó thực hiện các hành động trái phép. Nói cách khác, CSRF cho phép kẻ tấn công mạo danh người dùng để gửi các yêu cầu đến máy chủ.
Lỗ hổng CSRF đặc biệt nguy hiểm vì nó có thể ảnh hưởng đến quyền hạn của người dùng, thậm chí là quản trị viên, cho phép kẻ tấn công truy cập vào toàn bộ hệ thống.
Trong một cuộc tấn công CSRF, trình duyệt của nạn nhân bị đánh lừa để gửi các yêu cầu đến ứng dụng web theo ý muốn của kẻ tấn công. Thông thường, các yêu cầu này sẽ được gửi để thay đổi dữ liệu trên máy chủ.
Tìm hiểu CSRF là gì? Cách phòng chống tấn công giả mạo
Khi trình duyệt gửi một yêu cầu HTTP (dù hợp lệ hay không), nó sẽ tự động bao gồm các tiêu đề cookie. Cookie thường được sử dụng để lưu trữ thông tin phiên làm việc, giúp máy chủ nhận diện người dùng mà không cần xác thực lại ở mỗi yêu cầu. Tuy nhiên, nếu ứng dụng web dễ bị tấn công CSRF, kẻ tấn công có thể lợi dụng cookie này để thực hiện bất kỳ yêu cầu nào, khiến máy chủ không thể phân biệt được đâu là yêu cầu hợp lệ và đâu là yêu cầu giả mạo.
Lịch Sử Tấn Công CSRF
Tấn công CSRF đã xuất hiện từ những năm 1990, nhưng ban đầu không được chú ý nhiều vì các cuộc tấn công thường xuất phát từ chính IP của người dùng, khiến cho việc phát hiện trở nên khó khăn. Đến năm 2007, các tài liệu mô tả chi tiết về CSRF mới bắt đầu xuất hiện.
Năm 2008, một vụ tấn công CSRF đã khiến khoảng 18 triệu người dùng eBay ở Hàn Quốc bị lộ thông tin cá nhân. Cũng trong năm đó, nhiều khách hàng của một ngân hàng ở Mexico đã bị mất tiền trong tài khoản cá nhân do tấn công CSRF.
Kịch Bản Tấn Công CSRF
Để dễ hình dung hơn về tấn công CSRF, hãy xem xét ví dụ sau:
Alice muốn tấn công Todd và chuyển tiền từ tài khoản của Todd vào tài khoản của mình. Ngân hàng của Todd có một lỗ hổng CSRF. Để chuyển tiền, Todd cần truy cập vào URL sau:
https://nganhangcuatodd.com/chuyen-tien?nguoi_nhan=Alice&so_tien=1500
Sau khi URL này được mở, giao dịch chuyển tiền sẽ được thực hiện. Alice biết rằng Todd thường xuyên truy cập vào trang web sentayho.com.vn do cô ta kiểm soát. Alice đặt đoạn mã sau vào trang web của mình:
<img src="https://nganhangcuatodd.com/chuyen-tien?nguoi_nhan=Alice&so_tien=1500" width="0" height="0">
Khi Todd truy cập vào trang web của Alice, trình duyệt của Todd sẽ tự động gửi yêu cầu HTTP GET đến ngân hàng của Todd để lấy “hình ảnh”. Thực chất, yêu cầu này lại hướng dẫn ngân hàng chuyển 1500 đô la cho Alice.
Cách Phòng Chống Tấn Công Giả Mạo CSRF
Nguyên tắc cơ bản của CSRF là “lừa trình duyệt của người dùng gửi các câu lệnh HTTP”. Do đó, các kỹ thuật phòng tránh sẽ tập trung vào việc phân biệt và hạn chế các câu lệnh giả mạo.
Tìm hiểu CSRF là gì? Cách phòng chống tấn công giả mạo
Biện Pháp Phòng Ngừa Từ Phía Người Dùng
Để tự bảo vệ mình khỏi các cuộc tấn công CSRF, người dùng nên thực hiện các biện pháp sau:
- Đăng xuất khỏi các trang web quan trọng: Sau khi hoàn thành giao dịch hoặc công việc trên các trang web như tài khoản ngân hàng, thanh toán trực tuyến, mạng xã hội, email, hãy nhớ đăng xuất.
- Cẩn trọng với các đường dẫn (link): Không nên nhấp vào các đường dẫn lạ nhận được qua email hoặc mạng xã hội. Hãy kiểm tra kỹ địa chỉ website đích trước khi nhấp vào.
- Không lưu mật khẩu trên trình duyệt: Tránh sử dụng các tính năng “đăng nhập lần sau” hoặc “lưu mật khẩu” của trình duyệt.
- Hạn chế truy cập các trang web không tin cậy: Trong khi thực hiện giao dịch hoặc truy cập các trang web quan trọng, không nên mở các trang web khác có thể chứa mã độc.
Biện Pháp Phòng Ngừa Từ Phía Máy Chủ (Server)
Mặc dù có nhiều khuyến cáo, nhưng hiện tại chưa có biện pháp nào có thể phòng chống CSRF một cách triệt để. Dưới đây là một số kỹ thuật thường được sử dụng:
- Sử dụng đúng phương thức GET và POST:
- Sử dụng GET cho các thao tác truy vấn dữ liệu.
- Sử dụng POST cho các thao tác tạo ra sự thay đổi trên hệ thống.
- Nếu ứng dụng của bạn tuân theo chuẩn RESTful, hãy sử dụng thêm các HTTP verbs như PATCH, PUT và DELETE.
- Sử dụng Captcha và thông báo xác nhận: Captcha được sử dụng để xác minh xem người dùng có phải là người thật hay không. Các thao tác quan trọng như đăng nhập, chuyển khoản, thanh toán thường sử dụng captcha. Tuy nhiên, việc sử dụng captcha có thể gây khó chịu cho người dùng. Các thông báo xác nhận (ví dụ: “Bạn có muốn xóa không?”) cũng có thể hạn chế các cuộc tấn công CSRF. Tuy nhiên, kẻ tấn công có thể vượt qua các biện pháp này bằng cách kết hợp với lỗi XSS (Cross-Site Scripting).
- Sử dụng Token (CSRF token): Tạo ra một token duy nhất cho mỗi form. Token này thường được lưu trữ trong session. Khi nhận được yêu cầu HTTP POST, hệ thống sẽ so sánh giá trị token để xác định xem yêu cầu có hợp lệ hay không.
- Sử dụng cookie riêng biệt cho trang quản trị: Vì cookie không thể dùng chung cho các domain khác nhau, việc sử dụng subdomain riêng cho trang quản trị (ví dụ:
admin.site.comthay vìsite.com/admin) sẽ an toàn hơn. - Kiểm tra Referrer: Kiểm tra nguồn gốc của các yêu cầu HTTP. Ứng dụng web có thể hạn chế chỉ thực hiện các yêu cầu đến từ các trang đã được chứng thực. Tuy nhiên, cách này có nhiều hạn chế và không thực sự hiệu quả.
- Kiểm tra IP: Một số hệ thống quan trọng chỉ cho phép truy cập từ các IP được thiết lập sẵn.
Kết Luận
CSRF là một loại tấn công nguy hiểm có thể gây ra những hậu quả nghiêm trọng. Để phòng chống CSRF hiệu quả, cả người dùng và nhà phát triển web cần phải nâng cao nhận thức và thực hiện các biện pháp bảo mật phù hợp. Việc kết hợp nhiều biện pháp phòng ngừa sẽ giúp giảm thiểu rủi ro và bảo vệ người dùng khỏi các cuộc tấn công giả mạo.
