레이블이 android인 게시물을 표시합니다. 모든 게시물 표시
레이블이 android인 게시물을 표시합니다. 모든 게시물 표시

2019. 11. 27.

Android APK 진단을 위한 툴 소개

Android APK 진단을 위한 툴 소개

네트워크 통신을 하는 앱이라면, 웹 진단 툴을 함께 사용한다.
1) Apktool
링크 : http://ibotpeaches.github.io/Apktool/
ApkTool은 apk파일은 디컴파일하거나 수정한 후 다시 컴파일 할 수 있는 Tool .
여러 옵션이 있지만 자주 사용하는 옵션은
 d 옵션 : decompile 해주는 옵션으로 smali 파일이 아웃풋
b 옵션 : recompile 해주는 옵션으로 apkfile이 아웃풋으로 나오며, signing을 거쳐 안드로이드폰에 설치가 가능.
d -d 옵션 : decompile 해주는 옵션으로 smali 파일이 아웃풋으로 나오지만, 확장자를 java파일로 만들어주어 동적디버깅 할 때 사용.


2) apk-sign
링크 : https://github.com/appium/sign
안드로이드에는 signing되지 않은 앱은 설치되지 않음
이 signing은 개발자가 APK파일로 만들어 낼 때 하는데, Apk Tool 을 이용해 decompile을 하면 signing이 풀림.
따라서 폰에 설치를 하기 위해서는 signing을 해주어야 하는데, 원 개발자의 서명을 따라할수는 없으나 아무 keystore를 가지고 signing만 해주어도 설치는 가능.


3) dex2jar
링크 : https://sourceforge.net/projects/dex2jar/
Apk파일은 안에 classes.dex라는 파일이 있는데 이 파일은 Android Dalvik이 인식할수 있도록 class파일을 바이트 코드로 변환한 파일.
이 파일을 dex2jar를 이용해 class파일을 추출하는 Tool.

4) jd-gui
링크 : http://jd.benow.ca/
JAVA decompiler
위 dex2jar를 이용해 추출해낸 class파일을 java로 복원해주는 Tool.
그런데 복원할때 완벽하지 않아 복원이 잘 되지 않는 부분이 있는 것이 아쉬운점.

5) jadx
링크 : https://github.com/skylot/jadx
JAVA decompiler
필자는 dex2jar&jd-gui 보다 jadx를 사용하는 것을 더 선호하는데 jadx의 결과가 jd-gui보다 좀더 정확하게 복원을 해주는 것으로 느껴지고, 또 dex2jar라는 단계를 밟지 않고 바로 apk파일을 끌어다 놓는 것만으로 디 컴파일이 되기 때문.

6) cheatengine
링크 : http://www.cheatengine.org/
메모리 변조 툴
android 앱에 attach해서 메모리를 변조등을 수행할 수 있다.

7) frida
링크 : http://www.frida.re/docs/android/
frida는 javascript inject를 이용해 개발자가 만들어낸 함수를 공격자가 명시해서 호출하거나, 함수를 새로 만들어서 호출 할 수도 있다.
예를 들면 Getpassword(String id) 이런 함수가 있다면 공격자가 이를 호출하여 password를 얻어낼 수 도 있다.

8) ida pro
링크 : https://www.hex-rays.com/products/ida/
ida는 동적 디버깅 툴로 대상 Apk를 실행시키면서, 각 부분에 BP를 걸어 그 시점에서의 레지스트리 값등을 확인하고, 패치를 통해
체크로직등의 우회를 노릴수 있다.

9) drozer
링크 : https://labs.mwrinfosecurity.com/tools/drozer/
안드로이드 진단 프레임워크로 안드로이드 어플리케이션의 보안 취약점을 진단할 수 있다.

10) introspy
링크 : https://github.com/iSECPartners/Introspy-Android
함수 호출을 포함한 어플리케이션 API 안드로이드 API 파라미터와 리턴값을 로깅 해주는 tool이다.


출처: https://yprefer.tistory.com/1?category=648958 [YPrefer's Develop&Security]

Continue reading

안드로이드 취약점 점검, ADB 살펴보기

