[목차]

 

 

 

1. 루팅 수행 방법

2. 주요 데이터 경로

3. 루팅 실습 (갤럭시 S8)

       - 실습 날짜 : 2022년 7월 3일

       - 실습 단말기 모델 : 갤럭시 S8 

       - 준비물

       - 설치 과정

4. 루팅 후 슈퍼유저 권한 세팅

 

 

 

출처 : AhnLab 솔루션서비스팀 오정훈 연구원

https://www.ahnlab.com/kr/site/securityinfo/secunews/secuNewsView.do?curPage=1&menu_dist=2&seq=20765&dir_group_dist=0

 

 

 

 

 

 

[루팅 수행 방법]

 

 

루팅 된 스마트폰 사용 시

보안 위협에 노출될 가능성이 높기 때문에

안드로이드 스마트폰 제조사들은

관리자 권한 획득과 관련된 ‘su’ 명령을 삭제했고

 

이로 인해 일반적인 방법으로는

안드로이드의 관리자 권한을 획득할 수 없다.

 

일반적으로 알려졌던 루팅 수행 방법은

크게 세 가지로 구분할 수 있으며

다음과 같다.

 

 


 

 

1. 커널 취약점을 공격하는 Exploit 사용

 

커널 취약점을 공격하는 exploit을 실행시켜

일시적으로 관리자 권한을 획득하는 방법으로

이 같은 일시적인 권한 획득 방법은 기기가 재부팅되면

원래 상태로 되돌아간다.

 

따라서 관리자 권한을 획득한 뒤에

증거 수집 작업을 진행하거나,

지속적인 루팅 상태를 유지하기 위해 ‘su’ 명령을

커널에 삽입하는 방법을 사용하기도 한다.

 

공격 수행 과정은

ADB를 통해서 exploit 파일을

[/data/local/tmp] 경로에 업로드한 뒤

해당 파일에 실행 권한을 주고 실행하면 된다.

 

공격이 모두 완료되면 ADB 연결을 끊고

재 연결 후 변경된 권한을 확인한다.

 

이미지 출처 : AhnLab

 


 

 

2. 커스터마이징된 커널 이미지 플래싱

 

스마트폰 이미지를 기기에 업로드하는 것을

일반적으로 플래싱(Flashing)이라고 하는데

이 방법은 기존에 루팅이 되었거나

루팅이 가능한 커널 이미지를 플래싱해

 

기존 커널 이미지를 덮어 씌운 뒤

관리자 권한을 획득하는 방법이다.

 

하지만 이 방법은 기종과 빌드 버전에 따라

서로 다른 커널 이미지를 제작해야 하는 번거로움이 있고

수행 과정에서 할 점이 있는데 루팅을 수행한 뒤

원래 상태로 되돌아가기 위해선 기존 원본 커널 이미지를

다시 업데이트해야 하는 번거로움이 있다.

 

해당 방법은 루팅 작업을 수행하기 전

원본 커널 이미지를 반드시 준비해야 한다.

 

 


 

 

3. 리커버리 모드 update.zip 파일 사용

 

리커버리 모드란, 제조사에서 제공하는 또 다른 부팅 모드로

이 모드에선 시스템 업데이트나 사용자 데이터 삭제 혹은

공장 초기화 등의 기능을 수행할 수 있다.

 

기기별로 리커버리 모드로 부팅하는 법은 모두 다른데

 

update.zip 파일은

시스템 업데이트에 필요한 변경 내용만을 저장하는 이미지다.

따라서 시스템을 업데이트할 때 update.zip 파일을 사용하면

변경된 내용만 업데이트가 가능하다.

 

일반적으로 ‘sdcard’에 update.zip 파일을 복사하고

리커버리 모드에서 [apply sdcard:update.zip]을 선택하면

update.zip 파일의 내용이 시스템에 업데이트된다.

 

이미지 출처 : AhnLab

 

리커버리 모드에서는 그 이미지에 따라

해당 기능에 대한 메뉴 명이 달라질 수 있고

특정 리커버리 모드에선 기능을 지원하지 않는 경우도 있다.

 

 

update.zip 파일의 구조는 다음과 같다.

 

이미지 출처 : AhnLab

 

[/META-INF/com/google/android] 경로 아래에

‘update-binary’ 파일과 ‘updater-script’ 파일이 있고

여기서 중요한 파일은 ‘updater-script’ 파일이다.

 

해당 파일은 수행할 작업의 목록을 수록하고 있는데,

