[BlackHat Asia 2020] Hey Google, Activate Spyware! – When Google Assistant Uses a Vulnerability as a Feature 분석

두비니

·

2021. 5. 19. 16:52

 

발표명 : Hey Google, Activate Spyware! – When Google Assistant Uses a Vulnerability as a Feature

 

단어 정리

💡
Activity : 앱을 구성할 때는 여려개의 화면간의 전환으로 이루어질 때가 많은데, 이 "화면"들이 하나의 Activity라고 보면 됨. Intents : 앱 컴포넌트가 무엇을 할 것인지를 담는 메시지 객체. 대표적인 예시로 Activity간 전환 및 데이터전송을 위해서 Intent를 사용함. - Implicit Intent : 묵시적 인텐트라는 뜻으로, 타겟 컴포넌트의 이름을 명시적으로 지적하여 구동시키는 것을 칭함. 특정 어플을 고르는 것이 아니라, "해당 기능"이 있는 어플리케이션에 연결하는 것임. 아래 캡쳐 참고 - Explicit Intent : 명시적 인텐트라는 뜻이고, Implicit Intent와 반대로 특정 클래스/패키지명을 명시함.

 

implicit intent의 예시

 

취약점 구현 과정

0. 배경 지식

::권한(Permission)에 대하여::

안드로이드 어플리케이션의 경우, 모든 권한에 대해서 사용자의 허락을 받아야 한다고 developer.android.com에 명시되어있음.

 
https://developer.android.com/guide/topics/permissions/overview

 

따라서 보통 안드로이드 앱은 다음과 같은 과정을 거침

 

  1. 권한 선언
카메라 권한 permission "android.permission.CAMERA" 선언

2. 어플 내에 권한 확인

Manifest.permission.CAMERA가 존재하는지 확인

3. 유저에게 권한 허락

유저에게 권한 요청

 

1. 취약점 발견

 

구글의 카메라 액티비티들을 살펴본 결과, exported 액티비티가 있다는 것을 확인할 수 있었다.

이 exported 액티비티는 implicit intents에 열려있다는 점에서 매우 위험하다. implicit intents의 사용 자체를 위해서는 당연히 필요한 부분이지만, 접근하는 과정에서 검증하는 과정이 전혀 없었기 때문에 이를 악용할 수 있다.

 

다음은 구글 카메라 어플리케이션 내에 exported 내역이 포함된 액티비티이다.

com.google.android.apps.camera.legacy.app.activity.main.CameraActivity 
com.android.camera.CameraLauncher 
com.android.camera.CameraActivy 
com.android.camera.activity.CaptureActivy 
com.android.camera.VideoCamera 
com.android.camera.CameraImageActivity 
com.android.camera.CameraVideoShortcuActivity 
com.android.camera.CameraDepLinkActivity 
com.android.camera.SecureCameraActivity 
com.google.android.apps.camera.legacy.app.setings.CameraSetingsActivity 
com.google.android.apps.camera.legacy.app.refocus.ViewrActivity 
com.google.android.apps.camera.photobooth.activity.PhotbothActivity 
com.google.android.lbraries.social.license.LicenseMenuActivity

 

 

그리고 다음 액티비티들은 다음과 같은 클래스들로 연결되었다.

com.google.android.apps.camera.legacy.app.activity.main.CameraActivity 
com.google.android.apps.camera.legacy.app.activity.CaptureActivity 
com.google.android.apps.camera.legacy.app.activity.CameraImageActivity 
com.google.android.apps.camera.legacy.app.activity.CameraDeepLinkActivity 
com.google.android.apps.camera.legacy.app.activity.SecureCameraActivity 
com.google.android.apps.camera.legacy.app.settings.CameraSetingsActivity 
com.google.android.apps.camera.legacy.app.refocus.ViewerActivity 
com.google.android.apps.camera.photoboth.activity.PhotbothActivity 
com.google.android.libraries.social.license.LicenseMenuActivity

 

그리고 다음과 같은 Action을 취할 수 있다.

