𝗕𝗮𝗼̀ 𝗯𝗮̉𝗼 𝗺𝗮̣̂𝘁 đ𝗮𝗻𝗴 𝗻𝗵𝗮̣̂𝗽 đ𝗼̂̀𝗻𝗴 𝘁𝗵𝗼̀𝗶
Việc cho phép đăng nhập không giới hạn có thể che giấu những lỗ hổng logic nghiệp vụ nghiêm trọng.
Một người dùng đăng nhập trên máy tính xách tay. Vài giây sau, cùng tài khoản đó đăng nhập trên một trình duyệt khác. Sau đó là một thiết bị di động. Rồi đến một API client. Mọi thứ đều hoạt động hoàn hảo.
Điều này có vẻ ổn vì nhiều ứng dụng hỗ trợ nhiều thiết bị. Nhưng bạn phải tự hỏi: Liệu mọi ứng dụng có nên cho phép số lượng phiên làm việc không giới hạn?
Trong một số hệ thống, nhiều phiên làm việc là một tính năng. Trong những hệ thống khác, đó lại là một lỗ hổng mà kẻ tấn công lợi dụng để ẩn mình. Đây là một lỗ hổng logic nghiệp vụ. Mã nguồn hoạt động đúng như thiết kế, nhưng chính thiết kế đó lại yếu kém.
Sự khác biệt: • Các lỗi truyền thống khai thác các sai sót trong lập trình. • Các lỗi logic nghiệp vụ khai thác các quyết định về thiết kế.
Hãy nghĩ về một dịch vụ phát trực tuyến phim. Nếu một gói đăng ký cho phép mười người xem cùng một lúc, hệ thống đăng nhập vẫn hoạt động. Nhưng quy tắc kinh doanh đã thất bại.
Điều này áp dụng cho ngân hàng, bảng điều khiển quản trị và các sản phẩm SaaS.
Cách kiểm tra lỗi này:
- Đăng nhập qua Trình duyệt A và giữ cho phiên đó hoạt động.
- Mở một cửa sổ ẩn danh trên Trình duyệt B.
- Đăng nhập bằng cùng thông tin đăng nhập đó.
- Kiểm tra xem phiên làm việc đầu tiên có còn hoạt động không.
- Kiểm tra xem bạn có thể thực hiện các hành động nhạy cảm trên cả hai phiên hay không.
Các ứng dụng có tính bảo mật cao thường áp dụng các quy tắc sau:
- Một phiên làm việc hoạt động cho mỗi tài khoản.
- Đăng xuất các phiên cũ khi có một lần đăng nhập mới xảy ra.
- Các trình kiểm soát để quản lý thiết bị.
- Cảnh báo cho các lần đăng nhập mới.
Nếu kẻ tấn công đánh cắp được thông tin đăng nhập, chúng có thể duy trì trạng thái đăng nhập mãi mãi nếu bạn cho phép số lượng phiên không giới hạn. Chúng vẫn hoạt động trong khi người dùng thật cũng đang hoạt động. Không ai trong hai người nhận ra kẻ xâm nhập.
Ngữ cảnh là tất cả. Các ứng dụng cần nhiều phiên làm việc:
- Các ứng dụng nhắn tin.
- Mạng xã hội.
- Dịch vụ email.
Các ứng dụng cần kiểm soát chặt chẽ:
- Hệ thống ngân hàng.
- Bảng điều khiển quản trị.
- Các nền tảng y tế.
Cách khắc phục:
- Lưu trữ các ID phiên đang hoạt động trong cơ sở dữ liệu.
- Khi có một lần đăng nhập mới, hãy hủy phiên cũ.
- Cho phép người dùng xem các thiết bị và vị trí đang hoạt động.
- Thêm nút "Đăng xuất khỏi tất cả thiết bị".
- Gửi cảnh báo qua email hoặc SMS cho các lần đăng nhập mới.
Đừng chỉ tìm kiếm các lỗi mã nguồn như SQL injection. Hãy tìm kiếm những khoảng cách giữa những gì ứng dụng của bạn thực hiện và những gì doanh nghiệp của bạn yêu cầu.
Hãy xem xét lại chính sách phiên làm việc của bạn ngay hôm nay. Rủi ro lớn nhất của bạn có thể không phải là mã nguồn bị lỗi. Nó có thể là logic bị lỗi.