kkamagi's story

IT, 정보보안, 포렌식, 일상 공유

Cyber Security

모바일 취약점 진단 / 이미지덤프(fridump)

까마기 2020. 12. 3. 18:05
반응형

회사에서 급하게 모바일 앱 취약점 진단을 요청하였다. 현업/개발부서에서 갑자기 서비스 오픈을 한다고 하니.. 보안팀 입장에서 안할 수도 없는 노릇이다. 사수가 조심스레 물어본다. 모바일 취약점 진단 해봤냐며..(안해봤다) 우선 최대한 해보라고 하고 별다른 방법도 없고, 원래 현 직장에서의 업무가 웹/모바일 취약점 진단이니깐.. 당연히 진행하겠다고 했다.

우선 구글링 & 유튜브 총동원.

 내가 아는 건 우선 nox player 밖에 없는 상황이다. (모바일 앱 단순 실행 테스트)

 

분석 환경 구축

- frida를 통한 모바일 취약점이 많이 나오길래 찾아보니 frida 환경을 구축하고 모바일 앱 서비스와 서버-클라이언트 통신을 통해 분석을 하는 모양이다.

1. nox 환경 세팅

nox player 다운로드 및 실행 (2021년 2월 3일 기준 7.0.0.9 버전)

nox player 설치/실행 후에 디바이스 연결 확인 및 터미널 접속 시도 (자동으로 디바이스 및 애뮬레이터에 연결되지 않는 경우 수동으로 연결한다)

터미널 최초 접근 후 su 명령어로 권한 상승(nox앱에서 루팅 설정 사전에 필요)

 nox player가 실행되어 있으면 보통은 아래와 같이 데몬 시작 및 터미널 접속이 자동으로 된다.

 

nox player에 apk파일을 통해 앱 설치하기 (분석 apk파일이 주어지는 경우)

- apk파일을 화면에 드래그

 

설치 확인

또는 nox_adb.exe 명령어를 통해 설치도 가능하다.

- Code(Apk) 위치

어떤 App이 설치되면 device 내부의 특정 dir에 apk, libs, oat 파일 등이 저장됩니다. Oreo부터 폴더명은 package의 이름에 random hashcode의 조합으로 생성됩니다. 참고(codechacha.com/ko/android-data-storage/)

- 내부저장소 캐시 데이터 위치

/data/data

참고(flystone.tistory.com/146)

 

 

2. frida 환경 구축

 - 아래 블로그에 친절하게 설명이 되어있다.

Frida는 리버싱 과정에서 DBI( Dynamic Binary Instrumentation -동적 분석 )를 가능하게 해주는 도구입니다.
Frida는 패키지와 서버로 이루어져 있는데 분석하는 장치에는 패키지를 설치하고 분석의 대상이 되는 모바일이나 에뮬레이터에는 서버를 삽입하여 구동하게 됩니다.

출처 : m.blog.naver.com/PostView.nhn?blogId=wsi5555&logNo=221251489689&proxyReferer=https:%2F%2Fwww.google.com%2F

 

[ Frida ] 설치 ( 패키지, 서버 )

1. [ Frida ] 설치 Frida는 리버싱 과정에서 DBI( Dynamic Binary Instrumentation -동적 분석 )를...

blog.naver.com

1) 분석할 로컬 환경에 frida 툴 설치

pip install frida

pip install frida-tools

버전을 명시하지 않아도 설치됨

 

2) frida-server 다운로드 (분석대상이 되는 애뮬레이터에서 구동하기 위한 목적)

github.com/frida/frida/releases

 

Releases · frida/frida

Clone this repo to build Frida. Contribute to frida/frida development by creating an account on GitHub.

github.com

 

nox 애뮬레이터에서 frida-server를 실행하기 위하여 'frida-server' 파일을 adb(android debug bridge) 도구를 통해 nox 애뮬레이터 디바이스로 push

(nox 애뮬레이터가 실행되어 있어야 하고 push할 위치도 미리 확인한다-> /data/local/tmp)

 

설치된 nox 경로아래 명령어를 편하게 사용하기 위해 환경변수에 등록하였다.

환경변수 설정(nox\bin)

터미널 접속 및 push할 경로 확인

> nox_adb.exe shell 

애뮬레이터 내 /data/local/tmp 경로 확인

> nox_adb.exe push [push할 파일 경로] [목적지 경로]

(목적지 경로는 파일명까지 적어줘야 전송이 됨)

* 64비트 파일은 실행이 안되어 x86을 다시 받아서 push

 

 

