Self-Improvement

루팅 탐지 및 우회 본문

AOS

루팅 탐지 및 우회

JoGeun 2018. 10. 22. 22:40

루팅 탐지 및 우회

리눅스 기반 OS 에서 보안상의 이유로 Root 권한을 막아 놓았다. 안드로이드의 경우도 마찬가지로 애플리케이션에서 할 수 있는 행위가 제한된다. 이런 제한을 풀거나 우회하기 위해 시스템 권한을 루트 권한으로 획득해야 한다. 기기를 루팅하면 슈퍼 유저의 권한으로 하드웨어 성능 조작, 제조사 및 통신사 기본 애플리케이션 삭제, 시스템 권한을 이용한 다양한 디바이스 조작 등이 가능해진다.

루팅된 기기는 시스템 권한을 흭득하게 되어 디바이스 내부의 민감한 정보에 접근 할 수 있어서 금융권 애플리케이션은 기본적으로 루팅된 기기에 대한 실행을 차단하고 있다. 루팅 체크가 필수적인 금융 앱이나 게임 앱은 /system 경로의 susuperuser.apk, com.noshufou.android.su 네 가지 경로를 주로 체크한다.

 

현재 루팅 되어있는 상태에서 InsecureBankv2 애플리케이션을 실행하면 ”Rooted Deviced“라는 문구가 보이면서 루팅되어 있다고 나타난다.


루팅된 디바이스를 탐지하는 소스를 찾아보니 PostLogin.java에서 /system 경로의 su, Superuser.apk 파일을 확인하여 루팅의 여부를 판단하게 된다.


/system/app/Superuser.apk 파일이 존재할 경우엔 “Rooted Device”라는 문구가 뜨게 되며 없을시엔 “Device not Rooted” 문구가 뜨게되는 코드이다.


/system/bin/which su을 통해 su파일이 존재하는지 확인하여 루팅을 판별하게 된다.


adb shell에 접속하여 /system/app/Superuser.apk 파일이 존재하고 있다.


루팅을 우회하기 위해서는 Superuser.apk 파일의 이름을 변경을 해야한다.

하지만 /system 경로는 읽고, 쓰기 권한이 없음으로 다시 remount을 실행한다


mv 명령어를 통해 Superuser.apk 파일을 Superuser1.apk 파일이름으로 변경한다.


Insecurebankv2 애플리케이션을 다시 실행해보니 전과는 달리 “Device not Rooted”라는 문구가 뜨게 되며 루팅이 우회되는걸 알 수가 있다. 또한 su 파일도 이름을 변경하면 손쉽게 우회할 수 가있는 취약점이 존재한다.




대응방안

제일 중요한 것은 루팅을 방지하는 소스 코드 로직이 노출되지 않아야 하는 것이다. 이를 위해서는 문자열 난독화를 적용하여 어떤 명령어와 루팅 관련 파일을 검사하는지 모르게 해야 한다. 또한 apk 파일 조작하여 루팅을 유지하는 것을 방지해야하며 무결성 검증이 필요하다.

난독화 종류에는 오픈소스로 되어있는 ProGuard가 있으며 상용 난독화 도구로는 DashOPro, Allatori, DexGuard 등이 있다.

 

ProGuard

DashOPro

Allatori

DexGuard

식별자 변환

Yes

Yes

Yes

Yes

제어 흐름 변환

No

Yes

Yes

Yes

문자열 암호화

No

Yes

Yes

Yes

API 은닉

No

No

No

Yes

클래스 암호화

No

No

No

Yes