File System Forensics 48

[File System] NTFS (32) - $LogFile, $UsnJrnl 구조체

안녕하세요. 도깬리 포렌식스 입니다. 오늘은 NTFS에서 $LogFile과 $UsnJrnl 파일에 대해 알아보겠습니다. 모두 화이팅하세요 !!! $LogFile 파일 MFT 엔트리 2번 입니다. NTFS 저널로 사용됩니다. 저널링(Journaling) : 그 일을 정상적으로 끝내지 못했다면 그 일이 있기 전의 상태로 되돌리는 개념입니다 (= Logging) 볼륨에서 일어나는 트랜잭션에 대한 정보를 갖고 있습니다. 2개의 영역으로 나뉩니다. 재시작 구역 (Restart Area) 마지막으로 정보가 수정되었던 영역을 가리키고 있는 영역입니다. 로깅 구역 (Logging Area) 발생한 트랜잭션의 기록을 저장합니다. 로깅 기록이 끝까지 다 차게 되면 다시 처음으로 돌아가서 기록됩니다. $LogFile 데이터..

[File System] NTFS (31) - $Bitmap, $Volume 구조체

안녕하세요. 도깬리 포렌식스 입니다. 오늘은 NTFS에서 $Bitmap 파일과 $Volume 파일 구조체에 대해 알아보겠습니다. 모두 화이팅하세요!!! $Bitmap 파일 MFT 엔트리 6번 입니다. 해당 볼륨의 클러스터 할당 상태를 기록합니다. 클러스터 할당 정보는 $DATA 속성에 기록됩니다. 각각의 클러스터는 $Bitmap 파일의 $DATA 속성의 하나의 비트와 각각 대응합니다. 할당 되었으면 ‘1’로 설정, 비할당이면 ‘0’으로 설정됩니다. $Volume 파일 MFT 엔트리 3번 입니다. $VOLUME_NAME과 $VOLUME_INFORMATION 속성을 포함합닏. $VOLUME_NAME UTF-16 유니코드 형식으로 볼륨 이름을 갖고 있습니다. $VOLUME_INFORMATION 파일시스템의 버..

[File System] NTFS (30) - $MFT, $Boot 구조체

안녕하세요. 도깬리 포렌식스입니다. 오늘은 파일시스템 메타데이터 파일 중 $MFT와 $Boot 구조체에 대해 알아 보겠습니다. 모두 화이팅하세요!!! $MFT 파일 MFT 엔트리 0번 입니다. 표준 속성( $STANDARD_INFORMATION, $FILE_NAME, $DATA)과 고유한 속성인 $BITMAP을 갖습니다. $BITMAP 한 개의 비트가 1로 되어 있으면 : 해당 엔트리는 할당된 상태를 의미합니다. 한 개의 비트가 0로 되어 있으면 : 해당 엔트리는 비할당 상태를 의미합니다. $DATA = MFT 자체 입니다. $Boot 파일 MFT 엔트리 7번 입니다. 부트 섹터와 $DATA 속성에 있는 부트코드를 포함합니다. 항상 섹터 0에서 시작됩니다. 부트 섹터에서 중요한 값은 각 섹터의 크기와 클..

[File System] NTFS (29) - 인덱스 엔트리 구조체

안녕하세요. 도깬리 포렌식스 입니다. 오늘은 NTFS의 인덱스 엔트리 구조체에 대해 알아보겠습니다. 모두 화이팅 하세요!!! 인덱스 노드 헤더의 데이터 구조체 바이트 범위 설명 0~3 인덱스 노드에서 첫번째 인덱스 엔트리가 있는 위치 값 (노드 헤더의 시작에서 상대적) 4~7 사용중인 인덱스 엔트리의 총 크기 (인덱스 노드 헤더의 크기를 포함한 값임) 8~11 할당된 인덱스 엔트리의 총 크기 (인덱스 노드 헤더의 크기를 포함한 값임) 12~15 플래그 (0x00 : 자식노드가 없음, 0x01 : 자식노드가 있음) $INDEX_ROOT 속성의 인덱스 노드 헤더 $INDEX_ALLOCATION 속성의 인덱스 노드 헤더 일반 인덱스 엔트리 데이터 구조체 바이트 범위 설명 0~7 정의되지 않음 8~9 엔트리 길..

[File System] NTFS (28) - $DATA, $INDEX_ROOT, $INDEX_ALLOCATION 속성

안녕하세요. 도깬리 포렌식스 입니다. 오늘은 $DATA, $INDEX_ROOT, $INDEX_ALLOCATION 속성에 대해 알아보겠습니다. 모두 화이팅하세요!!! $DATA 속성 속성 타입 ID : 128 고유한 구조체가 없습니다. 처음엔 ‘거주형’이었다가 내용이 약 700 바이트가 넘어가면 ‘비거주형’으로 전환됩니다. 일반적으로 MFT Entry의 마지막 속성이 됩니다. $INDEX_ROOT 속성 속성 타입 ID : 144 항상 ‘거주형’ 입니다. 인덱스 트리의 루트에 해당합니다. 바이트 범위 설명 0~3 인덱스에 있는 속성 타입 (예 : 디렉토리 인덱스라면 $FILE_NAME 속성을 가지고 있으므로, 이 항목에는 0x30 이라는 값이 들어간다) 4~7 Collation Rule 수집정렬 규칙 8~1..

