본문 바로가기
프로그래밍 놀이터/안드로이드, Java

#2 취약점 진단 및 분석 도구 part 2. - 안드로이드 모바일 앱 모의해킹

by 돼지왕 왕돼지 2020. 11. 19.
반응형


안드로이드 취약점 진단 및 분석 도구


2.2. 드로저를 활용한 취약점 진단


2.2.1. 드로저란?


-

드로저(drozer)는 MWR InfoSecurity 에서 개발한 모바일 앱 취약점 진단 프레임워크인 머큐리(Mercury)의 새로운 업데이트 버전이다.

윈도우와 리눅스를 지원하며 JRE, JDK, 안드로이드 SDK 가 설치되어 있어야 사용할 수 있다.

안드로이드 단말에 에이전트(Agent)를 설치한 후 PC 에서 ADB 로 명령을 내리는 서버와 클라이언트 방식으로 동작한다.


드로저는 가상 디바이스뿐만 아니라 실제 디바이스에서도 테스트할 수 있고 자동 테스팅도 가능하다.

안드로이드 익스플로잇과 같은 다양한 시나리오를 통해 취약점을 점검할 수 있다.




2.2.2. 드로저를 활용한 앱 패키지 정보 확인


-

설치된 패키지 목록을 보여준다.

dz> run app.package.list 

dz> run app.package.list -f [filter word]



-

package 정보를 아래와 같이 볼 수 있다.

프로세스 정보, 버전, 데이터를 저장하는 위치, apk 파일 위치, UID 등을 알 수 있고, 권한도 확인할 수 있다.

dz> run app.package.list -a [package name]



-

특정 권한을 가진 앱들을 아래와 같이 조회해 볼 수 있다.

dz> run app.package.info -p [permission]



-

Manifest 정보를 보려면 아래와 같이 한다.

dz> run app.package.manifest [package name]




2.2.3. 드로저를 활용한 취약점 분석


-

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

점검 항목은 액티비티 노출, 브로드캐스트 취약점, 노출된 콘텐츠 프로바이더, 서비스 노출이다.

dz> run app.package.attacksurface [package name]




* 액티비티 분석


-

Activity 에 대한 정보를 보려면 아래와 같이 한다.

dz> run app.activity.info -a [package name]



-

Activity 실행은 아래와 같이 한다.

dz> run app.activity.start —component [package name] [activity class name]




* 브로드캐스트 리시버 분석


-

dz> run app.broadcast.info -a [package name]

-a [package name] : 특정 앱만 취약점 점검

-f [word] : 특정 단어를 포함한 앱만 취약점 점검

-u : 숨겨진 receiver 점검




* 콘텐츠 프로바이더 분석


-

dz> run app.provider.info -a [package name]

-a [package name] : 특정 package 만 검색

-f [word] : 특정 단어를 포함한 package 만 검색