ADB (Android Debug Bridge) 는 안드로이드 에뮬레이터나 PC에 실제 연결된 장치를 제어하기 위한 안드로이드 디버깅 도구 중 하나이다. 안드로이드 스튜디오와 같은 안드로이드 통합 개발 환경에서는 기능을 GUI 형태로 제공하는 반면, ADB 는 명령라인을 통해 사용자가 명령어를 입력함으로써 안드로이드 기기와 통신하고 있다.


ADB는 안드로이드 SDK 에 포함되어 있으며, SDK 설치 폴더의 하위 폴더인 platform-tools 에 포함되어 있다.



adb devices 명령을 실행한 결과 1개의 device가 발견되었다.


adb shell 명령으로 쉘에 접근 할 수도 있다. (만약 여러개의 장치가 연결되었으면 usb의 경우는 -d 옵션을 붙이고 에뮬의 경우는 -e를 붙여야 한다. )




[로그캣을 이용한 로그 분석]
로그캣은 안드로이드 장치에서 발생하는 로그 메시지를 화면으로 출력하거나 파일 형태로 저장하는 기능을 제공한다.


adb shell 로 로그인 후 logcat 명령어를 입력함으로써 안드로이드 로그메시지를 볼 수 있다. 로그가 모두 출력된 이후에 로그캣을 종료하지 않으면 실시간 발생하는 이벤트 로그가 출력된다.

Continue reading

2019. 1. 6.

[모바일] 드로저 활용한 앱 취약점 점검

[드로저 명령어]

run app.package.list
 - 디바이스에 설치된 모든 앱의 패키지명 출력

run app.package.list -f insecure(설치 앱)
 - 특정단어가 포함되어 있는 패키지명 검색

run app.package.info -a com.android.insecurebankv2
 - 패키지 명으로 앱의 기본적인 정보를 얻기 위한 명령어


 - 패키지의 이름으로 프로세스 정보 버전, 데이터를 저장하는 위치, apk 파일의 위치, UID 등을 알 수 있으며, 앱이 가지고 있는 권한도 확인 할 수 있다.


run app.package.info -p android.permission.SEND_SMS
 -p 옵션을 사용하여 특정 권한을 갖고 있는 패키지의 목록이 출력된다.

 - SEND_SMS 디바이스 패키지 중에서 SMS를 보낼 수 있는 권한을 가진 앱들이 나열된다.

run app.package.manifest
 - 이러한 권한은 AndroidManifest.xml 파일에 정의되어 있으며, 모든 앱의 최상위 폴더에 존재한다. 이 파일은 여러가지 정보를 추출할 수 있기 때문에 기본적으로 분석해야 할 파일이다.

드로저의 기능 중 하나는 앱의 취약한 부분을 검색하는 기능을 갖고 있다는 것이다. app.package.attacksurface 모듈로 가능하다.

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

 - 명령어 결과 5개의 액티비티가 노출되었으며, 브로드캐스트 리시버 취약점, 콘텐츠 프로바이더, 디버깅이 가능한 취약점이 발견되었다.

[취약점 분석]

1) 액티비티 분석

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


액티비티 정보들의 이름이 출력된다. 그리고 패스워드 변경과 관련된 ChangePassword 를 로그인 후에 접근했을 때와 드로우저를 이용하여 비정상적으로 접근했을때를 비교해보자.

run app.activity.start --component [패키지명] [액티비티명]


 - 특정권한이 있어야만 접근 할 수 있는 페이지를 정당한 권한 없이 접근이 가능하다.

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

안드로이드 디바이스에서 이벤트가 발생하는 경우에는 앱들이 브로드캐스트 신호를 주고 받으며 시스템상에 일어나는 상황을 공유한다. 이때 신호를 받기 위해서는 브로드캐스트가 정의되어 있어야 하며, 각각의 신호에 맞는 액션 역시 적용되어 있어야 한다.

run app.broadcast.info -f [특정단어]

 - 브로드캐스트 리시버 이름이 MyBroadCastReceiver 라는 것을 알 수 있다.

3) 콘텐츠 프로바이더 분석
콘텐츠 프로바이더는 특정 애플리케이션이 사용하고 있는 데이터베이스를 공유하기 위해 사용된다. 이는 전체 데이터가 아닌 공유를 원하는 데이터만 공유하기 위한 수단이기도 하다.

run.app.provider.info -a com.android.insecurebankv2


