본문 바로가기

Penetration/Mobile

[Oh Bank] 앱 취약점 학습 앱 - 정적 분석 및 루팅탐지 우회

이번에 공부해볼 취약점 진단 앱은 Oh Bank 입니다.

해당 앱은 실제 은행에서 사용되는 앱의 원리를 가지고 있고, 루팅탐지, frida 탐지 등의 보호기법을 가지고 있기 때문에 공부하기 좋다고 생각하였습니다. 해당 앱을 안드로이드 진단용 기기에서 실행해보기로 하였습니다.

일단 로컬 pc에서 앱이 있는 directory로 이동하여 powershell을 작동시켜서 adb 명령어를 실행하였습니다.

adb install '.\Oh Bank\'

명령어를 이용해서 설치하면 아래와 같은 앱이 설치되는 것을 확인할 수 있습니다.

 

앱을 설치 한 후 실행 시키면 역시 특정 보호조치가 되어있어서 바로 작동할 수 없습니다. 해당 앱은 일단 루팅탐지를 우회하고 있기 때문에 이를 우회해야 앱에 접근이 가능합니다.

루팅 탐지 우회를 확인하였기 때문에 두가지 방향을 생각해볼 수 있습니다.

첫번째 - 루팅 탐지 우회 로직을 직접 찾는 방법

두번째 - 보편적으로 많이 사용되는 rootbeer.js 같은 파일을 이용해서 루팅탐지를 우회하는 방법 

이 두가지 방법을 적용할 수 있습니다.

 

학습자 관점에서는 어떻게 루팅탐지를 우회하는지 직접 코드를 찾는게 적절하다고 생각하였기 때문에 rootbeer사용을 지양하고 직접 루팅탐지 로직을 찾는것이 중요한 것 같다고 생각하였습니다.

 

JEB에 apk파일을 넣고 정적 분석을 실시하기로 하였습니다.

키워드는 Root, Rooted 등등으로 생각해볼 수 있습니다. (토스트 메시지에 나타났기 때문에 코드에 그대로 썼을 가능성이 있기 떄문입니다)

해당 앱을 실행 시켰으면 root 키워드를 따라서 검색해주면 되겠습니다. 일단 첫번째로 열어 보았을 때 해당 앱은 난독화가 이루어지지 않은 것을 확인할 수 있습니다.(난독화 취약점)

 

ctrl + f를 눌러서 특정 키워드를 검색하면 루팅을 탐지하는 로직을 파악할 수 있습니다.

토스트 메시지를 힌트로 삼아 결정적인 루팅탐지 우회 로직을 찾으면 아래와 같이 찾을 수 있습니다.  

해당 로직을 살펴보면 RootUtil의 isDeviceRooted()함수의 조건에 따라서 "Phone is Rooted" 라는 문자열을 출력하도록 되어있습니다. 따라서 이 부분이 거짓이 될 수 있다면 해당 문자를 출력하지 않을 것으로 판단 할 수 있습니다. 따라서 이 부분을 우회해 보도록 하겠습니다.

결론적으로 이 boolean 함수를 거짓으로 만들어 준다면 기대하는 결과를 낼 수 있을 것 같습니다.

위의 분석결과를 토대로 js 함수를 작성합니다.

// bypass_root.js
// frida -U com.app.damnvulnerablebank -f "C:\Users\USER\OneDrive\바탕 화면\bypass_root.js"
Java.perform(function() {
        var bypass_root = Java.use("com.app.damnvulnerablebank.RootUtil");
        bypass_root.isDeviceRooted.implementation = function() {
            console.log('[*] isDeviceRooted() function hooking Success!');
			return false;
        }
    });

해당 코드는  isDeviceRooted()를 항상 거짓으로 만들어 주는 코드입니다.

if(RootUtil.isDeviceRooted()) {
            Toast.makeText(this.getApplicationContext(), "Phone is Rooted", 0).show();
            this.finish();
        }
    }

코드를 우회하면 if 안의 조건문이 거짓이 되기 때문에 this.finish()를 호출하지 않아서 앱이 종료되지 않고 루팅탐지를 우회할 수 있습니다.

 

사실 두번째 방법은 rootbeer.js를 이용하는 방법이 있으나 이는 학습에 맞지 않기 떄문에 생략하겠습니다.

 

추가) 해당 앱이 원래 저 코드로 작동되면 안된다고 합니다.

왜냐하면 frida 포트를 통한 탐지우회가 존재하기 때문에 작동이 되지 않습니다. 하지만 해당 기기는 다르게 설정되어있는지 정상적으로 작동하는 것을 확인할 수 있었습니다.

 

찾은 취약점 : 난독화 적용x, 런타임 조작

 

이상입니다.