[File System] NTFS (27) - $FILE_NAME 속성

안녕하세요. 도깬리 포렌식스 입니다. 오늘은 NFTS에서 $FILE_NAME 속성에 대해 알아 보겠습니다. 모두 화이팅 하세요!!! $FILE_NAME 속성 속성 타입 ID : 48 파일 또는 디렉토리의 이름과 부모 디렉토리에 관한 정보를 저장해 둔 속성입니다. 디렉토리 인덱스에도 존재하는 속성입니다. $FILE_NAME 속성은 MFT Entry에도 존재하고, INDEX Entry에도 존재하는 이른 바, ‘중복 속성’ 입니다. 그러나 정보의 갱신은 INDEX Entry에 있는 $FILE_NAME 속성에서만 일어납니다. 다만, 파일의 이름이 변경되는 경우에는 MFT Entry와 INDEX Entry 모두 $FILE_NAME 속성이 갱신됩니다. 항상 ‘거주형’ 속성입니다. 일반적으로 $STANDARD_INF..

[File System] NTFS (26) - $STANDARD_INFORMATION 속성

안녕하세요. 도깬리 포렌식스 입니다. 오늘은 MFT 엔트리의 속성 중 가장 중요한 $STANDARD_INFORMATION 속성에 대해 알아보겠습니다. 모두 화이팅 하세요!!! $STANDARD_INFORMATION 속성 속성 타입 ID : 16 항상 ‘거주형’ 데이터 입니다. 모든 파일과 디렉토리에 존재하는 속성입니다. 그 어떤 속성보다 가장 먼저 위치합니다. 바이트 범위 설명 0~7 파일 생성 시간 8~15 파일 변경 시간 16~23 MFT 변경 시간 24~31 파일 접근 시간 32~35 플래그 (0001 : 읽기전용, 0002 : 숨김, 0004 : 시스템, 0020 : 아카이브, 0040 : 장치, 0080 : 일반, 0100 : 임시, 0200 : 스파스 파일, 0400 : 재파싱 지점, 0800..

[File System] NTFS (25) - NTFS의 속성 데이터

안녕하세요. 도깬리 포렌식스 입니다. 오늘은 NTFS의 속성 데이터 구조체에 대하여 알아 보겠습니다. 모두 화이팅하세요!!! 속성 헤더 속성의 첫 16바이트의 데이터 구조체(공통 부분)입니다. 바이트 범위 설명 0~3 속성 타입 식별자 4~7 속성 길이 8~8 거주/비거주 플래그 9~9 이름 길이 10~11 이름 오프셋 12~13 플래그 14~15 속성 식별자 ‘거주형’ 속성의 데이터 구조체 바이트 범위 설명 0~15 일반적인 헤더 16~19 내용 크기 20~21 내용 오프셋 ‘비거주형’ 속성의 데이터 구조체 바이트 범위 설명 0~15 일반적인 헤더 16~23 Runlist의 시작 VCN 24~31 Runlist의 끝 VCN 32~33 Runlist 오프셋 34~35 압축 유닛 크기 36~39 사용되지 ..

[File System] NTFS (24) - MFT 엔트리 구조체(File Record)

안녕하세요. 도깬리 포렌식스 입니다. 오늘은 MFT 엔트리 데이터 구조체에 대해 알아 보겠습니다. 모두 화이팅하세요!!! MFT 엔트리 (File Record) NTFS의 핵심입니다. 파일과 디렉토리에 관한 엔트리입니다. 보통 1,024바이트 크기 (부트섹터에서 정함)를 갖습니다. Fixup 배열을 사용합니다. (즉, 각 섹터의 마지막 2바이트는 시그너처임) 기본 MFT엔트리의 데이터 구조체 바이트 범위 설명 0~3 시그너처 (FILE), 오류가 발견되면 일부 엔트리는 ‘BADD’로 표시 4~5 Fixup 배열 오프셋 6~7 Fixup 배열에 있는 엔트리 개수 8~15 $Logfile 순서 번호 (LSN) 16~17 순서 값, EnCase에서는 File Identifier로 표시됨 18~19 링크 카운트..

[File System] NTFS (23) - Fixup 배열과 데이터 무결성

안녕하세요. 도깬리 포렌식스 입니다. 오늘은 NTFS 데이터 구조에서 Fixup 배열에 대해 알아 보겠습니다. 모두 화이팅 하세요!!! Fixup 배열이란 NTFS에서 데이터를 쓸 때 각 섹터의 마지막 2 바이트를 특정한 시그너처 값으로 바꾸고, 원래의 데이터는 ‘배열’에 기록합니다. NTFS에서 데이터를 읽을 때 각 섹터의 마지막 2 바이트가 특정 시그너처와 동일한지 검증하고, ‘배열’에 기록된 원래 데이터를 읽어 들입니다. 이렇게 하는 이유는 모든 섹터의 시그너처가 동일한지 확인하기 위함입니다. 즉 데이터의 무결성을 검증하는 것 입니다. Fixup 값을 이용하는 데이터는 아래와 같습니다. - MFT Entries - INDEX Records - RCRD Records - RSTR Records 감사합..