NTFS 파일시스템
NTFS란?
NTFS는 윈도 NT 계열 운영체제의 파일 시스템으로 윈도 2000, 윈도 XP, 윈도 서버 2003, 윈도 서버 2008, 윈도 비스타, 윈도 7, 윈도 서버 2008 R2 등에도 포함되어 있다. NTFS의 NT는 윈도 NT와 비슷하게 새로운 기술이라는 뜻의 New Technology의 준말이다. MS-DOS와 이전 버전의 윈도에서 쓰였던 마이크로소프트의 이전 FAT 파일 시스템을 대체하였다. NTFS는 FAT와 HPFS(고성능 파일 시스템)을 거쳐 몇 가지 개선이 있다. 이를테면, 메타데이터의 지원, 고급 데이터 구조의 사용으로 인한 성능 개선, 신뢰성, 추가 확장 기능을 더한 디스크 공간 활용을 들 수 있다. (출처: 위키백과)
NTFS 살펴보기
(63번 BR부분)
부가적인 내용
포렌식 현장도착후 할일: 메모리 덤프, 사진촬영
- Login Bomb 때문에 정상종료를 하면 안된다.
: 전원플러그 강제로 뽑아야 한다. (아직까지는..)
- 포렌식 툴은 2개이상 띄워서 비교해야 한다.
- 하디디스크는 '쓰기방지툴'을 꼭 사용해야 한다. (EX: 플로피디스크 열기/닫기 )
: '권장' 이 아니라 '필수' 이다.
- slack space(슬랙스페이스) : 파일의 크기가 데이터 단위 크기의 배수가 되지 않을 때,
저장 매체에서 파일이 저장되고 남은 잉여 공간을 말합니다.
램슬랙: 파일 끝을 표시하기 위해 섹터 마지막까지 0으로 채우는 공간
일반슬랙: 저장 되었던 파일의 내용 정보와 시간정보를 제공하는 공간
slack space는 File Table 에서 인식을 못하므로 일반적인 Browsing 으로는 해당
파일을 열람 할수 없음 디스크에서 Slack Space 크기와 위치를 검사하고 디스크의
물리적 주소를 파악, 해당 클러스터의 정보를 조사해야함
Slack space 종류: 램슬랙, 파일슬랙, 파일시스템 슬랙
슬랙 스페이스로 인해 데이터나 파일 시스템의 끝부분을 알 수 있기 때문에 삭제된
파일을 복구 할때 유용하게 사용됨
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
## MFT(Master File Table)
# MFT란
- MFT Entry들의 모음
- MFT의 시작위치는 BR에서 확인한다.
- MFT의 크기는 볼륨에 있는 파일과 디렉토리의 개수에 비례한다.
예)볼륨에 파일과 디렉토리의 개수가 60000개일 때 MFT Entry개수는 대략 60000개 이상 차지한다.
60000 * 1KB = 60000 KB = 약 60 MB
# MFT Entry
- 파일 또는 디렉토리에 대한 정보를 담고 있다.파일명,크기,시간,파일내용,위치,권한,할당량 ...
- 기본적으로 파일이나 디렉토리는 하나의 Entry를 사용하며 기록할 내용이 많은 경우 Entry를
여러 개 사용할 수도 있다.
- 기본 크기는 1KB이다.(BR 또는 MFT Entry Header에서 확인가능)
- MFT Entry는 섹터 2개를 차지한다.
- MFT Entry Header와 여러 개의 속성들(Attributes)로 구성된다.
- MFT Entry 마지막 속성의 뒷부분에 End Marker(0xFFFFFFFF)로 끝난다.
## MFT Entry Header
- 크기가 42 bytes
# Signature
- MFT Entry임을 나타내는 표시이다.
- 위치: 0~3번 바이트
- 크기: 4 Bytes
- 정상 Entry에는 FILE 이라는 문자열이 적혀있다.
- 문제가 발견된 Entry에는 BAAD라고 적혀있다.
# Offset of Fixup Array
- MFT Entry 시작 위치로부터 Fixup 배열까지의 거리
- 위치: 4~5번 바이트
- 크기: 2 Bytes
- 보통 0x48이라고 적혀있다.
(참고) Fixup Array
- 데이터가 저장된 섹터의 내용의 손상여부를 확인하기 위한 기법
- 섹터의 마지막 2바이트를 특정 Signature로 바꿔놓고 원래의 2바이트 값은 Fixup배열에
기록해 둔다.
- Signature값은 Fixup 배열의 맨앞에 기록한다.
- 섹터를 읽을 때 Signature값이 틀리면 손상된 섹터로 간주한다.
- 위치: 보통 MFT Entry Header가 끝나고 바로 이어진다. Offset to Fixup Array항목에서 확인
- 크기: Count of Fixup Values 항목에서 확인
- 이 기법이 사용되는 항목은 MFT Entry,Index Record, RCRD Record, RSTR Record 등이다.
- 파일 내용이 들어가는 클러스터의 섹터에는 적용하지 않는다.
# Count of Fixup Values
- Fixup 배열(Array)의 크기(항목의 개수)
- MFT Entry는 기본적으로 3이다.
(MFT Entry가 1KB이므로 섹터 2개를 사용 + Signature가 1개 항목 사용)
- 위치: 6~7번 바이트
- 크기: 2 바이트
# $LogFile Sequence Number(LSN)
- 설명은 뒤에서 다시 다룬다.
- 내용은 다양한 값을 가질 수 있다.
- 위치: 8~15번 바이트
- 크기: 8 바이트
# Sequence Value
- MFT Entry가 할당 또는 해제될 때 값이 증가한다.
- MFT Entry를 재할당하면 이값이 바뀌므로 내용이 바뀌었다는 것을 추측할 수 있다.
- 위치: 16~17번 바이트
- 크기: 2 바이트(16 bit)
(참고) File Reference Address (64 bit)
Seqence Value(16 bit) + MFT Entry Address(48 bit)
# Hard Link Count
- 하드 링크의 개수
- 보통 1 이다. Base MFT Entry에서만 사용된다.
- Hard Link 개념을 윈도우에서도 사용할 수 있다. 하지만 실제 도구가 없어서 사용할
수 없다. 그러나 MS에서 제공되는 도구가 있다.
- 위치: 18~19
- 크기: 2 Bytes
# Offset to First Attribute
- MFT Entry의 첫 번째 속성(Attribute)의 위치(Offset)
- 보통 56(D)=0x38 이지만 얼마든지 다른 값이 올 수 있다. 확인 필수
- 위치: 20~21
- 크기: 2 Bytes
# Flags
- MFT Entry의 상태정보
- 내용이 0x1 이면 MFT Entry가 사용 중임을 나타낸다.
- 내용이 0x2 이면 MFT Entry가 디렉토리에 사용되고 있음을 나타낸다.
- 위치: 22~23번 바이트
- 크기: 2 바이트
# Used Size of MFT Entry
- MFT Entry 전체크기(보통 1KB)중에서 사용중인 공간의 크기를 나타낸다. 정확하지는
않고 8의 배수로 기록된다.
- 내용: 다양한 값을 가질 수 있음.
- 위치: 24~27번 바이트
- 크기: 4 바이트
# Allocated Size of MFT Entry
- MFT Entry 전체크기를 나타낸다.
- 보통 1024 가 적혀있다. (MFT Entry는 1KB로 고정되어 있음)
- 위치: 28~31번 바이트
- 크기: 4 바이트
# File Reference to Base MFT Entry
- Non-Base MFT Entry의 Base MFT Entry의 위치를 나타낸다.
- File Reference Address로 기록되어 있다.
- Non-Base MFT Entry 에서만 기록된다.
- Base MFT Entry에서는 언제나 0 이다.
- 위치: 32~39번 바이트
- 크기: 8 바이트
(참고) Base MFT Entry & Non base MFT Entry
# Next Attribute ID
- 현재 MFT Entry에 새로운 속성이 기록될 때 사용할 속성ID(고유한 값, 속성 TYPE ID와 다름)
- 위치: 40~41번 바이트
- 크기: 2 바이트
## Attribute(속성)
# 구성
- 속성 헤더(Header) + 속성 내용(Content)
# 속성 헤더 구조 (Resident)
- Resident 형태의 속성은 내용이 MFT Entry내에 있다
- $FILE_NAME (파일 이름 속성)
# 속성 헤더 구조 (Non-Resident)
- Non-resident 형태의 속성은 내용이 다른 클러스터에 들어있고 속성에는 위치만 기록됨.
# 속성 종류(Attribure Type)
$STANDARD_INFORMATION
$ATTRIBUTE_LIST
$FILE_NAME
$VOLUME_VERSION
$OBJECT_ID
$SECURITY_DESCRIPTOR
$VOLUME_NAME
$VOLUME_INFORMATION
$DATA
$INDEX_ROOT
$INDEX_ALLOCATION
$BITMAP
$SYMBOLIC_LINK
$REPARSE_POINT
$EA_INFORMATION
$EA
$LOGGED_UTILITY_STREAM
# $STANDARD_INFORMATION
- 파일과 디렉토리에 대한 시간정보/소유자/보안설정/파일종류/할당량 등의 정보를 담는다.
- 모든 파일과 디렉토리에 대한 Base MFT Entry에는 반드시 존재하는 속성
- 속성 타입 번호 : 0x16
- 저장 형태: 반드시 Resident 형태만 가능함
- 크기: 보통 72(Byte), 다를 수 있음, 확인 필요
- 속성 구조 요약
항목 이름 설명 위치 크기
Created Time 처음으로 파일이 생성된 시간 정보 0~7 8
Modified Time 마지막으로 파일 내용이 수정된 시간 8~15 8
MFT Modified Time MFT Entry 내용이 마지막으로 수정된 시간 16~23 8
Accessed Time 마지막으로 파일 내용을 접근한 시간 24~31 8
Flags 파일의 특성 32~35 4
Maximum number of version 36~39 4
Version Number 40~43 4
Class ID 44~47 4
Owner ID 파일의 소유자의 ID 48~51 4
Security ID 52~55 4
Quota Charged 56~63 8
Update Sequence Number 64~71 8
# $FILE_NAME
- 파일이나 디렉토리의 이름과 이름에 관련된 추가 정보가 저장되는 속성이다.
- 이 속성은 반드시 Base MFT Entry에 있어야 읽을 수 있다.
- 속성 타입 번호 : 0x48
- 저장 형태: 반드시 Resident 형태만 가능함
- $FILE_NAME의 Attribute Content 구조
위치 크기 설명
0~7 8 부모 디렉토리의 File Reference Address
8~15 8 Created Time
16~23 8 Modified Time
24~31 8 MFT Modified Time
32~39 8 Accessed Time
40~47 8 파일의 할당 크기
48~55 8 파일의 실제 크기
56~59 4 Flag
60~63 4 Reparse Value
64~64 1 이름의 길이
65~65 1 이름의 형식
66~?? 동적 이름
- 이 속성은 Index Entry에도 존재하며 Index Entry에 있는 $FILE_NAME속성을 우선적으로 갱신한다.
- Flag 항목은 $STANDARD_INFORMATION 속성의 flag와 동일한 구조이다.
# $DATA
- 실제 파일이나 디렉토리의 내용이 저장되는 공간이다.
- 속성 타입 번호 : 0x128
- 저장 형태: 700 Byte를 기점으로 작으면 Resident 형태로 저장되고 크면 Non-Resident 형태로 저장된다.
# $DATA속성의 ADS 항목
- Alternate Data Stream
- 파일이나 디렉토리에 추가되는 $DATA 속성
'시스템' 카테고리의 다른 글
리눅스 프로그램 SAR(System Activity Reporter)를 이용한 시스템 모니터 (0) | 2016.09.01 |
---|---|
리눅스 스크린샷 프로그램 shutter (0) | 2016.09.01 |
초보자를 위한 리버싱 엔지니어링 상식 - 리버스 엔지니어링이란? (0) | 2016.08.29 |
리버스 엔지니어링 스터디 3편. 인라인 코드 패치(Inline Code Patch) (0) | 2016.08.29 |
리버스 엔지니어링 스터디 2편. 스택 프레임(Stack Frame) (0) | 2016.08.29 |