wintersnowaAa

MBR - NTFS($STANDARD_INFORMATION) 본문

포렌식 통합/디지털 포렌식 한 권으로 끝내기

MBR - NTFS($STANDARD_INFORMATION)

wintersnowaAa 2024. 3. 8. 22:57

이전 포스팅에서 말했던 속성의 값을 적게 담을 경우에는

Resident Header를 사용하게 된다.

많이 담을 경우에는 Non - Resident Header

기준은 680bytes 이다.

그 중 일반 파일은

$STANDARD_INFORMATION (0x10)

$FILENAME (0x30)

$DATA (0x80)

속성들을 가진다.

 

여기서 0x10, 0x30, 0x80 오프셋은 MFT Attribute 값 기준으로 오프셋이다.

MFT Entry에서 설명했듯이

MFT의 구조는

MFT Entry Header Fixup Array Attr
Header
Attr
Content
Attr
Header
Attr
Content
...반복 End Marker Unused
Space

MFT Entry는 0x30의 크기

Fixup Array는 0x8의 크기이다.

Attr Header + Attr Content 를 하나의 Attribute로 보는데

앞에서 설명한 Common Attributes Header (0x10의 크기)

그리고 이전에 설명한 Resident Header (0x8 : 속성 이름이 존재하지 않을 경우), (0x10 : 속성 이름이 존재할 경우) 으로

Common Attributes Header + Resident Header = Attr Header 이다.

※ 지금부터 말하는 오프셋은 Attr Header를 기준으로 시작하는 상대적 주소값이다.

자, 이제  Attr Content 중에서 $STANDARD_INFORMATION에 대해서 알아보자.

더보기

$STANDARD_INFORMATION

 

$STANDARD_INFORMATION는 모든 파일에 존재하는 기본적인 속성으로 시간 정보, 파일 특성, 소유자(접근 권한이 주어진 UID를 말하는듯함), 보안 ID(이건 뭔지 모르겠다)등을 표시한다.

0x30 + 0x8 (MFT Entry Header + Fixup Array) 이후 바로 나오는

공통 속성 헤더의 첫번째 값인 0x10 00 00 00을 통해서 다음에 나오는 속성이 $STANDARD_INFORMATION임을 알 수 있었다.

이전 포스팅에도 알긴했지만 다시 한 번 디스크를 확인해봤다.

이제 Content을 표기해보자.

https://wintersnowaaa.tistory.com/11

이전 포스팅을 참고 잘하길 바란다.

Content의 크기가 0x48 이고,

Header 시작부터 0x18의 오프셋에서부터 Content이므로 위의 사진에 표기해놓은 부분이 Content이다.

0x18의 오프셋은 Common Attributes Header의 시작으로부터 0x18이므로

0x30(MFT Entry Header) + 0x8(Fixup Array) 이후에 Common Attributes Header의 시작.

그러므로 Content의 시작 주소는 0x11aa000 + 0x30 + 0x8 + 0x18 = 0x11aa050이다.

위의 표는 $STANDARD_INFORMATION의 구조이다.

내 디스크에 직접 대입해서 확인해보자.

 

$STANDARD_INFORMATION 구조

더보기

0x98 9B 6E CD 6F 4B DA 01

파일이 생성된 시간이다.

시간은 1601년 1월 1일 00:00:00 UTC 를 기준으로한다.

View -> Hex Value Interpreter

값을 묶어내고 Hex Value Interpreter을 이용하면 해당 데이터를 시간으로 표현해준다.

2024년 01월 20일 오후 4시10분52초인데 이때 내가 노트북을 받아서 포맷한 날인지 기억이 잘 안난다.

대략적을 맞는 것 같기도하고... 토요일이라서 맞는듯하다.

0x98 9B 6E CD 6F 4B DA 01

두번째는 $DATA 혹은 $INDEX 내용을 마지막으로 수정한 시간이다.

건드린적이 없으니 당연히 생성 시간과 같은 값을 띈다.

0x98 9B 6E CD 6F 4B DA 01

세번째는 MFT 엔트리가 마지막으로 수정된 시간이다.

건드린적 없으므로 같은 값

0x98 9B 6E CD 6F 4B DA 01

네번째는 파일에 마지막으로 접근한 시간이다.

마찬가지이다...

0x06 00 00 00

파일 속성을 Flag 값으로 표기했다. 표는 아래와 같다.

Flag 값이 0x06 00 00 00 빅엔디안 변환하면 -> 0x0006이다.

0x0006은 0x0004 + 0x0002 이므로

숨긴 파일이며, 시스템 파일이라는 뜻이다.

?) 각 플래그 값에 따른 데이터의 작동이 어떻게 이뤄지는지도 궁금하다. 오프라인인 경우는 무엇을 뜻하고, 아카이브는 무엇에 해당하는지....

0x00 00 00 00

파일에서 최대 허용한 버전 값이라는데 0으로 설정되어 있다.

?) 무슨 버전이라는건지 모르겠다... 포렌식적으로는 크게 상관이 없는 데이터라고는 하는데 나중에 기회가 되면 물어봐야겠다.

0x00 00 00 00

파일의 버전 번호이다.

파일의 버전 최댓값도 0인 경우 이 값 또한 0이 된다고한다.

0x00 00 00 00

클래스 ID 값이라는데 windows가 NTFS를 관리하는 Class ID 값이라고한다.

이건 나중에 OS 공부하다보면 나올 수도 있으니 그때까지 기억해놔야겠다.

해당 파일의 소유자 ID 값이다.

이후의 MFT Entry 중에 $Quota에서 인덱스로 사용한다고한다.

0x00 01 00 00

보안 ID 이다.

이것 또한 추후에 $Secure 에서 인덱스로 사용한다고한다.

0x00 00 00 00 00 00 00 00

Quota Charged으로 사용자 할당량 중 해당 파일이 할당된 크기를 나타낸다.

?) 이게 어떻게 사용되는지 구글링해도 잘 나오질 않는다... 다른 분들도 값이 0으로 설정되어있긴한데 무슨 의미인지는 정확하게 잘 모르겠다.

0x00 00 00 00 00 00 00 00

Update Sequence로 $UsnJrnl에서 사용하는 파일의 USN 값이라고한다. 

$UsnJrnl에서 파일을 식별하기 위해서 Update Sequence Number으로 사용됨. 추후에 $UsnJrnl에서 다뤄봐야할듯.

이 다음에 나오는 Entry Attribute인 엔트리 속성은 $FILE_NAME이다.

$FILE_NAME은 Common Attribute Header 값의 첫번째 값인 속성 타입식별자가 0x30이다.

$STANDARD_INFORMATION 이후의 값이 0x30 00 00 00 인 것으로 미루어보아

이후에는 $FILE_NAME가 나온다.

 

pg. 111~113

추후에는 $FILE_NAME에 대해서 포스팅해야겠다.

출처)

http://forensic-proof.com/archives/600

 

NTFS – $STANDARD_INFORMATION 속성 | FORENSIC-PROOF

 

forensic-proof.com

https://gflow-security.tistory.com/entry/Windows-Artifact1-MFT2

 

Windows Artifact[1] - $MFT(2)

이번 포스팅에서는 $MFT의 속성중 하나인 STANDARD_INFORMATION에 대해서 알아보겠습니다.---------------------------------------------------------------------------------------------------------------------------------------- 1. $STAND

gflow-security.tistory.com