인시큐어뱅크에서 찾을 수 있는 취약점 중 "루트 노출 및 우회 취약점" 취약점을 찾아보기로 했다.

루팅 우회하는 취약점인데 먼저 로그인 후 화면을 살펴보자

 

 

1. 발견 방법

 

 

nox로 루팅을 해놓았기 때문에 루팅 된 장비라고 나온다.

jadx 툴로 앱을 디컴파일을 한 후 Rooted Device 단어를 찾아보았다.

 

 

PostLogin 클래스에서 isrooted 변수가 true이면 루팅된 장비라고 탐지하는 로직을 발견했다.

 

 

2. 악용 방법

 

다음 둘 중 하나가 조건이 맞아서 루팅탐지를 한 거 같으니 확인해 봐야겠다.

1. doesSuperuserApkExist("/system/app/Superuser.apk") = true
2. doesSUexist() = true

 

 

먼저 1번이 true 인지 확인하기 위해 /system/app/Superuser.apk 파일이 존재하는지 확인해보았다.

 

없음

그런 파일은 없었다.

즉, 2번 doesSUexist 함수의 반환값이 true여서 루팅 탐지를 하고 있는 거였다.

 

사실 2번은 return이 false 이기만 하면 되기에 어떤 함수인지는 별로 궁금하지 않았다 ㅎㅎ...

그래서 바로 프리다 코드를 짰다.

 

 

> poc

Java.perform(function() {
	console.log("[+] Hooking System.exit");
	var exitClass = Java.use("com.android.insecurebankv2.PostLogin");	//hooking 할 메소드의 class 명
	exitClass.doesSUexist.implementation = function() {       //class명.method명.implementation = funtion(argv[])
		console.log("[+] System.exit called");
       	 	return false;
	}
});

 

 

실제 앱에서 이런 식으로 root문자열을 검색해서 루팅 우회를 하는 경우는 거의 없다.

하지만 입문용으로서 루팅 하는 감을 익히는 정도로 알고 있으면 될 거 같다.

복사했습니다!