Danh mục OWASP: MASVS-PLATFORM: Tương tác với nền tảng
Tổng quan
Những rủi ro bảo mật liên quan đến đường liên kết sâu bắt nguồn từ khả năng cốt lõi của loại đường liên kết này là hỗ trợ điều hướng và tương tác liền mạch trong các ứng dụng di động. Các lỗ hổng bảo mật của đường liên kết sâu phát sinh từ những điểm yếu trong quá trình triển khai hoặc xử lý các đường liên kết sâu. Các lỗi này có thể bị kẻ xấu khai thác để có quyền truy cập vào các chức năng hoặc dữ liệu đặc quyền, có thể dẫn đến rò rỉ dữ liệu, vi phạm quyền riêng tư và các hành động trái phép. Kẻ tấn công có thể khai thác các lỗ hổng này thông qua nhiều kỹ thuật, chẳng hạn như tấn công giả mạo đường liên kết sâu và tấn công xác thực dữ liệu.
Tác động
Việc thiếu cơ chế xác thực đường liên kết sâu thích hợp hoặc sử dụng đường liên kết sâu không an toàn có thể giúp người dùng độc hại thực hiện các cuộc tấn công như bỏ qua quy trình xác thực máy chủ lưu trữ, tập lệnh trên nhiều ứng dụng và thực thi mã từ xa trong ngữ cảnh quyền của ứng dụng dễ bị tấn công. Tuỳ thuộc vào bản chất của ứng dụng, điều này có thể dẫn đến việc truy cập trái phép vào dữ liệu hoặc hàm nhạy cảm.
Giải pháp giảm thiểu
Ngăn chặn hành vi xâm nhập đường liên kết sâu
Theo thiết kế, Android cho phép nhiều ứng dụng đăng ký bộ lọc ý định cho cùng một URI liên kết sâu. Để ngăn các ứng dụng độc hại can thiệp vào đường liên kết sâu dành cho ứng dụng của bạn, hãy triển khai thuộc tính android:autoVerify
trong intent-filter
trong AndroidManifest
của ứng dụng. Điều này cho phép người dùng chọn ứng dụng ưu tiên để xử lý đường liên kết sâu, đảm bảo hoạt động theo dự kiến và ngăn các ứng dụng độc hại tự động diễn giải các đường liên kết đó.
Android 12 áp dụng quy trình xử lý nghiêm ngặt hơn đối với ý định trên web để cải thiện khả năng bảo mật. Giờ đây, ứng dụng phải được xác minh để xử lý các đường liên kết từ các miền cụ thể, thông qua Đường liên kết trong ứng dụng Android hoặc lựa chọn của người dùng trong phần cài đặt hệ thống. Điều này giúp ngăn các ứng dụng xâm nhập vào các đường liên kết mà chúng không nên xử lý.
Để bật tính năng xác minh cách xử lý đường liên kết cho ứng dụng, hãy thêm bộ lọc ý định khớp với định dạng sau (ví dụ này được lấy từ tài liệu Xác minh đường liên kết trong ứng dụng Android):
<!-- Make sure you explicitly set android:autoVerify to "true". -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- If a user clicks on a shared link that uses the "http" scheme, your
app should be able to delegate that traffic to "https". -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data android:host="..." />
</intent-filter>
Triển khai quy trình xác thực dữ liệu mạnh mẽ
Liên kết sâu có thể bao gồm các tham số bổ sung được phân phát đến ý định mục tiêu, ví dụ: để thực hiện các hành động khác. Nền tảng của việc xử lý đường liên kết sâu một cách an toàn là quy trình xác thực dữ liệu nghiêm ngặt. Nhà phát triển phải xác thực và dọn dẹp kỹ lưỡng tất cả dữ liệu đến từ đường liên kết sâu để ngăn chặn việc chèn mã hoặc giá trị độc hại vào ứng dụng hợp pháp. Bạn có thể triển khai việc này bằng cách kiểm tra giá trị của bất kỳ tham số đường liên kết sâu nào dựa trên danh sách cho phép các giá trị dự kiến được xác định trước.
Ứng dụng nên kiểm tra các trạng thái nội bộ có liên quan khác, chẳng hạn như trạng thái xác thực hoặc yêu cầu uỷ quyền trước khi tiết lộ thông tin nhạy cảm. Ví dụ: phần thưởng khi hoàn thành một cấp độ trong trò chơi. Trong trường hợp này, bạn nên xác thực điều kiện tiên quyết là đã hoàn thành cấp và chuyển hướng đến màn hình chính nếu chưa hoàn thành.
Tài nguyên
- Xác minh Đường liên kết trong ứng dụng Android
- Xử lý đường liên kết trong ứng dụng Android
- Giải quyết ý định trên web
- Đường liên kết ma thuật chặn hành vi chiếm đoạt tài khoản cho ứng dụng Arrive
- Liên kết sâu và khai thác WebView Phần I
- Lợi dụng đường liên kết sâu và WebView Phần II
- Đề xuất gần đây về vấn đề liên kết sâu trong thành phần Điều hướng Jetpack