TrackUserContentProviderProvider 가 노출된것을 확인하였다. 컨텐츠 프로바이더는 데이터베이스에 있는 정보를 URI 로 공유하기 때문에 데이터베이스에 접근하기 위해서는 URI 에 대한 정보가 반드시 필요하다. 프로바이더가 사용하는 URI 정보를 찾기 위해서는 app.provider.finduri 모듈을 사용한다.

run app.provider.finduri [패키지이름]

 - uri 주소는 특정 데이터에만 접근하도록 제한하여 공유한다.

run scanner.provider.sqltables -uri [uri 주소]
지금까지 얻는 URI 정보로 어떤 정보에 접근할 수 있는 확인한다.

 - 3개의 테이블에 접근할 수 있다. "-a" 옵션을 사용하면 입력한 패키지에서 사용하는 모든 URI 주소 검색을 실시한다. 


run scanner.provider.sqltables -a com.android.insecurebankv2
 - 인시큐어뱅크 앱의 모든 URI를 조사한다.

run app.provider.query [uri]
 - URI 로부터 테이블명까지 추출하고 테이블 안에 어떠한 정보가 저장되어 있는지 확인하기 위해 "app.provider.query" 모듈로 구체적인 정보들을 얻어낸다.
 - URI 정보로부터 로그인한 사용자의 아이디와 로그인한 순서를 나타내는 테이블 정보가 출력되었다.

run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers --projection "* FROM SQLITE_MASTER WHERE type='table';--"


 - 위의 테이블 외에 다른 테이블이 있는지 확인하기 위해 sqlite_master 라는 테이블을 확인해본다. sqlite_master 테이블에서는 현재 앱에서 사용하고 있는 테이블들의 정보를 확인할 수 있다.


- 이러한 작업을 자동으로 수행해주는 scanner.provider.injection 모듈에 대해 알아본다.
- 이 모듈은 특정 앱에서 사용하는 프로바이드를 자동으로 검색하고 sql인젝션 공격이 가능한지 취약한지 여부를 판단한다.




[서비스 분석]
서비스는 앱을 구성하는 4가지 요소 중 하나로 화면에 보이는 액티비티와 반대로 UI가 없으며 백그라운드에서 실행되는 컴포넌트의 종류다. 음악앱의 경우 음악이 재생될 때 다른 앱을 실행하여도 음악이 계속 재생되는것은 음악 재생 서비스가 계속 실행중이기 때문이다.

run app.service.info -a com.android.email

 - email 앱의 서비스 목록이 리스팅된다.

[Debuggable package 분석]
패키지 정보 수집에서 발견된 마지막 취약점이다. 디버깅이 가능하도록 설정되어 있기 때문에 발생하는 취약점으로, 중요한 정보가 노출될 위험이 있다. 액티비티 우회 취약점, 콘텐츠 프로바이더 실행 취약점 등이 이에 해당한다.

run app.package.debugable -f [특정단어]


[모듈 관리]