chmod 755 [frida-server 파일]

./frida-server-버전-android-x86 &

frida-server 실행 여부 확인 (ps 명령어는 -ef 옵션이 먹히지 않는다. ps명령어만으로 확인)

 

frida-server가 실행되면 로컬 분석 환경에서 'frida-ps -U' 명령어를 통해 분석대상의 프로세스 목록을 확인함으로써 정상통신 여부를 확인한다.

frida-ps -U

 

 

2-1. nox 프록시 설정 (nox player 내 안드로이드의 wifi 설정에서 프록시 설정을 한다)

* 사전에 burpsuite 프록시 설정을 해둔다. ex)127.0.0.1:8080

 

위와 같이 하면 프록시 연결이 되지 않는다. IP는 호스트 PC(Windows)의 IP를 입력한다.

 

프록시 설정이 정상적으로 되었다면 http://burp에 접속이 될 것이다. 인증서를 다운받도록 하자.

다운받은 인증서 파일(cacert.der)는 포맷 문제로 직접 설치가 불가능하며, 이름 바꾸기를 통해 확장자를 .crt로 변경한다.

 

변경한 인증서 파일을 안드로이드 내에 설정 - 보안 - SD 카드에서 설치 화면으로 들어가 설치를 진행한다. (SD카드에서 불러와 설치 진행) 또한, 인증서 설치 시 PIN, 패스워드 등 잠금설정을 해야 사용이 가능한다.

인증서 파일을 찾아 선택하면 아래와 같은 화면이 뜬다. 이름을 Burp로 하고 자격증명 사용은 Wi-Fi를 선택하자.

PIN 설정까지 하면 설치가 완료되고, 앱 실행을 해보면 BurpSuite를 통해 요청이 Intercept 되는지 확인하자.

(nox에서는 앱을 실행하고, BurpSuite에서는 Intercept is on으로 활성화를 시킨다.

3. apk 추출 (wkdrmsh.tistory.com/11)

apk extractor 다운로드

추출할 앱을 선택만 하면 추출완료

apk 파일 추출 이후에 애뮬레이터 상의 파일관리자를 통해 복사하거나 터미널 상의 경로에서 복사한다.

1) 파일관리자를 통한 복사

/storage/emulated/0/ExtractedApks 경로에 앱 확인

 

 

2) 터미널을 통한 복사

복사한 apk 파일을 로컬로 다운로드(pull)

> nox_adb.exe pull [apk파일 경로] [다운로드 받을 경로]

 

 

 

4. apktool 설치 및 다운로드 (ibotpeaches.github.io/Apktool/install/)

- apk  압축실행파일 - 안드로이드 앱 설치도면, 리소스 파일 등 가상환경에서 실행하는 형태

- 이 파일들을 분석하기 쉽게 하기 위해 역으로 디코딩, 디컴파일한다라고 이해.
- 이 앱을 위변조하는 목적으로 진단할때 사용(간단하게 위변조가 가능하므로)
- 여러 오픈소스 도구에서도 이 툴을 가지고 와서 활용
- 현재 2.5.0 업데이트되어 발표.

- 안드로이드 버전이 업데이트 되면서 sdk 등 정보들에 대한 업데이트 디코딩 과정에서 변화된 내용을 원활하게 바꿀수있도록 업데이트 되었다.

 

4-1. apk파일(바이너리파일) 디코딩

 

jar파일로 다운로드 - >자바환경에서 실행
> java -jar apktool_2.5.0.jar 입력 및 옵션 확인


-d : 디코딩
-b : 빌드

등등 옵션 확인 (java 명령어가 설치되어 있지 않다면, jre 다운로드 및 설치)

> java -jar apktool_2.5.0.jar d [apk파일]

--> 디코딩 진행

.dex - 자바 원본 파일이 스말리 파일 -> 덱스파일이 스말리 코드형태로 디코딩이 되는 것?? 관련 라이브러리와 파일들이 압축이 해제 되는 과정이다. (그냥 apk 파일을 디코딩 과정없이 단순 압축해제하면 덱스파일만 나오고 이 안에 원본 파일과 관련된 smail 코드는 디코딩안됨)

smali 코드나 AndroidManifest.xml 등 디코딩 된 파일 확인

 

smali 코드들은 텍스트 형식으로 저장이 됨

텍스트 변경 등을 통해 앱 위변조 확인이 가능.

 

