VI. Làm thế nào để ngăn chặn Access control vulnerability - Lỗ hổng kiểm soát truy cập?
1. Một số cách ngăn chặn lỗ hổng kiểm soát truy cập
Khó có thể đảm bảo hệ thống hoàn toàn không gặp phải các dạng lỗ hổng kiểm soát truy cập. Các biện pháp bảo vệ thường bám vào một số nguyên tắc chính:
- Không dựa vào duy nhất một yếu tố để kiểm soát truy cập.
- Từ chối trực tiếp quyền truy cập theo mặc định trừ khi tài nguyên được dành cho truy cập công khai.
- Tại bất cứ bước nào trong hệ thống đều cần xác thực lại quyền kiểm soát truy cập của người dùng.
- Quy định các quyền truy cập chặt chẽ đối với từng người dùng.
- Thường xuyên kiểm tra, xem xét kỹ lưỡng, cập nhật, nâng cấp các biện pháp kiểm soát truy cập để đảm bảo chúng hoạt động bình thường.
Từ đó chúng ta có thể thực hiện ngăn chặn phù hợp dựa vào những khía cạnh sau:
- Xác thực danh tính người dùng: cần thực hiện xác thực danh tính người dùng qua nhiều khía cạnh.
- Ủy quyền: Quy định chặt chẽ các quyền được phép truy cập và quyền truy cập trái phép của người dùng.
- Kiểm tra quyền kiểm soát truy cập của người dùng trong mọi giai đoạn thuộc bất kì hành vi nào do người dùng thực hiện hoặc yêu cầu.
- Hạn chế CORS: Giao thức CORS (Chia sẻ tài nguyên đa nguồn gốc) cung cấp một cách thức có kiểm soát để chia sẻ tài nguyên có nguồn gốc chéo. Việc triển khai CORS dựa trên tiêu đề giao thức HTTP được sử dụng trong giao tiếp giữa máy khách và ứng dụng đích. Khi giao thức CORS bị định cấu hình sai, một bên độc hại có thể kiểm soát miền để gửi yêu cầu đến miền của bạn.
2. Một số frameworks và công cụ hữu ích trong việc ngăn chặn lỗ hổng kiểm soát truy cập
- Python: Đa phần các frameworks trong Python như Django, Flask, Tornado, ... đều quy định chặt chẽ các yêu cầu từ người dùng qua một số hàm, câu lệnh kiểm tra hiệu quả.
- Ruby: Devise gem là một lựa chọn hiệu quả, nó cung cấp một số tính năng có thể lựa chọn giúp phân quyền phù hợp đối với hệ thống.
- Java: Java Authentication and Authorization Service (JAAS) là một tập hợp các API được sử dụng để xác thực danh tính của một người dùng hoặc khách hàng/máy tính, đảm bảo rằng hệ thống cung cấp các đặc quyền thích hợp cho yêu cầu. JAAS là một phần mở rộng cho nền tảng Java và được tích hợp trong Java Standard Edition 1.4.
- .NET: ASP.NET sử dụng một framework uy quyền và xác thực toàn diện, có thể sử dụng hiệu quả trong các vấn đề quyền kiểm soát truy cập khác nhau.
- Node: MustBe và ACL là hai framework hiệu quả trong vấn đề kiểm soát quyền truy cập.
3. LDAP và lỗ hổng kiểm soát truy cập
The Lightweight Directory Access Protocol (LDAP) là một giao thức ứng dụng trung lập với nhà cung cấp. Được sử dụng để duy trì thông tin thư mục phân tán theo cách có tổ chức, dễ truy vấn. Điều đó có nghĩa là nó cho phép bạn giữ một thư mục các mục và thông tin về chúng.
LDAP làm rất tốt trong các công việc kiểm soát truy cập và ủy quyền. Chỉ người dùng trong nhóm được phép mới có quyền truy cập vào ứng dụng được cấp phép. Vì vậy khi ai đó cố gắng đăng nhập, cần đảm bảo rằng họ ở trong nhóm thích hợp trước khi cấp quyền truy cập.
Nhưng làm thế nào để một người có quyền truy cập vào tất cả các bản ghi đó? Quá trình này diễn ra khá đơn giản:
- Một phiên bắt đầu với một máy khách liên kết với máy chủ LDAP (DSA, Directory System Agent – Tác nhân hệ thống thư mục), cổng mặc định 389.
- Tiếp theo, khách hàng sẽ gửi một yêu cầu hoạt động (thường là một yêu cầu tìm kiếm hoặc so sánh) đến máy chủ, yêu cầu một tập hợp thông tin cụ thể.
- Sau đó, máy chủ xử lý truy vấn này và cung cấp phản hồi.
- Máy khách nhận được phản hồi và hủy liên kết, sau đó xử lý dữ liệu.