탭재킹

OWASP 카테고리: MASVS-PLATFORM: 플랫폼 상호작용

개요

탭재킹은 클릭재킹 웹 취약점의 Android 앱 버전입니다. 클릭재킹은 UI를 오버레이 또는 그 밖의 수단으로 가려서 사용자가 보안 관련 컨트롤(확인 버튼 등)을 클릭하도록 유도하는 악성 앱입니다. 이 페이지에서는 전체 오클루전과 부분 오클루전이라는 두 가지 공격 형태를 구분하여 설명합니다. 전체 오클루전에서는 공격자가 터치 영역을 오버레이하는 반면 부분 오클루전에서는 터치 영역이 가려지지 않은 상태로 남아 있습니다.

영향

탭재킹 공격은 사용자가 특정 동작을 실행하도록 유도하는 용도로 사용됩니다. 영향은 공격자가 타겟팅하는 동작에 따라 달라집니다.

위험: 전체 오클루전

전체 오클루전에서는 공격자가 터치 영역을 오버레이하여 터치 이벤트를 도용합니다.

전체 오클루전 이미지

완화 조치

전체 오클루전은 코드에서 View.setFilterTouchesWhenObscured(true)를 설정하여 방지합니다. 이렇게 하면 오버레이에서 전달하는 터치가 차단됩니다. 선언적 접근 방식을 선호한다면 보호하려는 View 객체의 레이아웃 파일에 android:filterTouchesWhenObscured="true"를 추가하는 방법도 있습니다.


위험: 부분 오클루전

부분 오클루전 공격에서는 터치 영역이 가려지지 않은 상태로 남아 있습니다.

부분 오클루전 이미지

완화 조치

부분 오클루전은 FLAG_WINDOW_IS_PARTIALLY_OBSCURED 플래그가 있는 터치 이벤트를 수동으로 무시함으로써 완화됩니다. 이 시나리오에 대해 기본적으로 제공되는 보호 조치는 없습니다.

주의사항: 이 완화 조치는 무해한 앱을 방해할 수 있습니다. 무해한 애플리케이션이 부분 오클루전을 발생시키는 경우 이러한 수정사항을 적용하면 사용자 환경에 부정적인 영향을 미칠 수 있어 실제로는 적용이 불가능할 수 있습니다.


구체적인 위험

이 섹션에는 특수한 완화 전략이 필요한 위험, 또는 특정 SDK 수준에서 완화되었으므로 여기에는 완전성을 위해 포함된 위험이 정리되어 있습니다.

위험: android.Manifest.permission.SYSTEM_ALERT_WINDOW

SYSTEM_ALERT_WINDOW 권한으로 인해 특정 앱이 다른 모든 앱 위에 표시되는 창을 만들 수 있습니다.

완화 조치

Android 최신 버전에는 다음을 비롯한 여러 완화 조치가 도입되었습니다.

  • Android 6(API 수준 23) 및 이후 버전에서는 사용자가 앱에 명시적으로 권한을 부여해야 앱이 오버레이 창을 만들 수 있습니다.
  • Android 12(API 수준 31) 및 이후 버전에서는 앱이 Window.setHideOverlayWindows()true를 전달할 수 있습니다.

위험: 맞춤 토스트 메시지

공격자는 Toast.setView()를 사용하여 토스트 메시지 디자인을 맞춤설정할 수 있습니다. Android 10(API 수준 29) 이하 버전에서는 악성 앱이 백그라운드에서 이러한 토스트 메시지를 실행할 수 있었습니다.

완화 조치

앱이 Android 11(API 수준 30) 및 이후 버전을 타겟팅하는 경우 시스템이 백그라운드 맞춤 토스트 메시지를 차단합니다. 그러나 이 완화 조치는 공격자가 포그라운드에서 여러 토스트 메시지를 큐에 추가하여 앱이 백그라운드로 전환된 후에도 계속 실행되도록 하는 토스트 버스트를 사용하여 회피할 수 있습니다.

백그라운드 토스트 메시지 및 토스트 버스트 공격은 Android 12(API 수준 31)부터 완전히 완화됩니다.


위험: 활동 샌드위치

악성 앱이 사용자가 앱을 열도록 성공적으로 유도한 경우, 피해자 앱에서 활동을 실행한 후 여기에 자체 활동을 오버레이하여 활동 샌드위치를 형성함으로써 부분 오클루전 공격을 생성할 수 있습니다.

완화 조치

부분 오클루전의 일반적인 완화 방법을 참고하세요. 심층 방어를 적용하려면 공격자가 활동 샌드위치를 형성하지 못하도록 방지하기 위해 내보낼 필요가 없는 활동을 내보내지 않아야 합니다.


리소스