iOS 모바일 취약점 진단 과정 (수정전)
앞으로 모바일 취약점 진단 과정에 대해서 게시를 해볼까 하는데..
게시글 하나 쓰는데도 영혼이 날라가버리니 쉬운게 아니네..
일주일에 하나씩 써야겠다!
iOS jailbreak
-------------- 이미 탈옥된 폰 상태까지.(10.3.4 는 ifunbox 에서 탈옥된 폰으로 표기가 되지 않아서 shell 로 모든걸 진행함)
1. 99_tools 에서 프로그램 설치
a. ifunbox : device 와 연결하여 여러가지 수행 가능
b. putty : device 와 ssh 연결
c. python : device 와 ssh 연결 후 Frida 사용
d. cmder : cmd 를 보다 쉽게 사용할 수 있음 (환경변수 path에 "C:\cmder" 와 같이 추가 : 해당 폴더가 "C:"에 있을 경우)
2. Device 와 연결하기
a. Frida 설치
가. cmder / cmd 를 관리자 모드로 실행
나. python --version // python 이 잘 작동하는지 확인하기 위하여 버전정보를 확인
다. pip install frida // frida 를 설치
라. pip install frida-tools // frida-tools 를 설치
마. frida // frida 가 설치되었는지 확인
바. frida --version // frida 가 설치되었는지 확인
b. putty 실행
가. 127.0.0.1 에 접속 // 접속이 가능한지 확인
나. root / alpine 으로 접속 // 접속이 가능한지 확인
다. frida-server // 'cydia' 에 이미 트윅이 설치되어 있어 연결이 되어야하나, 실행이 안될 수 도 있음
c. frida 연결을 도와주는 도구를 device 에 설치
가. putty 가 설치된 폴더에 Dropbear.deb 파일을 복사
나. cmder / cmd 를 관리자 모드로 실행
라. cd C:\Program Files (x86)\PuTTY // putty 가 설치된 폴더로 이동
마. pscp.exe .\dropbear.deb root@127.0.0.1:/var/mobile/downloads // pscp 를 이용하여 .deb 파일을 /var/mobile/downloads에 복사함
바. putty 로 돌아감
사. cd ~ // 루트로 이동함
아. cd /var/mobile/Downloads 로 이동함 // /var/mobile/Downloads 로 이동함
자. ls // Dropbear.deb 파일이 복사가 되었는지 확인함
차. chmod 777 ./Dropbear.deb // 해당 파일의 권한을 777 로 지정함
카. dpkg -i ./Dropbear.deb // 해당 파일을 설치함
타. cd ~ // 루트로 이동함
파. frida-server // frida-server 를 실행함
하. ps aux | grep frida // 'frida' 단어가 들어간 프로세스 리스트 확인, 실행 확인
d. Frida 를 이용한 작업 I
가. device 에서 진단하고자 하는 앱을 실행 // 프로세스 리스트에 올리기 위함
나. frida-ls-devices // frida 에 연결된 device 를 보여줌
다. frida-ps -U // usb 에 연결된 device 의 프로세스 리스트를 보여줌
라. frida -U 634 // '634' PID 를 입력하면 해당 프로세스에 Attaching 함
e. Attaching 하여
가. w = ObjC.classes.UIWindow.keyWindow() // UIWindow에서 현재 최상위 뷰를 확인
나. console.log(ObjC.classes.UIWindow.keyWindow().rootViewController().view().subviews().toString()) // 해당 뷰의 rootViewController를 통해 UIWindow를 구성하는데 사용된 항목들을 봄
f. Frida 를 이용한 작업 II
가. frida -U 643 -l C:\Users\Boodleboodle\Desktop\method.py | grep -i 'Detection'
| 소스파일 위치 | | 해당 단어 검색 |
나. frida -U 643 -l C:\Users\Boodleboodle\Desktop\class.py > result.txt
| 소스파일 위치 | | 해당 이름으로 저장( 특정경로 미지정시 putty 위치로 저장됨) |
*** get_all_classes_name.py // 모든 class 이름을 가져옴
*** get_method_in_class.py // 지정한 class 에서 모든 method 를 가져옴
g. class-dump-z // 클래스 파일 내 오브젝트 분석을 위해 설치
***다운로드 링크https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/networkpx/class-dump-z_0.2a.tar.gz
가. 해당 파일 압축을 풀고 iphone_armv6 버전의 파일을 putty로 이동
나. pscp.exe .\class-dump-z root@127.0.0.1:/usr/bin // /usr/bin 으로 해당 파일 복사
다. cd /usr/bin // /usr/bin 으로 이동
라. chmod 777 ./class-dump-z // 최고권한설정 부여
마. ./class-dump-z // 실행해 봄
바. class-dump-z 사용시 에러가 난다면, cydia 에서 pcre 를 설치해줄 것
사. 앱의 위치는 /private/var/containers/Bundle/Application/@@@/###.app 이곳에 있음
아. class-dump-z ### // 앱 폴더 이름이랑 보통 똑같음
자. class-dump-z 후에 clutch 실행함
*** class-dump-z Segmentation fault: 11 오류 (미해결)
https://rce64.wordpress.com/2013/01/27/private-decrypting-apps-on-ios-6-multiple-architectures-and-pie/
차. otool 설치 - cydia 에서 Darwin CC Tools 설치
카. otool -l ### | grep crypt
h. clutch // IPA 복호화 도구
*** ios 10 이상에서는 cydia 에서 설치하는 방법이 있는 것 같음
*** 다운로드 링크 https://www.dropbox.com/s/vnckzer2sw5r6ue/Clutch2?dl=0
*** 참고 링크 https://iosgods.com/topic/45154-clutch-204-working-with-ios-102/
가. pscp.exe .\Clutch2 root@127.0.0.1:/usr/bin // /usr/bin 으로 해당 파일 복사
나. cd /usr/bin // /usr/bin 으로 이동
다. chmod 777 ./Clutch2 // 최고권한설정 부여
라. ./Clutch2 // 실행해 봄
마. Clutch2 -i // 복호화 가능한 앱 확인
바. Clutch2 -b 2 // 앱 목록 중 2 번 앱을 바이너리 파일로 덤프 함
Clutch2 -d 2 // 앱 을 ipa 파일로 덤프 함
사. binary 파일은 /tmp/clutch/### 에 위치
아. dump 파일은 /private/var/mobile/Documents/Dumped/###.ipa 에 위치
자. 띠로리.... FileZilla 로 파일 구조를 볼 수가 있다이.. ifunbox는 필요가 없구나...
차. /tmp/clutch 에 있는 폴더를 통채로 가지고 옴
카. cd /private/var/mobile/Documents/Dumped // 이동하여
타. unzip ###.ipa -d ~/### // 루트에 ### 이름으로 ipa 파일을 풀어줌 // unzip 실행 안되면 cydia에서 다운로드
파. 해당 폴더로 이동하여 /Payload/###/### 앱을 확인
하. class-dump-z ### > ~/class_### // 복호화한 앱을 클래스 덤프하는데, 루트에 class_### 이름으로 저장함 (/var/root)
까. 해당 ### 파일을 윈도우로 가져와 확인하면 덤프된 모든 클래스와 메소드를 확인할 수 있음
i. ida 로 분석
가. -[AppDelegate alertView:didDismissWithButtonIndex:]
2번째 단계에서
02 D1 BNE loc_35658
02 E0 B loc_35658
로직 변경 시 루팅 및 무결성 우회됨
j. Flex 2.5 로 분석
가. 이전에 신협과 같이 무결성 검증알림창을 띄우는 앱을 점검한 적이 있음
그때 사용된 비슷한 클래스와 함수를 위주로 같은 방법으로 무결성 검증을 우회할 수 있는지 확인함
나. 무수한 함수들을 일일이 확인하여 메소드 값을 변경 시도
다. MAlertController 클래스의 clickedButtonAtIndex 메소스 값을 NULL 로 설정 하였더니, 확인창이 사라져도 앱이 계속 실행됨
k. cycript 분석 방법 확인중
가. cydia 에서 cycript 를 검색하여 디바이스에 설치
나. putty 연결하여 cycript 를 입력하면 cy# 상태로 실행됨을 확인
다. cycript -p ### 연결
라.