루팅
루팅은 모바일 기기에서 구동되는 안드로이드 운영 체제 상에서 최상위 권한(루트 권한)을 얻음으로 해당 기기의 생산자 또는 판매자 측에서 걸어 놓은 제약을 해제하는 행위를 가리키는 말이다. 이 루팅을 통해 해당 기기의 사용자들은 생산자 또는 판매자 측에서 공식 제공하는 버전보다 더 높은 버전의 안드로이드나 CyanogenMod처럼 사용자들이 임의로 개조한 안드로이드를 설치 및 구동할 수 있으며, 사용자가 속한 지역의 안드로이드 사용자들에게 판매하지 않는 프로그램들을 구입하거나 일반 사용자 권한 이상의 권한 등을 필요로 하는 프로그램들을 사용할 수 있다. 디지털 포렌식에서는 안드로이드 기기의 데이터를 수집하기 위해 루팅 커널을 제작하여 이용한다.
루팅 커널의 이해[편집]
루팅 커널 제작은 안드로이드 기기의 부팅과 관련된 루트 권한을 갖는 커널 이미지를 만드는 것이 핵심이다. 커널 이미지는 일반적으로 내부는 아래의 그림과 같이 piggy.o에 실제 커널 영역과 램디스크(initramfs) 영역이 gz, cpio 등으로 압축된 형태로 존재한다. bootsect는 부팅 시 사용, setup은 메모리 세팅, head.o는 메모리 초기화 등의 작업, misc.o는 decompress_kernel을 호출하여 piggy.o에 들어있는 piggy.gz 압축을 이미지로 해제하는 작업을 한다.
램디스크의 파일시스템 구조는 아래 그림과 같다.
안드로이드는 램디스크 내의 default.prop파일의 ro.secure값을 통하여 관리자 권한(root)을 설정한다. 따라서 해당 설정 값만을 변경함으로써 루팅 커널을 제작할 수 있다. 커널의 보안 설정 값 변경과 ADB 데몬의 교체 등을 통해 최소한의 변경만으로 루트 권한을 획득할 수 있는 커널을 생성하여 오른쪽 그림과 같이 기기의 원본 커널과 교체(Flashing)함으로써 루팅을 수행할 수 있다.
안드로이드 스마트기기 AP[편집]
안드로이드 스마트기기는 제조사, 모델, 통신사, 안드로이드 버전 별로 적용 가능한 루팅 커널 이미지 제작 방법 및 적용 방법이 상이하다. 아래 표는 안드로이드 스마트 기기별 사용되는 AP 종류를 정리한 것이다. AP의 종류에 따라 루팅 커널 이미지 및 부트로더를 업로드(플래싱) 할 수 있는 모드가 다르며 이에 대한 차이점은 아래 표에 정리했다.
AP 종류 | 삼성 스마트기기 | 엘지 스마트기기 | 팬택 스마트기기 |
---|---|---|---|
엑시노스(삼성) | |||
스냅드래곤(퀄컴) | |||
OMAP(TI) | |||
Tegra(엔디비아) |
엑시노스 | 스냅드래곤 | OMAP | Tegra | |
---|---|---|---|---|
다운로드 모드 | ||||
패스트부트 모드 | ||||
APX 모드 |
루팅 커널 이미지 제작[편집]
루팅 커널 이미지 제작은 순정 커널에서의 변경을 최소화 하여 제작하기 위해 순정 펌웨어를 사용해야 한다. 커널 이미지를 획득한 뒤 언팩/리팩 과정을 거쳐 루팅 커널 이미지를 기기 내부의 원본 커널 이미지 영역에 덮어쓴다. 자세한 과제은 아래와 같다.
영향[편집]
루팅 커널 이미지를 사용하는 S/W 기반 데이터 수집 기법은 스마트기기를 부팅한 후 데이터를 수집하지만 사용자 데이터가 존재하는 파티션(/data 파티션)은 마운트하지 않고 이미징 할 수 있기 때문에, 해당 파티션의 메타데이터의 변경 없이 데이터를 수집할 수 있다는 장점이 존재한다. 또한, USB포트를 사용하여 ADB 프로토콜을 통해 수집하기 때문에 데이터 수집 시 JTAG을 사용하는 방법보다 약 10배 이상의 시간을 절약할 수 있다. 또한, USB포트는 모든 스마트 기기에 존재하기 때문에 JTAG처럼 최신 스마트기기에는 적용할 수 없다는 단점이 존재하지 않는다. 루팅 커널 이미지는 커널의 보안 설정 값 변경과 ADB 데몬의 교체 등을 통해 최소한의 변경만으로 루트 권한을 획득할 수 있도록 만든다. 만들어진 루팅 커널 이미지를 사용하여 기기의 원본 커널과 교체(Flashing)함으로써 루팅을 수행할 수 있다. 이 방법은 /system 파티션에만 영향을 미치고 /data 파티션에는 영향을 미치지 않는다. 일반적으로 리눅스 파일시스템 환경에서 파티션이 마운트 되면 아래 그림과 같이 메타데이터 영역 0x42C에서 4바이트(Mount Time), 0x430에서 4바이트(Write Time), 0x432에서 2바이트(Mount Count), 아래 그림과 같이 0x578에서 8바이트(Number of KiB written to this filesystem over its lifetime) 값 등이 변경된다.


루팅을 수행하는 과정에서는 /system 파티션의 변경은 불가피 하다. 하지만 /system 파티션에는 사용자의 데이터가 존재하지 않기 때문에 사용자 데이터의 무결성을 최대한 유지하는 커널을 제작하여 루팅을 수행하고 리커버리 모드로 부팅이 되면 아래 그림과 같이 system, cache 등만 마운트 되므로 디지털 포렌식 관점에서는 적합한 방법이다.