I. Mở đầu
1. Tóm tắt bài viết
Trong bài viết mở đầu về các lỗ hổng xảy ra ở phía máy chủ (Server-side), tôi muốn giới thiếu với các bạn về Lỗ hổng xác thực - Authentication vulnerability. Chúng ta sẽ được hiểu về khái niệm xác thực cũng như lỗ hổng xác thực, phân biệt giữa xác thực và ủy quyền, tìm hiểu lý thuyết và phân tích các labs cụ thể liên quan tới lỗ hổng xác thực. Cuối cùng, chúng ta cũng sẽ bàn luận về một số thông tin, biện pháp phòng chống, bảo vệ người dùng cũng như hệ thống tương ứng với lỗ hổng xác thực.
2. Giới thiệu khái niệm xác thực
Với một ứng dụng web bất kì, chúng ta thường thấy ứng dụng có tính năng đăng nhập (login) cũng như đăng ký tài khoản (register) dành cho người dùng (user). Đăng ký một tài khoản với các thông tin cần thiết sẽ giúp bạn trở thành một người dùng / khách hàng của ứng dụng. Sau đó, mỗi khi bạn sử dụng dịch vụ của họ, bạn sẽ cần đăng nhập tài khoản - cũng chính là xác thực danh tính (Authentication) của bạn. Server cần xác thực danh tính của bạn để biết đối tượng đang sử dụng dịch vụ của họ có thực sự là người dùng của họ hay không.
3. Phân biệt authentication (xác thực) và authorization (ủy quyền)
Trước khi bước vào các lỗ hổng Authentication, chúng ta cần phân biệt rõ hai khái niệm Authentication - xác thực và Authorization - ủy quyền.
Authentication - xác thực là một hành động nhằm thiết lập hoặc chứng thực một cái gì đó (hoặc một người nào đó) đáng tin cậy, từ đó được cung cấp các quyền lợi, truy vấn tương ứng với vật / người đã được xác thực. Sau khi bạn được xác thực, hệ thống sẽ biết người đang sử dụng tài khoản / dịch vụ đó chính là bạn. Ví dụ: bạn Hoa là quản lí tại quán trà sữa X, trong quán có một máy tính chuyên dụng cho việc xử lí hóa đơn đặt hàng, giao hàng, ... Như vậy, máy tính cần có một cơ chế xác thực đối với danh tính của Hoa, nếu không thì tất cả mọi người, kể cả khách hàng cũng có thể sử dụng các chức năng của máy tính đó thì khả năng quán X sẽ phá sản sớm!
Authorization - ủy quyền là một khái niệm sinh ra sau khi xác thực thành công, đây là giới hạn, quyền hạn sử dụng dịch vụ của một người dùng. Ví dụ, Ngọc là nhân viên bán hàng tại quán trà sữa X do Hoa làm quản lí, sau khi xác thực danh tính nhân viên tại máy tính chuyên dụng, với vai trò là nhân viên, Ngọc sẽ chỉ có quyền hạn làm việc với các đơn hàng của khách hàng yêu cầu, chứ không có quyền xem doanh thu từng ngày của quán - tính năng này chỉ được sử dụng bởi Hoa, với vai trò là quản lí của quán X.
II. Các dạng lỗ hổng xác thực thường gặp
1. Lỗ hổng xác thực xuất hiện khi nào?
Về mặt lý thuyết, lỗ hổng xác thực thường xuất hiện khi hệ thống chứa cơ chế xác thực lỏng lẻo, do người lập trình chưa được tiếp cận với các vấn đề an toàn lập trình dẫn đến kẻ tấn công có thể dễ dàng vượt qua (bypass) các lỗi logic hoặc ngoại lệ không mong muốn (unintended problems) trong cơ chế xác thực của hệ thống.
Tuy nhiên, lỗ hổng cũng có thể xảy ra do phía người dùng để lộ thông tin cá nhân, thậm chí để lộ tên đăng nhập, mật khẩu (chơi game ở quán net và quên đăng xuất chẳng hạn!). Điều đáng buồn là tại Việt Nam, người dùng chưa thực sự cảnh giác với các thông tin cá nhân cũng như danh tính xác thực của họ.
2. Một số loại lỗ hổng xác thực
Các lỗ hổng xác thực thường được chia làm các loại sau:
- Lỗ hổng trong xác thực mật khẩu (password)
- Lỗ hổng trong xác thực đa yếu tố (multi-factor authentication)
- Lỗ hổng qua các cách xác thực khác