CSRF là gì? Kỹ thuật tấn công giả mạo và token chống CSRF hiệu quả
Thịnh Văn Hạnh
29/11/2022
2529 Lượt xem
Chia sẻ bài viết
Đôi khi bạn vô tình truy cập vào một website nào đó và bị mất mật khẩu. Lúc đó bạn mới nhận ra trang mình vừa truy cập là một trang giả mạo trang web gốc mà bạn muốn truy cập ban đầu. CSRF là một dạng tấn công đánh cắp tài khoản dựa trên giả mạo những trang web chính. Cùng tìm hiểu CSRF là gì, làm sao để phòng tránh các cuộc tấn công CSRF. Tất cả đều có trong bài viết dưới đây, cùng BKNS theo dõi nhé.
Tóm Tắt Bài Viết
CSRF là gì?
CSRF (Cross-Site Request Forgery) tên gọi khác là XSRF, Sea Surf, Session Riding hoặc One-Click Attack là kiểu tấn công web khai thác sự tin tưởng của server vào trình duyệt đã xác thực, buộc nạn nhân vô tình gửi request giả mạo mang theo đầy đủ quyền của họ.
Để hiểu tại sao CSRF nguy hiểm, cần nắm rõ cơ chế nền tảng khiến kiểu tấn công này tồn tại được.

CSRF hoạt động dựa trên cơ chế nào của trình duyệt?
CSRF khai thác hành vi mặc định của trình duyệt: tự động đính kèm cookie vào mọi HTTP request gửi đến domain tương ứng, bất kể request đó được khởi tạo từ đâu.
Cụ thể, khi người dùng đăng nhập vào một website, server tạo ra một Session Cookie lưu trên trình duyệt để định danh người dùng cho các request tiếp theo thay vì yêu cầu đăng nhập lại mỗi lần. Đây là thiết kế hợp lý về mặt trải nghiệm, nhưng tạo ra lỗ hổng nghiêm trọng: trình duyệt không phân biệt được request do người dùng chủ động thực hiện hay request được kẻ tấn công âm thầm kích hoạt từ một trang web khác.
Kết quả là server nhận được request có đầy đủ cookie xác thực hợp lệ, tin đây là hành động của người dùng và thực thi ngay lập tức đó chính là lỗ hổng CSRF.
Hậu quả của một cuộc tấn công CSRF
Sau khi tấn công dữ liệu người dùng, các hacker sẽ tiến hành thực hiện các hoạt động:
- Thay đổi email, thông tin đăng nhập của người dùng
- Đánh cắp thông tin cá nhân của người dùng trong tài khoản
- Thực hiện việc chuyển tiền bất hợp pháp
- Tùy thuộc vào mục đích cuộc tấn công, hacker có thể chỉ yêu cầu thực hiện một số hành động. Hoặc chiếm hẳn quyền điều khiển tài khoản của người dùng.
- Trong trường hợp tài khoản đó là tài khoản quản lý ứng dụng hay một website. Bọn hacker sẽ chiếm hoàn toàn quyền điều khiển website, ứng dụng.

