모의해킹/안드로이드

(안드로이드) 드로저를 이용한 액티비티 취약점 분석

logthink 2018. 10. 10. 00:00

드로저 가이드 2015.pdf



드로저(drozer)는 MWR InfoSecurity에서 개발한 모바일 애플리케이션 취약점 진단 프레임워크인 Mercury의 새로운 업데이트 버전이다. 원도우와 리눅스를 지원하며 JRE(Java Runtime Environment), JDK(Java Development Kit), 안드로이드 SDK(Software Development Kit)가 설치되어 있다면 사용할 수 있다. 안드로이드 가상 디바이스 또는 단말기에 에이전트(Agent)를 설치하고 PC에서 ADB로 명령을 내리는 서버와 클라이언트 방식으로 동작한다.


드로저는 가상 디바이스뿐 아니라 실제 안드로이드 디바이스에 테스트가 가능하며 자동화된 테스팅이 가능하다. 또한 안드로이드 익스플로잇을 통한 취약점 진단이 가능하기 때문에 다양한 시나리오를 통해 취약점 점검이 가능하다.


드로저의 설치 및 사용법은 https://www.mwrinfosecurity.com/products/drozer/에서drozer(Agent.apk Only)와 drozer(Windows Installer)를 다운로드하여 설치한다. 리눅스의 경우 drozer(Debian/Ubuntu Archive)을 다운로드한다.


 

윈도우의 경우 기본 설정으로 두고 Next 버튼을 누른다. PC에 설치가 완료되면 단말기에 드로저 에이전트(agent.apk)를 설치하여 PC와 단말기를 연결해야 한다. 


H:\Tools\drozer-installer-2.3.4>adb install agent.apk

2248 KB/s (605439 bytes in 0.262s)

        pkg: /data/local/tmp/agent.apk

Success



그 다음 ADB를 통해 단말기와 PC의 포트를 맞춰추고 드로저가 설치된 폴더로 이동하여 그림 2 16와 같이 콘솔 명령어를 이용해 드로저를 실행시킨다.


adb forward tcp:31415 tcp:31415

drozer.bat console connnect



list를 쳐보면 실행할 수 있는 명령들이 보입니다.


run app.package.list를 치면 실행중인 패키지가 나타납니다.  (영어가 아닌 글씨는 깨져나오네요.)

run app.package.info -a '실행중인어플'을 쳐봅니다.

파일에 대한 정보와 권한을 확인할 수 있습니다.


run app.package.info -p android.permission.ACCESS_NETWORK_STATE

위와 같이 치면 ACCESS_NETWORK_STATE권한을 가진 모든 어플을 검색할 수 있습니다.  악성코드에서 사용할 만한 권한을 가진 어플을 검색하는데 유용하게 쓰일 수 있습니다.


run app.provider.finduri com.android.providers.downloads

다운로드 경로를 확인할 수 있습니다.  의심가는 파일의 다운 여부를 확인할 때 사용합니다.


run app.activity.info

어플들의 액티비티를 확인할 수 있습니다.  악성 어플의 경우 의심가는 액티비티명을 찾아볼 수 있습니다.


윈도우에서 실행을 하면 “If this error persists, specify the path in the ~/.drozer_config file”와 같이 자바를 찾을 수 없다는 메시지가 발생한다. 드로저가 자바를 찾을 수 있도록 “.drozer_config”파일을 만들어서 그 안에 예시와 같이 자바가 설치된 위치를 넣어준다. “.drozer_config”파일의 위치는 “C:\Users\’사용자이름’”이다. 


설정파일을 만들 때 주의할 점은 “.”파일을 만들기 위해 일반 메모장으로 “txt” 파일을 만든 후 “rename”명령어로 파일명을 바꿔줘야 한다. 또한 자바의 위치를 넣어줄 때 “java.exe”까지 실행파일 이름까지 정확하게 입력해줘야 한다. 자바를 기본 위치에 설치했다면 설정파일 내용은 다음과 같다.


.drozer_config 파일


[executables]

java = C:\Program Files\Java\jre6\bin\java.exe

javac = C:\Program Files\Java\jre6\bin\javac.exe


설정파일을 작성한 뒤 rename 명령어를 다음과 같이 입력한 뒤 다시 드로저를 실행해본다. 에러 없이 정상적으로 실행된다.


C:\Users\”사용자 이름”>rename drozer_config.txt .drozer_config


설정파일 인코딩 형식 에러 발생 해결 방법

