SIFT Workstation에 익숙해지기

J4HM1LLi·2023년 2월 3일
0
post-thumbnail

SIFT 워크스테이션을 처음 사용하거나 포렌식 실무 절차에 익숙하지 않은 사람을 대상으로 SANS에서 튜토리얼 비디오를 제공한다.

이 글에서는 해당 튜토리얼에 소개된 내용을 포함하고 추가적으로 업데이트 된 내용이나 필자의 경험을 바탕으로 분석 방법론에 대해 서술하고자 한다.

SIFT Workstation을 설치하는 방법은 이전 포스팅을 참고하자.

이미지 마운트하기

포렌식이나 침해사고 분석 시 거의 표준으로 사용되는 E01 포맷은 사실 Raw한 이미지 파일이 아니다.
E01 포맷은 Encase Image File Format으로 포렌식을 위해 사용되는 파일 포맷의 일종이다.
따라서, 분석을 수행하기 위해 Raw한 이미지 파일을 추출해내는 과정이 필요하다.

비디오 튜토리얼에서는 이미지를 수동으로 마운트하기 위해 ewfmountmount 명령을 이용하는 방법과 이러한 과정을 자동화한 imageMount.py 스크립트를 사용하는 방법을 소개한다.

수동으로 E01 이미지 마운트하기

ewfmountE01 포맷에서 Raw한 이미지 파일을 추출하는 도구이다. 사용법에 어려움이 없지만 주의할 점으로는 [DESTINATION]으로 지정한 폴더가 존재하지 않을 경우, 오류가 발생하므로 대상 폴더를 먼저 생성 해주어야 한다.

예를 들어, /mnt/ewf_mount 폴더에 추출하고 싶을 때 mkdir -p /mnt/ewf_mount 명령을 먼저 수행해야한다.

또한, 소스 파일이 단일 파일이 아닌 여러 개의 E01 파일로 구성된 경우 -e 옵션을 사용할 수 있다.

ewfmount [SOURCE].E01 /mnt/[DESTINATION]

목적 경로를 /mnt/ewf_mount로 지정하고 성공적으로 마운트가 됐다면 해당 폴더에 ewf1 파일이 생성된 것을 볼 수 있다. 이 파일이 바로 Raw한 이미지 파일이며, 해당 파일의 속성을 확인해보면 어떤 파일시스템인지 확인할 수 있다.

file ewf1
	... 'NTFS'

추출된 ewf1 파일이 NTFS 파일시스템이라는 가정하에 mount 명령에 옵션(-o)을 추가하여 SIFT 워크스테이션에 마운트할 수 있다. 이 때 반드시 READ ONLY 옵션(ro)을 지정하여 원본에 대한 쓰기 방지를 걸어두어야 한다.

mount -o ro,loop,show_sys_files,streams_interface=windows /mnt/ewf1 /mnt/[DST]

마운트에 성공하면 이미지 파일에 존재하는 루트 디렉터리(C:\)에 접근할 수 있을 것이다.
만약, 이미지를 언마운트하고 싶다면 umount /mnt/[DST] 명령을 수행하면 된다.

자동으로 이미지 마운트하기

SIFT 워크스테이션은 위 과정을 자동으로 수행하기 위해 파이썬 스크립트(imageMount.py)를 제공한다.
사용법은 ewfmount와 유사하며, 소스파일이 여러 개의 E01로 존재할 경우 -s 옵션 대신에 -e 옵션을 사용한다.

imageMount.py -s [SRC] /mnt/[DST]

BitLocker로 암호화 된 이미지 마운트하기

BDE(BitLocker Drive Encrypted)로 암호화 된 이미지를 마운트 할 경우, bdemount 도구를 사용한다. 단, 복구 키를 가지고 있어야 마운트가 가능하며 키가 분실되거나 없는 경우 Passware 같은 솔루션을 사용해서 키를 추출하거나 브루트포싱으로 키를 찾아야한다.

Volume Shadow 확인하기

볼륨 쉐도우는 윈도우 운영체제에서 기본적으로 활성화 된 백업이다. 데스크톱 버전은 일주일 주기로 백업이 수행되며 윈도우 서버군 운영체제는 일일 백업이 수행된다. 볼륨 쉐도우 카피는 스냅샷 형태의 백업으로 시스템에서 일어난 모든 변화를 저장한다.

따라서, 1~2주 전에 존재했던 파일이 오늘 삭제되었다면 볼륨 쉐도우 카피를 통해 파일을 복구할 수 있다.

