자동화 하려다가 멘탈 나감 + 귀찮

제 1장 삽질을 부름

장소 : 강의장

– M : 형 아티팩트 수집하는 과정들 너무 귀찮지 않아요?

– D : 응 귀차나(잠와서 정신없음…)

– M : E01 이나 DD 파일에서 바로 아티팩트들 수집해서 파일로 떨꾸고, 타임라인 구성하는거 까지 자동화 하면 참 편할꺼 같은데…(한참 강의가 타임라인 관련 강의였음)

– D : 그냥 E01은 EWFExport로 DD로 빼고, DD에서 바로 VBR이랑 MFT 해석해서 특정 파일만 뽑고 Log2timeline 연결만 시키면 끝인데… 아티팩트 리스트는 그냥 텍스트 파일로 하나 저장하고…

– M :  궈궈!

 

제 2장 삽질의 시작

1. 이미지 파일에서 VBR을 읽어서 $MFT 시작 주소를 확인(일단은 마운트 된 볼륨의 핸들로 받아옴)

2. $MFT 해석해서 Record Number, 파일의 전체 경로 파악. (AnalyzeMFT.py 사용)

3. 아티팩트 리스트 파일과 비교해서 전체 경로가 같으면 배열1에 해당 Record Number랑 전체 경로를 함께 넣어줌

  • 폴더 하위 파일을 모두 수집해야 하는 경우와 단일 파일만 수집해야할 경우 확인

4. MFT Entry를 해석하며 Record Number가 배열1에 존재하는지 여부 확인 후 데이터 추출

5. Data 속성 값 해석을 하여 Non-Resident 인지, Resident 속성인지 파악

  • Non-Resident 속성 : Data Runs 해석 함수 호출
  • Resident 속성 : Resident Data 만 추출

6. 파일 저장 시 각 경로에 따라 디렉토리 생성 후 하위에 저장

 

이렇게 차근 차근 잘 하고 있었는데 …문제점 들이 생겨났다.

1. $MFT 해석 시 AnalyzeMFT.py 를 사용했는데, 결과로 보여주는 파일명이 가끔 올바르게 표기 되지 않을 때 파일로 저장이 되지 않아서 걍 Record Number 로 저장.( 나중에 고쳐보자는 식으로)

2. 가끔 전체 경로에 엔터가 들어가서 엑셀 파일로 보더라도 엄청 길이가 긴 행을 볼 수 있다. 이것도 걍 엔터 뺌

3. Data Runs 해석 할 때 예를 들어 41 01 22 33 44 55 가 있으면, 4가 Offset을 나타내고 1이 Size를 나타냄. 그리고 1은 01  부분이고, 4는 22 33 44 55 부분이다.(반대로 알고있었음)

4. Data Runs 해석 시 끝 해석이 이상한 유형들이 존재해서 예외 처리해서 고침. (4가지 유형)

5. 경로에 %UserProfile%가 포함될 경우가 있었는데, 이건 걍 $MFT 해석 시 가장 처음 생성하는 /User/ 하위의 폴더 명을 지정( 99퍼는 맞음. 윈도우 설치 시 가장 먼저 생성하기 때문에)

6. Fixup Array 고려 안해서 Data Runs 해석 전에 Fixup Array 수정하도록 고침

7. 아티팩트 중 레지스트리의 경우 NTUSER.DAT이 여러개 존재해서 초반에는 그냥 하나만 저장되서, 따로 파일 명에 폴더명을 함께 붙여 예외처리

8. handle.read(size) 시 Size 크기가 크면 Python 2.7 에서는 처리를 못하고 에러를 내뱉는다. 그래서 반틈씩 가져와서 합침

9.  처음에는 해당 디스크 이미지의 $MFT를 기준으로 잡고 1024 바이트 씩 증가하면서 읽었는데, $MFT도 조각나서 저장될 수 있다는 것을 깜빡했다. 그래서 맨 처음 Record Number와 전체경로 해석 시 추출한 $MFT를 읽는 방식으로 변경

10. 어느정도 추출이 완료 되어서 검사 하는 도중, Setupapi.dev.log 가 보이질 않는다. 그래서 직접 따라가서 확인해 보니 Attribute List를 고려하지 않았다. 

 

제 3장. 삽질의 끝

오. 이제 이것만 이렇게 저렇게 해서 만들면 끝이겠다.

근데 내가 이걸 왜 하고 있는거지? 그냥 클릭 몇번만 더 하면 되는건데…

걍 공부한셈 치고 접자. 여기까지 만든거라도 올리고…

 

제 4장. 도구 사용법

EA 압축 해제 후 a_list.txt 파일에서 수집하고자 하는 아티팩트 경로 작성(환경변수는 %UserProfile%만 적용 가능)

a_list

[그림 1] a_list.txt 파일

 

경로 작성을 하면 아래와 같이 파이썬 코드에도 간단히 추가를 해야한다.

checkdir

[그림 2] 디렉토리 생성관련 함수

elif  구문을 복사 후 붙이고, 녹색으로 설정된 '$Recycle'과 '\\RecycleBin' 만 아티팩트가 가지는 고유한 문자열과 생성할 디렉토리명으로 바꾸면 끝

 

그리고, cmd 창에서 (관리자 권한)

python ea.py f:

위와 같이 인자로 마운트된 볼륨을 적으면 된다. 그럼 아래와 같이 Acquire 폴더에 파일이 수집 된다. (Attribute List로 된건 수집 못한다)

folder_list[그림 3] Folder List

그래도 왠만한건 대충 가져오는데… 아 뭐야 이도저도 아닌 이 도구는… -_-

그래도 간만에 MFT Entry 공부도 하고 여러가지 삽질을 해볼 수 있어서 좋았다. 끝