Tapjacking

Support HackTricks

Basic Information

Tapjacking악의적인 애플리케이션이 실행되어 희생 애플리케이션 위에 위치하는 공격입니다. 희생 애플리케이션을 시각적으로 가리면, 사용자 인터페이스는 사용자가 상호작용하도록 속이도록 설계되어 있으며, 이 상호작용은 희생 애플리케이션으로 전달됩니다. 결과적으로, 이는 사용자가 실제로 희생 애플리케이션에서 작업을 수행하고 있다는 것을 알지 못하게 합니다.

Detection

이 공격에 취약한 앱을 탐지하기 위해서는 안드로이드 매니페스트에서 내보내기된 활동을 검색해야 합니다 (intent-filter가 있는 활동은 기본적으로 자동으로 내보내집니다). 내보내기된 활동을 찾은 후, 권한이 필요한지 확인하십시오. 이는 악의적인 애플리케이션도 해당 권한이 필요하기 때문입니다.

Protection

Android 12 (API 31,32) 및 그 이상

이 출처에 따르면, Android 12 (API 31 & 30) 이상에서는 tapjacking 공격이 자동으로 방지됩니다. 따라서 애플리케이션이 취약하더라도 이를 악용할 수 없습니다.

filterTouchesWhenObscured

**android:filterTouchesWhenObscured**가 **true**로 설정되면, View는 다른 보이는 창에 의해 창이 가려질 때 터치를 받지 않습니다.

setFilterTouchesWhenObscured

setFilterTouchesWhenObscured 속성이 true로 설정되면 Android 버전이 낮더라도 이 취약점의 악용을 방지할 수 있습니다. 예를 들어, **true**로 설정하면 버튼이 가려질 경우 자동으로 비활성화될 수 있습니다:

<Button android:text="Button"
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:filterTouchesWhenObscured="true">
</Button>

Exploitation

Tapjacking-ExportedActivity

가장 최근의 Android 애플리케이션으로 Tapjacking 공격을 수행하는 (+ 공격받는 애플리케이션의 내보낸 활동을 호출하기 전) 애플리케이션은 다음에서 찾을 수 있습니다: https://github.com/carlospolop/Tapjacking-ExportedActivity.

사용 방법에 대한 README 지침을 따르세요.

FloatingWindowApp

클릭재킹 공격을 수행하기 위해 다른 활동 위에 올릴 수 있는 FloatingWindowApp을 구현한 예제 프로젝트는 FloatingWindowApp에서 찾을 수 있습니다 (조금 오래된 프로젝트로, apk 빌드에 행운을 빕니다).

Qark

이 프로젝트는 현재 유지 관리되지 않는 것 같으며 이 기능이 더 이상 제대로 작동하지 않습니다.

--exploit-apk --sdk-path /Users/username/Library/Android/sdk 매개변수와 함께 qark를 사용하여 가능한 Tapjacking 취약점을 테스트할 악성 애플리케이션을 생성할 수 있습니다.\

완화 방법은 상대적으로 간단합니다. 개발자는 다른 뷰에 의해 가려질 때 터치 이벤트를 수신하지 않도록 선택할 수 있습니다. Android 개발자 참조를 사용하여:

때때로 애플리케이션이 사용자의 완전한 지식과 동의 하에 작업이 수행되고 있는지 확인하는 것이 필수적입니다. 예를 들어 권한 요청을 승인하거나, 구매를 하거나, 광고를 클릭하는 경우입니다. 불행히도, 악성 애플리케이션은 사용자가 의도한 목적을 숨겨 이러한 작업을 수행하도록 속이려고 할 수 있습니다. 이를 해결하기 위해 프레임워크는 민감한 기능에 대한 접근을 개선하기 위해 사용할 수 있는 터치 필터링 메커니즘을 제공합니다.

터치 필터링을 활성화하려면 setFilterTouchesWhenObscured(boolean)를 호출하거나 android:filterTouchesWhenObscured 레이아웃 속성을 true로 설정합니다. 활성화되면 프레임워크는 뷰의 창이 다른 보이는 창에 의해 가려질 때 수신된 터치를 무시합니다. 결과적으로, 뷰의 창 위에 토스트, 대화 상자 또는 다른 창이 나타날 때 뷰는 터치를 수신하지 않습니다.

HackTricks 지원하기

Last updated