설정파일을 모두 생성한 뒤에도 그림 2 18과 같은 에러가 발생하면 파일 인코딩 문제이다. 이때는 Notepad++ 와 같은 문서 편집기를 이용해서 그림 2 19과 같이 ANSI로 표시하여 저장을 다시 하길 바란다.

 


드로저의 가장 큰 장점은 자동으로 앱의 취약한 부분을 검색하는 기능이다. 

앱의 취약점을 자동으로 분석하는 기능은 “app.package.attacksurface “ 모듈로 가능하며 기본적으로 설치되어 있다. “-h” 옵션으로 모듈 설명 페이지를 먼저 확인해보자.


명령어: run app.package.attacksurface -h


취약점 분석 모듈의 자세한 설명


 dz> run app.package.attacksurface -h

usage: run app.package.attacksurface [-h] package


Examine the attack surface of an installed package.


Examples:

Finding the attack surface of the built-in browser


 dz> run app.package.attacksurface com.android.browser


    6 activities exported

    4 broadcast receivers exported

    1 content providers exported

    0 services exported


Last Modified: 2012-11-06

Credit: MWR InfoSecurity (@mwrlabs)

License: BSD (3 clause)


positional arguments:

  package     the identifier of the package to inspect


optional arguments:

  -h, --help


사용법은 간단하게 명령어 뒤에 패키지 명을 입력해주면 된다. 또한 위의 그림의 예와 같이 점검 항목은 엑티비티 노출, 브로드캐스트 취약점, 노출된 content provider, 서비스 노출까지이다. 그럼 인시큐어뱅크 앱의 취약점을 분석해본다.


명령어: run app.package.attacksurface [패키지명]


인시큐어뱅크 앱의 취약점


 dz> run app.package.attacksurface com.android.insecurebankv2

Attack Surface:

5  activities exported

1 broadcast receivers exported

1 content providers exported

0 services exported

  is debuggable


5개의 엑티비티(Activity)가 노출되었으며 브로드캐스트(Broadcast receiver) 취약점, 콘텐트 프로바이더(content providers) 그리고 추가로 디버깅이 가능한 취약점이 발견되었다. 노출된 취약점을 좀 더 자세하게 살펴보도록 한다.


액티비티 취약점 분석 상세 


앞서서 인시큐어뱅크 앱의 취약점 검사하는 모듈로 얻은 결과 중에 액티비티 노출과 관련된 취약점이 발견되었다. 이번에는 엑티비티와 관련된 취약점을 좀 더 구체적으로 분석해본다. 검사 결과에 따르면 5개의 엑티비티가 노출되었다고는 나오지만 엑티비티에 대한 정보가 모두 나오지 않는다. 좀 더 자세하게 알기 위해서 다음의 명령어를 사용한다.


명령어: Run app.activity.info -a [패키지명]


 dz> run app.activity.info -a com.android.insecurebankv2

Package: com.android.insecurebankv2

  com.android.insecurebankv2.LoginActivity

    Permission: null

  com.android.insecurebankv2.PostLogin

    Permission: null

  com.android.insecurebankv2.DoTransfer

    Permission: null

  com.android.insecurebankv2.ViewStatement

    Permission: null

  com.android.insecurebankv2.ChangePassword

    Permission: null


요약되어 나왔던 엑티비티 정보들이 정확한 이름으로 출력되었으며 실제 엑티비티를 실행시킨 수 있는지 테스트해 본다. 패스워드 변경과 관련된 “com.android.insecurebankv2.ChangePassword”를 로그인을 한 뒤 접근했을 때와 드로저로 비정상적으로 접근했을 때를 비교해본다.


명령어: run app.activity.start --component [컴포넌트이름]


dz> run app.activity.start --component com.android.insecurebankv2 com.android.insecurebankv2.ChangePassword


 

그림 2 20 왼쪽은 정상적인 엑티비티, 오른쪽은 비정상 엑티비티.


그림 2 20과 같이 정상적으로 접근했을 때에는 사용자의 아이디가 기본적으로 들어가 있지만, 오른쪽과 같이 비정상적으로 접근했을 경우에는 아이디가 공란이 되어 있다. 이 엑티비티의 경우 사용자가 로그인한 뒤에 패스워드를 바꾸기 위해서 접근하는 페이지이기 때문에 비정상적으로 접근했을 경우 로그인 정보가 없어 아이디가 공란으로 되어 있다.


위와 같이 특정 권한이 있어야 접근이 가능한 페이지를 정당한 권한 없이 접근할 수 있는 취약점을 가지고 있다. 위 취약점은 3.4장에서 상세하게 다루고 있다.