3.4 Các kiểu tấn công ứng dụng web phổ biến
3.4.4 Insecure Direct Object References
a. Mô tả
Đây không phải là một kiểu tấn cơng, mà nó là một kiểu lỗ hổng trong ứng dụng web, khi một người dùng nào đó khơng có đủ quyền để truy cập vào đối tượng bất kì trong hệ thống, có thể là tập tin, các chức năng của ứng dụng hoặc cơ sở dữ liệu,... Kẻ tấn công, là một người dùng đã được xác thực, và họ có thể thay đổi một vài đối số để yêu cầu trực tiếp đến một đối tượng nào đó trong hệ thống để truy cập một cách trái phép.
Không phải lúc nào các ứng dụng web cũng ln kiểm tra rằng người dùng có được quyền truy cập đến đối tượng nào đó hay khơng và điều này dẫn tới một lỗ hổng Insecure Direct Object Reference. Những người kiểm tra lỗi của hệ thống (tester) có thể dễ dàng tính tốn và thử nghiệm các tham số để có thể phát hiện được lỗ hổng này.
Lỗ hổng này có thể làm tổn hại đến tất cả các dữ liệu được tham chiếu bởi tham số mà kẻ tấn công truyền vào, trừ khi đối tượng tham chiếu là khơng thể đốn trước.
b. Cách kiểm tra hệ thống với lỗ hổng
Cách tốt nhất để xem một ứng dụng có tồn tại lỗ hổng bảo mật này hay khơng thì đó chính là kiểm tra xem tất cả các đối tượng tham chiếu có được bảo vệ một cách an tồn hay khơng. Cần phải xem xét những điều sau
- Đối với những đối tượng được tham chiếu trực tiếp mà trong nguồn tài nguyên bị giới hạn quyền truy cập, phải chắc chắn rằng ứng dụng đã kiểm tra rằng người dùng có được quyền truy cập chúng hay không.
- Đối với những đối tượng được tham chiếu gián tiếp, cần phải kiểm tra xem giới hạn số lượng cho người dùng đó đã đúng hay chưa.
Xem lại mã nguồn có thể nhanh chóng kiểm tra xem một hướng tiếp cận đã là an toàn hay chưa. Thử nghiệm ứng dụng cũng là một cách để nhận biết, những công cụ tự động thường không cho kết quả như mong muốn vì chúng khơng thể nhận ra được những sự bảo vệ hiện có là an tồn hay chưa.
c. Ngăn chặn
Cách ngăn chặn lỗ hổng này đó chính là phải có một cách tiếp cận để bảo vệ từng đối tượng mà người dùng có thể truy cập, có thể là số lượng đối tượng, tên đối tượng, kiểu đối tượng,…
Sử dụng người dùng hoặc session để tham chiếu gián tiếp tới đối tượng. Điều này ngăn cản kẻ tấn cơng trực tiếp từ nguồn trái phép. Ví dụ, thay vì sử dụng khóa trong cơ sở dữ liệu, có thể tạo ra một danh sách các lựa chọn và cho phép người dùng lựa chọn, từ đó ánh xạ vào cơ sở dữ liệu.
Kiểm soát truy cập cũng là một hướng tiếp cận. Mỗi khi có một yêu cầu trực tiếp tới các đối tượng từ một nguồn không tin cậy, cần phải kiểm tra quyền truy cập xem người dùng đó có đủ quyền để truy cập đối tượng đó hay khơng.
Một đoạn mã nguồn Java sử dụng những dữ liệu chưa được kiểm tra để truy cập vào thông tin người dùng thông qua câu truy vấn SQL
Kẻ tấn công chỉ cần thay đổi đối số “acct” để có thể gửi yêu cầu truy cập thơng tin của bất cứ người dùng nào có trong hệ thống. Nếu khơng kiểm tra, kẻ tấn cơng hồn tồn có thể truy cập thơng tin tài khoản của tất cả các người dùng khác trong hệ thống.