해당 도서의 11장_안드로이드 앱 분석과 포렌식 도구 개요 (285p-303p) 내용 정리


스마트폰 사용자들은 일반적으로 서드파티(3rd party) 애플리케이션 사용

포렌식 과정에서 가치있는 데이터와 멀웨어 탐지 위해 이런 앱들 분석이 도움됨

 

안드로이드 앱 분석

대부분의 앱들은 민감 정보를 기기의 내장 메모리나 SD카드에 저장.

조사관은 필요한 정보에 접근하는 데 장애물로 작용하는 앱 다룰 필요 생길 수 있음

애플리케이션에 대해 더 많은 이해와 데이터를 어떻게 저장하는지 알고자 할 때 리버스 엔지니어링이 도움됨.

 

안드로이드 앱 리버스 엔지니어링

실행 가능한 파일에서 소스 코드를 뽑아내는 과정.

앱의 기능, 사용 중인 보안 메커니즘등을 이해하기 위해 수행됨

 

안드로이드 앱

  • 안드로이드 기기에 설치된 모든 애플리케이션은 자바 프로그래밍 언어로 작성됨
  • 자바 프로그래밍 컴파일되면 바이트코드가 생성됨. 바이트코드는 dex 컴파일러로 보내져서 달빅 바이트코드로 변환됨
  • class 파일들은 dx tool을 사용해서 dex 파일로 변환됨. 안드로이드는 달빅 가상 머신(DVM)이라 불리는 것으로 애플리케이션을 실행
  • JVM의 바이트코드는 애플리케이션에 있는 자바 파일의 개수에 따라 하나 이상의 클래스로 이뤄짐.
  • 그와 달리 달빅 바이트코드는 하나의 dex 파일로 이뤄져있음

하나의 애플리케이션을 실행하는 데 필요한 dex 파일, XML 파일, 기타 리소스들이 안드로이드 패키지 파일(APK 파일)로 패키징됨. APK 파일은 단순히 ZIP 파일 내의 아이템들의 집합.

→ APK 파일에 대한 권한을 가지고, APK 확장자 파일을 .zip 확장자 가지도록 바꾸면 파일의 콘텐츠 볼 수 있음

 

안드로이드 기기에서 APK 파일 추출

폰에서 미리 설치된 앱들은 /system/app 디렉토리에 저장되어 있음.

사용자가 다운로드한 서드 파티 애플리케이션은 /data/app 폴더에 저장됨. 

 

기기의 APK 파일에 접근하는 방법

1. 아래 명령을 실행시켜 앱의 패키지 이름 확인

C:\android-sdk-windows\platfom-tools>adb.exe shell pm list

패키지 이름의 목록 나타나면 원하는 애플리케이션의 패키지 이름 찾기. 보통 패키지 이름은 앱 이름과 큰 연관성 있음.

2. 아래 명령을 실행시켜 원하는 패키지의 APK 파일 경로를 알아냄

 C:\android-sdk-windows\platfom-tools>adb.exe shell pm path com.android.chrome

3. adb pull 명령을 사용해 해당 APK 파일을 안드로이드 기기에서 포렌식 워크스테이션으로 옮김

C:\android-sdk-windows\platform-tools>adb.exe pull /data/app/com.android.chrome-2.apk C:\temp

 

또한, ES 익스플로러와 같은 애플리케이션을 사용해 안드로이드 애플리케이션의 APK 파일 얻을 수 있음

 

패키지(.zip 형태)가 포함하는 파일들

  • AndroidManifest.xml: 퍼미션 등의 정보 담고 있음
  • classes.dex: dex 컴파일러가 dex 파일로 변환한 class 파일
  • res: 이미지 파일, 사운드 파일 등 애플리케이션의 리소스가 존재
  • lib: 애플리케이션이 사용하는 네이티브 라이브러리 담고 있음
  • META-INF: 애플리케이션의 서명과 패키지 내 모든 파일에 대한 서명된 체크섬 관련 정보 담고 있음

 

안드로이드 앱을 리버스 엔지니어링하는 과정

-dex2jar와 JD-GUI 도구를 사용하는 방법-

 

1. 파일의 콘텐츠 확인 위해 apk 확장자를 zip으로 바꾸고 압축을 해제

2. 앞에서 설명한 classes.dex 파일에 접근할 수 있음. 이 dex 파일은 자바의 class 파일로 변환되어야 하는데 이를 위해 dex2jar 도구를 사용

3. classes.dex 파일을 dex2jar 도구 디렉토리에 넣고 다음 명령을 내림

C:\Users\Rohit\Desktop\Training\Android\dex2jar-0.0.9.15>d2j-dex2jar.bat classes.dex

dex2jar classes.dex -> classes-dex2jar.jar

4. 위 명령 성공적으로 실행되면 classes-dex2jar.jar라는 새로운 파일이 같은 디렉토리에 생성됨

