Tapjacking

Danh mục OWASP: MASVS-PLATFORM: Tương tác với nền tảng

Tổng quan

Tapjacking là lỗ hổng bảo mật trên ứng dụng Android tương đương với lỗ hổng bảo mật clickjacking trên web: Ứng dụng độc hại lừa người dùng nhấp vào một chế độ điều khiển có liên quan đến bảo mật (nút xác nhận, v.v.) bằng cách che khuất giao diện người dùng bằng lớp phủ hoặc bằng các phương thức khác. Trên trang này, chúng tôi phân biệt 2 biến thể tấn công: che khuất toàn bộ và che khuất một phần. Trong trường hợp che khuất toàn bộ, kẻ tấn công che phủ khu vực cảm ứng, còn trong trường hợp che khuất một phần, khu vực cảm ứng vẫn không bị che khuất.

Tác động

Các cuộc tấn công bằng tapjacking được dùng để lừa người dùng thực hiện một số thao tác nhất định. Mức độ tác động phụ thuộc vào hành động mà kẻ tấn công nhắm đến.

Rủi ro: Che khuất toàn bộ

Trong trường hợp che khuất toàn bộ, kẻ tấn công che phủ khu vực cảm ứng để xâm nhập vào sự kiện chạm:

Hình ảnh che khuất toàn bộ

Giải pháp giảm thiểu

Ngăn ngừa tình trạng che khuất toàn bộ bằng cách đặt View.setFilterTouchesWhenObscured(true) trong mã. Giải pháp này chặn các thao tác chạm bị lớp phủ bỏ qua. Nếu muốn sử dụng phương pháp khai báo, bạn cũng có thể thêm android:filterTouchesWhenObscured="true" vào tệp bố cục cho đối tượng View mà bạn muốn bảo vệ.


Rủi ro: Che khuất một phần

Trong các cuộc tấn công che khuất một phần, khu vực cảm ứng vẫn không bị che khuất:

Hình ảnh che khuất một phần

Giải pháp giảm thiểu

Che khuất một phần được giảm thiểu bằng cách bỏ qua các sự kiện chạm có cờ FLAG_WINDOW_IS_PARTIALLY_OBSCURED theo cách thủ công. Không có biện pháp bảo vệ mặc định nào trong trường hợp này.

Cảnh báo tiềm ẩn: Giải pháp giảm thiểu này có thể ảnh hưởng đến các ứng dụng vô hại. Trong một số trường hợp, việc triển khai bản sửa lỗi này là không thể, vì điều này sẽ ảnh hưởng tiêu cực đến trải nghiệm người dùng khi sự cố che khuất một phần do một ứng dụng vô hại gây ra.


Rủi ro cụ thể

Phần này tổng hợp các rủi ro đòi hỏi chiến lược giảm thiểu không theo chuẩn hoặc được giảm thiểu ở một số cấp độ SDK nhất định và được liệt kê ở đây chỉ để cho đủ.

Rủi ro: android.Manifest.permission.SYSTEM_ALERT_WINDOW

Quyền SYSTEM_ALERT_WINDOW cho phép ứng dụng tạo một cửa sổ hiển thị trên đầu tất cả ứng dụng.

Giải pháp giảm thiểu

Các phiên bản Android mới hơn đã ra mắt một vài giải pháp giảm thiểu, bao gồm:

  • Trên Android 6 (API cấp 23) trở lên, người dùng phải cấp quyền rõ ràng để ứng dụng tạo cửa sổ lớp phủ.
  • Trên Android 12 (API cấp 31) trở lên, các ứng dụng có thể chuyển true vào Window.setHideOverlayWindows().

Rủi ro: Thông báo ngắn tuỳ chỉnh

Kẻ tấn công có thể sử dụng Toast.setView() để tuỳ chỉnh giao diện của thông báo ngắn. Trên Android 10 (API cấp 29) trở xuống, các ứng dụng độc hại có thể chạy các thông báo ngắn như vậy từ chế độ nền.

Giải pháp giảm thiểu

Nếu một ứng dụng nhắm đến Android 11 (API cấp 30) trở lên, thì hệ thống sẽ chặn các thông báo ngắn tuỳ chỉnh ở chế độ nền. Tuy nhiên, kẻ tấn công có thể tránh giải pháp giảm thiểu này trong một số trường hợp bằng cách dùng Loạt ảnh thông báo ngắn, qua đó kẻ tấn công xếp nhiều thông báo ngắn thành hàng khi đang ở chế độ nền trước và tiếp tục chạy ngay cả sau khi một ứng dụng chuyển sang chế độ nền.

Kể từ Android 12 (API cấp 31), các cuộc tấn công bằng loạt ảnh thông báo ngắn và thông báo ngắn ở chế độ nền sẽ bị giảm thiểu hoàn toàn.


Rủi ro: Lớp chèn hoạt động

Nếu một ứng dụng độc hại cố gắng thuyết phục người dùng mở, thì ứng dụng đó vẫn có thể khởi chạy một hoạt động từ ứng dụng bị hại rồi phủ lên nó một hoạt động riêng, tạo thành một lớp chèn hoạt động và tạo ra một cuộc tấn công che khuất một phần.

Giải pháp giảm thiểu

Xem các giải pháp giảm thiểu chung cho cuộc tấn công che khuất một phần. Để phòng thủ chuyên sâu, hãy đảm bảo rằng bạn không xuất các hoạt động không cần thiết để ngăn các kẻ tấn công chèn những hoạt động này.


Tài nguyên