ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 드로저 사용법
    Security/Mobile 2019. 6. 1. 20:48

    드로저(drozer)

    - 모바일 애플리케이션 취약점 진단 프레임워크인 머큐리의 새로운 업데이트 버전

    - 윈도우와리눅스 지원

    - JRE, JDK, 안드로이드 SDK가 설치되어 있어야 사용 가능

    - 가상 디바이스뿐만 아니라 실제 안드로이드 디바이스에서 테스트 가능

    - 자동 테스팅 가능

    - 안드로이드 익스플로잇과 같은 다양한 시나리오를 통해 취약점 점검 가능

    - 모듈 명령어이기 대문에 다양한 기능 추가 및 삭제 가능

    - 공격 코드 제공

    - 모듈들은 파이썬으로 작성

    드로저 동작 방식

    - 안드로이드 가상 디바이스 또는 단말기에 에이전트 설치 후 PC에서 ADB로 명령 내리는 서버와 클라이언트 방식으로 동작

     

    드로저 설치  https://www.mwrinfosecurity.com/products/drozer/

    1) Windows Installer를  PC에 설치

     

    2)  drozer-agent.apk를 단말기에 설치

    adb install drozer-agent.apk

     

    드로저 실행

    1) 단말기에서 drozer agent를 실행해 포트 오픈

    (기본 포트는 31415/TCP)

     

    2) ADB로 단말기와 PC의 포트를 동일하게 설정

    adb forward tcp:31415 tcp:31415

     

    3) 드로저가 설치된 폴더로 이동하여 드로저를 실행

    drozer.bat console connect

    [참고] 에러가 나면 사용자 변수 PYTHONPATH에 drozer설치경로\Lib\site-packages로 설정

    [참고] 임포트 에러가 나면 pip로 설치

    pip install protobuf
    pip install pyopenssl
    pip install twsited

     

    드로저를 이용한 앱 패키지 정보 확인

    설치된 패키지 목록 확인

    run app.package.list	// 엉엉 errno 0 에러남..ㅠ
    run app.package.list -f <찾을_단어>	// 찾을 단어를 포함한 패키지명 검색
    // EX) run app.package.list -f insecure	-> 결과로 insecurebankv2 패키지가 검색됨

     

    패키지의 정보 확인

    run app.package.info -a <패키지명>	// 패키지의 정보(프로세스 정보, 버전, 데이터 저장하는 위치, apk 파일 위치, UID, 권한) 등를 확인
    // EX) run app.package.infi -a com.android.insecurebankv2
    
    run app.package.info -p <특정_권한>	// 특정 권한을 갖고 있는 패키지 확인(권한들은 AndroidManifest.xml 파일에 정의)
    // EX) run app.package.info -p android.permission.SEND_SMS

     

    Androidmanifest파일 확인

    run app.package.manifest <패키지명>	// AndroidManifest파일 내용 확인
    // EX) run app.package.manifest com.android.insecurebankv2

     

    드로저를 이용한 취약점 분석

    1) 앱의 취약점을 자동으로 분석

    run app.package.attacksurface -h	// -h 옵션으로 설명 확인
     run app.package.attacksurface <패키지명>	// 해당 패키지의 취약점 확인
    EX) run app.package.attacksurface com.android.insecuebankv2

    결과로 총 5 항목의 취약점 발견(앞에는 발견된 취약점 수)

     

    2) 액티비티 분석

    run app.activity.info -a <패키지명>	// 액티비티 정보 확인
    // EX) run app.activity.info -a com.andorid.insecurebankv2

    위에서 확인한 총 5개의 액티비티

    run app.activity.start --component <패키지명> <컴포넌트명>	// 드로저로 액티비티에 비정상적으로 접근
    EX) run app.activity.start --component com.android.insecurebankv2.ChangePassword

     

    3) 브로드캐스트 리시버 분석

    run app.broadcast.info -a <패키지명>	// 브로드캐스트 리시버 정보 확인
    // EX) run app.broadcast.info -a com.andorid.insecurebankv2
    
    run app.broadcast.info  -f <특정_단어>	// 특정 단어를 포함한 패키지의 브로드캐스트 리시버 정보 확인
    // EX) run app.broadcast.info -f inse
    
    run app.broadcast.info  -u <-a|-f> </패키지명|특정_단어>	// 숨겨진 리시버 정보 확인
    // EX) run app.broadcast.info -u -f inse

    위에서 확인한 1개의 브로드캐스트 리시버

     

    4) 콘텐츠 프로바이더 분석

    run.app.provider.info -a <패키지명>	// 특정 패키지의 프로바이더 검색
    // EX) run app.provider.info -a com.android.insecurebankv2	-> -a 옵션으로 특정 패키지만 검색
    
    run app.provider.info -f <패키지명>	//-f 옵션으로 특정 단어를 포함한 패키지만 검색
    
    run app.provider.info -p <패키지명>	//-p 옵션으로 특정 권한을 가진 패키지만 검색
    
    run app.provider.info -u <패키지명>	//-u 옵션으로 숨겨진 프로바이더 검색

    위에서 확인한 1개의 콘텐츠 프로바이더

     

    // 콘텐츠 프로바이더는 데이터베이스에 있는 정보를 URI로 공유하기 때문에 데이터베이스에 접근하기 위해서는 URI에 대한 정보가 반드시 필요
    run app.povider.findurl <패키지명>
    EX) run app.povider.findurl com.android.insecurebankv2	-> 프로바이더가 사용하는 URI 정보 확인

    앱의 URI 정보

     

    run scanner.provider.sqltables --uri <URI>	// 얻은 URI 정보로 어떤 정보에 접근할 수 있는지 확인
    EX) run scanner.provider.sqltables --uri content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers/
    
    run.scanner.provider.sqltables -a <패키지명>	// 입력한 패키지에서 사용하는 모든 URI 정보 확인
    EX) run.scanner.provider.sqltables -a com.android.insecurebankv2

    URI 통해 접근 가능한 테이블 목록

     

    run app.provider.query -h	// -h 옵션으로 도움말 확인
    
    run app.provider.query <URI> 	// 지정한 URI의 테이블안 정보 확인
    EX) run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers

    URI의 테이블안 정보 확인

     

    run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers --projection "*FROM SQLITE_MASTER WHERE type='table';--"	// 현재 앱에서 사용하고 있는 테이블들의 정보 확인
    // sqlite_master 테이블 : 현재 앱에서 사용하고 있는 테이블들의 정보
    // -projection 옵션으로 사용자가 입력한 쿼리문이 적용되면서 sqlite_master DB의 테이블 정보가 노출됨

    sqlite_master 테이블로 정보 확인

     

    run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers --projection name' from names where id=2;'-	// 원하는 쿼리를 만들어 name 테이블 조회

    name테이블 조회

     

    SQL 인젝션 공격 관련 모듈

    run scanner.provider.injection -a <패키지명>	// 특정 앱에서 사용하는 프로바이더를 자동으로 검색하고 SQL 인젝션 공격이 가능한지 여부 판단(인젝션 공격 방법 분류)
    // EX) run scanner.provider.injection -a com.android.insecurebankv2

    sql 인젝션  공격 취약 여부 확인

     

    5) 서비스 분석

    app.service.info -a <패키지명>	// 특정 앱의 서비스 목록 확인
    // EX) app.service.info -a com.android.email	// email 앱의 서비스 목록 확인
    
    app.service.info -u <패키지명>	// -U 옵션으로 숨겨진 서비스 확인
    
    app.service.info -f <특정_단어>	// -F 옵션으로 특정 단어 포함한 앱의 서비스 목록 확인
    // EX) run app.service.info -u -f email
    

    email 앱의 서비스 목록

     

    6) Debuggable package 분석

    app.package.debuggable <패키지명>	// 설치된 모든 앱 중에서 디버깅 가능한 앱 확인
    
    app.package.debuggable -f <특정_단어>	// 특정 앱의 디버깅 가능 취약점 확인
    // 디버깅 가능 취약점 : 중요 정보 노출 위험 있음 EX) 액티비티 우회 취약점, 콘텐츠 프로바이더 실행 취약점

    디버깅 가능한 취약점 확인

     

    모듈 관리

    모듈 제작 관련 홈페이지

    https://github.com/mwrlabs/drozer/wiki/Writing-a-module

     

    module command	// 사용 가능한 명령어 확인

     

    module search	// 원격 저장소나 로컬 저장소 관리 (연결된 공식 모듈 저장소로부터 다운로드할 수 있는 모듈 검색)
    
    module search <단어>	// 단어로 다운로드 가능한 모듈 검색
    
    module search <단어> -d exploit	// -d 옵션으로 검색된 모듈 기능 확인

     

    module install <모듈_이름> // 새로운 모듈 설치

     

    저장소 관리

    1. remote 명령어로 인터넷에 있는 저장소에서 모듈을 찾아오는 방식과 사용자가 지정한 로컬 저장소에 있는 모듈을 사용하는 방법

    moudle remote list	// 기본적으로 등록되어있는 원격 연결지 확인

     

    module remote remote <원격지_주소> // 원격지에 있는 모듈 저장소 연결

     

    module remote remove <원격지_주소> // 등록된 원격 연결지 삭제

     

    2. repository 명령어로 로컬에 특정 경로를 저장소로 지정해 관리하는 방법(사용자가 만든 모듈, 즉 install 명령어로 설치한 모듈 및 인터넷에서 별도로 다운로드한 모듈들이 저장될 위치를 지정하기 위해 사용)

    module repository list	// 로컬에 등록된 저장소 위치 확인

     

    module repository create /path/to/repository	// 로컬 주소를 새로운 로컬 저장소 위치에 추가

     

    module repository delete /path/to/repository	// 기존에 등록된 로컬 저장소 경로 삭제

     

    module repository enable /path/to/repository	// 특정 저장소 위치 활성화

     

    module repository disable /path/to/repository	// 특정 저장소 위치 비활성화

    'Security > Mobile' 카테고리의 다른 글

    Android Manifest.xml 파일 구조  (0) 2019.06.04
    smali(dalvik opcode)  (0) 2019.06.04
    드로저 사용법  (0) 2019.06.01
    ADB(Android Debug Bridge) 사용법  (0) 2019.06.01
    안드로이드 애플리케이션 디컴파일 도구  (0) 2019.06.01
    모바일 프록시 설정  (0) 2019.06.01

    댓글 0

~ ^ . ^ ~