* Smail 코드란? (참고 : bugday.tistory.com/46)

  • An assembler/disassembler for Android’s dex format의 약자, DEX 바이너리를 사람이 읽을 수 있도록 표현한 언어
  • Dalvik 바이트 코드를 위한 어셈블리 언어 (dalvik에서 사용하는 dex 형식의 어셈블러)
  • 안드로이드 리버싱 엔지니어링할 때 사용
  • 분석가입장에서보면 smali코드를 해석해 프로그램의 실행원리를 파악 가능
  • smali는 재컴파일이 가능하기 때문에, 코드를 수정하고 재컴파일 함으로써 프로그램 자체 수정이가능(apk파일을 java로 변환해서 자바를 보면서 + 파일 수정은 smali레벨에서 함) ->자바와의 차이
  • 쉽게 말하자면 DEX 파일은 기계어(바이너리)로 되어 있는데 사람이 보고 이해하기 힘드니까 쉽게 읽을 수 있도록 smali code로 표현한다.
  • 안드로이드 리버싱을 할 때 꼭 알아야한다. 왜냐하면 코드 패치를 하려면 무조건 smali code를 수정한 후 리패키징해야하기 때문이다. 보통 jadx나 jeb로 자바 코드를 분석한 후 smali code를 수정한다.

디코딩을 한 후에는 해당 앱의 smali 코드 위치를 찾자!

 

5. Drozer Framework 설치  (서버 - 에이젼트 방식)

github.com/FSecureLABS/drozer/releases/tag/2.4.4

 

 

<모바일 전자정부 서비스 관리 지침, 모바일 대민서비스 보안취약점 점검 가이드 참고>

1. 반복 설치 시 오류 발생

 

 

2. 앱 설치 전후 비정상적인 파일 및 디렉토리 설치 여부

모바일 앱 취약점 진단 체크리스트 중에  위변조 파일 비교하는 항목이 있다.

ls 명령어로 파일 개수 확인하여 최초설치/재설치 후 비교

 

삭제 후 디렉터리 확인

 

 

3. 불필요하거나 과도한 권한 설정

 

apk 파일 디코딩 후 생성된 폴더에서 AndroidManifest.xml 파일 확인

리눅스 bash shell에서 확인
윈도우 터미널에서 확인

4. 앱 삭제 후 안전성

 

앱 설치 전/후로 앱 설치 디렉터리의 파일 목록을 확인한다.

/data/data/애플리케이션이름

-> 삭제 후 해당 디렉터리에 파일이 남아있지 않을 경우 정상

# ls -alr

 

<진단기준>
• 앱 설치 전후로, 아래와 같을 경우 취약한 것으로 판단한다.
- Android 플랫폼의 경우, /data/data 디렉토리 내부에 잔존 파일이 있을 경우 취약한 것으로
판단한다.
- iOS 플랫폼의 경우, /var/mobile/Applications/이하의 디렉토리 내부에 잔존 파일이 있을 경우
취약한 것으로 판단한다.
• 앱 설치 전 및 삭제 후에 전체 시스템 내부 파일 목록을 작성 및 비교하여 변경 사항이 있을
경우 취약한 것으로 판단한다.

 

 

5. 기능의 정상동작

 

① 앱 설치 후 실행하여, 앱의 각 페이지 및 포함된 기능들을 동작시켜본다.
② 수행 도중 기능 정상 동작 여부를 확인하여 설계서에 따라 모바일 앱의 메뉴가 정확하게
동작하는지 확인한다. 단, 페이지가 많은 앱의 경우 시간이 많이 소요될 수 있다.
※ 기능 오동작 또는 미동작(로그인, SMS, GPS 등), 오탈자, 잘못된 링크 등을 점검한다.
제2장 기능 보안취약점 진단방법 | 23
제2장
기능 보안취약점 진단 방법
라. 취약점 진단기준
• 기능 오동작, 미동작, 오탈자, 잘못된 링크 등이 발견될 경우 취약한 것으로 판단한다.

 

 

6. 임의기능 등 악성행위 기능 존재

 

가. 설명
• 모바일 앱에는 명시적으로 제공하는 기능 외에 백그라운드(background)에서 구동되는 악성
기능이 존재할 수 있다.
나. 보안대책
• 알 수 없는 포트가 LISTEN 상태로 열려있는 경우 해당 포트를 통한 통신이 악의적인 것인지를
검토하고 포트 백도어 여부를 확인 후 보안취약점이 확인되면 해당 기능에 대하여 수정한다.
• 생성되는 프로세스가 악의적인지 여부와 프로세스의 권한이 적절하게 설정되었는지를
확인하여 보안취약점이 확인되면 해당 기능에 대하여 수정한다.
※ 생성되는 프로세스가 악의적인지 여부의 판단기준은 생성된 프로세스 중에서 원래 정의되지 않은
프로세스가 있는지 여부를 기준으로 함

 

