F-INSIGHT에서 발표했던 발표자료입니다.



Deep in the artifacts #1.pdf


  1. 오정훈 2017.03.13 19:28

    좋은 자료 감사합니다~^^

  2. nill 2017.04.05 17:20

    좋은자료감사합니다
    uuid가 레지스트리에 존재하나요?
    아무리 찾아도 없네요;;

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2017.04.07 17:58 신고

      UUID 형태의 값들은 많이 존재하지만, UUID라고 명확하게 명시되어 있는 단일 값은 존재하지 않습니다.

- 파이썬으로 파일시스템 깊이 있게 분석하기 -1-(http://maj3sty.tistory.com/1115)


이전 글에서는 이미지(Raw 포맷)에 접근하여 볼륨 정보 등을 얻어내는 작업을 해보았다. 이번에는 실제 파이썬 스크립트가 실행되는 로컬 환경 볼륨에 접근하는 방법을 살펴보자.


이미지 파일은 파일이기 때문에 파일 오픈 핸들을 pytsk3 모듈에 입력해 주면 됐지만 로컬 환경은 장치 핸들을 pytsk3 모듈에 입력을 해주어야 한다. 장치와 파일의 차이는 크지만, 코드는 이전 코드와 많이 다르지 않다. 아래 코드는 글쓴이의 가상환경에서 작성한 파이썬 스크립트와 실행 결과이다.




이번에는 NTFS 파일시스템 2개 존재하는 것을 확인할 수 있다. 로컬 환경과 이미지 파일은 접근하는 대상만 다를 뿐 다루는 방법은 동일하다는 것을 알 수 있다. 위 소스코드는 아래 첨부해 두었으니 한번 확인해 보기 바란다.


Day2.zip


디지털 포렌식에서는 기본으로 다뤄야 할 부분이 파일시스템이다. 휘발성 데이터 뿐만 아니라 비휘발성 데이터까지 모두 파일시스템에 저장되기 때문에 실제 업무에서나 챌린지 문제 풀이에서나 파일시스템 분석은 중요하다고 볼 수 있다.


그래서, 시간이 되는대로 파이썬으로 파일시스템을 다뤄보는 글을 쓸 예정이다. 언어는 사람들이 쉽게 가장 많이 쓰는 파이썬(파이썬 언어 자체의 설명은 생략한다.)으로 하여 파일시스템 이미지 포맷인 E01과 Raw 포맷을 대상으로 여러가지 분석을 할 수 있는 코드를 작성해보고 해당 소스코드는 제공할 생각이다.


일단 먼저, 파이썬 모듈이 필요하다. 우리가 주로 사용할 모듈은 파일시스템을 분석해 주는 'pytsk' 모듈이다. 각 모듈에 대한 설명은 다음과 같다.


 - pytsk : pytsk 모듈은 SluethKit과 Autopsy의 파이썬 버전이라고 생각하면 된다. 여러 운영체제의 파일시스템 분석을 지원하는 아주 유용한 툴이다. 분석 기능이 많아 사용법은 조금 까다롭다. 해당 모듈의 사용법 또한 소스코드를 작성하며 알아보도록 하자.


pytsk3-4.1.3-20140506.win32-py2.7.msi


각 모듈의 설치는 쉬우므로 설명을 생략하도록 하겠다.



소스코드 작성 환경은 다음과 같다.

 - 운영체제 : Windows 7 / 8 32/64bit

 - 파이썬 버전 : Python 2.7 32bit

 - 에디터 : PyCharm 4.x


[이미지 파일 접근 해보기]

이미지 파일은 이미지 대상 크기와 이미지 파일 포맷에 따라 처리하는 방법이 다르다. 일단 처음이니 만큼 용량이 작은 Raw 포맷을 대상으로 처리 방법을 알아보자. 모듈이 설치 되었다면 아래와 같이 'pytsk3' 모듈을 import 하여 사용하면 된다.



볼륨 파싱이 완료되면 볼륨 정보를 가지고 있는 클래스 개체 하나를 반환하며, 각 클래스 개체는 Property 함수로 필요한 데이터를 반환하도록 되어 있다. 소스코드에 나온 정보 말고도 다양한 정보가 있으니 각자 확인해보도록 하자. 스크립트를 실행하면 결과는 다음과 같다.




출력을 보면 4개의 결과가 나왔지만, "Primary Table"과 "Unallocated" 항목을 제외하면 "NTFS" 파일시스템 하나만 있는 것을 확인할 수 있다. 그러므로 해당 파일시스템을 타겟팅하여 분석을 진행해 나가면 된다.


해당 소스코드와 프로젝트는 아래에 첨부하여 두었다.


Day 1.zip


 윈도우 운영체제에서 실행 파일의 흔적을 알 수 있는 대표적인 흔적으로 프리패치(Prefetch) 파일이 있다. 프리패치 파일을 분석하면 프로그램의 실행 날짜, 실행 횟수, 프로그램 경로 등을 알 수 있는데, 프리패치는 메모리의 한계와 페이징으로 프리패칭 기능의 원래 목적 상실, 운영체제에서 프리패치 파일을 관리하는 정책 상 최대 128개의 프리패치 파일 생성이라는 문제로 인해 빠른 대응과 운이 따라주지 않는다면 프리패치를 통한 실행 프로그램의 정보를 획득하기는 쉽지 않다. 프리패치 파일을 카빙하면 이 부분을 어느정도 해소할 수 있지만 복구라는 것은 상황에 따라 결과물이 다르기 때문에 이를 해결책으로 생각해서는 안된다.


 또, 특별한 권한 없이 프리패치 파일에 접근 할 수 있어 많은 악성코드 또는 도구에서 안티 포렌식 대상으로 삼기도 해 요즘은 사실 프리패치에서 많은 정보를 얻진 못한다. 


 이러한 이유들로 예전에는 분석에 초점을 두지 않았던 슈퍼패치가 다시 분석 대상에 오르기 시작하였다. 슈퍼패치는 프리패치와 함께 윈도우 운영체제에서 사용하는 메모리 관리 기술로, 사용자의 프로그램 사용 패턴(얼마나 자주, 언제, 얼마 동안)을 디비 형태의 파일에 기록하고 추적하는 기술이다. 슈퍼패치의 저장 경로는 다음의 경로로 프리패치와 동일하다.


 - %SystemRoot%\Prefetch


 슈퍼패치 기능은 윈도우 운영체제가 설치된 컴퓨터 환경에 따라 기능이 Off 되어 있을 수 있다. 대표적으로 SSD를 사용하는 컴퓨터에 설치된 윈도우 운영체제라면 슈퍼패치와 프리패치 기능은 기본으로 꺼져 있다. 시스템의 성능을 빠르게 하기 위하여 생겨난 메모리 관리 기술이나 SSD는 저장매체 자체가 메모리이기 때문에 그 속도가 HDD와는 다르게 빨라 메모리 관리 기술이 필요 없는 것이다. 오히려 해당 기술로 인해 시스템의 불필요한 퍼포먼스만 추가하게 되는 셈이다. 슈퍼패치는 다음과 같이 슈퍼패치 서비스가 시작되어야 운영체제에서 슈퍼패치 기능을 실행한다.


[그림 1 - 슈퍼패치 서비스]


 또 레지스트리 설정으로 슈퍼패치 기능을 활성화 시킬 수 있다. 이는 인터넷에 자료가 많으니 참고하기 바란다.


 슈퍼패치일 파일은 저장 경로에 접두어 "Ag"로 시작하는 파일이다. 해당 파일의 구조는 다음 문서를 참고하기 바란다.


 - 슈퍼패치 파일 구조


슈퍼패치 파일에서 포렌식 관점의 필요한 데이터는 정리하면 다음과 같다.


1. 실행 프로그램의 이름

2. 실행 횟수

3. Foreground 실행 횟수

4. 실행 프로그램이 메모리에 로드한 파일

 - dll 파일

 - 압축 파일

 - 문서 파일

 - 데이터베이스 파일

 - 이 외의 파일 및 폴더 등

5. 실행 프로그램의 전체 경로

6. 실행 프로그램의 실행 시간대

 - 평일 오전 6시 ~ 오후 12시 (Weekday 6AM to 12PM)

 - 평일 오후 12시 ~ 오후 6시 (Weekday 12PM to 6PM)

 - 평일 오후 6시 ~ 오전 12시 (Weekday 6PM to 12AM)

 - 평일 전체 (Weekday Global)

 - 주말 오전 6시 ~ 오후 12시 (Weekend 6AM to 12PM)

 - 주말 오후 12시 ~ 오후 6시 (Weekend 12PM to 6PM)

 - 주말 오후 6시 ~ 오전 12시 (Weekend 6PM to 12AM)

 - 주말 전체 (Weekend Global)

7. 타임스탬프


슈퍼패치를 분석할 수 있는 도구는 Superfetchlist 도구와 CrowdResponse 도구가 있다. 입맛에 맞는 도구를 사용하면 된다. 다만, Superfetchlist 도구의 경우 CLI 기반과 GUI 기반의 도구로 나뉘어져 있고 파싱되어 출력된 정보가 CrowdResponse 도구에 비해 많지 않아 필요로 하는 정보를 얻지 못할 수 있다. 다음은 두 도구의 실행 화면이다.


[그림 2 - Superfetchlist 도구 실행 화면 (출처: http://www.tmurgent.com/)


[그림 3 - CrowdResponse 도구 HTML 보고서 (출처: http://digital-forensics.sans.org/)]


[그림 4 - CrowdResponse 도구 csv 보고서 (출처: http://digital-forensics.sans.org/)]


프리패치보다 정보가 많고 데이터베이스 구조이기 때문에 프리패치처럼 정보가 쉽게 날라가지 않아 프리패치보다 정보를 얻을 확률이 더 높고 프리패치 만큼의 정보를 얻을 수 있다. 하지만 환경에 따라 기본 설정이 Off 되어 있는 만큼 기존에 설정을 해줄 필요가 있다.



  1. 2015.02.17 13:57

    비밀댓글입니다

참고문서 : http://digital-forensics.sans.org/blog/2010/11/02/digital-forensics-time-stamp-manipulation/


위 글에서 나온 시간 변화 별 행위 표를 이용하여 간단하게 체크할 수 있는 엑셀 시트를 만들어 보았다.


사용 법은 엑셀 시트 오른쪽 상단에 적어두었다.





시간변화 매크로.xlsx


  1. BlogIcon 해피용 2014.12.24 06:34

    안녕하세요 블로그통해서 왔습니다.
    한수 배우도록 하겠습니다.

  2. 하일리거 2015.04.28 14:37

    엑셀 수식에 의한 결과가 실제 행위와 약간 틀리게 나오는거 같은데요,
    같은 하드디스크 내에서 C드라이브(파티션)와 D드라이브(파티션)를 나눠서 쓰고 있다고 치고,

    ① C드라이브에서 D드라이브로 파일 이동
    ② C드라이브에서 D드라이브로 파일 복사후 원래의 C드라이브 파일 삭제

    ①,②의 결과는 똑같지만 과정은 살짝 다릅니다.
    위 두 가지 경우에서 타임스탬프 관련 엑셀 수식도 다르게 나오는지요?

    결국은 볼륨간 이동이긴 한데, 로컬에서 삭제 행위가 있고 없고의 차이이거든요..
    해석하기에 따라 행위 양상이 다르게 평가될 수 있는 부분이 있어서 질문 드립니다.

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2015.04.30 10:20 신고

      질문 감사합니다.

      두 과정을 엑셀 파일에서는 판별해주지 않습니다. 단지 시간을 비교하여 판단을 하도록 조건식을 만들어두었습니다.

      질문주신 과정들은 결과가 동일하므로 복사된 파일의 시간만으로 두 과정을 판별해내기는 어렵습니다. 다만, 원본 파일의 삭제 시간과 복사된 파일의 시간을 이용해 연관성 판단을 했을 때 두 과정을 판단할 수 있습니다.

      또한 엑셀 파일에 정의된 행위가 이뤄졌을 때 매번 동일하게 시간이 변화하는 것은 아니면 여러 행위가 겹치게 되면 해당 파일에 일어난 행위는 파일의 시간 값만으로 위 엑셀에서 모든 행위를 판단할 수 없습니다.

      이 점 참고하여 엑셀 파일을 사용하시기 바랍니다.

      감사합니다.

+ Recent posts