# 4-3.1) NTFS 기초 분석(NTFS BR과 DATA 영역)

**아래 실습은 NTFS 가상디스크를 만들어서 분석하였습니다.**

> NTFS 분석 연습용 가상디스크 만들기\
> \> [#id-2-1-ntfs](https://bitnang.gitbook.io/bit_forensic/undefined/1.-bit/4/4-3-ntfs/..#id-2-1-ntfs "mention")\
> \> [#id-2](https://bitnang.gitbook.io/bit_forensic/undefined/2/2-1#id-2 "mention") (가상디스크 연결 방법)

## 2-2) NTFS Boot Record

1. 먼저 파티션에 NTFS 파일시스템이 구성되면 가장 먼저 위치로 가봅시다.\
   반복 했던 분들에게는 이제 매우 쉽겠지만, 다시 진행하여 익숙해 져봅시다.

2. FTK Imager를 이용해  봅시다. \
   우선 Add Evidence Item 선택 후 Physical Drive 선택 후 NTFS 저장매체를 선택

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FQrkGOBrT6xuT5CyMBVQe%2Fimage.png?alt=media&#x26;token=030f214f-89dd-4d35-aff5-3771a3b73573" alt="" width="563"><figcaption></figcaption></figure>

3. 자 먼저 해당 저장매체의 0번 섹터를 살펴봅시다.\
   0번섹터 마지막 55 AA 시그니처가 있는 것을 볼 수 있으며, 파티션 엔트리가 있는 것을 볼 수 있습니다.\
   1번 파티션 엔트리를 분석해보면..\
   \- 시작LBA(시작 섹터 번호) : 80 00 00 00 (리틀엔디안) -> 00 00 00 80 (16진수) = 128 (10진수) 섹터 \
   \- 전체 섹터 수 : 00 20 03 00 (리틀엔디안) -> 00 03 20 00 (16진수) = 204,800 섹터\
   &#x20;            \>>  204,800 X 512 (1섹터 크기) = 104,857,600 bytes = 100 MB

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2Fxip7kqvn343Cx1VPHMzJ%2Fimage.png?alt=media&#x26;token=70233ece-cd37-4bcd-8606-0f3ca1f66443" alt="" width="563"><figcaption></figcaption></figure>

4. 도구에서도 동일하게 파악 하는지 확인합시다. Parition 1을 선택 하면 하단에 Properties 시작섹터, 전체 섹터수를 확인할 수 있으며, 파티션 1번 시작영역에 NTFS 부트레코드가 위치하고 있습니다.

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2Fd0cWGMzDPF30dvfnPgFs%2Fimage.png?alt=media&#x26;token=7cbba297-794b-4c7c-8623-b40059fb38b4" alt="" width="563"><figcaption></figcaption></figure>

5. NTFS 부트 레코드 구조 중 이번에는 포렌식과 친해지기에서는 중요하다고 생각되는 부분 위주로 살펴 보도록 하겠습니다.

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FPizFCGi6NPkBA38kZyxx%2Fimage.png?alt=media&#x26;token=ca048119-2a37-48e1-bcd6-21528def52f2" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FZZLZ0DHLtiMMimPmBjZ9%2Fimage.png?alt=media&#x26;token=cbf74240-cb61-4580-a26c-a9a182bd7320" alt=""><figcaption></figcaption></figure>

6. 위에 것을 한번 다시 한번 분석을 해보도록 합시다.\
   \- Bytes Per Sector : 512 (1 섹터의 크기 512 bytes) \
   \- Sector per Cluster : 8 (클러스터 당 섹터 수) / <mark style="color:red;">클러스터 번호로 섹터를 이동할 때 항상 주의</mark> \
   \
   \- Reserved Sector Counter : 00 00 섹터 (예약된 영역으로 사용하지 않는 영역) \
   \- Total Sector :  204,799섹터 (전체 섹터 수) \
   \ <mark style="color:red;">- Start of MFT : 8,533 클러스터</mark> \ <mark style="color:red;">- Start of MFTMirr : 2 클러스터  (MFT 복사본)</mark>\
   \- Serial Number : F2 70 D7 09 70 D6 D4 07 -> 07 D4 D6 70 09 D7 70 F2\
   &#x20;                             (FAT32에 비해 길이가 2배로 길어졌네요!)\
   \* 크게 중요하지 않은 것\
   \- Media : 0xF8 고정 디스크(하드 드라이브)\
   \- MFT Entry Size : F6 (2의 보수 표현)= 1111 0110 (0 ->1 ,1->0 ) => 0000 1001 (1의 보수)\
   &#x20;                                                2의 보수   = 1의 보수 +  1  => 0000 1001 +1 = 0000 1010 (10)\
   &#x20;                                                Entry Size 는 $$2^{2의보수} = 2^{10}$$= 1,024 bytes (2섹터)\
   \- Index Block Size : 1  (인덱스 블럭 크기가 1 클러스터)\
   &#x20;  \*인덱스 블럭은 디렉터리 엔트리와 같은 데이터를 효율적 관리하고 빠른 검색을 위한 데이터 구조\
   \
   이러한 정보를 토대로 FTK Imager가 필요한 부분을 분석해주고 있습니다.

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2Fx86fUKlOWTuUeAjFxK3l%2Fimage.png?alt=media&#x26;token=963da64f-2b4a-4dc4-8284-56122b1fbe39" alt=""><figcaption></figcaption></figure>

7. 우선 여기서 FAT32와 다른게 하나 있습니다. \
   FAT32의 경우 부트레코드의 **복사본**이 있는데 NTFS는 BR에서 부트레코드 복사본을 나타내지 않네요. **NTFS는 BR에서 부트레코드 복사본은 어디에 있을까요?**\
   \
   그리고 Total Sector를 한번 보면, 위에서 0번 섹터에서 파티션 테이블을 보면 파티션 1번의 전체섹터 수와 **NTFS의 전체 섹터 수가 다릅니다. (1 섹터 작다)**\
   굳이 왜 다르게 했을까요? 파티션 1번 다쓰면 좋은거 아닐까요?

8. 결론부터 말하면 파티션의 마지막 섹터에 NTFS 복사본이 위치합니다.\
   \
   우선 파티션 1번이 사용하는 섹터를 살펴봅시다.\
   128번 부터 시작해서 204,800섹터를 사용합니다. \
   즉, **128\~204,927** 까지 총 204,800섹터를 사용하게 됩니다.\
   (128 처음부터 204,927 마지막까지 사용하기에 -1을 하여야 합니다.)\\

   그런데 NTFS BR에서는 204,799 가 전체 섹터 수 입니다. \
   그렇다면 NTFS가 사용하는 섹터가 **128섹터 \~ 204,926**섹터(총 204,799섹터)를 사용합니다.\
   \
   정리하면 파티션 내에 파일시스템이 위치하는데\
   파티션은 128 \~ 204,927  내에 파일 시스템이 128\~204,926 섹터를 사용하는 것입니다.\
   그리고 NTFS의 복사본은 파티션의 마지막섹터인 204,927 위치합니다.\
   \
   **즉, 엄밀히 따지면 NTFS의 복사본은 파일시스템 내에 위치하지 않고 파티션 마지막에 위치한다.**

9. 그럼 파티션의 마지막 섹터 위치를 계산해봅시다.\
   파티션 시작 위치 + 파티션 전체 섹터 수 - 1 섹터\
   128 + 204,800 - 1 = 204,927 섹터입니다.\\

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FIUykbgo7z26DnNgcGRN1%2Fimage.png?alt=media&#x26;token=0fbd3b96-99dc-40cd-8384-23df4e23833b" alt="" width="563"><figcaption></figcaption></figure>

10. FTK Imager에서는 더 간단하게 접근이 가능합니다.\
    파티션 선택 후 가장  밑으로 내리면 마지막 섹터가 있습니다.

    <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FezabypioNBT3qavHOAjo%2Fimage.png?alt=media&#x26;token=cbc54bd8-01aa-41bf-8332-0d0bdc531d95" alt=""><figcaption></figcaption></figure>

11. 그렇다면 NTFS의 가장 마지막 섹터를 FTK Imager에서 가보고 싶네요!\
    우리 계산상이라면 128 + 204,799(NTFS 총 섹터 수) -1 = 204,926 가 나와야 하는데 실제로 그럴까?\
    우리 예상보다 낮은 204,919 값을 나타내고 있습니다.

    <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2Fq61IiSS1HawwOqmCivoe%2Fimage.png?alt=media&#x26;token=533e0801-c79c-4315-8fc7-3349e958ede8" alt=""><figcaption></figcaption></figure>

## 2-3) NTFS의 데이터 영역

1. 음 이상하다. 왜  그럴까요? \
   이제 NTFS 전체적인 데이터 구조를 정확히 파악하면 왜 그런지 알 수 있을 것입니다.

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FwoUv06IThVNSJ4Gq8jnI%2Fimage.png?alt=media&#x26;token=9e2b79c0-5df5-4d12-8b58-8dfdaf45b0bb" alt=""><figcaption></figcaption></figure>

   먼가 굉장히 성의 없이 생겼지만 결론적으로 NTFS는모든 영역이 데이터 영역 입니다.\
   그런데 이전 FAT32 에서 디렉토리 엔트리에서 클러스터 위치를 나타내고 있고, \
   FAT 영역도 모두 해당 클러스터의 상태를 활용하고 있습니다. \
   즉, 이 데이터 영역도 모두 클러스터 단위로 접근하게 됩니다. NTFS도 마찬가지입니다.\
   따라서 섹터로 계산해서 따로 접근 하는 부분이 없습니다.
2. 이 전체 영역에 대해서 클러스터를 만들면 몇 개를 만들어야 할까요? 우선 위에서 우리가 확인한 Cluster per Sector 를 보면 8개인 것을 알 수 있습니다.\
   \
   그렇다면 NTFS 파일시스템 전체 섹터 수 / 클러스터 당 섹터 수 하면 최대한 나올 수 있는 클러스터가 될 것입니다. 한번 계산해 봅시다.\
   204,799 / 8 = 25,599 클러스터
3. 자 그렇다면 마지막 클러스터에 한번 접근해보도록 합시다. \
   25,599개의 클러스터 수를 가지며 0번 클러스터부터 시작하기에 마지막 클러스터 번호는 25,598이 될 것입니다. \
   128 + (25,598 X 8) = 204,912 (마지막 클러스터 시작 위치)\
   그럼 마지막 204,912 + 8 - 1   = 204,919 섹터입니다.  (1 빼는 이유는 204,912섹터 를 포함하기 때문)

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2Fmfi6QukZRCIPafQyioMv%2Fimage.png?alt=media&#x26;token=15a5cac1-4146-4d14-80f7-36794eb38b28" alt=""><figcaption></figcaption></figure>
4. 그렇다면.. 다시 정리하면.. \
   NTFS 데이터 마지막 섹터 204,919 \
   NTFS 전체 기준 마지막 섹터 204,926 \
   총 7섹터가 차이나게 됩니다.
5. 만약에 NTFS 부트레코드에서 전체섹터 수를 1올려서 파티션의 마지막 섹터까지 포함하였다면 \
   클러스터가 하나 더 만들어지지 않을까요?\
   그렇다면 맨마지막 클러스터의 마지막 섹터에는 NTFS BR의 복사본이 위치하지 않을까?\
   \
   만약.. 우리가 디스크를 꽉 채워서 맨마지막 클러스터의 모든 영역에 데이터를 쓴다면!!! \
   NTFS BR의 복사본을 덮어 쓸 수 있지 않을까요?\
   \
   아마 이런 이유로 안정성 확보를 위해 BR에서 전체 섹터 수를 1 제외하는 것으로 보입니다.
6. 또한 204,920\~204,926 까지는 사실상 데이터  영역이 아닌 빈 섹터가 될 것입니다.\
   FTK Imager에서는 해당 영역을 따로 계산해서 보여주고 있습니다.\
   \
   사실상 이곳은 운영체제가 건들지 않은 섹터에 해당하겠지요!! \
   이렇게 파일시스템 특성으로 생기는 빈 공간을 **파일시스템 슬랙**이라고 합니다. \
   그렇지만 우리는 알게 되었습니다.  이런 슬랙 영역도 주요 분석 대상이기에 후에 모아서 한번 살펴보도록 합시다.

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FMUxOZ6tSCjN3VU51ocFG%2Fimage.png?alt=media&#x26;token=45cdcb1d-9f74-432a-bb37-6d9a22be7c7e" alt=""><figcaption></figcaption></figure>