진단방법

점검도구 : adb, paros, autoproxy(android) / putty, paros(ios)

 

앱 설치 및 실행을 통해 앱의 모든 기능(예:로그인,  SMS. 전송 등) 및 기능 요구 권한 (AndroidManifest.xml 파일 내 Permission 등) 점검

점검 대상 앱의 실제 사용되는 앱의 권한과 manifest 파일에서 부여하는 권한을 비교하여 사용되지 않는
권한이 부여되어 있는지를 점검한다. 불필요한 권한이 부여되어 있을 경우에는 악성 앱, 바이러스에
의해 권한이 악용 될 수 있다.

 

프록시 툴(paros, BurpSuite 등)을 이용하여 불필요한 패킷 전송 여부를 확인

점검 앱을 실행하여 각 기능들을 실행하면서 프록시 툴 도구에 전송되는 데이터를 살펴보고, 중요
개인정보 등을 유출 시키는지 여부를 점검한다.

 

netstat -anto 

-> 리스닝 포트 점검

ls -alR 패키지명 (불필요한 파일 생성 여부 확인)

 

진단기준

명시적인 기능 외 백그라운드로 실행되는 의심스러운 행위가 있을 경우 취약한 것으로
판단한다.
• 분석 대상 앱이 불필요한 패킷을 외부로 전송하거나 악의적인 파일, 프로세스 등을 생성 할
경우 이는 모바일 기기에 잠재적인 위협을 가져올 수 있는 행위로 의심하여 취약한 것으로
판단한다.

 

7. 정보 외부 유출

 

• 허가된 주소(IP, URL 등) 이외의 주소로 정보 전송이 가능하면 안된다.
나. 보안대책
• 전송되는 정보가 허가된 주소 이외의 다른 주소로 전송시 해당하는 정보를 확인하고 외부로
정보가 유출된다고 판별할 경우 삭제 또는 수정한다.

 

진단방법

앱을 설치한 후, 실행하여 로그인 기능을 수행한다.
② 프록시 툴(BurpSuite 등) 및 패킷분석 도구(WireShark 등)를 통해 전송되는 정보를 캡쳐한 후
허가된 주소로 패킷이 전송되는지 확인한다.
※ 전송되는 정보가 허가된 주소로 전송되는지 확인을 위해서는 앱 서버 또는 업데이트 서버 주소를
확인하며, 프록시 툴 및 패킷분석 도구를 사용하여 연결된 IP 및 URL을 쉽게 확인할 수 있음

 

진단기준

 

전송되는 정보가 허가된 주소 이외의 다른 주소로 전송 될 경우에는 취약한 것으로 판단한다

 

8. 자원고갈

 

정상기능 오동작 또는 취약점을 통해 과도한 트래픽을 유발시키거나 배터리를 고갈 시키지
않아야 한다.
나. 보안대책
• 배터리·트래픽 점검 앱을 통하여 비정상적으로 많은 배터리 및 트래픽 소모량을
발생시키는지를 확인 후 수정한다.
※ 배터리 및 트래픽 소모 발생량에 대한 판단기준은 자체적으로 기준을 수립하여 판단한다

 

진단방법 - 배터리사용량 앱

앱을 설치한 후 실행을 통해 사용되는 모든 기능 및 권한(SMS, GPS 등)을 확인한다.
② 배터리 사용량 앱12(예, Battery Doctor 앱) 및 트래픽 사용량 앱13(예, Network Traffic Detail 앱)
을 통해 각각 배터리 사용량 및 트래픽 사용량을 확인한다.

 

 

9. 루팅 및 탈옥 기기에서의 정상 동작

 

설명
• 루팅(Android 기반 플랫폼), 탈옥(iOS 기반 플랫폼) 된 기기에서 앱 설치, 실행 및 정상 동작이
이루어져서는 안된다.
나. 보안대책
• 다양한 신종 루트킷 및 루팅·탈옥을 탐지할 수 있도록 각종 패턴을 최신 버전으로 유지해야
하며, 앱 개발시 해당 기능을 탐지할 수 있는 모듈을 삽입하여 개발한다.
• 모바일 보안공통기반의 “단말 및 앱 위·변조 방지” 기능을 사용하여 플랫폼 변조(루팅·탈옥)
여부를 검사하여 위·변조된 단말 접근을 차단한다.

 

