관리 메뉴

Information Security

루팅 - Bypass Command Execution 본문

모바일/ANDITER

루팅 - Bypass Command Execution

HackingPractice 2023. 12. 28. 18:33
  • 모든 OS에는 운영체제가 어떤 프로세스를 실행시킬 때 경로를 참조할 수 있도록 PATH 환경 변수가 제공된다. 이는 리눅스 커널 기반인 안드로이드 OS도 동일하다.
  • 셸에서 명령어 사용 시 시스템 환경 변수에 등록된 PATH를 참조해 명령어를 찾고 실행시킨다.
  • Bypass Command Execution 항목은 이러한 특징을 이용하여 which 명령어를 사용해 PATH 변수에 등록된 디렉터리 경로에 "su" 바이너리 파일이 위치하는지 검사하고 파일 존재 시 루팅 디바이스로 판단하여 탐지하게 된다.

그림 1 Bypass Command Execution

 

아래와 같이 내용 확인

그림 2 개요

 

PATH 환경변수에 등록된 내용 확인

그림 3 PATH

 

Runtime.exec()는 Windows, Linux, Unix 등의 시스템 명령어를 Java를 통해 실행한 후 그 결과를 받아오는 기능을 가지고 있다. 코드에서는 which와 su를 인수 값으로 실행 결과를 받아와 su 명령어가 해당 디바이스에 존재하는지 검사한다.

그림 4 소스코드

 

exec() 함수 사용을 위해 Runtime 클래스 객체를 반환받고 isCheckRootingExec()에서 exec() 함수 호출 시 전달되는 인수의 데이터 타입에 맞춰 exec() 함수를 오버로딩으로 구현했다. 함수로 들어오는 매개 변수 중 su, which 문자열이 포함되어 있을 경우 더미 값 fake로 변조하고 변조한 더미 값을 인수로 원본 exec() 함수를 호출해 결과 값을 반환하게 된다.

그림 5 frida 소스코드

 

코드가 실행되는 것을 확인

그림 6 코드 실행

 

탐지가 우회된 것을 확인

그림 7 성공

'모바일 > ANDITER' 카테고리의 다른 글

루팅 - Bypass Build-Tags  (0) 2023.12.30
루팅 - Bypass Binaries  (0) 2023.12.17
루팅 - Bypass Packages  (0) 2023.12.16