5. JD-GUI와 같은 도구 사용하면 jar 파일 내용(안드로이드 애플리케이션에 존재하는 파일들과 그 관련 코드를 볼 수 있음

 

코드에 접근하고 나면 애플리케이션이 특정 값, 퍼미션, 기타 정보를 어떻게 저장하는지 쉽게 분석할 수 있고 이런 정보는 특정 제약조건을 우회하는 데 도움 줄 수 있음. 

멀웨어 발견됐을 시 유용.

 

포렌식 도구 개요

AFLogical 도구

비아포렌식스(viaForensics)가 개발한 안드로이드 포렌식 도구.

안드로이드 1.5 이상을 구동하는 모든 안드로이드 기기에 대한 논리적 수집을 수행.

이 도구에서 추출된 데이터를 CSV 포맷으로 조사관의 SD 카드에 저장할 수 있음.

두 가지 에디션이 있다

  • AFLogical OSE(Open Source Edition)

무료 오픈소스 소프트웨어.

안드로이드의 모든 MMS, SMS, 주소록, 통화 기록을 뽑아냄

모바일 포렌식, 모바일 멀웨어, 모바일 보안에 초점을 둔 산도쿠 리눅스(Santoku-Linux)라는 오픈소스 커뮤니티 기반 OS에 내장되어 있음.

 

-산도쿠 리눅스에서 이 에디션 사용하는 과정-

1. Sandoku▶Device Forensics▶AFLogical OSE로 이동. 

2. 기기에 AFLogical OSE 설치 위해 안드로이드 기기를 USB로 연결

3. 애플리케이션을 기기에 설치

 aflogical-ose
 634 KB/s (28794 bytes in 0.044s)
 pkg: /data/local/tinp/AFLogical-OSE_l.5.2.apk
 Success
 Starting: Intent { anp=com. viaforensics. android. aflogical_ose/com. 
viaforensics.android.ForensicsActivity }
 Press enter to pull /sdcard/forensics into ~/aflogical-data/

4. 안드로이드 기기에서, 추출하기 원하는 아이템을 선택하고 Capture를 클릭

5. 다음으로 리눅스 워크스테이션에서 Enter를 누름. 이를 통해 안드로이드 기기에서 추출한 데이터를 마운트된 SD카드의 ~/aflogical-data에 저장

6. 추출된 날짜와 시간으로 이름 붙여진 폴더에 데이터가 저장됨

7. 이 폴더를 검색하여 통화 기록, SMS, 주소록 등의 추출한 데이터에 접근 가능

  • AFLogical LE(Law Enforcement)

다운로드 위해서는 사용 중인 사법 기관 혹은 정부 기관의 이메일 주소로 비아포렌식스에 등록해야 함. 

아래와 같은 모든 논리적 데이터를 안드로이드 기기에서 뽑아낼 수 있음

  • 브라우저 북마크
  • 브라우저 검색 기록
  • 캘린더 참석자
  • 캘린더 이벤트
  • 캘린더 확장 속성
  • 캘린더 알림
  • 캘린더
  • 통화 기록
  • 주소록 설정
  • 외부 이미지 미디어
  • IM 계정
  • 내장 이미지 미디어
  • MMS
  • 노트
  • SMS
  • 검색 기록
  • 등...

셀레브라이트: UFED

안드로이드 기기의 데이터 수집과 분석을 지원하는 다양한 제품을 제공

유명한 상용 도구로 논리적, 물리적 수집을 지원하며 데이터를 분석하기 위한 분석 플랫폼도 제공함.

분석 플랫폼인 설레브라이트 피지컬 애널라이저(Physical Analyzer)는 조사에 도움되는 키워드 검색, 북마크, 데이터 카빙, 자체 보고서 생성 등의 기능을 제공

 

-UFED 터치(Touch)를 사용해서 삼성 안드로이드 기기에서 정보 추출하는 과정-

  1. UFED 터치 메뉴에서 Physical Extrction을 선택
  2. 제조사 목록에서 기기 제조사를 선택
  3. 모델 메뉴에서 기기의 모델 선택하고 Physical Extraction을 선택
  4. 추출할 파일 저장할 위치 선택. → 제거 가능한 드라이브나 포렌식 워크스테이션을 선택
  5. UFED 터치에 나오는 순서 그대로 따라함. 정확한 케이블 사용하고 안내 화면에 따라 배터리 제거해야 함
  6. 폰이 다운로드로 들어가고 로고가 표시됨. 그 다음, 폰을 UFED 터치에 연결하고 continue를 누름
  7. 추출한 데이터 저장 위해 외장 드라이브를 UFED 터치의 목적지 포트에 연결
  8. UFED 터치가 자동으로 추출 화면으로 이동함. 이 과정에서 폰을 연결하기 위한 안내 화면이 뜸
  9. 이 과정 완료되면 UFED 피지컬 애널라이저 애플리케이션 사용해 추출된 데이터 보고 분석 가능

MOBILedit

제조사에 따라 MOBILedit 포렌식 도구는 통화 기록, 전화번호부, 텍스트 메시지, 멀티미디어 메시지, 파일, 캘린더, 노트 등 애플리케이션 데이터를 포함한 폰의 데이터를 검색하고 보는 데 사용될 수 있음

또한 IMEI, 운영체제, 펌웨어, SIM 정보, ICCID, 위치정보 등을 검색.

상황에 따라 폰에서 삭제된 데이터 가져오고 패스코드, PIN, 폰 백업 암호화를 우회할 수 있음

 

-MOBILedit 소프트웨어 사용해 안드로이드 폰에서 정보 추출하는 과정-

  1. 기기의 USB 디버깅 활성화되어 있는지 확인하고 USB 케이블을 사용해 기기를 포렌식 워크스테이션에 연결. MOBILedit이 기기를 탐지하고 기기에 Connector 앱을 설치
  2. MOBILedit은 특정 데이터 백업하는 옵션 보여줌. 이 과정 완료되면 분석할 수 있는 애플리케이션 데이터와 통계 보여줌
  3. Navigation 탭에서 결과 보고 싶은 아이템을 클릭하고 정보 확인

Autopsy

수동 조사나 파일 카빙 필요할 때 안드로이드 기기의 미가공 파일에 접근 가능하게 함.

오픈소스와 법조 기관 모듈이 있으며, 이 모듈들은 애플리케이션과 파일에 대한 추가적 파일 카빙과 파싱을 지원

 

-셀레브라이트 UFED 터치를 사용해 물리적으로 추출된 기기 이미지 분석-

  1. 최신 버전의 Autopsy 설치
  2. Autopsy 실행하고 새로운 케이스 생성
  3. 케이스 정보를 입력하고 Finish 클릭
  4. 이미지 파일을 선택하여 안드로이드 기기의 물리 이미지를 탐색. 하나 이상의 이미지 파일 제공될 경우, 첫 번째 파일이 선택됨
  5. 안드로이드 기기에 대해 실행하고자 하는 ingest 모듈을 선택. 사법 기관 관련 모듈은 나타나지 않고 이 모듈들은 사법 기관과 연방 정부에만 제공됨.
  6. Next와 Finish를 선택하면 Autopsy가 안드로이드 파일을 파싱하고 읽기 시작. 다른 포렌식 도구와 달리 Autopsy는 복구되는 즉시 결과를 보여줘서 선처리 시간 단축하고 조사 관련 데이터를 직접 접근할 수 있게 함. 

QUIZ

1. 하나의 애플리케이션을 실행하는 데 필요한 dex 파일, XML 파일, 기타 리소스들은 어떤 파일로 패키징되는가?

더보기

안드로이드 패키지 파일(APK 파일)

2. 애플리케이션이 사용하는 네이티브 라이브러리 담고 있는 파일의 이름은?


code.bmp 파일

BMP 파일이란?
BMP는 비트맵(Bitmap)의 줄임말로, 어떤 디바이스에서도 정확하게 이미지를 보여줄 수 있는 파일 포맷.
각각의 이미지 픽셀을 고유한 개체로 처리하는 특징 때문에 이미지 품질이 좋고 세부 정보도 많음
파일 크기가 크지만 그만큼 편집도 쉽다.

 

육안으로 플래그 식별 가능한 건 아닌 것 같아서, HxD로 까봤다

 

BMP 파일 구조를 먼저 알아야 할 것 같다.

BMP의 파일 헤더는 다음과 같은 구조로 구성된다.

이름 크기 설명
bfType 2 .bmp 파일의 시그니처 (0x42 0x4D = BM)
bfSize 4 해당 파일의 전체 크기 (Bytes)
bfReserved1 2 예약된 영역. 사용하지 않는다.
bfReserved2 2 예약된 영역 2. 사용하지 않는다.
bfOffBits 4 실질적인 데이터의 시작 Offset

 

code.bmp 파일의 헤더에서는,

- bfType: BM

- bfSize: 0x1476(little endian) = 5238bytes

파일 속성에서 크기 확인해 보면 일치하는 것을 확인 가능. 

- bfOffBits: 0x36 Offset 위치로 이동하면 파일의 실질적 데이터 시작 위치. 

 

헤더 파일 분석해 보니까 이 파일이 훼손된 bmp는 아니라는 걸 알겠음.

뭐 어떻게 푸는 건지 모르겠어서... 일단 막무가내로 .jpg 파일로 변환해봄

생긴 건 똑같다.

이걸 HxD에 넣어 보면?...

아무것도 없음

뭐 어케 푸는 거지


구글링해 보니까 사진 자체에서 힌트를 얻는 거라고 함...

일반적인 바코드와는 달리 하단에 두 줄 정도 얇은 도트가 찍혀 있다.

첫 줄의 도트는 바코드의 긴 줄이 없는 곳에 찍혀있고,

두번째 줄의 도트는 총 17개. 일정한 간격으로 찍혀 있음

 

사진이 선명하게 보이진 않지만 두 번째 줄의 도트를 기준으로 나눠 7자리씩

바코드의 긴 줄 이진수처럼?... 표현해 본다.

1001000

0110100

1000011

1000111

1001101

1111011

1101110

1101111

1101110

0101101

1100010

1100001

1110010

1100011

1101111

1100100

1100101

1111101

총 18개이다.

이걸 ASCII 코드로 변환하면 문자열이 나올 것 같다.

이진수 입력했더니 위와 같이 ASCII text로 플래그가 나왔다!!

해당 도서의 10장_안드로이드 데이터 복구 기법 (269p-284p) 내용 정리


데이터 복구

기기에서 삭제된 데이터에 정상적으로 접근하지 못할 때 해당 데이터 되찾는 과정. 

삭제된 데이터 덮어쓰지 않기 위해 주의해야 할 점:

  • 폰 압수 후 다른 용도로 사용하지 않기
  • 기기 비행기 모드 설정, 네트워크 연결 옵션 비활성화, 기기 전원 끄기

삭제된 파일 복구

파일들은 삭제되었다고 표시되어 있지만 덮어쓰여지기 전에는 파일 시스템에 존재

삭제된 파일 안드로이드 기기에서 복구하는 것에는 두 가지 시나리오 포함: SD카드에서 삭제된 데이터 복구/기기 내장 메모리에서 삭제된 데이터 복구

  • SD 카드에서 삭제된 데이터 복구
    • Remo Recover for Android 등의 포렌식 도구 사용하면 됨
      1. 소프트웨어 설치 후 메인 화면에서 적절한 파일 복구 모드를 선택. 이때 안드로이드 기기가 반드시 USB 디버깅 모드로 연결되어 있어야 하며 그렇지 않으면 기기 탐지되지 않음
      2. 사용 가능한 저장소 목록 나오면 그 중에서 저장소 선택
      3. 복구할 파일 타입 선택하거나 모두 선택하고 계속 진행
      4. 복구 과정 완료되면 추출된 파일 목록 보여짐
  • 내장 메모리에서 삭제된 데이터 복구
    • 내장 메모리의 파일 시스템은 포렌식 도구들이 인식하지 못하거나 마운트하지 못할 수 있음
    • 폰 루팅되어 있지 않으면 안드로이드 폰의 내장 메모리의 미가공 파티션에 접근하지 못할 수 있음.
    • 발생 가능한 문제: 
      • 루팅 과정에서 /data 파티션에 데이터 기록될 수 있기 때문에 기기에 존재하는 가치 있는 데이터 덮어쓸 수 있음
      • 내장 파일 시스템은 YAFFS2(구형 기기), EXT3, EXT4, RFS 또는 안드로이드에 구현된 자체 시스템 될 수 있음 → 윈도우 파일 시스템을 대상으로 설계된 많은 복구 도구 동작 않을 것
      • 애플리케이션 데이터는 보통 SQLite 포맷으로 저장됨. 많은 포렌식 도구들이 이런 파일에 대한 접근 제공하지만 파일들을 내보내 네이티브 브라우저로 봐야 할 수도 있음.

SQLite 파일 파싱하여 삭제된 파일 복구

SQLite 데이터베이스는 삭제된 데이터를 데이터베이스 자체 내에 저장할 수 있음

사용자에 의해 삭제로 표시된 파일은 더 이상 활성화된 SQLite 데이터베이스 파일에 나타나지 않음

삭제된 데이터 포함할 수 있는 SQLite 페이지 내에는 비할당 블록/빈 블록 두 가지 영역이 있음

옥시즌 포렌식 SQLite 뷰어와 같은 사용 가능한 포렌식 도구를 사용하여 삭제된 데이터 파싱 가능 → 그러나 복구할 수 있는 양에 제약이 있음

 

- 안드로이드 기기에서 삭제된 SMS 복구하는 예제-

SMS/MMS 관련 사항은 /data/data/com.android.prociedrs.telephony/databases 아래에 mmssms.db라는 이름의 SQLite 데이터 베이스 파일로 저장되어 있음.

해당 파일 사용해 삭제된 SMS 복구하는 과정:

  1. 안드로이드 기기에서 USB 디버깅 모드 활성화시키고, 기기를 포렌식 워크스테이션에 연결. adb 명령행 도구 사용해 adb pull 명령을 내려 /data/data 아래의 데이터베이스 폴더를 추출. 파일이 로컬 컴퓨터에 추출되면 옥시즌 포렌식 SQLite 뷰어 도구 사용해 mmssms.db 파일 열기
  2. 도구에서 sms라고 명명된 테이블 클릭하고 Tables data 탭 아래의 현재 메시지 관찰
  3. 삭제된 데이터 보기 위해 Blocks containing deleted data 탭 클릭

 

 

파일 카빙 기법 사용한 복구

파일 카빙은 삭제되거나 숨겨진 파일을 분석 위해 복구 가능하게 만듦. 파일 시스템 메타데이터 없이 컴퓨터 파일을 조각으로부터 재조립하는 과정. 

카빙 과정에서 파티션/디스크 전체의 포렌식 이미지 생성하기 위해 특정 여러 바이너리 데이터를 대상으로 특정 파일 타입 검색되고 추출됨. 파일 카빙은 파일 시스템 메타데이터와 대조 없이 파일 구조와 내용만을 기반으로 드라이브의 할당되지 않은 공간에서 파일을 복구. 

 

파일 카빙은 실제 사용되는 기법에 따라 분류.

헤더-푸터 카빙 방법: 헤더와 푸터 정보를 기반으로 복구

파일 구조 기반의 카빙 방법: 파일 재구성 위해 파일의 내부 레이아웃을 사용

스마트 카빙 등의 새로운 기법: 몇 개의 유명한 파일 시스템 내에서 파편화 일어났을 때의 특성 사용

 

폰 이미징되면 스카펠과 같은 도구 사용해 이미지 분석 가능

스카펠: 파일 카빙을 위한 강력한 오픈 소스 유틸리티, 블록 데이터베이스 저장소 분석하고 삭제된 파일 인지하여 그 파일들을 복구. 

- 스카펠을 우분투 워크스테이션에서 사용하는 방법 - 

  1. sudo apt-get install scalpel 명령으로 스카펠을 우분투 워크스테이션에 설치
  2. /etc/scalple 디렉토리에 있는 scalpel.conf 파일은 지원하는 파일 형식에 대한 정보를 담고 있음. 안드로이드와 관련된 파일 지원하기 위해 해당 파일을 수정해야 함.
  3. 스카펠은 환경설정 파일과 함께 조사할 dd 이미지를 대상으로 실행해야 함. 환경설정 파일과 dd 파일을 입력으로 주고 명령어를 사용해 도구 실행할 수 있음. 명령어 실행되면 도구가 파일 카빙하고 생성하기 시작
  4. 출력 폴더에는 파일 타입에 따라 폴더가 생성됨. 폴더 각각에는 폴더 이름에 나타난 파일 형식을 가진 데이터가 존재
  5. 각 폴더는 사진, PDF 파일, ZIP 파일 등 안드로이드 기기에서 복구된 데이터 담고 있음

디스크디거(DiskDigger)와 같은 애플리케이션을 안드로이드 기기에 설치하여 내장 메모리와 SD카드로부터 다양한 형태의 파일 복구할 수 있음. 이 애플리케이션은 내장 메모리에서 콘텐츠 복구 위해 안드로이드 기기의 루트 권한을 요구함

 

기기에 설정된 구글 계정에 접근할 수 있다면 삭제된 주소록 복구 가능. 

구글 계정 접근 이후 데이터 복구 위해 거치는 과정:

  1. 지메일 계정에 로그인
  2. Gmail 클릭, Contacts 선택
  3. 주소록 목록 상단에 위치한 More 클릭
  4. Restore Contacts 클릭

이 기법 이용하면 이전 30일 이내의 어떠한 상태로 주소록의 상태 복구할 수 있음 


퀴즈

1. 파일 시스템 메타데이터와 대조 없이 파일 구조와 내용만을 기반으로 드라이브의 할당되지 않은 공간에서 파일을 복구하는 기법의 이름은?

더보기

파일 카빙 기법

2. 블록 데이터베이스 저장소 분석하고 삭제된 파일 인지하여 그 파일들을 복구하는 파일 카빙을 위한 강력한 오픈 소스 유틸리티의 이름은?

더보기

스카펠

 

해당 도서의 9장_안드로이드 데이터 추출 기법 (245p-268p) 내용 정리

 


안드로이드 폰 이미징

기기 이미징은 모바일 기기 포렌식에서 가장 중요한 과정 중 하나. 

포렌식 조사에서 기기에 존재하는 데이터가 어떤 방법으로도 변경되지 않도록 하는 것이 일반적.

기기에서 데이터 직접 추출하는 기법 사용하기 전, 안드로이드 기기의 물리 이미지를 받아야 하는데 포렌식에서 이러한 물리/논리적 수집 과정을 기기 이미징이라고 부름.

물리적 이미지는 안드로이드 기기 메모리의 비트 단위 복사본이라고 여겨짐.

 

비트 단위 이미지는 기기 상의 콘텐츠 복사해서 붙여넣는 것과는 다름.

기기의 모든 데이터(삭제된 파일/접근 불가능한 파일) 얻기 위해서는 기기 메모리를 비트 단위로 이미징해야 함

 

-전원 켜지지 않는 데스크탑 컴퓨터 압수해 포렌식 조사 위해 보냈다는 가정-

보통의 포렌식 조사관은 하드 드라이브 제거해 write blocker에 연결해 비트 단위 포렌식 이미지를 도구 사용해 얻어냄

→ 원본 하드디스크는 데이터의 포렌식 이미징 과정 동안 안전하게 보호됨

안드로이드 기기에서는 데이터 담고 있는 모든 영역 쉽게 분리할 수 X

모든 상호 작용이 기기 상태에 변화 만들기 때문에 기기 켜진 상태로 조사 위해 수집되면 기기에 변화 주지 않고 분석 불가능

 

안드로이드 기기: 내부/외부 저장소라는 두 가지 파일 저장 공간 가짐

  • 내부 저장소
    • 내장된 비휘발성 메모리
  • 외부 저장소
    • micro SD 카드와 같은 분리 가능한 저장 공간
    • 어떤 기기는 제거 가능한 공간 가지지 않는 대신 가용한 저장 공간을 내부/외부로 나누기도 함

 

데이터 추출 기법

  • 수동 데이터 추출
    • 조사관이 메모리에 존재하는 데이터에 접근하기 위해 모바일 기기의 일반적 유저 인터페이스 사용
    • 다른 방법들 중 하나로 추출된 발견 검토 위한 마지막 수단으로 사용되어야 함
    • 단점: 운영체제(UI 모드)가 접근 가능한 파일들만 조사할 수 있음

기기의 이미지 얻기 위해 안드로이드 기기를 루팅해야 됨. 루팅하면 슈퍼유저 권한 가지게 되어 모든 데이터 접근 가능

루트 권한 갖는 것은 데이터 변경 또는 삭제 등으로 기기에 변화 줄 수 있음.

 

루팅된 안드로이드 기기에서 포렌식 이미지 얻기 위해서는,

안드로이드 터미널 에뮬레이터(Android Terminal Emulator) 애플리케이션 설치 (리눅스 명령어 셸에 접근할 수 있게 도움)

설치 이후 다음 과정 통해 파티션 수집 가능

dd 명령어 사용 기기 미가공 이미지 생성하는 데 사용될 수 있음.
저수준 데이터 복사하여 안드로이드 기기의 비트 단위 이미지 생성에 도움을 줌
새로운 SD 카드 삽입 이미지 파일을 카드에 복사하기 위해 새로운 SD 카드를 기기에 삽입
이 SD 카드의 내부가 삭제되었고 다른 데이터 담고 있지 않음을 확인해야 함
명령어 실행 안드로이드 기기의 파일 시스템은 /dev 파티션 내의 다른 위치에 저장되어 있음
mount 명령어 사용하여 출력된 값 중 대부분의 데이터가 /data와 /system 파티션에 존재
이후, 'dd if=/dev/block/mmcdlk0p12 of=/sdcard/tmp.image' 명령어 실행해 기기를 이미징
  • 논리적 데이터 추출
    • 파일 시스템에 접근하는 것을 통해 기기에 존재하는 데이터를 추출
    • 중요 데이터 제공, 대부분의 기기에서 동작, 사용하기 쉬움
    • 데이터 추출 위해 루트 권한 요구하진 않으나 루트 권한 있다면 기기에 존재하는 모든 파일에 대한 접근을 제공

논리적 추출 수행 방법

- adb pull 명령어 사용

adb는 명령행 도구로 정보를 추출하기 위해 기기와 통신하는 것을 도움

USB 디버깅 옵션이 켜져 있어야 사용 가능

애플리케이션 데이터는 아래 위치 중 하나에 저장

Shared preferences key-value 쌍으로 이뤄진 데이터가 경량의 XML 포맷으로 저장
애플리케이션 /dat 디렉토리의 shared_pref 폴더에 저장
내부 저장소 개인 소유이며 기기의 내부 메모리에 위치
다른 애플리케이션이 접근하지 못함
외부 저장소 공개된 데이터를 일반적으로 보안 메커니즘의 적용 받지 않는 기기의 외부 메모리에 저장
/sdcard 디렉토리에서 찾을 수 있음
SQLite 데이터베이스 보통 .db 파일 확장자로 저장
SQLite 브라우저를 사용하거나 필요한 SQLite 명령어를 해당 파일에 실행시켜볼 수 있음

- 루팅된 폰에서 /data 디렉토리 추출

루팅되지 않은 기기에서 /data 디렉토리에 대한 pull 명령어는 파일을 추출하지 못함

셸 사용자가 해당 파일들에 대한 접근 권한 없기 때문.

날짜/시간 비교를 위해 사본을 만들어야 함

- SQLite 브라우저 사용

추출된 데이터를 분석하는 과정 돕는 도구.

표 형태로 데이터를 보여줌

- 기기 정보 추출

/system 폴더에 있는 build.prop 파일을 보고 기기에 대한 자세한 사항 알 수 있음

- 통화 기록 추출

통화 기록에 대한 정보는 /data/data/com.android.proviedr.contacts/databases/에 위치한 contacts2.db 파일에 저장됨

SQLite 브라우저 사용.

- SMS/MMS 추출

- 브라우저 히스토리 추출

- 소셜 네트워킹과 IM 채팅 분석

- 컨텐트 프로바이더 사용

컨텐트 프로바이더를 사용해 안드로이드에서 다른 애플리케이션에 데이터를 공유할 수 있는 메커니즘을 제공

하나 이상의 테이블 형태로 외부 애플리케이션에 데이터를 제공 → 이 테이블은 관계형 데이터베이스에서 볼 수 있는 테이블과 동일

URI 주소지정 방식을 통해 애플리케이션이 데이터 공유하는 데 사용될 수 있음

주소록, SMS/MMS, 캘린더 등이 컨텐트 프로바이더의 예시.

루팅 여부에 관계 없이 모두 동작한다는 장점

 

  • 물리적 데이터 추출
    • JTAG와 칩 오프(chip-off) 두 가지로 이루어짐
JTAG Joint Test Action Group. 해당 기법 사용해 기기의 전체 물리 이미지 수집 가능

포렌식 단계
1. TAPs(device Test Access Ports)가 기기의 CPU에 접근하기 위해 사용됨. TAP 확인되고 연결이 CPU에 도달하면 어떤 패드가 어떤 기능 담당하는지 알아냄. 기기 제조사들이 특정 기기의 JTAG 도식에 대한 자료 문서화하지만 일반적 목적으로는 배포 X
2. 리드선을 적절한 연결 핀에 납땜하고 다른 한 쪽은 CPU 제어할 수 있는 기기에 연결
3. CPU 구동 위해 전원 공급
4. NAND 플래시의 전체 바이너리 덤프 추출
5. 추출된 데이터 분석
칩 오프 기기에서 NAND 플래시 칩을 제거하여 정보를 추출.
패스코드로 보호되어 있고 USB 디버깅이 활성화되어 있지 않을 때에도 동작
기기가 심각하게 손상 입었거나, 잠겨 있거나, 기타 이유로 접근 불가능할 때에 유용한 방법

포렌식 단계
1. 어떤 칩이 사용자 데이터 담고 있는지 알기 위해 기기의 모든 칩 조사. 칩 결정되면 NAND 플래시 기기로부터 물리적으로 제거. 
2. 칩을 깨끗하게 하고 복구
3. 특정 NAND 플래시 칩 지원하는 하드웨어에 칩을 삽입
4. 수집한 데이터 분석

 

메모리 카드 이미징

메모리 카드(SD) 이미징할 수 있는 다양한 도구가 존재.

 

-윈헥스(WinHex)를 사용하여 SD카드의 미가공 디스크 이미지 생성하는 예제-

  1. 메모리 카드 연결
    • SD카드를 메모리 슬롯에서 제거하여 포렌식 워크스테이션에 카드 리더기로 메모리 카드를 연결
  2. 카드에 쓰기 보호 적용
    • 윈헥스로 디스크 열어 write-protected 모드 선택
  3. 해시 값 계산
    • 조사 과정에서 어떤 변경도 이루어지지 않았음을 보장하기 위해 메모리 카드의 해시 값을 계산
  4. 디스크의 이미지 생성
    • Raw image 옵션 선택하여 이미지를 생성

퀴즈

1. 안드로이드가 다른 애플리케이션에 데이터를 공유할 수 있는 메커니즘을 제공하기 위해서는 '이것'을 사용한다. '이것'은 하나 이상의 테이블 형태로 외부 애플리케이션에 데이터를 제공한다. 이것은 무엇인가?

더보기

컨텐트 프로바이더(content provider)

2. 물리적 데이터 추출 방법 중 하나로, 기기에서 NAND 칩을 제거하여 정보를 추출하는 방식의 이름은 무엇인가?

더보기

칩 오프(chip-off)

https://www.samsungsds.com/kr/insights/cloud-computing-market-outlook-in-the-ai-age.html

 

‘AI 시대의 혁신과 기회’로 바라본 클라우드 시장 전망 | 인사이트리포트 | 삼성SDS

이 글에서는 AI 시대에 부상하는 클라우드 시장의 주요 전망과 기업들에 미칠 영향에 대해 살펴보고자 합니다.

www.samsungsds.com


멀티클라우드 운영으로 인한 비용/복잡성 문제로 기업들이 리소스를 데이터센터로 옮기는 추세가 한동안 이어져 왔다.

하지면 AI 혁신으로 클라우드 분야가 다시금 활성화되고 있음.

 

IDC에 따르면, 퍼블릭 클라우드 서비스에 대한 2024년 전 세계 지출은 8,050억 달러에 달하며 3년 뒤인 2028년에는 규모가 두 배로 늘어날 전망

 

IDC 데이터 및 분석 부문 리서치 매니저 안드레아 마논 曰,

인공지능의 급속한 발전이 클라우드 지출의 급증을 크게 견인하고 있음. AI 플랫폼 구축/테스트/배포하는 기업의 증가에 따라 클라우드 인프라 간 상호 의존성 높아짐에 따라 클라우드 서비스가 AI 개발 및 배포의 중추로 자리매김 중.

 

가트너에 따르면, 퍼블릭 클라우드 서비스에 대한 전 세계 최종 사용자의 지출은 2023년 대비 2024년에 20.4% 증가할 전망IDC와 일부 수치는 다를 수 있지만 비슷한 예측.

 

가트너 애널리스트 시드 내그 曰,

범용 파운데이션 모델이 지속적으로 생성되고, 대규모로 AI 지원 애플리케이션을 지원했기 때문에 퍼블릭 클라우드 지출이 지속적으로 성장할 것으로 예상. 이로 인해 퍼블릭 클라우드 최종사용자 지출이 2020년대에 1조 달러 돌파할 것으로 전망. 

 

클라우드 주요 트렌드와 이로 인해 기업이 어떤 혜택 누릴 수 있는지 살펴보려 한다. 

 

AI 특화 대안 벤더의 등장

퍼블릭 클라우드 시장 점유율 순위

  1. AWS(32%)
  2. 마이크로소프트 애저 (23%)
  3. 구글 클라우드 (12%)

위 빅 3를 합치면 전체 시장의 67% 차지. 이외에도 알리바바, IBM, 세일즈포스 등 소규모 업체들은 각 2~4%대의 점유율

최근 오라클 점유율이 올라 3%대로 세일즈포스와 어깨를 나란히 하고 있다. 

 

이처럼 빅 3 기업이 클라우드 시장을 점령하고 있는 상황에, 생성형 AI의 부상으로 소규모 스타트업에게 기회가 제공되기 시작했다. 스타트업인 만큼, 시작부터 GPU 기반의 고성능 데이터센터를 구축함으로써 AI 학습 및 추론을 위한 GPU 클러스터를 공급하는 비지니스 기회를 포착. 

코어위브(CoreWeave), 벌처(Vultr), 네비우스(Nebius), 오리(Ori), 람다 랩스(Lambda Labs) 등이 대표적인 스타트업 기업.

이들은 특수 목적에 맞게 구축된 자사 플랫폼이 기존의 플랫폼보다 훨씬 빠르고 저렴하다고 주장. 

 

데이터센터 투자 증가를 주도하는 AI

하이퍼스케일러가 운영하는 대형 데이터센터의 수는 2024년 초에 1,000개 돌파하여 불과 4년 전의 두 배를 달성.

당연하게도 데이터센터 공간을 주로 보유한 기업은 아마존, 마이크로소프트, 구글로 전체 하이퍼스케일 데이터센터 용량의 60%를 차지함. 이 빅 3의 데이터센터 확장은 빠르고 맹렬하게 이어지고 있음.

  • 마이크로소프트
    • 최근 일본 데이터센터 인프라에 29억 달러, 영국에 31억 6,000만 달러, 인디애나에 10억 달러, 위스콘신에 33억 달러를 투자한다고 발표
    • 향후 몇 년 동안 데이터센터 용량을 두 배로 늘릴 계획
  • AWS
    • 2024년 상반기에만 버지니아의 여러 사이트에 350억 달러, 인디애나에 110억 달러, 미시시피에 100억 달러 등 총 500억 달러 규모의 데이터센터 투자를 발표
  • 구글
    • 캔자스시티, 아이오와주 시더래피즈, 버지니아 북부, 멕시코, 그리스, 말레이시아, 뉴질랜드, 노르웨이, 오스트리아, 스웨덴에 새로운 데이터센터 구축할 계획이라고 밝힘

시너지 리서치 그룹 曰,

향후 4년 내에 전체 하이퍼스케일 데이터센터 용량이 또 두 배로 늘어날 것으로 전망

새롭게 개소하는 데이터센터의 규모가 더욱 커지면서 용량 증가가 더욱 가속화될 것이고, 이러한 규모 증가의 주요 원인으로 생성형 AI 기술이 꼽힘

 

최근 빅 3가 AI 데이터센터 수요에 대응하기 위해 원자력 발전에 관심 보인다는 발표도 있었음

AI 프로젝트가 계획 → 구현 단계로 넘어가는 가운데, 하이퍼스케일러들이 대규모 언어 모델(LLM) 워크로드와 관련된 방대한 데이터셋 처리할 수 있는 역량 갖추게 된다는 점은 기업 IT에 큰 의미. 

새로운 퍼블릭 클라우드 데이터센터는 더 많은 가용성 영역을 의미

→ 사용자가 클라우드 기반 애플리케이션 및 데이터 소스에 물리적으로 가까이 있지 않아 발생하는 지연 시간&성능 문제가 줄어듦

 

산업 클라우드(수직 클라우드)의 지속적 증가

  • 산업 클라우드
    • 특정 업종의 고유한 요구 사항 충족하도록 맞춤화된 특수 클라우드 환경으로, 사전 구성된 솔루션을 제공

 

가트너 애너리스트 그레고 페트리 曰,

산업 클라우드 플랫폼은 클라우드 플랫폼을 비즈니스 플랫폼으로 전환한다. 기술 혁신 도구를 비즈니스 혁신 도구로도 사용할 수 있게 하는 것. 

사전 정의된 일회성 수직적 SaaS 솔루션이 아닌 산업별 패키지 비즈니스 기능 카탈로그로 지원되는 모듈식 구성 가능한 플랫폼으로 제공됨

 

최근 가트너의 설문조사에서 응답자의 약 39%가 산업 클라우드 플랫폼 도입 시작했다고 답함, 14%는 파일럿 단계에 있다고 답함. 

 

비즈니스 이니셔티브를 가속화하기 위해 산업 클라우드를 사용하는 기업 비율이 2023년에는 15% 미만이었지만 2027년에는 70% 이상일 것으로 예상. 

AWS와 애저는 의료 클라우드, 세일즈포스는 금융 서비스 클라우드, 오라클은 리테일 클라우드, 지멘스는 제조 클라우드, 구글은 교육 클라우드를 제공.

대부분의 하이퍼스케일러는 여러 버티컬 클라우드 제공하는 가운데, 틈새시장에서도 수많은 업체가 참여 중.

 

비용 관리 솔루션 시장도 커진다

클라우드 비용 평가 시에는 실제 비용/예상 비용 두 가지 측면을 고려해야 함.

클라우드 분석가 데이비드 린티컴

클라우드 비용이 조직의 예상보다 2.5배나 더 많이 발생하고 있다고 추정. 

클라우드 최적화를 위해 레거시 애플리케이션을 리팩토링하거나 재작성하지 않고 단순 퍼블릭 클라우드로 '리프트 앤 시프트'한 조직이 결국 더 높은 비용을 부담하게 됨. 많은 조직이 오버프로비저닝을 하고 클라우드 리소스 사용률을 추적하는 데 소홀했음

클라우드 지출 관리가 AI와도 관련 있음. 클라우드 비용 폭등하면 조직은 대규모 AI 프로젝트 시작하는 데 필요한 재정적 자원 확보할 수 없기 때문. 

 

게다가 기업들은 클라우드 사용을 지속적으로 늘리고 있음.

CGI(비즈니스 및 IT 컨설팅 회사) 부사장 겸 클라우드 현대화 실무 리더 마양크 바르가바 曰,

조직들이 디지털 혁신 여정을 계속하며 더 중요한 워크로드와 데이터를 클라우드로 마이그레이션하고 있음 → 자연스레 비용 상승으로 이어짐.

 

하지만 조직이 클라우드 비용을 더 적극적으로 관리할 여지가 있음.

포레스터 리서치 曰,

클라우드 비용 관리 및 최적화(CCMO)시장이 급격히 성장 중. 

 

이 범주의 도구들은 하이브리드 및 멀티클라우드 환경 전반의 모든 클라우드 비용에 대한 가시성 제공, 클라우드 지출 최적화할 기회 파악, 일부 작업을 자동화.

포레스터의 최근 평가에서,

  • 해당 영역의 3대 리더로 부상한 기업
    • IBM(클라우드빌리티 및 터보노빅)
    • 브로드컴(클라우드헬스)
    • 플렉세라
  • 강력한 성과를 보인 업체
    • 하네스(Harness)
    • 모피어스 데이터(Morpheus Data)
    • 클라우드볼트(CloudBolt)
    • 클라우드제로(CloudZero)

CCMO는 재무 및 여타 현업 부서와 연계된, 보다 포괄적인 접근 방식인 핀옵스로 가는 디딤돌로 볼 수 있음.

핀옵스 팀은 클라우드 비용 최적화할 뿐만 아니라 클라우드 지출을 비즈니스 성과와 연결하는 업무를 수행.

핀옵스 분야 공급업체: 앱티오(Apptio), 루시더티(Lucidity), 덴시파이(Densify), 핀아웃(Finout) 등

 

하이퍼스케일러가 지속 가능성 문제 해결에 나섬

엔터프라이즈 IT는 데이터센터 탄소 배출량 줄여야 한다는 압박 받는 중. 

리소스를 클라우드로 전환한다고 해서 단순히 해결될 문제가 아님.

 

GPU 칩은 기존 CPU보다 더 뜨겁게 작동하여 더 많은 냉각이 필요 → 더 많은 전력 수요를 의미

AI가 지속 가능성 노력에 걸림돌이 되는 측면.

 

하이퍼스케일러들은 엔터프라이즈 IT에 비해 좀 더 적극적인 역할 하고 있음. 이들의 비즈니스에 데이터센타가 차지하는 비중이 커서 동기화 수준이 다름. 

+ 최고 경영진의 지원, 기술 전문성, 재정적 자원

+ 특정 물리적 위치에 묶여 있는 대부분의 기업과 달리 전 세계에 지속 가능한 에너지 공급 가능한 지역 모색 가능

 

대형 클라우드 공급업체들은 지속 가능성 목표를 설정함. 

  • 마이크로소프트
    • 2012년부터 탄소 중립 실천해왔으며 2030년까지 탄소 중립 달성할 것으로 예상
    • 지속 가능성 관점에서 클라우드 리소스 추적하고 최적화하는 데 도움되는 도구를 제공 - 애저 탄소 최적화 및 애저 배출량 인사이트
  • AWS
    • 2023년, 소비되는 전력의 100%를 재생 에너지로 충당한다는 목표 달성
    • 2040년까지 탄소 순배출 제로 달성한다는 계획.
    • 지속 가능성 관점에서 클라우드 리소스 추적하고 최적화하는 데 도움되는 도구를 제공 - 고객 탄소 발자국 도구
  • 구글
    • 지속 가능성 관점에서 클라우드 리소스 추적하고 최적화하는 데 도움되는 도구를 제공 - 탄소 발자국 도구


cat.jpg

사진을 다운로드하니 그냥 평범하고 귀여운... 고양이 사진이다

사진을 육안으로 보아서는 플래그를 찾을 수 없을 것 같아서, HxD로 열어 본다.

 

jpg 파일이라 바로 이전 문제인 linefeed.png 파일과는 구조가 확연히 다름.

jpg 파일 구조도 분석해 본다. 

 

<JPG(JPEG) 파일 구조>

  • SOI (Start Of Image)
    • 흔히 말하는 헤더 시그니처
    • FF D8
  • APPn JFIF Marker
    • APP0~APP15까지 올 수 있으며 썸네일 데이터가 들어감 
    • FFE0~FFEF
  • DQT (Define Quantization Tables)
    • 양자화 테이블을 정의하는 데 압축 위해 사용
    • FF DB
  • SOF (Start Of Frame)
    • 이미지 크기(높이, 너비) 정의
    • FFC0~FFC2
  • DHT (Define Huffman Tables)
    • FF C4
  • SOS (Start Of Scan)
    • FF DA
  • Scan Data
  • EOI (End Of Image)
    • 흔히 말하는 푸터 시그니처
    • FF D9

출처 : https://m.blog.naver.com/ginger2009/222040985394

 

[Forensics] 포렌식 관점에서 JPEG 구조 분석

CTF 문제를 풀다 보면 스테가노그래피 문제가 상당하다. 확장자 별로 구조와 파일을 숨길 수 있는 공간...

blog.naver.com

 

 

SOI 값.

 

EOI 값.

원래는 EOI, 즉 푸터 시그니처로 파일 구조가 끝나야 하는데, 푸터 시그니처 이후에도 3줄이나 데이터가 있다.

 

포렌식적 관점에서, 각 구조 사이사이에 데이터를 숨겨도 이미지에 영향을 주지 않기 때문에 원래 이 사이에 데이터를 숨기는 일이 자주 있다고 함.

그래서 EOI 이후에 나온 데이터값도 누군가가 숨긴 데이터일 확률이 높음. 

해당 16진수를 ASCII 코드 값으로 변환하여 데이터를 추출해 본다. 

 

... 이게 아닌가?

이 값 말고 변환 후 값(=HxD의 Decoded text)을 넣어서 다시 변환.

 

플래그 획득 성공!

 


linefeed.png 파일 다운로드받아 열어 보면 이렇게 RGB로 색 따온 것 같은 선 4개가 보인다.

확대해 봐도 플래그를 육안으로 확인할 수 있는 건 아닌 것 같아서,

HxD로 열어본다. 

 

png 파일의 구조를 알아야 풀 수 있는 걸까?

...

 

<PNG 파일 구조>

  • PNG 헤더 시그니처
    • 89 50 4E 47 0D 0A 1A 0A (총 8byte)
  • 청크
    • Length: Chunk Data의 길이
    • Chunk Type: 청크의 타입, 즉 IHDR, IDAT 등
      • IHDR: PNG 파일의 기본 정보를 담고 있음. 언제나 13byte, 시그니처 바로 뒤에 붙음. Width(4bytes), Height(4bytes), Bit Depth(1byte), Color Type(1byte)
      • IDAT: 실제 이미지 데이터가 들어가는 부분. 한 개의 PNG 파일은 여러 개의 IDAT 청크를 가질 수 있음. 
    • Chunk Data: 실제 데이터. 가변길이를 가짐
    • CRC: 순환중복검사의 약자로 데이터에 오류가 있는지 확인하는 것

https://mineeeee.tistory.com/entry/PNG-%ED%8C%8C%EC%9D%BC%EA%B5%AC%EC%A1%B0

 

PNG 파일구조

안녕하세요! 이번에 디지털 포렌식에 입문하게 되어 먼저 PNG 파일을 공부해볼까 합니다! 저는 010Editor과 HxD라는 프로그램을 이용하니 참고하시길 바랍니다! (까는 법은 구글링...) 먼저 제가 가지

mineeeee.tistory.com

 

 

linefeed.png 파일을 다시 확인해 본다.

PNG 헤더 시그니처는 기본값과 동일하다. 

 

바로 다음에 있는 IHDR 청크 값인데, 00 00 01 F0이 Width값, 00 00 01 A0이 Height 값인 듯하다. 

16진수 값을 10진수로 변환해 보면 496*416 크기의 사진인데,

사진 속성에서 확인해 봐도 동일한 값임을 알 수 있다. 

 

여기서 문제 풀이가 막혔는데, 구글링을 통해서 힌트를 얻었다.

일단 문제 지문에서 말하고 있는 "Something is broken."이 문제 파일이 손상되었음을 이야기한다는 것으로 파악하여,

사진 파일이 잘렸음을 의심하여 HxD에서 사진의 너비와 높이값을 높여 수정해 본다. 

너비와 높이를 각각 100씩 높여 위와 같이 수정하였다. 

저장하여 png 파일을 다시 확인했는데

어라... 뭔가 이상하다. 

 

너비값을 너무 과하게 증가시킨 것 같아서, 너비를 조금 줄여 본다.

아래 사진은 너비가 02 F0인 상태. 

좀 전보다는 더 글자의 형상이 보이는 듯함. 

 

최대한 여러 번 수정을 거듭하며 플래그가 잘 보일 때까지 반복하다가 위와 같은 너비값을 설정함.

플래그를 찾아냈다!!

플래그 값으로 보아서는 너비 높이가 500*500이 되는 게 정확한 정답이었던 것 같긴 하다.

어찌 됐든 플래그는 찾았으니 풀이 성공!

해당 도서의 8장_안드로이드 포렌식 셋업과 데이터 사전 추출 기법 (217p-243p) 내용 정리


포렌식 환경 구축

안드로이드 포렌식 환경 구축은 아래 항목들을 포함

  • 새롭거나 포렌식적으로 깨끗한 컴퓨터 환경(다른 데이터가 시스템에서 존재하지 않거나 데이터가 존재하더라도 진행 중인 조사를 오염시키지 않는 환경)에서 시작
  • 기기에 접속할 때 필요한 기본적인 소프트웨어를 설치 → 안드로이드 포렌식 도구와 방법은 윈도우, 리눅스, OS X 플랫폼에서 동작
  • 기기에 대한 권한 얻기. 조사관은 안드로이드 기기에서 데이터를 추출하기 위해 설정에 접근하거나 우회할 수 있어야 함

안드로이드 소프트웨어 개발 킷(SDK)

개발자가 안드로이드에서 동작하는 애플리케이션을 빌드, 테스트, 디버그할 수 있도록 도와주는 역할

애플리케이션을 생성할 수 있는 도구를 제공

안드로이드 기기의 조사 과정에서 큰 도움이 될 수 있는 유용한 문서와 다른 도구를 함께 제공

 

안드로이드 SDK 구성 요소(http://developer.android.com/ 에서 무료로 다운로드 가능)

  •  소프트웨어 라이브러리
  • API
  • 도구
  • 에뮬레이터
  • 기타 참고 자료

포렌식 조사 과정에서 SDK는 안드로이드 기기에 있는 데이터에 연결하고 접근하는 데 도움을 줌

 

안드로이드 SDK 설치 (in 윈도우 7 컴퓨터)

  1. 안드로이드 SDK는 JDK(Java SE Development Kit)에 의존적이기 때문에 JDK 설치되어 있는지 먼저 확인해야 함 ( http://www.oracle.com/technetwork/java/javase/downloads/index.html 에서 다운로드 가능)
  2. http://devloper.android.com/ 에서 최신 안드로이드 SDK 다운로드(SDK 설치 버전을 권장)
  3. 다운로드한 설치 파일을 실행
  4. 설치될 위치는 사용자가 정할 수 있음. Install 버튼 클릭 후 위치 선택하면 필요한 파일들이 해당 폴더에 추출됨
  5. 디렉토리를 열어 설치된 파일 중 SDK Manager.exe 더블클릭하여 업데이트 과정을 시작. 안드로이드 SDK 플랫폼 도구와 출시된 안드로이드 플랫폼 버전 중 반드시 하나를 선택, 라이선스에 동의하고 설치

위 과정을 통해 안드로이드 SDK 설치를 완료

실행 파일 경로에 대한 시스템 환경 변수를 설정할 수 있음

모든 기능 사용 위해서 SDK와 함께 제공되는 과정을 반드시 따라야 함

 

안드로이드 가상 기기

안드로이드 SDK가 플랫폼과 함께 설치되면 에뮬레이터라고 불리기도 하는 안드로이드 가상 기기(AVD, Android Virtual Device)를 생성할 수 있음.

AVD는 보통 개발자들이 새로운 애플리케이션을 생성할 때 사용, 애플리케이션이 기기에서 어떻게 동작하고 실행되는지 이해하는 데 도움을 줌

→ 포렌식 조사 과정에서 발견한 것을 확인하는 데 도움 + 구 버전의 플랫폼에서 동작하는 기기에서 작업을 하면서 같은 플랫폼을 운영하는 에뮬레이터 설계 가능 + 실제 기기에 포렌식 도구 설치하기 전 포렌식 도구가 어떻게 동작하고 기기의 내용을 바꾸는지 확인 가능

 

새로운 AVD 생성 위해 수행하는 과정

1. 명령 프롬프트(cmd.exe)를 열기. 명령행에서 AVD 매니저를 시작하기 위해 SDK가 설치된 곳으로 이동해 다음 명령행에 나와 있는 것과 같이 안드로이드 툴을 avd 옵션과 함께 호출 → AVD 매니저를 자동으로 열어 줌

C:\android-sdk\tools>android avd

안드로이드 가상 기기 매니저

2. AVD 매니저 창에서 New를 클릭해 새로운 가상 기기 생성. 아래 사진처럼 Edit 클릭해 기존 가상 기기의 환경설정 변경 가능

가상 기기 환경설정

3. 아래 정보들을 입력

  • AVD Name: 가상 기기에 ForensicsAVD와 같은 이름 부여 시 사용
  • Device: 화면 크기에 기반해 사용 가능한 기기들 중 하나 선택
  • Target: 기기의 플랫폼 선택 시 사용. SDK 설치 과정에서 선택되고 설치된 버전들만 목록에 표시
  • 내부 저장소 공간, SD 카드의 크기 등 에뮬레이터 커스터마이즈하기 위한 하드웨어 기능 선택 가능

4. 기기가 성공적으로 생성되면 확인 메시지 나타남. AVD 선택하고 Start 클릭해서 실행 옵션 나타나면 옵션 선택해 Launch 클릭

5. 에뮬레이터 실행 (워크스테이션의 CPU와 RAM에 따라 오랜 시간 걸릴 수 있음. 에뮬레이터는 상당량의 시스템 자원을 소모)

안드로이드 에뮬레이터 실행 화면

 

에뮬레이터 사용해 이메일 계정 설정, 애플리케이션 설치, 인터넷 검색, 문자 메시지 전송 등 작업 가능

에뮬레이터 작업 통해 생성된 데이터는 홈 디렉토리의 .android 폴더에 저장됨

 

디렉토리에 생성되는 파일 중 중요 폴더

  • cache.img: /cache 파티션의 디스크 이미지
  • sdcard.img: SD 카드 파티션의 디스크 이미지
  • Userdata-qemu.img: /data 파티션의 디스크 이미지

 

안드로이드 기기를 워크스테이션에 연결

오픈소스 도구를 사용한 안드로이드 기기의 포렌식 수집을 위해 기기를 포렌식 워크스테이션에 연결해야 함.

해당 워크스테이션은 포렌식적으로 깨끗해야 하며 포렌식 용도 외의 다른 개인적 용도로는 사용되지 않아야 됨을 의미.

기기가 컴퓨터에 연결되어 있을 때 기기에 변경사항 생길 수 있음을 명심.

 

기기를 워크스테이션에 연결하기 위한 과정

  1. 기기 케이블 확인
    • 안드로이드 기기의 물리적 USB 인터페이스는 기기를 컴퓨터에 연결시켜 여러 유형의 데이터를 공유할 수 있게 함
    • USB 인터페이스는 제조사와 기기에 따라 다를 수 있어 안드로이드 기기 조사 시에는 어떤 케이블이 필요한 지 알아내는 것이 첫 단계.
  2. 기기 드라이버 설치
    • 기기 인식을 위해 컴퓨터에 특정 드라이버 설치해야 할 수도 있음
    • 제조사에 의해 안드로이드가 수정되고 커스터마이즈되기 때문에 모든 안드로이드 기기에 대해 동작하는 일반 드라이버는 존재하지 않음. 장치에 따라 설치해야 할 특정 장치 드라이버를 아는 것이 중요(제조사의 웹사이트에서 찾을 수 있음)

 

연결된 기기에 접근

USB 케이블을 사용해 안드로이드 기기를 컴퓨터에 연결

일부 구형 안드로이드 기기에서는 폰에서 USB 저장소 옵션 켜지 않으면 접근 못할 수도 있음

일부 안드로이드 폰(특히 HTC폰)은 USB 케이블로 연결되었을 때 하나 이상의 기능 보여줄 수도 있음

→ Ex) 아래 스크린샷은 HTC 기기의 모습, 연결됐을 시 네 가지 타입 선택 가능. 기본 옵션은 Charge only이지만 Disk drive 옵션 선택 시 기기가 디스크 드라이브로 마운트되고 기기의 SD 카드에 접근 가능해짐

HTC 모바일 USB 옵션

 

안드로이드 디버그 브릿지 (adb, Android Debug Bridge)

adb는 명령행 도구로 안드로이드 기기와 통신하고 기기를 제어할 수 있게 함. 

'<sdk>/platform-tools/'에서 사용 가능

USB 디버깅 옵션에 대한 이해가 우선되어야 함

  • USB 디버깅 옵션
    • 안드로이드 기기와 안드로이드 SDK가 설치된 워크스테이션 사이에 통신 가능하게 해 주는 것이 주 기능
    • 삼성 폰에서는 '설정>개발자 옵션'에서 해당 옵션에 접근 가능
    • USB 디버깅 옵션이 선택되면 기기는 adb 데몬(adbd)를 백그라운드로 실행하고 USB 연결을 지속적으로 확인
    • 데몬은 비특권 셸 유저 계정으로 실행되기 때문에 전체 데이터를 제공하지 않지만 루팅된 폰에서는 adbd가 루트 계정으로 실행되며 모든 데이터에 대한 접근 제공함

삼성 모바일 폰에서의 USB 디버깅 옵션

 

안드로이드 SDK가 설치된 워크스테이션에서 adbd는 백그라운드 프로세스로 동작

같은 워크스테이션 셸에서 adb 명령어를 사용해 클라이언트 프로그램 호출 가능

adb 클라이언트가 실행될 때, adb는 adb 데몬이 이미 동작 중인지 확인하고 만약 동작 중이지 않다면 adb 데몬을 시작하기 위한 새로운 프로세스를 초기화. adb 클라이언트 프로그램은 로컬 adbd와 5037 포트로 통신

 

adb를 사용하여 기기에 접근

환경설정 완료되고 안드로이드 기기가 USB 디버깅 모드로 들어가면 올바른 USB 케이블 사용해 안드로이드 기기를 포렌식 워크스테이션에 연결하고 adb를 시작

 

연결된 기기 탐지

  • 위 명령어는 포렌식 워크스테이션에 연결된 모든 기기의 목록을 보여줌
  • 명령어 실행 시점에 에뮬레이터 동작 중이라면 에뮬레이터 목록도 나타남
  • 필요한 드라이버 설치되지 않았다면 위 명령어는 아무런 결과도 보여주지 않음

로컬 adb 서버 종료

  • 위 명령어는 로컬 adb 서버를 종료시킴
  • 로컬 adb 서비스를 종료한 이후, adb devices 명령어를 실행해서 서버가 시작되는지 확인

adb 셸에 접속

  • 위 명령어는 포렌식 조사관이 안드로이드 기기의 셸에 접근하여 기기와 통신할 수 있게 함
  • adb 셸에 접근하여 기본 ls 명령어를 사용해 현재 디렉토리의 내용 보여줌

 

안드로이드 기기 제어

의도하지 않은 행동이 데이터 변경 등 원치 않은 결과 초래할 수 있기 때문에 주의해야 함.

분석할 안드로이드 기기에 최초 접속 시 기기가 계속 활성화(잠금 해제) 상태인지 확인

→ 활성화 상태라면 다음 과정을 수행

  • USB 디버깅 활성화
    • 이 옵션이 활성화되면 adb 연결을 통해 기기에 대한 더 많은 접근을 제공
    • 기기에서 데이터 추출 시 큰 중요성을 가짐
    • USB 디버깅 활성화하는 옵션의 위치는 기기마다 다를 수 있으나 대부분 '설정>개발자 옵션'에 위치
    • 안드로이드 기기에서 물리적 수집 위한 대부분의 방법은 USB 디버깅 활성화를 요구 
  • "켜진 상태로 유지(Stay awake)" 설정 활성화
    • 이 옵션 선택되고 기기가 충전기에 연결되어 있으면 기기는 절대 잠기지 않음
  • 화면 타임아웃 늘이기
    • 기기의 잠금이 풀렸을 때 기기가 활성화되는 시간을 늘이는 옵션
    • 갤럭시 S3 폰 기준, '설정>디스플레이>화면 자동 꺼짐'에 위치

위와 별개로 네트워크와 분리시켜 원격 삭제 옵션이 기기에서 동작하지 않도록 해야 함. 

안드로이드 기기 매니저(Android Device Managers)

  • 폰을 원격으로 삭제하거나 잠그는 것을 가능하게 함.
  • 안드로이드 디바이스의 원격 삭제 기능 활성화되어 있지 않으면 기기는 안드로이드 기기 매니저를 통해서만 잠길 수 있음

또한 다양한 모바일 기기 관리(MDM, Mobile Device Management) 소프트웨어가 시장에 나와 있어 이들을 통해 안드로이드 기기 원격으로 잠그거나 삭제 가능

네트워크와의 분리를 위해 기기를 비행기 모드로 두가나 와이파이를 비활성화시키는 방법도 존재

폰에서 SIM 카드 제거하는 것은 선택적이지만 기기를 와이파이/셀룰러 네트워크 통해 통신하는 것을 효과적으로 방지하진 못함.


화면 잠금 우회 기법

사용자 인식 증가&기능의 편리함 때문에 안드로이드 기기 잠금을 위한 패스코드 옵션 사용이 기하급수적으로 증가

→ 포렌식 조사에서 기기의 스크린 잠금 우회하는 것이 중요해짐

 

현재 안드로이드에서 제공하는 화면 잠금 방법

  • 패턴 잠금
    • 사용자는 폰에 패턴이나 디자인을 설정하고 기기를 잠금 해제하기 위해 같은 패턴 그려야 함
  • PIN 코드
    • 가장 일반적인 잠금 옵션
    • 네 자리 숫자로 기기 잠금해제하기 위해 입력됨
  • 패스코드(알파벳+숫자)
    • 알파벳과 숫자로 이루어진 패스코드
    • 네 자리 숫자인 PIN과 달리 숫자 이외의 문자도 포함

 

adb 사용한 스크린 잠금 우회

안드로이드 기기에서 USB 디버깅 옵션 활성화되어 있다면 USB 사용하여 adb 기기를 연결하는 것이 좋음

조사관은 기기를 포렌식 워크스테이션에 연결하여 adb devices 명령 내려야 함

해당 명령 시 기기가 나타난다 → USB 디버깅이 활성화되어 있다

안드로이드 기기 잠겨있을 시 스크린 잠금 우회 시도를 반드시 해야 함

 

스크린 잠금 우회를 위한 방법들:

 

gesture.key 파일 삭제

1. 기기를 포렌식 궈크스테이션에 USB 케이블 사용하여 연결

2. 명령 프롬프트를 열어 아래 명령을 실행

3. 기기 재부팅. 여전히 패턴 락 나타난다면 랜덤한 패턴을 그려 기기가 문제없이 잠금 해제되는지 관찰

 

해당 방법은 기기가 루팅된 경우 동작되며, 루팅되지 않은 기기에서는 동작하지 않을 수 있음

올바른 승인 없이 안드로이드 기기 루팅하는 건 기기에 변화 줄 수 있기 때문에 시도 X

 

settings.db 파일 업데이트

1. USB 케이블 사용해 기기를 포렌식 워크스테이션에 연결

2. 명령 프롬프트 열어 다음 명령을 실행

3. 종료하고 기기를 재부팅

4. 안드로이드 기기가 잠금 해제되었을 것. 만약 그렇지 않으면 gesture.key 파일 삭제

 

수정된 복구 모드와 adb 연결 확인

안드로이드에서 복구는 복구 콘솔이 존재하는 전용 파티션을 의미함

복구의 중요한 두 가지 기능: 데이터 삭제 & 업데이트 설치

보통은 볼륨 버튼+전원 버튼 등 다른 키들을 함께 눌러 복구 모드에 진입

복구 모드에 진입하면 기기를 워크스테이션에 연결하고 adb 접속을 시도. 만약 기기의 복구 모드 수정되지 않았다면 adb 접속 불가

 

새로운 복구 파티션 플래싱

Fastboot 유틸리티

  • 수정된 이미지로 안드로이드 기기의 복구 파티션을 플래싱할 수 있음
  • SDK 패키지에 포함된 진단 프로토콜로 컴퓨터와의 USB 연결을 통해 플래시 파일 시스템을 수정하는 데 사용

기본적인 하드웨어 초기화 과정만 수행되는 부트로더 모드로 기기를 시작

기기에 프로토콜 활성화되면 USB 케이블을 통해 전송되는 특정 명령어(컴퓨터에 저장된 바이너리 이미지로 파티션을 플래싱 또는 다시 쓰는 것 등) 받아들임

복구 모드 플래시되면, 기기를 복구 모드로 부팅시키고 /data와 /system 파티션을 마운트하고 adb 사용해 gesture.key 파일을 삭제

 

이후 폰 재부팅하면 화면 잠금 우회 가능

 

스머지(Smudge) 공격

터치스크린 모바일 기기에서 패스워드 추론 위해 사용될 수 있음

사용자의 손가락이 남긴 자국을 알아내는 방식

조사 과정에서 기기를 처음 만질 때 화면을 건드리지 않도록 주의

 

기본 지메일 계정 사용

기기에 설정된 기본 Gmail 주소의 아이디와 패스워드 알고 있다면 기기에서 PIN, 패스워드, 스와이프 변경 가능

일정 횟수의 잠금 해제 실패하면 안드로이드는 패턴 분실 or 패스워드 분실이라는 옵션 제공

나타난 링크를 클릭하고 Gmail 아이디와 패스워드 사용하여 로그인하면 새로운 패턴 락이나 패스코드 설정 가능

 

다른 기법들

  • 칩 오프(chip-off)
    • 회로에서 메모리 칩을 분리하여 읽는 시도
    • 기기로부터 칩 제거되면 기기를 원상복구시키는 것이 어렵기 때문에 더 파괴적인 방법
    • 오픈소스나 상용 도구로부터 데이터 추출하지 못하거나 수리 불가능할 정도로 기기가 손상되었을 때만 고려되어야 함
  • JTAG
    • JTAG Test Access Ports를 찾아 커넥터를 JTAG 포트에 연결시켜 기기 메모리로부터 데이터 읽음
    • JTAG 포트는 조사관이 칩을 제거하지 않고 데이터의 물리적 이미지를 메모리 칩으로부터 얻을 수 있게 도와줌

셀레브라이트(Cellebrite)와 같은 상용 도구들은 칩 오프와 JTAG 수집에서 얻은 .bin 파일을 받아들여 잠금 코드를 해제할 수 있음


루트 권한 얻기

안드로이드 폰을 루팅하는 것은 일반적이며 포렌식 조사 과정에서 루팅된 폰을 다룰 수 있음

가능한 환경에서 조사관은 포렌식 조사를 위한 데이터 수집을 위해 기기를 루팅해야 할 수 있음

 

루팅의 의미

루트(root)

  • 유닉스 기반의 운영체제에서 기본 관리자 계정
  • 리눅스에서는 루트 사용자가 모든 시스템 서비스를 시작/중지하고 모든 파일을 수정/삭제하며, 다른 사용자의 권한 변경하는 등의 작업 수행 가능 
  • 그러나 안드로이드 폰에서는 기본적으로 루트 사용자로 로그인 불가함 

안드로이드 폰을 루팅하는 것은 일반적으로 '허용되지 않은 행위를 기기 상에 수행할 수 있는 권한 획득'을 의미. 

제조사들은 일반 사용자들에게 기기가 특정한 방식으로 동작하길 원하는데 기기 루팅하면 시스템을 취약점에 노출시킬 수 있고, 사용자에게 슈퍼유저 기능 부여되면 더 이상 보증받지 못함.

 

안드로이드에서는 각 애플리케이션이 별개의 사용자로 여겨져서 UID가 부여됨

→ 애플리케이션은 제한된 자원에 접근할 수 있고, 애플리케이션 격리 개념이 적용됨

근본적으로 안드로이드 기기 루팅은 슈퍼유저 기능 허용하고 안드로이드 기기에 대한 열린 접근(Open access)을 제공

 

안드로이드 기기 루팅

모든 기기에 대한 루팅은 기기 펌웨어의 보안 허점을 공격하여 su(superuser) 바이너리를 현재 프로세스의 경로(/system/xbin/su)에 복사하고 chmod 명령어를 사용해 실행 권한 부여하는 것으로 이뤄짐

 

설명을 위한 가정:

안드로이드 기기가 세 개~네 개의 파티션으로 이뤄져있고 안드로이드와 전적으로 연관되지 않은 프로그램을 실행

위와 같은 상황에서,

  • 부트로더
    • 첫 번째 파일 시스템에 존재하며 폰이 켜질 때 첫 번째로 실행되는 프로그램
    • 다른 파티션 부팅시키고 ROM이라고 보통 여겨지는 안드로이드 파티션 읽어들임
    • 복구 파티션 등 다른 파티션으로 부팅하는 옵션 제공
  • 복구 파티션
    • 폰에 업그레이드 설치하는 것을 다루며 업그레이드는 안드로이드 ROM 파티션에 직접 기록됨
    • 기기의 공식 업데이트 설치할 때 사용됨
    • 이 제약 우회하는 것을 통해 모든 unlock된 안드로이드 ROM을 설치/플래시할 수 있음
    • 수정된 복구 프로그램은 루팅 과정 쉽게 만들어주며 일반 복구 모드에서는 볼 수 없는 다양한 옵션 제공
    • 안드로이드 세계에서 가장 많이 사용되는 복구 프로그램은 Clockwork recovery며 ClockworkMod로도 불림
    • 대부분의 루팅 방법은 수정된 복구 프로그램을 복구 파티션에 플래시하는 것으로 시작 이후 업데이트 명령 수행하여 기기를 루팅 → 그러나 대부분 모델에 대해 한 번의 클릭으로 폰을 루팅할 수 있는 소프트웨어가 존재해서 수동으로 수행할 필요 없음

일반 안드로이드 시스템 복구 모드
수정된 복구 모드

루팅의 장단점

  • 장점
    • 기기에 존재하는 소프트웨어를 가장 깊숙한 수준까지 수정할 수 있음 (ex. 기기 CPU를 오버/언더클락 가능)
    • 통신사, 제조사 등이 걸어놓은 제약 우회 가능
    • 새롭게 커스터마이즈된 ROM 다운로드해 설치 가능
  • 단점
    • 루팅 과정에서 발생한 오류로 고칠 수 없는 손상을 폰에 입혀 기기를 쓸모없는 벽돌로 만들 수 있기 때문에 루팅 시에는 극도의 주의 필요
    • 루팅으로 인해 기기에 대한 보증 받지 못할 수 있음
    • 멀웨어와 다른 공격에 대한 노출 높아짐, 안드로이드 시스템에 대한 전체 권한 가진 멀웨어는 큰 피해 만들어낼 수 있음

기기 루팅되면 Superuser 앱과 같은 애플리케이션이 루트 권한 제공하거나 거부 가능.

Superuser 앱은 기기에 슈퍼유저 권한 부여하고 관리하는 데 도움을 줌

 

루트 권한: adb 셸

일반적인 안드로이드 폰은 특정 파일과 디렉토리에 대한 접근 허용하지 않음

 

루팅되지 않은 안드로이드 기기에서 /data/data 폴더 접근 시 아래와 같은 메시지 나옴

 

루팅된 폰에서 adb 셸 실행하려면 아래와 같은 커맨드 사용해야 함

 

폰을 루팅하면 기존에 접근하지 못했던 폴더와 데이터에 접근할 수 있게 됨.

#은 슈퍼유저나 루트 나타내고, $는 일반 사용자를 나타냄


easy.png 열어 보면,

이렇게 흐릿한 사진 파일이다. 화면 밝기를 키워 보니 큐알코드의 형태가 보이는 듯하다. 

 

윈도우즈에서 제공하는 사진 편집기로 색감과 밝기를 조절해 대략 이정도 수준까지는 만들 수 있게 되었다.

육안으로 식별 가능한 QR코드이지만 휴대폰 카메라로 비춰 봤을 때 인식이 되진 않는다. 

 

휴대폰으로 옮겨 조금 더 정밀한 밝기 보정을 해 본다.

선명도를 집중적으로 높여 꽤 선명한 QR코드로 만드는 것에 성공했다.

 

휴대폰 갤러리 어플에서 QR코드 인식 버튼을 누르자, 

위 사진과 같이 H4CGM{not_easy}라는 플래그 형태를 웹에 검색하는 링크가 표시된다.

'웹 검색' 버튼을 눌러 보면 바로 사파리로 연결돼 H4CGM{not_easy}를 검색창에 검색하게 된다.

추가적으로 찾아봐야 하는 건 없고, 'H4CGM{not_easy}' 자체가 이 문제의 플래그라는 것을 알 수 있다.

 

풀이 성공

문제 설명


png 파일 다운로드해 보면

대충 가려진 플래그 화면.

사진 밝기 같은 거 조절하면 금방 풀 수 있어 보인다...

휴대폰으로 사진 옮기기 귀찮아서... 윈도우즈 기본 사진 앱에서 밝기 명암 조절해 봤는데

어둡게 칠해진 부분은 희미하게 보인다. 

 

보이는 것만으로 최대한 유추해 보면 'Flag is H4CGM{h1dd2n_4nd_5S3k}' 처럼 보인다.

Flag 창에 입력했으나 틀린 답이라는 창이 표시된다. 

 

아무래도 너무 무의미한 문자열이었던 듯 싶어 다시 위 내용을 바탕으로 말이 되게끔 추측했더니

'H4CGM{h1dd3n_4nd_533k}'는 어떨까

 

위 플래그 입력해 보니 풀이에 성공했다. 

+ Recent posts