정보보안공부
디지털 포렌식_NTFS_MFT 0번 분석 본문
@@ BR 분석
-> BR의 시작위치 : 63번 섹터
** BR 분석
[ BR 분석 ]
4E 54 46 53 20 20 20 20 : OEM Name으로 NTFS를 의미한다.
00 02 : Bytes Per Sector로 1개의 섹터가 512Byte를 의미한다.
08 : Sector per Cluster로 1개의 클러스터는 8개의 섹터를 의미한다.
E8 D5 FF 01 00 00 00 00 : 섹터의 총 개수는 33543657개 ( 33543657 x 512바이트 = 파티션용량 )
00 00 0C 00 00 00 00 00 : MFT 시작위치를 나타낸다. ( 단위가 클러스터이므로 x8 해야한다. )
786432 x 8 + BR의 시작위치 => 6291456 + 63 = 6291519
5E FD 1F 00 00 00 00 00 : MFT Mirror 위치를 나타낸다. ( 단위가 클러스터이므로 x8 해야한다. )
2096478 x 8 + BR의 시작위치 => 16771824 + 63 = 16771887
F6 : MFT Entry Size로 MFT Entry의 크기를 나타낸다. -10은 2^10 = 1024를 의미한다. => 1KB
01 : MFT Entry Size와 같은형식이다. => 1KB
** 분석시 주의사항
WinHex에서 보여지는 값은 리틀앤디안에 의해서 보여지는 값들로 십진수로 변환시 거꾸로 계산해서 분석해야한다.
** BR분석을 통해 알아낸 정보
-> MFT0번의 시작위치 : 6291519
-> MFT Mirror의 시작위치 : 16771887
-> MFT Entry 사이즈는 : 1KB ( 2섹터 )
@@ MFT0번 분석
-> MFT 0번 시작위치 : 6291519번 섹터
** MFT0번 헤더 분석
: 부분
[ MFT0번 헤더 분석 ]
01 00 : 변경사항이 있으면 1씩 증가
38 00 : 첫 번째 속성의 시작위치 의미 -> 헤더 시작하는곳으로부터 56바이트 뒤에 첫 번째 속성 시작
01 00 : Flag값을 의미 -> 01이면 사용중이다.
98 01 00 00 : MFT 0번 Entry가 사용한 바이트 의미 -> 403 바이트
00 04 00 00 : MFT 0번 Entry의 크기를 의미 1024바이트 -> 2섹터 ( 1클러스터에 512바이트 이므로 )
00 00 00 00 00 00 00 00 : 00 00 00 00 00 00 00 00 이면 Base MFT Entry를 의미
00 00 00 00 : MFT 0번 Entry를 의미한다.
** MFT Entry 0번 Header 분석을 통해 알아낸 정보
-> 0번째 MFT Entry
-> 수정번호 값 1
-> 첫번째 속성위치 : Entry 시작 위치로 부터 56Byte 뒤에서 첫번째 속성 시작
-> Flag : 사용중(0x01)
-> Base MFT Entry
** MFT0번에서 10속성 분석
-> 10속성은 $STANDARD_INFORMATION
: 부분 ( 10 00 00 00 으로 시작부분 )
[ 10속성 헤더 분석 ] : Resident Attribute 헤더
10 00 00 00 : 속성 타입을 알려준다. 10은 16이므로 $STANDARD_INFORMATION 의미
60 00 00 00 : 속성의 길이이다. 속성 타입인 10위치에서 속성의 길이인 96바이트 뒤에는 다음속성 타입이 존재한다.
00 : 해당 값이 0이면 Resident Attribute 형식, 해당 값이 1이면 non-Resident Attribute 형식이다.
18 00 : 속성 이름 시작위치를 나타낸다.
48 00 00 00 : 속성 내용의 길이는 나타낸다. 72바이트
18 00 : 속성 내용의 시작위치이다. 일반적으로 Header뒤에 바로 붙여 사용한다. 헤더의 크기 24Byte
00 : 인덱스 플래그를 나타낸다. 1이면 인덱스로 사용되는 것을 의미한다.
00 : 패딩값으로 아무의미 없다.
: 부분
[ 10속성 내용 분석 ]
4A 98 8F 89 04 9D D4 01 : 파일 생성시간 Wed, 26 December 2018 19:19:51 +0900
4A 98 8F 89 04 9D D4 01 : 마지막 수정시간 Wed, 26 December 2018 19:19:51 +0900
4A 98 8F 89 04 9D D4 01 : MFT의 마지막 수정시간 Wed, 26 December 2018 19:19:51 +0900
4A 98 8F 89 04 9D D4 01 : 마지막 접근시간 Wed, 26 December 2018 19:19:51 +0900
06 00 00 00 : Flags 값으로 해당 파일의 특성을 나타낸다. 숨겨진 시스템 파일을 의미
** Flags값
- 0x0001 : Read-Only ( 읽기 전용 )
- 0x0002 : Hidden ( 숨김 )
- 0x0004 : System File
- 0x0020 : Archive ( 일반 파일 )
- 0x0040 : Device ( 장치 파일 )
- 0x0000 : Directory
=> 06이면 숨김+시스템 파일을 의미한다.
** 10속성 분석을 통해 알아낸 정보
-> 파일 생성시간 : Wed, 26 December 2018 19:19:51 +0900
-> 마지막 수정시간 : Wed, 26 December 2018 19:19:51 +0900
-> MFT의 마지막 수정시간 : Wed, 26 December 2018 19:19:51 +0900
-> 마지막 접근시간 : Wed, 26 December 2018 19:19:51 +0900
-> Flag값 : 0x06 숨겨진 시스템 파일
** MFT0번에서 30속성 분석
-> 30속성은 $FILE_NAME
: 부분 ( 30 00 00 00 으로 시작부분 )
[ 30속성 헤더 분석 ] : Resident Attribute 헤더
30 00 00 00 : 속성 타입을 알려준다. 30은 48이므로 $FILE_NAME 의미
68 00 00 00 : 속성의 길이이다. 속성 타입인 10위치에서 속성의 길이인 104바이트 뒤에는 다음속성 타입이 존재한다.
00 : 해당 값이 0이면 Resident Attribute 형식, 해당 값이 1이면 non-Resident Attribute 형식이다.
18 00 : 속성 이름 시작위치를 나타낸다.
4A 00 00 00 : 속성 내용의 길이는 나타낸다. 74바이트
18 00 : 속성 내용의 시작위치이다. 일반적으로 Header뒤에 바로 붙여 사용한다. 헤더의 크기
01 : 인덱스 플래그를 나타낸다. 1이면 인덱스로 사용되는 것을 의미한다.
00 : 패딩값으로 아무의미 없다.
: 부분
[ 30속성 내용 분석 ]
05 00 00 00 00 00 05 00 : 앞의 05 00 00 00 00 00 은 5번 MFT 엔트리를 사용하는 곳의 05 00 은 수정번호가 5로 설정되어있음을 의미
4A 98 8F 89 04 9D D4 01 : 파일 생성시간 Wed, 26 December 2018 19:19:51 +0900
4A 98 8F 89 04 9D D4 01 : 마지막 수정시간 Wed, 26 December 2018 19:19:51 +0900
4A 98 8F 89 04 9D D4 01 : MFT의 마지막 수정시간 Wed, 26 December 2018 19:19:51 +0900
4A 98 8F 89 04 9D D4 01 : 마지막 접근시간 Wed, 26 December 2018 19:19:51 +0900
04 : 속성의 고유이름 4글자이다.
03 : 속성 이름의 형식이다.
24 00 4D 00 46 00 54 00 : 속성의 고유이름이 $MFT 이다.
** 속성 이름 형식
0x01 : WIN32 ( Null, /, \, :, <, >, ?를 제외한 모든 문자 사용가능 )
0x02 : DOS ( 대문자만 사용, 대부분의 특수문자 사용불가, 파일명 최대8글자, 확장자 최대3글자 )
0x03 : WIN32&DOS (공통사용형식)
=> FAT구조가 DOS구조이다.
FAT은 문자열이 비어있는 부분을 20으로 채우지만 NTFS는 00으로 채운다.
** 30속성 분석을 통해 알아낸 정보
-> 파일 생성시간 : Wed, 26 December 2018 19:19:51 +0900
-> 마지막 수정시간 : Wed, 26 December 2018 19:19:51 +0900
-> MFT의 마지막 수정시간 : Wed, 26 December 2018 19:19:51 +0900
-> 마지막 접근시간 : Wed, 26 December 2018 19:19:51 +0900
-> 속성의 고유이름은 4글자, 속성 이름의 형식은 WIN32, DOS 형식 둘다 사용, 속성 이름은 $MFT이다.
-> 30속성은 인덱싱 되고있다.
** MFT0번에서 80속성 분석
-> 80속성은 $DATA
: 부분 ( 80 00 00 00 으로 시작부분 )
[ 80속성 헤더 분석 ] : Non-Resident Attribute 헤더
80 00 00 00 : 속성 타입을 알려준다. 80은 128이므로 $DATA 의미
48 00 00 00 : 속성의 길이이다. 속성 타입인 80위치에서 속성의 길이인 72바이트 뒤에는 다음속성 타입이 존재한다.
01 : 해당 값이 0이면 Resident Attribute 형식, 해당 값이 1이면 non-Resident Attribute 형식이다.
40 00 : 속성 이름 시작위치를 나타낸다.
00 00 00 00 00 00 00 00 : 시작 클러스터는 0번
0B 00 00 00 00 00 00 00 : 마지막 클러스터는 11번 => 0~11번 클러스터를 사용하므로 총 12개의 클러스터를 사용한다.
40 00 : 런리스트 시작 위치를 나타낸다 속성헤더부터 64바이트 뒤에 위치함을 의미한다.
00 C0 00 00 00 00 00 00 : 속성이 할당되어있는 클러스터의 총 사이즈를 Byte 단위로 나타내었다. 49152Byte
00 C0 00 00 00 00 00 00 : 속성 내용의 실제 크기를 Byte단위로 나타내었다. 49152Byte
00 C0 00 00 00 00 00 00 : 속성 내용의 초기화된 사이즈, 일반적으로 실제사이즈와 동일한 값을 가진다. 49152Byte
: 부분
[ 80속성 내용 분석 ]
31 : Cluster Runs 구조에서의 헤더값으로 1은 Length크기, 3은 Offset 크기를 의미한다.
0C : Length값 ( 단위 클러스터 ) 으로 Offset위치로 부터 12클러스터만큼 크기를 갖는다.
00 00 0C : Offset값 ( 단위 클러스터 ) 이므로 786432 x 8 + 63(BR의 크기) = 6291519
** 80속성 분석을 통해 알아낸 정보
-> $MFT는 전체 MFT Entry를 관리하는 부분이다.
-> DATA가 시작하는 위치는 MFT Entry 0부터 시작한다.
-> 총 12개의 클러스터를 이용해 전체 MFT Entry를 저장하고 있다.
** MFT0번에서 B0속성 분석
-> B0속성은 $BITMAP
: 부분 ( B0 00 00 00 으로 시작부분 )
[ B0속성 헤더 분석 ]
B0 00 00 00 : 속성 타입을 알려준다. B0은 176이므로 $BITMAP 의미
48 00 00 00 : 속성의 길이이다. 속성 타입인 B0위치에서 속성의 길이인 72바이트 뒤에는 다음속성 타입이 존재한다.
01 : 해당 값이 0이면 Resident Attribute 형식, 해당 값이 1이면 non-Resident Attribute 형식이다.
40 00 : 속성 이름 시작위치를 나타낸다.
00 00 00 00 00 00 00 00 : 시작 클러스터는 0번
00 00 00 00 00 00 00 00 : 마지막 클러스터는 0번 => 0~0번 클러스터를 사용하므로 총 1개의 클러스터를 사용한다.
40 00 : 런리스트 시작 위치를 나타낸다 속성헤더부터 64바이트 뒤에 위치함을 의미한다.
00 10 00 00 00 00 00 00 : 속성이 할당되어있는 클러스터의 총 사이즈를 Byte 단위로 나타내었다. 4096Byte
08 00 00 00 00 00 00 00 : 속성 내용의 실제 크기를 Byte단위로 나타내었다. 8Byte
08 00 00 00 00 00 00 00 : 속성 내용의 초기화된 사이즈, 일반적으로 실제사이즈와 동일한 값을 가진다. 8Byte
: 부분
[ B0속성 내용 분석 ]
31 : Cluster Runs 구조에서의 헤더값으로 1은 Length크기, 3은 Offset 크기를 의미한다.
01 : Length값 ( 단위 클러스터 ) 으로 Offset위치로 부터 1클러스터만큼 크기를 갖는다.
FF FF 0B : Offset값 ( 단위 클러스터 ) 이므로 786431 x 8 + 63(BR의 크기) = 6291511
## 6291511 이동
: 부분
FF FF 00 FF 0C : MFT Entry의 사용현황을 알 수 있다. FF FF 00 FF 0C를 2진수로 변환한다.
** 2진수 변환시 유의사항
- $MFT_$BITMAP 분석시 빅앤디안 방식으로 진행한다.
FF FF 00 FF 0C -> 1111111111111111000000001111111100001100
11111111 : 0~7번 MFT Entry 사용중
11111111 : 8~15번 MFT Entry 사용중
00000000 : 16~23번 MFT Entry 사용안함
11111111 : 24~31번 MFT Entry 사용중
00001100 : 34,35번 MFT Entry 사용중
==> 데이터 복구시 해당 MFT 엔트리 번호를 2진수에서 사용함(1)로 변경해야 복구가 진행된다.
** B0속성 분석을 통해 알아낸 정보
-> $MFT_$BITMAP 속성은 B0속성의 Cluster Runs구조체를 분석한 곳으로 이동해야한다.
-> MFT Entry 사용현황을 2진수값으로 파악할 수 있다. ( 1: 사용, 0: 사용안함 )
** MFT Entry 0 번 속성별 정보
10속성 : $STANDARD_INFORMATION
30속성 : $FILE_NAME
80속성 : $DATA
B0속성 : $BITMAP
'디지털 포렌식' 카테고리의 다른 글
디지털 포렌식_NTFS_MFT 분석_기본개념정리 (0) | 2019.01.09 |
---|---|
디지털 포렌식_NTFS_MFT 속성 분석 (0) | 2019.01.09 |
디지털 포렌식_NTFS_BR분석, MFT 헤더 분석 (0) | 2019.01.09 |