ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 0x00.Android Rooting Check
    0x.Android 2018. 10. 12. 15:55

    0x00.Android Rooting Check


    안드로이드 프로젝트를 진행하면서 여러 어플을 까보다 보면 공통적인 루틴이 여러개가 존재한다. 그 중에 하나가 바로 사용자의 안드로이드 폰이 루팅이 되었는지 여부를 체크하는 부분이다.


    사실상 rooting이라는 과정은 su 파일을 시스템에 추가하는 기능이다. 루팅을 통해 root 권한을 유저가 사용할 수 있도록 하는 작업인데 금융 어플과 같이 보안에 민감한 어플들은 side-effect를 우려하여 루팅 여부에 대한 검증 루틴을 추가하여 조금이라도 risk를 줄이고자 하기에 해당 부분에 대한 체크가 이루어질 수 밖에 없다.


    한 어플의 rooting 체크 루틴인데 PATH를 기준으로 ":" 로 slicing을 진행하며 su 파일의 존재여부를 확인하는 방식이다.




    해당 방식을 사용하면 그냥 루팅 프로그램을 사용한 사용자의 모바일에는 대부분 su라는 이름으로 파일이 추가되기 때문에 발견하기가 비교적 쉽지만, 특정한 사용자의 경우 해당방식을 사용하여 rooting 여부를 검증하기가 쉽지 않다. 왜냐하면 해당 루틴은 su라는 파일의 이름을 살짝 변경하기만 하여도 쉽게 우회가 가능하기 때문이다. 하지만 실제로 많은 어플들이 단순한 위와 같은 방식으로 rooting 여부를 체크하고 있다!


    대부분의 어플리케이션들이 PATH를 기준으로 su라는 문자열로 찾는 해당 바이너리를 찾는 방식을 루팅 여부 확인에 사용하기 때문에 사실상 rooting 여부에 대한 정확한 체크가 이루어지지 않고 있으며 우회가 너무나도 쉽다는 특징을 가지고 있다.


    루팅 탐지 절차는 크게 다음과 같이 나눌 수 있다.


    루팅과 관련된 파일 탐지

    이 경우는 위와 같이 su 파일 등을 PATH 등을 활용하여 찾는 방법인데 위처럼 static 하게 위치를 하드 코딩 하는 경우와 PATH를 토대로 리스트를 작성하여 동적으로 탐지하는 두 가지 경우가 존재한다.


    프로세스 리스트 탐지

    이 경우도 su 파일 탐색과 비슷하게 직접 하드코딩으로 root 등의 권한을 확인하는 방법과 dynamic하게 확인하는 방법이 존재한다.


    busybox 명령어 탐지

    명령어 셋을 제외한 추가된 명령어가 탐지된다면 루팅이라고 판단하는 방법이다. 이 방법은 대부분 딕셔너리 형태로 탐지를 한다.


    패키지 목록 확인

    보통 superuser 루팅을 해주는 어플리케이션을 삭제하는 경우는 드물기 때문에 유명한 어플리케이션에 대한 리스트를 가지고 패키지 목록에서 확인을 하는 경우가 있다.


    디렉토리 및 파일 권한 확인

    결국 su 파일은 권한 상승을 해야하기 때문에 권한 부분에서 기존과 다를 수 밖에 없다. su 파일은 어떻게든 superuser 권한의 디렉토리 또는 파일을 생성할 것이므로 기존과 차이를 확인하여 루팅을 체크하는 방법이다.


    '0x.Android' 카테고리의 다른 글

    0x02. Method Overriding in smali Code  (0) 2018.12.10
    0x01.Native_Root_Checker  (0) 2018.11.21

    댓글

Designed by Tistory.