수행 가능한 작업은 포맷, 마운트, 파일 복사, 파일 삭제,

프로그램 실행 등이다.

 

update-binary 파일은 C binary로

‘updater-script’ 파일의 스크립트 언어를 파싱 해 실행하는 역할을 수행하며

update-binary 파일은 사용자가 생성할 수 있는 파일은 아니며

웹에서 다운받거나 이미 생성된 update.zip 파일에서 구해야 한다.

 

 

 

 

 

 

[주요 데이터 경로]

 

 

루팅에 성공했다면

ADB를 통해 원하는 모든 데이터 추출이 가능하다.

 

데이터 추출을 한다는 것은 곧, 안드로이드 앱(응용 프로그램)에 있는

사용자 데이터들을 저장한 SQLite DB 파일에 접근해 파일 추출이

가능하다는 이야기로

 

안드로이드의 레퍼런스 스마트폰인 'Nessus One'를 참고하여

표준 안드로이드 OS에서 기본적으로 저장되는 사용자의

데이터 경로를 정리하면 다음과 같다.

 

이미지 출처 : AhnLab

 

위 데이터들이 SQLite DB 형태로 저장되는데

이는 SQLite 혹은 SQLite Database Browser와 같은

프로그램을 통해 내용 확인이 가능하다.

 

 

이 외, 3rd Party 애플리케이션들이 각각 저장하는 데이터들도 있으나

모든 앱의 데이터들을 다루는 것은 쉽지 않으므로 생략.

 

 

기본적으로 사용자의 데이터는

userdata 파티션이 마운트 되어 있는

[/data] 경로 아래에 저장된다.

 

특히 애플리케이션이 생성하는 데이터들은

[/data/data/] 아래에 저장되는데

여기서 하나 주의할 점은

이 경로들이 절대적인 것이 아니며

제조사마다 조금씩 다를 수 있다는 점이다.

 

예를 들어 Galaxy S의 경우,

애플리케이션이 생성하는 데이터들이

[/dbdata/] 경로 아래에 저장되는데

이 경로는 userdata 파티션 외에

별도 파티션을 만들어 마운트 한 경로다.

 

 

이 밖에 안드로이드 스마트폰은

내∙외장 SD카드를 사용해 데이터를 저장하기도 하며

저장되는 데이터는 멀티미디어 데이터(사진, 동영상, 음악),

대용량 응용프로그램 데이터 등이 있다.

 

SD카드는 ‘/sdcard’ 경로 아래 마운트 되는데

SD카드는 특별한 권한이 걸려있지 않기 때문에

루팅 여부와 관계없이 접근할 수 있다.

(ADB의 ‘pull’ 옵션을 사용하면 SD카드로부터 데이터를

PC로 바로 저장할 수 있음)

 

 

 

 

 

[루팅 실습]

 

실습 날짜 :

2022년 7월 3일 일요일

 

 

* 주의 사항

루팅이 잘못되는 경우 벽돌화될 수 있으며

책임은 전적으로 루팅 작업을 시전 한

당사자에게 있음

 

  

1. 실습 단말기 모델 

: 갤럭시 S8 (SM-G950N)

 

 

 

 

2. 준비물

(1) 삼성 안드로이드 USB 드라이버

https://developer.samsung.com/android-usb-driver

 

(2) Odin

https://odindownload.com/download/#.YsEK6HZBxhE

 

(3) Magisk v20.4

https://magisks.com/download/55/Magisk-v20.4.zip

 

(4) RMM state bypass

https://www.dropbox.com/s/97i23880x9j8lv8/RMM-State_Bypass_Mesa_v2.zip

 

(5) no-verity-opt-encrypt 6.1

https://androidfilehost.com/?fid=12420606652095398726

 

(6) TWRP

https://eu.dl.twrp.me/dreamlte/twrp-3.4.0-0-dreamlte.img.tar.html

 

 

 

 

 

3. 설치 과정

(1) 단말기 데이터 백업

스마트폰을 초기화하는 관계로

기기 내 중요 파일을 모두 백업,

그리고 저장되어 있는 계정정보 또한
모두 삭제

 

(2) PC에 단말기(삼성) 드라이버 설치 

: PC 연결을 위해 단말기 기종에 맞는

드라이버 설치 후 장치 연결 가능 여부 확인

 

(3) Odin 파일 압축 해제

 

(4) 단말기 개발자 옵션 활성화

: 설정 > 휴대전화 정보 > 소프트웨어 정보 >

빌드번호 여러 번 클릭 후 활성화

 

