[목차]

 

 

1. 취약점 및 실습 설명

2. 실습

   - Login Method 1

 

 


 

1. 취약점 및 실습 설명

 

Application Patching 취약점은

위험도가 매우 높은 취약점으로

 

앞서 다뤘던 탈옥 탐지 우회,

런타임 조작 등의 취약점은

앱이 실행 중인 상태 즉,

런타임 상태에서 조작이

가능했던 취약점인데 반해

 

애플리케이션 패칭 취약점은

앱의 바이너리 파일을 변조하여

영구적으로 변경된 로직을

사용할 수 있는 취약점이다.

 

애플리케이션 패칭이 가능한 경우

로그인 메소드, 탈옥 탐지 메소드 및

앱에서 사용되는 특정 명령어 패치가 가능하여

각종 개인정보 유출, DDoS 공격 등의

악의적인 행위가 가능하다.

 

본 실습에서는 다음의 4개 항목에 대한

바이너리 패칭을 시도하게 되는데

 

 

1) 이용자가 입력한 계정 정보가 무엇이든

항상 로그인이 가능하도록 만들고

2) 항상 탈옥 탐지 우회가 되어 있는 상태로

바이너리를 패칭하고

3) 경고 문구가 임의의 내용으로 출력되도록

조작하고

4) 앱 종료 버튼을 눌러도 앱이 종료되지

않도록 바이너리 패칭 작업을 실시해 본다.

 

 

실습을 위해

앱의 바이너리 파일을 추출 후

(/var/containers/Bundle/Application/UUID/DVIA-v2.ap/바이너리파일)

 

 

기드라에 Import 시켜준 뒤 분석한다.

 

 

* 실습 후 바이너리를 원상복귀 시켜야 하므로

오리지널 바이너리는 따로 보관한다.

 

 

 

 

 

2. 실습

 

2-1) Login Method 1

 

목표 : 사용자 입력 값에 상관없이

항상 로그인할 수 있도록

Login Method 1을 패치한다.

 

 

ㄱ. 힌트 찾기

먼저 아이디와 패스워드를 입력하면

 

정보가 맞지 않다는 힌트 메시지가 뜬다.

 

 

 

ㄴ. 힌트 공략

기드라에서 해당 문구를 검색한 뒤 살펴보면

 

 

 

세 곳에서 해당 주소를 참조하고 있는데

아래 두 개는 런타임 조작에서 다뤘었고

남은 것은 맨 위 Application Patching,

(실무에서 관련 정보 확인이 어려운 경우

하나씩 들어가 로직 확인을 해야 함)

 

 

그래프 기능을 열어 분기점 및

목적지를 확인

 

 

tbz라는 어셈블리 코드를 사용해

w8 레지스터와 16진수 0x0과 비교한 뒤

분기가 이루어지기 때문에

 

해결책은

w8을 0x0으로 만들거나

0x0을 0x1로 바꿔주면 된다.

 

하지만 현재 w8 값이 어떻게

설정되어 있는지 모르기 때문에

코드를 작성해 해당 값을 먼저

확인해 볼 수 있는데

var realBase = Module.findBaseAddress('DVIA-v2')
console.log("[+] ASLR로 바뀐 바이너리 실제 메모리 주소 : " + realBase)

var jailBreak_address = realBase.add('0x1bded4')
console.log("[+] 분기점 실제 주소 : " + jailBreak_address)

Interceptor.attach(jailBreak_address,{
	onEnter:function(args){
		console.log("[+] 변조 전 반환 값 : ")
		console.log(JSON.stringify(this.context))
 

이것은 기존에 했던 방법이기 때문에

이번에는 분기 시 이동하는

주솟값을 변조하는 실습을 해본다.

 

 

 

 

ㄷ. 분기점 주소 확인

현재 분기점 주소는

Incorrect_Username 블럭 주소인데 (1001ac270)

 

 

 

해당 주소를 Success 블럭의 주소로 바꿔준다.

1001aclbc

 

 

 

 

ㄹ. 패칭 작업

분기점 주소로 가서

마우스 우 클릭 후 Patch Instruction

 

 

기존의 주소를

 

 

 

Success 블럭 주소로 변경

 

간단히 패칭이 이루어진다.

 

 

 

 

ㅁ. 패칭 바이너리 파일 추출

패칭된 바이너리를 Export 시켜준 뒤

경로 : File > Export Program > Output File 포맷은 Binary

 

 

해당 바이너리 파일을

기존의 바이너리로 바꿔주면 된다.

 

 

 

ㅂ. 바이너리 파일 replace 후 테스트

추출된 바이너리의 확장자를 날리고

 

3utools에 replace 해준 뒤

 

 

앱 재실행 후 로그인을 시도하면

 

정상적으로 패칭이 이루어져

어떤 값을 입력하든 로그인이 가능하다.

 

 

Login Method 1

우회 바이너리 패치 성공!

 

 

 


 

[도움 출처]

: 보안프로젝트 김태영 팀장 iOS 모바일 앱 모의해킹(기초) 강의

728x90
반응형

'APP 진단 > iOS' 카테고리의 다른 글

23. Touch/Face ID Bypass  (0) 2022.11.27
22. Application Patching 2  (0) 2022.11.27
20. Network Layer Security (feat. 버프 프록시 설정)  (1) 2022.11.25
19. WebView Issues  (0) 2022.11.24
18. IPC Issues  (0) 2022.11.23

+ Recent posts