탭재킹은 클릭재킹 웹 취약점의 Android 앱 버전입니다. 클릭재킹은 UI를 오버레이 또는 그 밖의 수단으로 가려서 사용자가 보안 관련 컨트롤(확인 버튼 등)을 클릭하도록 유도하는 악성 앱입니다. 이 페이지에서는 전체 오클루전과 부분 오클루전이라는 두 가지 공격 형태를 구분하여 설명합니다. 전체 오클루전에서는 공격자가 터치 영역을 오버레이하는 반면 부분 오클루전에서는 터치 영역이 가려지지 않은 상태로 남아 있습니다.
영향
탭재킹 공격은 사용자가 특정 동작을 실행하도록 유도하는 용도로 사용됩니다. 영향은 공격자가 타겟팅하는 동작에 따라 달라집니다.
위험: 전체 오클루전
전체 오클루전에서는 공격자가 터치 영역을 오버레이하여 터치 이벤트를 도용합니다.
완화 조치
전체 오클루전은 코드에서 View.setFilterTouchesWhenObscured(true)를 설정하여 방지합니다. 이렇게 하면 오버레이에서 전달하는 터치가 차단됩니다. 선언적 접근 방식을 선호한다면 보호하려는 View 객체의 레이아웃 파일에 android:filterTouchesWhenObscured="true"를 추가하는 방법도 있습니다.
위험: 부분 오클루전
부분 오클루전 공격에서는 터치 영역이 가려지지 않은 상태로 남아 있습니다.
완화 조치
부분 오클루전은 FLAG_WINDOW_IS_PARTIALLY_OBSCURED 플래그가 있는 터치 이벤트를 수동으로 무시함으로써 완화됩니다. 이 시나리오에 대해 기본적으로 제공되는 보호 조치는 없습니다.
주의사항: 이 완화 조치는 무해한 앱을 방해할 수 있습니다. 무해한 애플리케이션이 부분 오클루전을 발생시키는 경우 이러한 수정사항을 적용하면 사용자 환경에 부정적인 영향을 미칠 수 있어 실제로는 적용이 불가능할 수 있습니다.
구체적인 위험
이 섹션에는 특수한 완화 전략이 필요한 위험, 또는 특정 SDK 수준에서 완화되었으므로 여기에는 완전성을 위해 포함된 위험이 정리되어 있습니다.
공격자는 Toast.setView()를 사용하여 토스트 메시지 디자인을 맞춤설정할 수 있습니다. Android 10(API 수준 29) 이하 버전에서는 악성 앱이 백그라운드에서 이러한 토스트 메시지를 실행할 수 있었습니다.
완화 조치
앱이 Android 11(API 수준 30) 및 이후 버전을 타겟팅하는 경우 시스템이 백그라운드 맞춤 토스트 메시지를 차단합니다. 그러나 이 완화 조치는 공격자가 포그라운드에서 여러 토스트 메시지를 큐에 추가하여 앱이 백그라운드로 전환된 후에도 계속 실행되도록 하는 토스트 버스트를 사용하여 회피할 수 있습니다.
백그라운드 토스트 메시지 및 토스트 버스트 공격은 Android 12(API 수준 31)부터 완전히 완화됩니다.
위험: 활동 샌드위치
악성 앱이 사용자가 앱을 열도록 성공적으로 유도한 경우, 피해자 앱에서 활동을 실행한 후 여기에 자체 활동을 오버레이하여 활동 샌드위치를 형성함으로써 부분 오클루전 공격을 생성할 수 있습니다.
완화 조치
부분 오클루전의 일반적인 완화 방법을 참고하세요. 심층 방어를 적용하려면 공격자가 활동 샌드위치를 형성하지 못하도록 방지하기 위해 내보낼 필요가 없는 활동을 내보내지 않아야 합니다.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2023-12-15(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2023-12-15(UTC)"],[],[],null,["# Tapjacking\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-PLATFORM: Platform Interaction](https://mas.owasp.org/MASVS/09-MASVS-PLATFORM)\n\n\nOverview\n--------\n\nTapjacking is the Android-app equivalent of the [clickjacking web vulnerability](https://owasp.org/www-community/attacks/Clickjacking): A malicious app tricks the user into clicking a security-relevant control (confirmation button etc.) by obscuring the UI with an overlay or by other means. On this page, we differentiate two attack variants: Full and partial occlusion. In full occlusion, the attacker overlays the touch area, while in partial occlusion, the touch area remains unobscured.\n\nImpact\n------\n\nTapjacking attacks are used to trick users into performing certain actions. The impact depends on the action targeted by the attacker.\n\nRisk: Full occlusion\n--------------------\n\nIn full occlusion, the attacker overlays the touch area to hijack the touch event:\n\n### Mitigations\n\nFull occlusion is prevented by setting `View.setFilterTouchesWhenObscured(true)` in the code. This blocks touches passed by an overlay. If you prefer a declarative approach, you can also add `android:filterTouchesWhenObscured=\"true\"` in the layout file for the [`View`](/reference/android/view/View#security) object that you want to protect.\n| **Note:** Android S (12, SDK 31) and higher prevent full occlusion attacks by default, by blocking touch events from non-trusted overlays from another UID. \n|\n| However, there is a caveat: for System Alert Window (SAW) and window animations, only touches from layers with opacity \\\u003e= 0.8 are blocked. The reasoning behind this behavior is that SAW requires users to grant permission, and blocking all events for time-limited animations might hurt the user experience.\n\n*** ** * ** ***\n\nRisk: Partial occlusion\n-----------------------\n\nIn partial occlusion attacks, the touch area remains unobscured:\n\n### Mitigations\n\nPartial occlusion is mitigated by manually ignoring touch events that have `FLAG_WINDOW_IS_PARTIALLY_OBSCURED` flag. There are no default protections against this scenario.\n\n**Potential caveat:** This mitigation can interfere with benign apps. In some cases, rolling out this fix isn't possible, as it would negatively affect the user experience when the partial occlusion is caused by a benign application.\u000b\n\n*** ** * ** ***\n\nSpecific risks\n--------------\n\nThis section gathers risks that require non-standard mitigation strategies or\nwere mitigated at certain SDK level and are here for completeness.\n\n### Risk: android.Manifest.permission.SYSTEM_ALERT_WINDOW\n\nThe [`SYSTEM_ALERT_WINDOW`](/reference/android/Manifest.permission#SYSTEM_ALERT_WINDOW) permission allows an app to create a window shown on top of all apps.\n\n#### Mitigations\n\nNewer versions of Android have introduced several mitigations, including the following:\n\n- On Android 6 (API level 23) and higher, users have to explicitly grant the permission for the app to create an overlay window.\n- On Android 12 (API level 31) and higher, apps can pass `true` into [`Window.setHideOverlayWindows()`](/reference/android/view/Window#setHideOverlayWindows(boolean)).\n\n*** ** * ** ***\n\n### Risk: Custom toast\n\nAn attacker can use `Toast.setView()` to customize a [toast](/guide/topics/ui/notifiers/toasts) message's appearance. On Android 10 (API level 29) and lower, malicious apps could launch such toasts from the background.\n\n#### Mitigations\n\nIf an app targets Android 11 (API level 30) or higher, the system blocks background custom toasts. However, this mitigation can be evaded in some circumstances using *Toast burst*, where the attacker queues multiple toasts while in the foreground and they keep getting launched even after an app goes to the background.\n\nBackground toasts and toast burst attacks are fully mitigated as of Android 12 (API level 31).\n\n*** ** * ** ***\n\n### Risk: Activity sandwich\n\nIf a malicious app manages to convince a user to open it, it can still launch an activity from the victim app and subsequently overlay it with its own activity, forming an *activity sandwich* and creating a partial occlusion attack.\n\n#### Mitigations\n\nSee general mitigations for partial occlusion. For defense in-depth, make sure that you don't export activities that don't need to be exported to prevent an attacker from sandwiching them.\n\n*** ** * ** ***\n\nResources\n---------\n\n- [Play Store target API level policy changes](https://android-developers.googleblog.com/2019/02/expanding-target-api-level-requirements.html)\n\n- [UI redressing and accessibility service-based Android attacks](http://Cloak-and-dagger.org)\n\nRecommended for you\n-------------------\n\n- Note: link text is displayed when JavaScript is off\n- [android:exported](/topic/security/risks/android-exported)\n- [# Key management {:#key-management}](/topic/security/data)\n- [Run embedded DEX code directly from APK](/topic/security/dex)"]]