볼륨 쉐도우 카피에 대한 정보를 확인하기 위해서는 추출한 Raw 이미지 파일(ewf1)이 필요하다. vshadow 도구를 사용하면 몇개의 VSC가 존재하는지, 언제 생성된 스냅샷인지 확인할 수 있다.

vshadowinfo ewf1

마운트 경로(/mnt)로 이동하면 여러 폴더들이 생성된 것을 볼 수 있다. 이 중에서 vss 폴더는 모든 볼륨 쉐도우 스냅샷(VSS)에 대한 이미지를 담기 위해, shadow_mount 폴더는 마운트 작업을 위해 자동으로 생성된 폴더이다.

마운트 할 스냅샷을 특정하고 vshadowmount 명령을 사용하면 Raw 이미지로 부터 VSS를 추출하여 마운트할 수 있다.

vshadowmount ewf1 /mnt/vss

추출된 vss 파일은 이전과 동일하게 mount 명령을 사용해서 마운트할 수 있다.

mountwin vss2 /mnt/shadow_mount/vss2

모든 볼륨 쉐도우 스냅샷을 마운트 한번에 마운트하려면 쉘 스크립트를 사용할 수 있다.

for i in vss*; do mountwin $i /mnt/shadow_mount/$i; done

Timeline 만들기

SIFT에는 Plaso(=log2timeline)라고하는 도구가 설치되어 있다. Plaso를 사용하면 분석을 위한 타임라인을 자동으로 생성해주며 psort 도구를 사용해 ELK나 Time Sketch 같은 곳에 사용되는 데이터 포맷으로 변환할 수 있다.

log2timeline.py -z Asia/Seoul --storage_file [DST].plaso ewf1

타임라인이 생성되는데 소요되는 시간은 시스템의 CPU 코어 개수에 따라 성능 차이가 존재한다. 따라서 대용량 이미지에 대한 타임라인을 생성할 때에는 CPU 성능이 좋은 머신에서 Plaso를 사용하는 것이 바람직하다.

기타 분석도구

SIFT 워크스테이션에는 분석을 위한 다양한 도구들이 포함되어 있다.
그 중에서 대표적으로 메모리 포렌식을 위한 volatility, rekall 등이 존재하며,
레지스트리 분석을 위한 RegRipper 도구가 대표적이다.

RegRipper의 경우 마운트 된 이미지에서 레지스트리 하이브 파일을 대상으로 플러그인을 적용해 자동으로 분석을 수행해준다.

rip.pl -r SAM -f sam | less

또한, ShimCacheParser.py는 심캐시를 분석할 때 아주 유용한 도구이다. 심캐시는 악성파일을 식별하는데 아주 유용한 아티팩트이다. 단, 심캐시에 남는 시간정보는 파일의 실행시간이 아닌 마지막 수정 시간(MTIME)임을 명심하자.

ShimCacheParser.py -i SYSTEM --bom

이미징 도구

SIFT를 사용해서 라이브 시스템 이미징을 수행할 경우는 극히 드물지만 원격으로 이미징을 수행할 수 있을 경우 F-Response 도구를 활용할 수 있다. 이는 SIFT 제작자, Rob Lee가 가장 선호하는 이미징 도구라고 질의응답을 통해 밝힌 바 있다.

이미징은 로카르트의 교환법칙등을 고려하여 시스템 영향도를 최소화 해야하기 때문에 사용하는 도구도 신중하게 선택해야한다. 다른 옵션으로는 FTK Imager, X-ways, Encase 등을 사용한다.

SIFT를 사용하는 것이 좋은가?

SIFT 워크스테이션처럼 미리 빌드된 분석 환경을 이용하는 것은 장단점이 존재한다. 먼저 단점으로는 환경에 포함된 도구를 전부 사용할 일도 없을 뿐더러 분석 스킬이 전적으로 도구에 의존하게 될 수도 있다. 따라서, 라이브 시스템에서 손수집하거나 아티팩트를 하나씩 파싱해서 직접 로우한 데이터를 분석하는 경험이나 학습이 필요하다.

다만, 이를 상쇄할만한 장점도 존재한다. 분석 환경만을 집중적으로 만드는 팀에서 여러 테스트와 검증, 그리고 커뮤니티를 통한 피드백을 거쳐 가장 안정화된 도구를 선정하고 이를 모아 만들어놓은 환경은 분석가가 그만큼 다른 요인에 신경쓰지 않고 "분석" 그 자체에 집중할 수 있도록 한다.

때문에 분석 환경에 대한 고민을 줄이기 위해 잘 만들어진 SIFT 워크스테이션을 사용해보는 것이 꼭 나쁜 선택은 아니라고 생각한다.

0개의 댓글