android.media.action.IMAGE_CAPTURE              //캡쳐 
android.media.action.IMAGE_CAPTURE_SECURE        
android.media.action.STIL_IMAGE_CAMERA          //카메라 
android.media.action.STIL_IMAGE_CAMERA_SECURE 
android.media.action.VIDEO_CAPTURE               //영상 캡처 
android.media.action.VIDEO_CAMERA               //영상 카메라

 

추가적으로 분석해 봤을 때, 다음과 같은 점을 알아 낼 수 있었다.

  1. android.media.action.VIDEO_CAMERA 가 카메라를 실행시키고 즉시 녹화를 시작한다.
  1. android.intent.extra.USE_FRONT_CAMERA는 전면카메라를 실행시킨다.(없는 경우 후면카메라)
  1. android.intent.extra.TIMER_DURATION_SECONDS의 경우에는 최소 3초 이후에 사진을 찍을 수 있도록 하는 기능이다.

 

 

2. 취약점 실현

이렇게 발견한 취약점을 가지고는 다음과 같이 활용할 수 있다.

  1. 권한이 전혀 없는 rogue application 생성
  1. google assistant 호출을 통해 카메라 실행

결론 : 카메라 관련 권한을 포함한 모든 권한이 없지만, 원할 때 영상/사진 촬영 가능

 

<< 실제 Checkmarx사에서 만든 rogue app

 

 

 

3. 취약점 활용

 

이 취약점을 가지고, 실제로 악용이 되면 어떤식일까에 대해서 더 연구함.

우선 몇가지 방해사항이 있었음

  • 카메라가 실행이 되면 화면이 바뀌기 때문에
  • 카메라에서 사진/영상촬영을 할 때 소리가 발생

 

  1. 셔터 소리에 관련하여셔터소리를 한번에 뮤트시키는 방법은 존재하지 않았음. 그러나, adjustStreamVolume함수의 ADJUST_LOWER 플래그를 사용할 경우, 볼륨이 0이 될때까지 조정할 수 있었음.
    볼륨을 0으로 만들기 위해 조정한 부분
  2. 그리고 이건 의도하지 않았던 부분이라고 판단되어 구글 팀에 문의했고, 이 부분에 대해서 CVE를 인정받음.
  1. 화면 상황에 대하여Proximity Sensor를 사용할 경우, 책상 위에 핸드폰을 뒤집어 놓거나, 주머니 안에 넣어놓거나, 핸드폰을 사용하지 않을 때를 알 수 있기 때문에 이를 악용할 수 있다는 것을 알아냈음.
  2.  

 

4. 추가 권한 획득 및 시나리오 작성

연구팀은 여기서 그치지 않고, 단순히 카메라를 실행시키는 것 뿐이 아니라 다른 권한도 획득이 가능한지 연구하였다.

 

  • 저장공간 권한
    가장 먼저 저장공간에 대한 탐구를 하였다. 2015년의 조사에 따르면 반 이상의 어플리케이션이 저장공간에 대한 권한을 묻는 것으로 나타났다. 그리고 대부분의 사람들이 이 권한을 큰 고민 없이 허용하기 때문에, 이를 활용하였다.

 

  • 위치 권한Google Maps에서 Location tags가 켜져있는 상황이라면, 이 정보 또한 google assistant를 통해서 얻어낼 수 있었다고 한다.이 권한이 특히나 더 위험한 이유는, 특정 시간마다 위치를 수집할 경우, 피해자의 이동 경로 모두 수집할 수 있기 때문이다.

Checkmarx사는 추가로 획득할 수 있었던 권한들을 종합하여 악성 날씨 앱을 개발하였습니다.

 

 

그 결과 google assistant를 사용한 스크립트를 통해서 카메라는 물론, 현재 기기가 위치하고 있는 위치정보까지 얻어낼 수 있었습니다.

 

따라서 이 취약점은 구글에서 CVE로 인정을 받았고, 이에 대해서 수정하겠다고 밝혔습니다.