분류 전체보기 331

[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 감사합..

[File System] NTFS (22) - 루트 디렉토리, 재파싱 지점, 오브젝트 식별자

안녕하세요. 도깬리 포렌식스 입니다. 오늘은 루트 디렉토리와, 재파싱 지점, 오브젝트 식별자에 대해 알아보겠습니다. 모두 화이팅하세요!!! 루트 디렉토리 NTFS의 루트 디렉토리는 반드시 ‘.’ 이름을 갖는 MFT엔트리 5번에 위치해야 합니다. 검색의 시작점이 됩니다. 재파싱 지점 ($REPARSE_POINT) 무엇을 연결하고 있는지에 대한 정보를 포함하고 있는 특별한 파일 또는 디렉토리 입니다. 재파싱 지점은 E:\와 같은 드라이브 문자 대신 디렉토리에 볼륨을 마운트하기 위해 사용됩니다. 윈도우에서 거의 사용하지 않는 속성입니다. 오브젝트 식별자 ($OBJECT_ID) 파일이나 디렉토리는 128비트의 고유한 식별자를 갖습니다. 이 식별자는 파일이 이동되거나, 파일이름이 변경되어도 그대로 유지됩니다. 이..

[File System] NTFS (21) - 파일이름과 디렉토리 인덱스

안녕하세요, 도깬리 포렌식스 입니다. 오늘은 파일이름과 디렉토리 인덱스에 대해 알아보겠습니다. 파일이름 매핑 분석 파일과 파일 이름이 어떻게 연결되는지 알아 봅니다. 디렉토리 인덱스 NTFS의 디렉토리도 MFT Entry를 갖고 있으며, 아래의 위치에 ‘디렉토리’임을 표시하는 플래그를 갖고 있습니다. - MFT Entry Header - $STANDARD_INFORMATION - $FILE_NAME 디렉토리 인덱스의 인덱스 엔트리들은 파일 참조 주소와 $FILE_NAME 속성을 갖고 있습니다. 파일이름이 긴 경우, 동일한 파일에 여러 개의 $FILE_NAME 속성이 인덱스에 존재할 수 있습니다. 디렉토리안에 하위 디렉토리 또는 파일이 존재하게 되면, 아래와 같은 속성에 각각의 디렉토리, 파일에 대한 $F..

[File System] NTFS (20) - MFT 분석 방법 요약

안녕하세요. 도깬리 포렌식스 입니다. 오늘은 NTFS 에서 MFT 분석방법을 요약하여 설명합니다. 모두 화이팅하세요!!! 분석 개요 디스크를 획득하기 전에 볼륨이 이미 포맷된 상태에서 과거 파일시스템에 존재하던 파일을 복구하고자 합니다. 볼륨을 포맷하면 새로운 MFT 엔트리가 최소 개수만큼 생성될 것이고, 비할당영역에는 과거 파일시스템에 존재하였던 MFT 엔트리가 여전히 남아 있을 것 입니다. 이러한 과거의 MFT 엔트리를 이용하면 해당 파일의 속성 내용을 복구할 수 있습니다. 분석 순서 비할당영역 추출 $Bitmap 파일을 분석한 후 0비트에 해당하는 각 클러스터의 내용을 추출합니다. 과거 MFT 엔트리 검색 ASCii 시그너처 ‘FILE(0x46494c45)’로 시작하는 MFT 엔트리를 추출합니다. ..

[File System] NTFS (19) - MFT 분석시 고려 사항

안녕하세요. 도깬리 포렌식스 입니다. 오늘은 NTFS에서 MFT 분석시 고려사항에 대해 알아보겠습니다. 모두 화이팅하세요!!! MFT 분석 고려 사항 일부 파일/디렉토리는 2개의 $DATA속성을 갖고 있을 수도 있습니다. 추가적인 $DATA 속성은 윈도우에서 보이지 않는 영역이므로, 데이터를 숨기는데 이용될 수도 있습니다. MFT 엔트리나 속성의 Unused Space도 데이터를 숨기는 데 이용될 수 있습니다. 다만, $DATA와 같이 그 크기가 가변적인 경우, 해당 부분이 덮어쓰여 질 수 있으므로 데이터를 은닉하기에 용이하지 않은 측면도 있습니다. MFT 엔트리는 하나의 테이블 형태로 할당되기 때문에 비할당 엔트리를 찾기가 용이하지 않습니다. 비할당 MFT 엔트리를 찾으면, $FILE_NAME 속성을 ..

[File System] NTFS (18) - MFT 찾기 등 요약

안녕하세요. 도깬리 포렌식스 입니다. 오늘은 NTFS에서 MFT 찾기와 MFT를 해석하는 과정을 순서대로 요약합니다. 모두 화이팅하세요!!! MFT 분석 요약 특정 엔트리를 찾기 위해서는 부트섹터의 시작주소를 이용해 MFT의 위치를 찾습니다. 각 MFT 엔트리를 해석하여 속성을 분석합니다. 마지막 속성 이후에는 0xffffffff 값이 존재하고, 그것이 끝 지점입니다 (이것 이후로는 Unused Space 입니다.) 핵심적인 메타데이터는 $STANDARD_INFORMATION 속성에 존재합니다. 파일의 내용은 $DATA 속성에 존재합니다. $FILE_NAME 속성은 파일의 시간값을 검증하고, 파일의 부모 디렉토리를 찾을 때 유용합니다. MFT의 할당 여부는 MFT 플래그와 $MFT의 비트맵으로 판단합니다..

[File System] NTFS (17) - MFT 엔트리와 할당 알고리즘

안녕하세요. 도깬리 포렌식스 입니다. 오늘은 MFT 엔트리의 할당 알고리즘에 대해 알아 보겠습니다. 모두 화이팅 하세요!!! MFT 엔트리와 할당 알고리즘 MFT Entry 0번 ~ 15번까지는 미리 예약되어 있고, 그것이 설령 사용중이지 않더라도 할당되어 있습니다. MFT Entry 16번 ~ 23번까지는 할당되어 있지 않은 빈영역입니다. 사용자 파일은 MFT Entry 24번부터 시작하여, ‘첫번째 적용’ 알고리즘으로 MFT 엔트리가 할당되고, 테이블 크기는 필요에 따라 계속 증가합니다. 만약, 파일 삭제 등으로 인하여 해당 엔트리가 사용되지 않게 된다면, 사용여부를 구분하는 플래그를 제외하고 어떠한 변경도 없습니다. 사용되지 않는 엔트리에 새로운 엔트리를 재할당(덮어쓰기)하게 되면, 이전 엔트리는 ..

[File System] NTFS (16) - $ATTRIBUTE_LIST

안녕하세요. 도깬리 포렌식스 입니다. 오늘은 NTFS에서 $ATTRIBUTE_LIST 속성에 대해 알아 보겠습니다. $ATTRIBUTE_LIST 속성 어떤 파일 또는 디렉토리의 속성이 너무 크거나 많아서, 하나의 MFT Entry에 모두 담을 수 없게 되는 경우, 여러 개의 MFT Entry에 나누어 저장하게 됩니다. 이론적으로 하나의 파일 또는 디렉토리는 65,536개의 속성을 포함할 수 있습니다. 여러 개의 MFT Entry에 속성을 나누어 저장하게 되는 경우, $ATTRIBUTE_LIST속성은 어떤 속성이 어느 MFT Entry에 저장되어 있는 지에 관한 정보를 제공합니다. $ATTRIBUTE_LIST 속성은 여러 개의 MFT Entry중 기준이 되는 Base MFT Entry에 위치해야 합니다. ..

[File System] NTFS (15) - $DATA와 ADS

안녕하세요. 도깬리 포렌식스 입니다. 오늘은 NTFS에서 $DATA 속성에 대해 알아 보겠습니다. 모두 화이팅하세요!!! $DATA 속성 파일의 내용이 저장되어 있습니다. 어떤 형식이나 정의된 값을 갖고 있지 않습니다. ID : 128 입니다. 크기에는 제한이 없습니다. 다만 데이터의 크기가 700바이트 이상이 되면 $DATA속성을 ‘거주형’에서 ‘비거주형’으로 전환시킵니다. 일반적인 경우 $DATA 속성은 MFT 엔트리 상에서 가장 마지막에 위치합니다. ADS (Alternate Data Streame) 하나의 파일/디렉토리에 여러 개의 $DATA 속성이 존재할 수도 있습니다. 추가적으로 존재하는 $DATA 속성을 ADS라고 부릅니다. 기본적으로 $DATA 속성에는 이름이 없지만, ADS에는 반드시 속..