Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Openstack
- XSS
- Reflected XSS
- kibana
- base64
- Volatility
- 파이썬
- NTFS
- diva
- Strings
- InsecureBank
- ctf
- ESXi
- 인시큐어뱅크
- elasticsearch
- otter
- frida
- logstash
- Docker
- 안드로이드
- beebox
- 2018
- vulnhub
- CTF-d
- Suninatas
- MFT
- SQL Injection
- igoat
- lord of sql injection
- foremost
Archives
- Today
- Total
Information Security
루팅 - Bypass Command Execution 본문
- 모든 OS에는 운영체제가 어떤 프로세스를 실행시킬 때 경로를 참조할 수 있도록 PATH 환경 변수가 제공된다. 이는 리눅스 커널 기반인 안드로이드 OS도 동일하다.
- 셸에서 명령어 사용 시 시스템 환경 변수에 등록된 PATH를 참조해 명령어를 찾고 실행시킨다.
- Bypass Command Execution 항목은 이러한 특징을 이용하여 which 명령어를 사용해 PATH 변수에 등록된 디렉터리 경로에 "su" 바이너리 파일이 위치하는지 검사하고 파일 존재 시 루팅 디바이스로 판단하여 탐지하게 된다.
아래와 같이 내용 확인
PATH 환경변수에 등록된 내용 확인
Runtime.exec()는 Windows, Linux, Unix 등의 시스템 명령어를 Java를 통해 실행한 후 그 결과를 받아오는 기능을 가지고 있다. 코드에서는 which와 su를 인수 값으로 실행 결과를 받아와 su 명령어가 해당 디바이스에 존재하는지 검사한다.
exec() 함수 사용을 위해 Runtime 클래스 객체를 반환받고 isCheckRootingExec()에서 exec() 함수 호출 시 전달되는 인수의 데이터 타입에 맞춰 exec() 함수를 오버로딩으로 구현했다. 함수로 들어오는 매개 변수 중 su, which 문자열이 포함되어 있을 경우 더미 값 fake로 변조하고 변조한 더미 값을 인수로 원본 exec() 함수를 호출해 결과 값을 반환하게 된다.
코드가 실행되는 것을 확인
탐지가 우회된 것을 확인
'모바일 > ANDITER' 카테고리의 다른 글
루팅 - Bypass Build-Tags (0) | 2023.12.30 |
---|---|
루팅 - Bypass Binaries (0) | 2023.12.17 |
루팅 - Bypass Packages (0) | 2023.12.16 |