끄적끄적

[iOS] 분석 연대기 본문

Security/Mobile

[iOS] 분석 연대기

Go0G 2022. 4. 14. 10:52

본 게시글은 iOS 진단을 수행하며 지속적으로 업데이트될 예정입니다.

Change Log

  • 22.04.14: 게시글 초안 업로드

개요

iOS에서는 IPA 파일의 바이너리에 대한 분석을 진행하게 된다.

분석 시, 아래와 같은 로직을 주로 분석 포인트로 설정한다.

  • 탈옥(JailBreak) 탐지 로직 우회
  • 인증 로직을 거쳐야하는 특정 웹뷰(WebView) 로직 우회 
  • 전송 패킷 내 Body가 암호화되어 있을 경우 복호화 로직 파악

이와 같이 분석을 진행한 후에는 바이너리 파일을 수정하고 iOS 기기내 파일에 업로드하여 동작 여부를 파악한다.

 

iOS의 Application은 Object-C/Swift로 이루어져 있어 Android(Java/Kotlin)에서 JADX나 JEB로 분석했던 경우와 달리 ARM 프로세서의 해석을 지원하는 디버거(IDA 등)에서 분석이 가능하다.


정적 분석

정적 분석에서 분석의 시작 지점을 설정하는 방법은 여러가지가 있을 수 있다. 하지만 현재 필자가 사용하는 방법은 아래와 같다.

  • String Base: 코드내에서 사용된 String 값에서 웹뷰 혹은 의심스러운 문자열을 기준으로 분석 시작
    • IDA 단축키: Shift+[F12] - Ctrl+F 
  • Function Base: 분석하고자 하는 웹뷰가 사용하는 Object-C/Swift Libaray/Function를 기준으로 분석 시작
    • IDA 단축키: Ctrl+P - Ctr+F
  • Binary String Base: 바이너리에 존재하는 모든 문자열을 기준으로 의심스러운 문자열을 기준으로 시작
    • IDA 단축키: ALT+T - "Find all occurrences" 체크

위와 같은 방법을 통해 분석 시작 포인트를 설정하였다면, 해당 로직에 대한 분석이 이어진다. 정상적으로 함수의 바이너리에 접근하였을 경우 IDA에서 [SPACE] 키로 해당 함수를 도식화하여 파악할 수 있다.

참고

함수의 바이너리에서 [F5] 키를 누르면 IDA가 어셈블리어를 해석한 의사코드형태(C언어 문법)로 표현하기 때문에 보다 편하게 분석을 진행할 수 있다.


이때, 함수의 로직을 파악하는 것이 중요하다.

단순 TRUE/FALSE 만으로 원하는 로직으로 이동이 가능할 수도 있고, 특정 레지스터에 값을 수정해야 할수도 있다. 이는 분석시 마다 다양한 케이스로 나타날 수 있으니 아래 [더보기]의 Instruction을 참고한다.

변조하고 싶은 로직을 발견했다면 해당 코드 라인 선택 후, [Edit] - [Patch Program] - [Change Program Bytes]를 클릭하여 "File offset"과 "Values"를 확인한다. 

해당 Value(ARM to Hex) 값을 아래 [더보기] 사이트의 [Hex to ARM]을 이용하여 변환 시, ARM 어셈블리어가 출력되니 자신이 정상적인 어셈블리어를 선택했는지 확인이 가능하다.

변환하고자 하는 ARM 어셈블리어를 입력하고 [ARM to Hex] 값으로 변환한 뒤, IPA 원본 바이너리 파일에 "File offset"으로 접근하여 해당 Hex 값을 덮어 씌우게 되면 로직을 변경할 수 있다.

이후, WinSCP 등을 사용하여 해당 바이너리 파일을 iOS 파일시스템 내 Application 디렉터리에 덮어 씌워 업로드하면 된다.

업로드를 마친 뒤, 변조된 바이너리 파일에 대한 서명 과정이 필요하다. 관련 내용은 [더보기]를 참고하길 바란다.

함수의 Offset 구하기

iOS는 ASLR 보호기법이 적용되어 있어, 프로그램 실행 시 메모리에 적재되는 주소(BaseAddress)가 매변 변경된다.

따라서, 원하는 함수에 동적분석 및 Frida로 후킹을 진행하기 위해서는 BaseAddress + Offset으로 접근해야 한다. 

IDA에서는 분석을 진행하고자 하는 바이너리에 접근시, 아래 그림의 하단부 처럼 Offset을 확인할 수 있다.

Offset 확인


동적 분석

안드로이드에 경우 Logcat의 Activity Manager를 통해 현재 호출되고 있는 Activity를 파악한 후 JADX나 JEB를 통해 로직을 분석하였다.

iOS는 lldb와 같은 디버거를 사용하여 동적 분석이 가능하다. 앞서 정적 분석을 통해 파악한 함수의 Offset을 이용하여 BreakPoint를 설정하고 해당 웹뷰에 접근할 시 Break가 걸린다면, 분석 포인트를 정확하게 파악했다고 볼 수 있을 것이다.


동적 분석 프로세스

안티디버깅이 적용되어 있지 않다면, IDA에 Remote Debugger을 사용하는 방법을 추천한다.

  1. 정적 분석 및 Binary 변조
  2. 변조된 Binary iOS 업로드 및 재서명
  3. App 실행 
  4. SSH 접속 후 lldb attach
  5. 정적 분석에서 파악한 Offset을 이용하여 BreakPoint 설정
  6. 해당 웹뷰 접근 

Base Address 구하기

Frida

var base = Module.findBaseAddress("[Binary_Name]");

lldb

> lldb -p [PID] #Attach
> image list #Print Function Address
[1] ~~~~ [BaseAddress]

 


To Be Updated

  • Frida를 이용한 iOS 후킹
  • OWASP MSTG 정리

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

[HackTheBox] Cat (Feat. Android Back Up)  (0) 2022.05.23
[ERROR] jadx is running low on memory  (0) 2022.04.16
[iOS] IPA Dump for iOS Frida Dump(Feat. Window)  (0) 2022.04.12
[Logcat] Useful Commnad  (1) 2021.10.27
[ERROR] Frida-ps  (0) 2021.10.25
Comments