[9장]
안드로이드 폰 포렌식
모바일 포렌식에서 안드로이드 기기 이미징은 가장 중요한 단계 중 하나다. 기기 내 데이터를 조사 과정에서 변경하지 않고 보존하는 것이 핵심이다. 포렌식 분석은 원본 데이터를 그대로 확보해야 의미가 있으며, 법적 증거로서도 효력을 가지려면 무결성이 보장되어야 한다. 안드로이드 기기에서 데이터를 직접 추출하기 전에, 기기 메모리를 비트 단위로 복사한 이미지를 확보하는 것이 일반적이다. 포렌식에서는 이 과정을 물리적 이미지 생성이라고 부른다. 단순히 파일을 복사하는 논리적 이미지와는 차이가 있다. 논리적 이미지는 접근 가능한 파일만 복사할 수 있어 삭제되거나 시스템에 의해 숨겨진 데이터는 포함되지 않는다. 따라서 사건 분석의 정확도를 높이려면 물리적 이미징이 필수적이다.
데스크탑 포렌식과 안드로이드 포렌식의 차이
전통적인 데스크탑 포렌식에서는, 전원이 꺼진 하드디스크를 분리해 write blocker 장치에 연결하고 비트 단위 이미지를 생성한다. 원본 디스크는 변경되지 않고 안전하게 보호된다. 안드로이드 기기는 하드웨어 구조상 디스크를 쉽게 분리할 수 없고, 기기가 켜진 상태에서 데이터를 추출하면 일부 로그나 캐시가 변경될 수 있다. 또한 안드로이드 기기는 내부 저장소와 외부 저장소로 나뉜다. 내부 저장소는 기기 내장 메모리를 의미하고, 외부 저장소는 SD 카드와 같은 분리 가능한 메모리를 뜻한다. 일부 기기는 외부 저장소가 내장 메모리 형태로 포함되어 있어, 반드시 물리적 구조를 확인해야 한다. 분리 가능한 SD 카드가 있다면 반드시 별도로 이미징을 진행해야 한다. 외부 저장소는 주로 FAT32나 exFAT 파일 시스템으로 포맷되어 있으며, 파일 구조를 그대로 확인하고 복사할 수 있다.
안드로이드 데이터 추출 방법
안드로이드 기기에서 데이터를 추출하는 방법은 크게 세 가지로 나눌 수 있다.
1. 수동 데이터 추출
조사관이 직접 기기 UI를 통해 데이터를 확인하고 필요한 증거를 확보할 수 있다. 예를 들어 통화 기록, SMS, 메신저 채팅, 사진 등을 확인하고 스크린샷이나 파일로 기록할 수 있다. 수동 추출은 접근이 간단하고 긴급 상황에서 유용하지만, 접근 가능한 데이터만 확인할 수 있고 실수로 데이터를 변경할 위험이 존재한다. 또한, 데이터가 대량일 경우에는 시간이 오래 걸릴 수 있다. 따라서 긴급 확인용이나 보조적인 증거 확보용으로 적합하다.
2. 논리적 데이터 추출
논리적 추출은 기기 내부 파일 시스템에 접근해 데이터를 확보하는 방법이다. 루팅 여부에 따라 접근 가능한 데이터 양이 달라진다. 루팅이 되어 있으면 앱 데이터, 시스템 로그, 사용자 정보 등 거의 모든 데이터를 확보할 수 있다. 루팅이 되어 있지 않으면 일부 디렉토리에는 접근할 수 없다.
대표적인 논리적 추출 방법은 다음과 같다.
• ADB(Android Debug Bridge) pull 명령어 사용: 기기를 PC와 연결해 원하는 디렉토리나 전체 데이터를 복사할 수 있다. 예를 들어 /data/data/PackageName/에 있는 앱 데이터나 /data/data/com.android.providers.telephony/databases/mmssms.db에 있는 SMS 데이터를 추출할 수 있다.
• Content Provider 활용: 앱 간 데이터 공유 메커니즘인 컨텐트 프로바이더를 통해 SMS, 통화 기록, 주소록 등을 추출할 수 있다. 이를 통해 루팅 없이도 일부 앱 데이터를 확보할 수 있다. 대표적인 도구로는 AFLogical OSE를 활용할 수 있다.
논리적 추출은 기기 구조를 크게 해치지 않고 데이터를 확보할 수 있으며, 법적 증거로 사용 가능한 데이터도 많다. 그러나 삭제된 데이터나 잠긴 데이터, 시스템 로그 등은 접근이 제한될 수 있다.
3. 물리적 데이터 추출
물리적 추출은 안드로이드 기기의 모든 데이터를 하드웨어 수준에서 확보하는 방법이다. 대표적인 방법으로 JTAG와 Chip-off 방식이 있다.
• JTAG: CPU의 디버깅 포트에 연결해 기기의 메모리를 직접 덤프할 수 있다. 이 방식은 기기가 조사 후에도 정상적으로 동작할 수 있어야 하므로 전문 지식과 경험이 필요하다.
• Chip-off: NAND 플래시 칩을 기기에서 분리해 데이터를 읽는 방법이다. 이 방법은 기기가 손상되거나 잠겨 있어도 데이터 추출이 가능하다. 단점은 장비가 고가이고, 기기 재사용이 어렵다.
물리적 추출은 가장 많은 데이터를 확보할 수 있지만, 시간과 전문성이 요구된다. 또한 실수로 메모리 칩을 손상하면 데이터 복구가 불가능할 수 있다.
안드로이드 루팅과 데이터 접근
안드로이드는 보안을 위해 대부분 내부 디렉토리와 시스템 파일 접근을 제한한다. 예를 들어 /data/data/ 폴더는 루팅되지 않은 상태에서는 접근할 수 없다. 루팅을 통해 슈퍼유저 권한을 확보하면, 앱 데이터, 시스템 로그, 캐시 파일 등 거의 모든 데이터에 접근할 수 있다. 그러나 루팅 과정에서 일부 데이터가 변경될 수 있고, 일부 기기는 데이터 파티션을 초기화할 수 있다. 따라서 루팅 시에는 반드시 법적 권한과 사용자의 동의가 필요하다. 루팅 과정에서 발생한 변경 사항은 모두 기록하고, 가능한 한 원본 데이터를 보존하는 것이 중요하다.
추출한 데이터 분석 방법
안드로이드 기기에서 추출한 데이터는 대부분 SQLite 데이터베이스 형식으로 저장된다. 대표적으로 SMS, 통화 기록, 앱 데이터, 브라우저 히스토리 등이 SQLite DB로 관리된다. 이를 분석하기 위해 SQLite 브라우저나 Oxygen Forensic SQLite Database Viewer를 사용할 수 있다. 추출한 데이터를 정리하면 사건 경위를 파악할 수 있으며, 시간 순서대로 타임라인 분석을 수행하면 사건의 흐름을 명확하게 이해할 수 있다. 또한 이미지, 동영상, 음성 파일 등 멀티미디어 데이터는 메타데이터 분석을 통해 생성 시각, 위치 정보, 수정 여부 등을 확인할 수 있다. 로그 파일과 시스템 캐시는 기기가 어떤 앱을 사용했는지, 어느 네트워크에 연결했는지 등을 확인할 수 있는 중요한 증거가 된다. 데이터 분석 과정에서 가장 중요한 것은 원본 데이터의 무결성 유지다. 추출 과정에서 변경된 기록이 없다는 것을 입증할 수 있어야 법적 증거로 인정받을 수 있다. 따라서 추출 후에는 해시값을 계산해 원본과 비교하는 절차가 필수다.
[11장]
안드로이드 앱 분석과 포렌식
안드로이드에서 사용자와 상호작용하는 모든 활동은 애플리케이션을 통해 이루어진다. 일부 앱은 기기 제조사에 의해 기본 설치되어 있지만, 사용자가 직접 다운로드하여 설치하는 앱도 존재한다. 대부분의 앱은 민감한 정보를 기기의 내장 메모리나 SD 카드에 저장한다. 다른 포렌식 기법을 사용하면 이러한 데이터에 접근할 수 있지만, 조사관은 확보한 데이터를 유용한 정보로 변환할 수 있는 기술을 반드시 익혀야 한다. 이러한 기술은 애플리케이션이 데이터를 어떻게 처리하고 저장하는지에 대한 포괄적인 이해를 기반으로 습득할 수 있다. 조사관은 접근이 제한된 애플리케이션을 다루어야 할 수도 있다. 예를 들어, 앱 잠금 기능이 활성화된 갤러리의 사진과 동영상에 접근하려면 앱 잠금의 패스코드를 확인해야 한다. 일부 앱의 경우 데이터베이스가 암호화되어 있어, 패스워드 여부를 확인하는 것조차 쉽지 않다. 따라서 앱의 내부 동작과 데이터 저장 방식을 이해하는 것이 중요하며, 이때 리버스 엔지니어링이 큰 도움이 될 수 있다. 리버스 엔지니어링을 통해 앱의 기능, 보안 메커니즘, 데이터 처리 방식 등을 깊이 있게 파악할 수 있다.
안드로이드 앱 리버스 엔지니어링
리버스 엔지니어링은 실행 가능한 파일에서 소스 코드를 추출하는 과정을 말한다. 안드로이드 앱의 리버스 엔지니어링은 앱의 기능과 데이터 처리, 보안 메커니즘, 멀웨어 여부를 이해하기 위해 수행된다. 안드로이드 앱은 자바로 작성되며, 컴파일 시 바이트코드가 생성된다. 이 바이트코드는 dex 컴파일러를 통해 달빅(Dalvik) 바이트코드로 변환된다. 여러 개의 클래스 파일은 하나 이상의 dex 파일로 통합되며, 이 파일을 포함한 APK 파일이 생성된다.
APK 파일은 ZIP 파일 구조를 가지므로, 확장자를 zip으로 변경하면 내부 파일을 확인할 수 있다. APK 파일에 접근하려면 기기에서 해당 앱의 파일 위치를 알아야 한다. 제조사 기본 앱은 /system/app 디렉토리에, 사용자가 설치한 서드파티 앱은 /data/app 폴더에 저장된다. 루팅 여부와 상관없이 다음 명령을 통해 APK 파일에 접근할 수 있다.
1. 앱 패키지 이름 확인: adb shell pm list packages
2. 특정 앱의 APK 경로 확인: adb shell pm path com.android.chrome
3. APK 파일을 포렌식 워크스테이션으로 전송: adb pull /data/app/com.android.chrome-2.apk C:\temp
APK 파일은 AndroidManifest.xml, classes.dex, res, lib, META-INF 등으로 구성되어 있으며, 리버스 엔지니어링을 통해 앱의 동작과 데이터 저장 방식을 분석할 수 있다.
APK 파일 분석 과정
APK 파일에서 클래스 코드를 확인하려면 dex2jar와 JD-GUI 같은 도구를 사용할 수 있다.
1. APK 파일의 확장자를 zip으로 변경하고 압축을 해제한다.
2. classes.dex 파일을 dex2jar로 변환하여 jar 파일을 생성한다.
3. JD-GUI를 사용해 jar 파일의 소스 코드를 열어 분석한다.
이를 통해 앱이 특정 값을 저장하는 방식, 권한 사용 여부, 데이터 암호화 방법 등을 확인할 수 있다. 멀웨어 분석 시에는 해당 앱이 어떤 데이터를 수집하고 외부로 전송하는지 파악할 수 있어 보안 조사와 증거 확보에 필수적이다. 또한 앱 내부에서 사용되는 API, 네트워크 통신 방식, 암호화 로직 등도 리버스 엔지니어링을 통해 확인할 수 있다.
안드로이드 포렌식 도구
포렌식 도구는 데이터를 안전하게 수집하고 분석하는 데 도움을 준다. 수동 분석과 비교할 때 효율성과 정확성을 높일 수 있으며, 데이터 손실을 최소화할 수 있다. 대표적인 도구는 다음과 같다.
1. AFLogical
AFLogical은 안드로이드 1.5 이상에서 논리적 데이터를 추출할 수 있는 도구다. CSV 형식으로 데이터를 저장하며, 주소록, 통화 기록, SMS, MMS 등을 추출할 수 있다. 오픈소스 에디션(AFLogical OSE)과 법집행용 에디션(AFLogical LE)이 있으며, 산토쿠 리눅스에서 실행할 수 있다. 이를 통해 조사관은 빠르고 안전하게 데이터를 확보하고 필요한 분석을 진행할 수 있다.
2. Cellebrite UFED
Cellebrite UFED는 상용 포렌식 도구로, 논리적·물리적 데이터 수집을 지원한다. UFED 터치와 Physical Analyzer를 사용하면 삼성 안드로이드 기기에서 데이터를 추출하고 분석할 수 있다. 물리적 추출 과정에서는 기기의 완전 충전 상태가 필수적이며, 제조사와 모델 선택 후 화면 안내에 따라 진행할 수 있다. UFED를 통해 추출된 데이터는 키워드 검색, 북마크, 데이터 카빙, 보고서 생성 등 다양한 분석 작업에 활용할 수 있다.
3. MOBILedit
MOBILedit는 전화번호부, 통화 기록, SMS, 멀티미디어, 캘린더, 노트, 애플리케이션 데이터를 포함해 폰의 대부분 정보를 검색하고 분석할 수 있는 도구다. IMEI, 펌웨어, SIM 정보, 위치 정보 확인도 가능하며, 삭제된 데이터 복구와 암호화 우회 기능도 제공할 수 있다. 이를 통해 기기에서 중요한 데이터를 안전하게 확보하고, 증거를 보존할 수 있다.
4. Autopsy
Autopsy는 Sleuth Kit 기반 GUI 도구로, 안드로이드 기기의 미가공 파일 접근과 분석을 지원한다. 통화 기록, SMS, 사진 등 다양한 데이터를 카빙하고 파싱할 수 있으며, 물리 이미지를 마운트한 후 ingest 모듈을 사용하면 데이터를 즉시 확인하고 조사할 수 있다. Autopsy는 포렌식 과정에서 수동 분석과 자동 분석을 결합하여 효율적인 조사를 가능하게 한다.
'2025 - 2' 카테고리의 다른 글
| 3주차 워게임 [web01] 공부 - ASP개념 정리, 실습 (0) | 2025.10.28 |
|---|---|
| 3주차 워게임 [web01] 문제풀이 (0) | 2025.10.28 |
| 3주차 기술 [ESRC 보안동향보고서] (0) | 2025.10.28 |
| 2 주차 모바일 포렌식 1장 (0) | 2025.09.30 |
| 2주차 워게임 [Hidden] 공부 - XOR암호화 코드 분석 (0) | 2025.09.30 |