-p [permission[ : 특정 permission 을 가진 패키지만 검색

-u : 숨겨진 provider 검색



-

provider 가 처리하는 uri 를 보기 위해서는

dz> run app.provider.finduri [package name]



-

특정 Uri 로 접근할 수 있는 db table 을 보기 위해서는..

dz> run scanner.provider.sqltables -uri [uri]


특정 package 가 접근하는 db table 을 보기 위해서는..

dz> run scanner.provider.sqltables -a [package name]



-

테이블 안에 어떤 정보가 저장되어 있는지 확인하기 위해서는 app.provider.query 모듈을 사용한다.

-h 옵션으로 추가 정보들을 볼 수도 있다.

dz> run app.provider.query [uri]



-

아래처럼 하여 다른 table 들을 query 해 볼 수 있다.

dz> run app.provider.query [uri] —projection “[after SELECT keyword query];--”



-

안드로이드에서는 기본적으로 sqlite 를 사용하며, sqlite_master 라는 테이블에서 현재 앱에서 사용하고 있는 테이블 정보를 확인할 수 있다.

dz> run app.provider.query [uri] —projection “* FROM SQLITE_MASTER WHERE type=‘table’;—“

dz> run app.provider.query [uri] —projection name ' FROM names WHERE id=2;’==



-

query 를 만들어 조회가 가능하기 때문에, 쿼리문 입력이 가능하면 sql 인젝션 공격 역시 가능하다.

dz> run scanner.provider.injection -a [package name]




* 서비스 분석


-

dz> run app.service.info -a [package name]

-f, -u option 도 제공한다.




* Debuggable package 분석


-

디버깅이 가능하도록 설정되어 있어 발생하는 취약점이 있다.

dz> run app.package.debuggable -f [word]




2.2.4. 모듈 관리


-

드로저는 모듈 명령어이기 때문에 다양한 기능을 추가하거나 삭제할 수 있고, 몇 가지 공격 코드도 제공한다.

모듈들은 파이썬으로 작성되었으며, 디바이스에 설치된 드로저 에이전트로 안드로이드 운영체제 안에서 실행할 수 있다.

사용자가 직접 <drozer python path>/drozer/modules 경로에 추가할 수도 있다.



-

모듈에서 사용할 수 있는 명령은 아래와 같다. -h 로 제공하는 기능들을 보자.

Command : 사용 가능한 명령어를 보여줌 ( dz> module command)

Install : 새로운 모듈을 설치 ( dz> module install )

Repository : 저장소를 관리하는 명령어 ( dz> module remote )

Search : 원격 저장소나 로컬 저장소를 관리 ( dz> module search )

Remote : 설치된 모듈들의 저장소를 관리




2.2.5 모듈 설치


-

현재 연결된 공식 모듈 저장소로부터 다운로드 할 수 있는 모듈을 검색한다.

dz> module search

dz> module search [keyword]



-

모듈의 기능을 확인해 볼 수 있다. (description)

dz> module search [module name] -d



-

원하는 모듈을 찾았으면 설치할 수 있다.

dz> module install [module name]




2.2.6. 저장소 관리


-

드로저에서 저장소(repository)를 관리하는 방법에는 크게 두 가지가 있다.

첫째는 remote 명령어로 인터넷에 있는 저장소에서 모듈을 찾아오는 방법

둘째는 repository 명령어로 사용자가 지정한 로컬 저장소에 있는 모듈을 사용하는 방법이다.



-

드로저를 설치하면 mwrlabs 의 저장소가 기본 remote 로 등록되어 있다.

dz> module remote list

dz> module remote add [address]

dz> module remote remove [address]

list : 등록된 모든 원격 연결지를 확인

add : 원격지에 있는 모듈 저장소 연결

remove : 등록된 원격 연결지 삭제



-

repository 명령어는 사용자가 만든 모듈, install 명령어로 설치한 모듈 및 인터넷에서 별도로 다운로드한 모듈들이 저장될 위치를 지정하기 위해 사용한다.

dz> module repository command // 명령어 확인

list : 로컬에 등록된 저장소 위치를 출력한다.

create : 로컬 주소를 새로운 로컬 저장소 위치에 추가한다.

delete : 기존에 등록된 로컬 저장소 경로를 삭제한다.

enable : 특정 저장소 위치를 활성화한다.

disable : 특정 저장소 위치를 비활성화한다.





2.3. 칼리 리눅스 설치


-

칼리리눅스는 침투 테스트를 위한 데비안을 기반으로 하고 있다.

다양한 침투 테스트, 법의학 및 리버스 엔지니어링 도구가 탑재되어 있으며, 2013년에 출시된 이후 데비안 개발 표준을 완전히 준수하여 전작인 백트랙을 유지하고 있다.




2.3.1. 가상 이미지 다운로드 및 설정




2.3.2. 칼리리눅스 설치




2.3.3. VMware Tools 및 한글 설치





2.4. 마무리하며




반응형

댓글