(5) 개발자 옵션 내 [OEM 잠금 해제] 및 [USB 디버깅] 기능 활성화

: 설정 > 개발자 옵션 > OEM 잠금 해제 > USB 디버깅 활성화

(참고로 개발자 옵션 내 시스템 자동 업데이트 기능은
자동 활성화되어있는데 실수로 비활성화 시켰다면 활성화시킬 것)

 

(6) 단말기 전원 OFF

 

 

(7) 단말기 다운로드(리커버리) 모드 진입 

(단말기마다 진입 방식이 다르니 확인 필요!)

- 갤럭시 S8 예

볼륨 다운 키 + 빅스비 키 + 전원 버튼 동시 누름 >

경고 창 화면 뜸 >

볼륨 상 키 눌러 다운로드 모드 진입 (화면에 안내 나옴) 

 

 

(8) PC에서 오딘 실행 후 단말기 연결

- 오딘에서 단말기 정상 연결된 경우

ID:COM 부분이 파랗게 변하고

Log 창 내 Added!! 메시지 뜸(정상 연결된 경우) 

 

(9) 오딘에서  Options 탭 세팅

Auto Reboot 비활성화

 

(10) 오딘에서 AP 버튼 클릭 후

twrp-3.4.0-0-dreamlte.img.tar 파일 로드

 

(11) 오딘에서 Start 버튼 누르면

TWRP 설치 진행되고 정상 설치되면

창에 녹색 PASS 메시지 뜸

 

(12) 단말기 전원 OFF 후 곧바로 TWRP 복구 모드 부팅

볼륨 다운 키 + 빅스비 키 + 전원 버튼 동시 누름 > OFF

볼륨 업 키 + 빅스비 키 + 전원 버튼 동시에 누름 > TWRP 복구 모드 부팅

 

 

(13) TWRP를 통한 단말기 초기화 및 세팅

단말기 하단 화살표 (Swipe to Allow Modifications)

옆으로 밀어주면 나타나는 메뉴 중 Wipe 선택 >

 

Format Data 항목 선택 >

 

yes 입력 >

 

화면 상단에 

Data Format Complete Successful 보이면 초기화 완료 >

단말기 홈버튼 누른 후

 

Wipe 메뉴 진입 >

 

 

Advance Wipe 메뉴로 이동 >

 

Dalvik / ArtCache 항목과 Cache 항목 활성화 > 

하단의 화살표 (Swipe to Wipe) 옆으로 밀어주기 >

홈버튼 눌러 TWRP 메인 메뉴로 돌아가기

 

 

(14) 단말기 내 파일 설치 후 단말기 재부팅

PC에서 내 PC > Galaxy S8 > Internal Storage 디렉터리 이동

(보통 외장 메모리인 sdcard 내에 설치하기도 하는데

내장 메모리인 Internal Storage에 설치해도 상관없고 설치 잘 됨) >

Magisk / no-verity-opt-encrypt / RMM State Bypass 파일

압축 풀지 않은 .zip 형태로 Internal Storage 디렉터리에 복사 >

 

단말기 TWRP 메인 메뉴 내 Install 항목 선택 (/sdcard) >

 

복사한 파일 3개 순서대로 설치 > 설치 방법은

파일 선택 후 하단의 화살표 (Swipe to Confirm Flash) 밀어주기 >

파일 설치 완료되면 단말기 홈버튼 눌러 TWRP 홈으로 돌아가

Install > 다른 2개 파일도 동일하게 설치 > 

마지막 파일 설치 완료 후 Reboot System 항목 선택 후 재부팅

(또는 단말기 홈 > TWRP 홈 > Reboot > System 항목 선택해 재부팅)

 

재부팅 시 TWRP app 설치하겠냐고 묻는데

설치해도 상관없고 안 해도 상관없음

(안 할 경우 Do not Install 선택)

 

 

소요시간 5~6분

부팅 완료 후 Magisk Manger 앱이 있으면 루팅 성공

 

 

 


 

 

4. 루팅 후 슈퍼유저 권한 세팅

 

별도의 Magisk 세팅을 하지 않으면

adb로 shell에 붙어 su 실행 시

 

 

 

permission denied가 뜨면서

root 권한 사용이 불가하고

 

동시에 Magisk에는

셸에 슈퍼유저 권한이 거부됨

메시지가 뜬다.

 

 

 

 

해당 기능을 활성화해주고

 

 

다시 한번 su를 시도하면

 

정상적으로

root 쉘 사용이 가능하다.

 

 

728x90
반응형

+ Recent posts