드로저는 모듈 명령어이기 때문에 다양한 기능을 추가하거나 삭제할 수 있고, 몇 가지 공격 코드도 제공한다. 모듈들은 파이썬으로 작성되었으며, 디바이스에 설치된 드로저 에이전트로 안드로이드 운영체제 안에서 실행할 수 있다. 사용자가 직접 <drozer python path>/drozer/modules  경로에 추가 할 수도 있다.

  • 모듈 제작 관련 공식 홈페이지 (https://github.com/mwrlabs/drozer/wiki/Writing-a-Module)

module search
 - search 명령어로 현재 연결된 공식 저장소로부터 다운로드 할 수 있는 모듈울 검색한다.


module search root
 - 많은 모듈 중에서 사용자가 원하는 기능의 모듈을 찾기 위해 search 명령어를 이용한다.

module search root -d

 - 모듈에 대한 자세한 설명을 얻기 위해 -d 옵션을 이용한다.

module install metall0id.root.cmdclient
 - install 명령어를 이용하여 모듈을 설치한다.

module remote list
 - remote 명령어로 인터넷에 있는 저장소에서 모듈을 검색한다.


module repository command
 - install 명령어로 설치한 모듈 및 인터넷에서 별도로 다운로드한 모듈들이 저장될 위치를 지정하기 위해 사용된다.

참조

  • 드로저 명령어 모음

(http://th3-incognito-guy.blogspot.com/2014/09/drozer-security-attack-framework-for.html)



Continue reading

2019. 1. 1.

[모바일] drozer 설치

드로저는 모바일 애플리케이션 취약점 진단 프레임워크인 머큐리 새로운 업데이트 버전이다. 윈도우와 리눅스를 지원하며 JRE, JDK, 안드로이드 SDK 가 설치되어 있어야만 사용 할 수 있다.
안드로이드 가상 디바이스 또는 단말기에 에이전트를 설치한 후 PC에서 ADB로 명령을 내리는 서버와 클라이언트 방식으로 동작한다.


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


1. 드로저 다운로드 및 실행
https://labs.mwrinfosecurity.com/tools/drozer/


drozer(MSI)와 drozer(Agent.apk only) 를 다운로드 한다.
다운로드한 drozer.msi를 실행하여 설치하고 C:\Python27\Scripts" 경로를 시스템 PATH에 추가한다.


2. Drozer agent 설치


adb install drozer-agent-2.3.4.apk 명령으로 모바일 기기에 Drozer 에이전트를 설치한다.


3. Drozer agent 실행


drozer app을 실행하여 off -> on으로 변경한 후, 포트를 맞춰준다.


adb forward tcp:31415 tcp:31415
drozer.bat console connect  // drozer.bat 파일은 python27/script 폴더에 있다.


** drozer 실행할때 여러가지 에러가 발생하는데 pip 나 easy_install 로 모듈을 설치한다.


4. 실행 결과



참고



Continue reading

2018. 12. 30.

[모바일] 애플리케이션 디컴파일 방법

보통 모바일 취약점 점검이라고 하면 소스코드를 갖고 있지 않은 상태에서 디 컴파일을 통해 애플리케이션을 분석해야 한다. 일반적으로 사용하는 디컴파일 도구는 다음과 같다.




1. apktool
apktool 은 apk 파일로 압축되어 있는 resources.arsc, classes.dex, XML 파일들을 디버깅 파일 형태로 변환해주고, 이를 수정한 후에 다시 수정된 apk 파일로 생성 할 수 있는 도구다.


사용방법
- 앱을 디코드 하는 경우
java -jar apktool.jar d [option] [디코드 할 APK파일명].apk


- 앱을 컴파일 할 경우
java -jar apktool.jar b [option] [빌드할 APK 폴더 경로]






apktool 을 이용하여 app-release.apk 를 디코딩하여 디버깅 가능한 파일 형태로 변환해본다.




위와 같이 폴더가 생기면서 디코딩 된 것을 알 수 있다.




2. dex2jar
APK 파일이나 APK 파일에 포함된 classes.dex 파일을 자바 클래스 파일로 변환해주는 도구이다. 깃허브를 통해 오픈소스로 배포하고 있으며, 이에는 dex2jar 외에도 다양한 도구들이 포함되어 있다.
dex2jar 를 이용하고자 할 때 실행 파일 뒤에 대상 파일만 입력해주면, jar 확장자를 가진 파일로 변환해준다.




명령 실행 후에는 insecure Bankv2-dex2jar.jar 파일이 생성된 것을 알 수 있다. 생성된 jar 파일을 사용자가 읽을 수 있는 형태로 변환하기 위해서는 자바 파일로 디컴파일 해야한다. 자바 디컴파일러는 jd-gui.exe 를 실행하고 위에서 생성된 "InsecureBankv2-dex2jar.jar" 파일을 불러오면 자동으로 디컴파일된다.






** 지금까지는 JD-GUI 를 사용해왔지만 디컴파일 과정을 생략할 수 있는 도구인 BytecodeViewer를 설명한다. 이 앱은 디컴파일할 때 사용할 수 있을 뿐아니라 악성코드 앱을 분석할 때도 사용된다.


BytecodeViewer는 자바, 안드로이드, DEX, jars 파일 등과 같은 소스 코드 리버싱 분석 도구이다. 윈도우 환경에서 완벽하게 동작 할 수 있도록 지원한다. 안드로이드 APK 파일을 디컴파일하여 바이트코드 형태와 클래스 파일을 자바 파일로 변환한 후 소스파일로 복원하여 함께 보여준다.


download (https://github.com/konloch/bytecode-viewer/releases)
BytecodeViewer 2.9.8 버전을 다운받고 jar 파일을 시랳아혐 업데이트를 수행한다.


Continue reading

Popular Posts

Recent Posts

Powered by Blogger.