Một cuộc tấn công CSRF diễn ra như thế nào?
Điều kiện để một cuộc tấn công CSRF có thể diễn ra
Để một cuộc tấn công CSRF diễn ra, cần có 3 điều kiện chính:
- Hành động yêu cầu của kẻ tấn công nhắm vào những đặc quyền của người dùng như đổi mật khẩu, yêu cầu chuyển tiền,…
- Cuộc tấn công CSRF sẽ diễn ra dựa vào session cookies của nạn nhân. Ví dụ: hacker đưa hàng loạt HTTP request vào ứng dụng. Ứng dụng không thể phân biệt được đâu là yêu cầu của người dùng, đâu là yêu cầu của hacker. Và từ đó nạn nhân dính bẫy.
- Không nhắm đến những thông tin không thể biết trước. Ví dụ, nếu một hành động hacker nhắm đến yêu cầu những thông tin không thể đoán hay không thể tìm được ví dụ như yêu cầu chuyển khoản ngân hàng. Hành động này sẽ yêu cầu khá nhiều thứ như: OTP, mật khẩu lẫn một số yêu cầu xác thực danh tính khác.
Ví dụ về cuộc tấn công CSRF
Một lần lướt web, bạn quyết định truy cập vào một trang web không đáng tin cậy và có nhiều khả năng chứa nhiều thứ độc hại như: website chứa nội dung 18+, website bóng đá, cá độ,…
Bạn vô tình bấm vào một banner hay website. Bỗng dưng xuất hiện một yêu cầu đăng nhập tài khoản Facebook mới có thể tiếp tục xem nội dung. Và bạn thực hiện đăng nhập theo yêu cầu của website.
Tuy nhiên bạn đừng nên bấm vào link đó, vì nó sẽ dẫn bạn đến 1 trang Facebook giả mạo khác với Facebook thật. Khi đăng nhập thông tin vào trang giả mạo đó, tin tặc sẽ lợi dụng sơ hở để đổi mật khẩu và đánh cắp thông tin của bạn.
CSRF Token là gì và tại sao nó ngăn chặn được tấn công?
CSRF Token là một chuỗi ngẫu nhiên có độ entropy cao, duy nhất theo từng phiên người dùng, được server phát ra và yêu cầu client gửi kèm mọi request thay đổi trạng thái để xác minh tính hợp lệ.
Cơ chế phòng thủ của CSRF Token dựa trên nguyên tắc: kẻ tấn công từ domain khác không thể đọc được giá trị token này do chính sách Same-Origin Policy của trình duyệt ngăn chặn. Vì vậy, dù có thể kích hoạt request, kẻ tấn công không thể đính kèm token hợp lệ → server từ chối request.
Synchronizer Token Pattern
Synchronizer Token Pattern (STP) là phương pháp triển khai CSRF Token phổ biến nhất, hoạt động theo cơ chế server-state: server lưu token trong session, nhúng vào HTML form dưới dạng hidden field, và xác minh giá trị này khi nhận POST request.
Luồng hoạt động của STP:
1. Người dùng truy cập trang có form nhạy cảm (ví dụ: form chuyển tiền).
2. Server tạo token ngẫu nhiên, lưu vào session phía server, nhúng vào form:
<input type=”hidden” name=”_csrf_token” value=”a3f9b2c1d8e4…”>
3. Người dùng submit form — token được gửi kèm trong POST body.
4. Server so khớp token trong request với token trong session. Khớp → thực thi. Không khớp hoặc thiếu token → từ chối và trả về lỗi 403.
Ưu điểm của STP: bảo mật cao vì token không bao giờ xuất hiện trong URL, không bị lưu trong browser history, và thay đổi theo từng phiên.
Cách phòng chống CSRF hiệu quả
Hiện tại chưa có biện pháp nào phòng chống hiệu quả các cuộc tấn công CSRF. Nó phụ thuộc phần lớn vào ý thức của bạn khi truy cập mạng internet. Không nên tò mò truy cập vào các website lạ trên mạng. Một số phương pháp phòng chống đến từ phía client và server bạn có thể tham khảo:
Phòng chống CSRF phía server
Nếu bạn xây dựng ứng dụng, bạn có thể học hỏi theo cách bảo mật của các ngân hàng và các nhà phát triển lớn như Amazon, Google như sau:
- Sử dụng Captcha, OTP và các yêu cầu xác thực bảo mật khác
- Kiểm tra địa chỉ IP
- Sử dụng phương án csrf_token
Sử dụng Captcha, OTP và các yêu cầu xác thực bảo mật khác
Khi sử dụng Captcha, sẽ loại bỏ được khá nhiều bot thực hiện yêu cầu liên tục vào website, ứng dụng của bạn.
Đối với những thao tác đặc quyền như: thay đổi mật khẩu, đăng nhập, reset mật khẩu, thực hiện chuyển khoản, thanh toán đơn hàng,.. nên áp dụng những phương thức bảo mật như:
- Yêu cầu sinh trắc vân tay trên các thiết bị di động
- Yêu cầu OTP qua email, số điện thoại
- Gửi link yêu cầu xác nhận qua email, số điện thoại.
Nếu bạn sử dụng Shopee, bạn sẽ thấy phương thức bảo mật này khá quen thuộc. - Gửi yêu cầu đến thiết bị di động để xác nhận như của Google.
Kiểm tra địa chỉ IP
Một trong những điều các hacker thông thường hay dùng là sử dụng địa VPN để ẩn địa chỉ IP. Do đó, có thể chặn những địa chỉ IP của các VPN nhằm tránh tình trạng bị tấn công cũng là một giải pháp.
Sử dụng phương án csrf_token

Token sẽ thay đổi liên tục trong session. Nếu các request thay đổi thông tin có trùng session ID, bạn có thể loại bỏ bớt những request đó.
Phòng chống CSRF phía client
Đối với người dùng, nên lưu ý những điều dưới đây để đảm bảo việc bảo mật tốt nhất:
- Đăng xuất tài khoản của bạn khi thực hiện các giao dịch, tài khoản, website quan trọng sau khi thực hiện xong công việc.
Hiện tại, các sàn thương mại điện tử sẽ giúp bạn thực hiện điều này sau một thời gian bạn không sử dụng tài khoản để mua sắm. - Không nên click vào các URL, liên kết đáng ngờ. Khái niệm “đáng ngờ” khá “mông lung” nhưng bạn chỉ cần cảnh giác với các địa chỉ email lạ, SMS lạ,…
- Xóa cookies sau khi sử dụng website cũng là một cách để phòng chống CSRF hiệu quả.
Kết luận
Đến đây có lẽ bạn đã hiểu được CSRF là gì và hậu quả của CSRF. BKNS hy vọng bạn có thêm nhiều kiến thức để phòng tránh các cuộc tấn công CSRF, tự bảo vệ thông tin cá nhân khi truy cập mạng.
Thường xuyên truy cập BKNS để cập nhật nhiều bài viết hữu ích khác nữa.
[mautic type=”form” id=”6″]
Đọc thêm các bài viết khác:



































