관리 메뉴


Kinesis´s Open Document

루팅 탐지 및 우회 본문

MEMO/기술 자료/Security

루팅 탐지 및 우회

Kinesis 2016. 7. 27. 14:56

안드로이드 루팅의 탐지와 루팅 탐지의 우회의 가능여부에 대해 요약하면 다음과 같다.


가능하지만 절대적이지 않고, 

지금은 가능하나 차후에 막힐 수 있고, 

지금은 막혔으나 차후에 가능할 수 있다.


무엇보다 지속적으로 방법을 찾고 모색해야하는 업데이트와 갱신이 필요하다.


솔루션을 이용하는 것은 다음에 서술할 각각의 과정을 해당 솔루션을 제공하는 업체가 지속적으로 업데이트를 하여 내부적으로 해당 기능을 개발하거나 업데이트를 위한 개발인력이나 인력 유지비용을 줄이기 위한 방편이나, 해당 업체가 지속적으로 신뢰도 높은 데이터 및 정보를 바탕으로 신속히 업데이트를 지속적으로 제공하는것인가가 관건이 된다.



루팅의 원리

안드로이드에서 루팅은 사용하고 있는 환경에서 관리자 권한을 얻어내는 것이며 목표이다. 일반적으로 기본 펌웨어를 수정하여 탑재하는 것으로 관리자 권한을 얻어내거나 취약점을 발견 한 뒤, 권한 상승을 통해 추후 다시 Root 권한을 얻어낼 수 있도록 조치하는 등의 원리를 이용한다.


루팅의 탐지

루팅의 탐지는 루팅을 하는 과정에서 변화되는 파일, 권한, 프로세스 등을 탐지하는 것을 통해서 이루어진다. 


# Su 탐지

리눅스에서 root 권한으로 권한을 상승하는 경우 su 명령어를 사용하게 되는데, 보통 루팅을 하고나면 추후에 다시 루트 권한을 이용하기 위해 su 명령어(바이너리 파일)을 만들어 놓게 된다. 그래서 가장 먼저 탐지하는 것중 하나는 바로 su 라는 이름을 갖는 바이너리 파일을 검색하는 것이 첫 번째 탐지 과정에 포함된다. 그러나 보통 su 탐지는 절대경로를 통해 검사하는 경우가 많아 숨김폴더 등의 처리를 통해서 우회를 시도하기도 한다.


# 프로세스 리스트 탐지

프로세스 리스트 탐지는 루팅과 관련된 알려진 프로세스가 현재 실행되고 있는지를 탐지하는 방법으로, 경우에 따라서는 루팅 탐지를 우회하기 위해 su 명령을 일부러 숨기거나 하는 프로세스가 동작할 수 있어 이러한 루팅 또는 루팅 탐지를 방해하는 프로세스가 존재하는지 검사하여 루팅여부를 판단하는 방법이다. 이 방법을 위해서는 사전에 루팅과 관련된 프로세스 정보를 수집하는 과정과 주기적으로 업데이트를 해주어야 하는 문제가 있다.


# 설치된 패키지 목록 탐지

프로세스와 유사하게 루팅과 관련된 패키지가 설치되어 있는지 확인하는 것을 통해 탐지하는 방법으로, 이 경우에도 루팅과 관련된 패키지 정보를 사전에 수집하고 알고 있어야 하며, 주기적으로 업데이트를 해주어야 하는 문제가 있다.


# 루팅 카운트 탐지

삼성에서 개발하여 적용하고 있는 KNOX 등을 이용해 루팅 카운트를 탐지하는 방법이 루팅 카운트 탐지 방법에 속한다. 기본적으로 제공되는 업데이트 방법을 이용하지 않고 커스텀 펌웨어를 덮어쓰는 경우 카운트가 올라가게 되는데, 이러한 방법을 통해 해당 기기가 루팅된 적이 있는지 여부를 판별하게 되는데 KNOX 같은 경우 순정 펌웨어로 돌리더라도 KNOX 수치가 다시 초기화 되지 않으므로 현재 상태가 루팅상태인지 순정상태인지 여부를 판단할 수는 없는 문제가 존재한다.


# busybox 및 명령어 탐지

안드로이드는 기본적으로 제공되는 기능만 이용하도록 하고 있어 리눅스 기반임에도 불구하고 리눅스에서 주로 사용하게 되는 일부 명령어들이 존재하지 않는다. 이러한 불편을 해결하기 위해서 busybox 라는 명령어 모음 패키지나 필요에 따른 명령어 바이너리를 설치하여 사용하게 되는데, 기본 커널에서 제공되는 명령어 바이너리 외에 추가된 바이너리가 있는지 확인하는 것을 통해 루팅여부를 감지하는 방식이다. 이 경우 su 탐지와 마찬가지로 숨김폴더나 경로를 생성하여 우회하는 등의 우회 방법이 활용되기도 한다.


# build.prop 파일 기본값 확인

기본적으로 안드로이드에서 /system/build.prop 파일의 ro.build.tag 옵션을 비롯한 몇몇 옵션들은 release-keys 로 설정되어 있다. 루팅이되는 경우 이 값이 test-keys로 되어 있으므로 이를 체크하는 방법이다. 이 외에도 루팅의 경우 내부에 있는 옵션들이 기본값과는 다르게 되어 있는 경우가 있으므로 이 정보들을 수집하여 각 항목이 변경되는지 확인하는 방법을 통해 루팅감지를 수행할 수 있다. 그러나 루팅 탐지를 우회하기 위해 해당 값들을 다시 release-keys 로 수정될 수 있는 가능성도 존재한다.


# 폴더 권한 확인

루팅 후 편의를 위해 폴더나 파일의 권한을 변경하는 경우가 존재한다. 따라서 시스템 디렉토리 및 파일에 대한 권한 검증을 수행하는것 역시 루팅 탐지의 한 방법이다.



루팅탐지 우회

루팅탐지 우회는 앞서 나열한 방법들을 변조하거나 속이는 것 등으로 우회한다. 추가적으로 몇가지 방법들이 존재하는데 다음과 같은 방법이 있다.


# smali 코드 패치

안드로이드 앱의 APK를 디컴파일하면 smali 코드가 나타난다. 이 코드 내용을 수정하여 조건문을 바꾸거나 넘겨뛰도록 하여 탐지루틴을 우회시키는 방법인데, 이 경우 클라이언트 측의 앱을 변경하는 것으로 서비스를 제공하는 입장에서는 막는것이 쉽지 않다.


# 후킹

후킹을 통해 정상적인 앱을 실행했을 때 반환되는 반환값으로 변조를 하거나, 특정 조건이나 값에 따른 루틴을 처리하지 않고 우회하도록 하여 루팅 검증을 우회하는 방법으로, 이 역시 서비스가 동작하는 환경이 클라이언트 측에 있어 서비스 제공측에서는 막는것이 쉽지 않다.




Comments