nox 루팅 설정(Root 켜기)

루팅 설정
nox 재실행
nox 루팅 설정 및 재실행하여 앱 실행 시 중지화면

 

dex2jar 도구를 이용하여 apk 파일을 jar 파일로 변경

jar 파일 내 컨텐츠 검색 (su, super, sbin 등)

jar 명령어를 사용 검색 명령어 

jd-gui 프로그램을 통해 검색

 

<루팅 탐지 참고 URL>

philosopher-chan.tistory.com/366

dazemonkey.tistory.com/47

m.blog.naver.com/6yujin6/221760527076

playfmrussia.ru/ko/chrome/chto-dayut-rut-prava-na-androide-chto-takoe-rut-i-zachem-on-nuzhen.html

chanztudio.tistory.com/70

bugday.tistory.com/50

rokefoke.tistory.com/10

 

10. ID값의 변경

ID 값의 변경

ls -alR /data/data/앱경로 

-> uid / gid 확인 후 해당 값을 제외하여 추출

ls -alR /data/data/앱경로 | awk -F' ' '{print $2} | grep -Ev 'uid'

ls -alR /data/data/앱경로 | awk -F' ' '{print $3} | grep -Ev 'gid'

 

 

 

 

 

11. 동일키로 서명된 서로 다른 앱 간의 UID 공유

 

 

12. 인텐트 권한의 올바른 설정

 

13. 인증 정보 생성 강도 적절성

 

14. 중요정보의 평문 저장 및 전송

 

15. 중요정보 저장 및 전송 시 취약한 암호알고리즘 적용

 

16. 기타 중요 정보의 평문 저장 및 전송

 

17. 기타 중요 정보 저장 및 전송 시 취약한 알고리즘 적용

 

18. 파일 다운로드 시 외부주소 및 파일 무결성 우회

 

19. 개인정보 및 개인위치정보 수집 및 활용에 대한 동의

 

20. 난독화

소스코드 난독화 여부 확인 (참고 : appguard.toast.com/blog/3)

dex2jar download하여 apk 또는 dex 파일을 jar로 변환

>d2j-dex2jar.bat -f [apk파일명] -o [변환할 jar파일명]

apk to jar

 

또는 apk 파일을 zip으로 확장자 변경 후 압축해제하여 classes.dex를 jar로 변환

 

1) apk 파일 압축해제 및 classes.dex 파일 확인

 

2) classes.dex 파일 jar파일로 디컴파일 (dex to jar)

>d2j-dex2jar.bat -f [dex파일명] -o [변환할 jar파일명]

 

 결과는 동일

20-1. 앱위변조

참고 : zifmfmphantom.tistory.com/100

 

1) apktool을 이용하여 apk 파일 디컴파일

 

2) apk 파일을 디코딩하여 생성된 해당 앱의 폴더에서 파일 변조 수행

ex) /res/Values/strings.xml -> app_name 수정

     /res/drawable 내의 실행 아이콘 이미지, 또는 메인 이미지 파일을 다른 이미지로 변경

 

3) apktool을 이용해 리패키징을 수행

 

> java -jar apktool_2.5.0.jar b [소스경로] -o [리패키징할 apk파일명]

 

 

4) 서명프로그램(keytool, jarsigner 등)을 이용해 빌드된 apk 파일에 대하여 서명(코드사인)

* keytool 키 생성 프로그램, jarsigner 서명 프로그램

keytool 참고 : www.lesstif.com/java/java-keytool-keystore-20775436.html

 

5) 서명된 apk 파일을 모바일 기기에 설치하여 정상적으로 실행되는지 확인

위변조한 앱 설치 불가 메세지

 

apk파일 드래그앤드랍으로 설치 시 중간에 멈춤

<앱 위변조> - 참고

m.blog.naver.com/PostView.nhn?blogId=largosoft&logNo=220489563462&proxyReferer=https:%2F%2Fwww.google.com%2F

 

 

 

 

<참고 URL >

guslabview.tistory.com/321

h3ck.tistory.com/25

parkho79.tistory.com/57

mugs.tistory.com/4

liveyourit.tistory.com/152

codechacha.com/ko/android-data-storage/

github.com/frida/frida/releases

m.blog.naver.com/PostView.nhn?blogId=searphiel9&logNo=221366347325&proxyReferer=https:%2F%2Fwww.google.com%2F( Android ADB 가지고 놀기)

 

반응형