디지털포렌식과 친해지기
  • 디지털포렌식전문가 2급 실기와 친해지기(실기)
    • 1. 디지털 포렌식 실기 준비하기
      • 1. BIT, BYTE, 파일 그리고 Hash
      • 2. 섹터와 사본 이미지 생성
        • 2-1. FTK Imager 활용 물리이미징(Registry 쓰기방지)
        • 2-2. EnCase 활용 물리이미징(EnCase 쓰기방지)
        • (연습용) 가상디스크 만들기
      • 3. 파티션과 파일시스템 복구
        • 3-1) 파티션과 파티션 테이블
          • 3-1.1) GPT 헤더, 파티션 Entry 복구
        • 3-2) 파일시스템과 파일시스템 복구
        • 3-3) 파일시스템 복구 실전 연습
      • 4-1. 무료도구 활용 분석연습
        • 0) 이미지 획득 및 파일시스템 복구
        • 1) 저장매체와 파일시스템 분석
        • 2) 파일과 친해지기
        • 3-1) 파일 관련 분석 1
        • 3-2) 파일 관련 분석 2
        • 4-1) 윈도우 아티팩트1
        • 4-2) 윈도우 아티팩트2
        • 5) 주요 응용 프로그램 아티팩트
          • 5-1) Sqlite 열어보기
        • 6) 키워드 검색 / Base64 Decode
        • 7) bitlocker
        • 8) 가상머신(참고)
        • 무료도구 활용 분석연습 정리
      • 4-2. EnCase 활용 분석연습
        • 0) 이미지 획득 및 파일시스템 복구
        • 1) 저장매체와 파일시스템 분석
        • 2) 파일과 친해지기
        • 3-1) 파일 관련 분석 1
        • 3-2) 파일 관련 분석 2
        • 4-1) 윈도우 아티팩트1
        • 4-2) 윈도우 아티팩트2
        • 5) 주요 응용 프로그램 아티팩트
          • 5-1) Sqlite 열어보기
        • 6) 키워드 검색 / Base64 Decode
        • 7) bitlocker
        • 8) 가상머신(참고)
        • EnCase를 활용한 분석연습 정리
      • 5. 주관식 - 기본 절차 및 증거법 관련
        • (정리 중) 디지털 증거관련 주요 판례
      • 6. 답안 제출 및 보고서 작성
      • 7. 요령 및 주의사항
    • 2. 실력 다지기
      • 1. 문제 저장매체 만들고 풀어보기
        • 기초 연습문제1-분석해보기(무료도구)
        • 기초 연습문제1-분석해보기(EnCase)
      • 2. 파일시스템 복구 연습
      • 3. NTFS 로그 분석 연습
    • 3. 실전 연습 문제
      • 2018 실전 연습 문제
        • 2018 실전 연습 - 분석해보기(무료도구)
        • 2018 실전 연습 - 분석해보기(EnCase)
      • 2019 실전 연습 문제
        • 2019 실전 연습 - 분석해보기(무료도구)
        • 2019 실전 연습 - 분석해보기(EnCase)
      • 2020 실전 연습 문제
        • 2020 실전 연습 - 분석해보기(무료도구)
        • 2020 실전 연습 - 분석해보기(EnCase)
      • 2023 실전 연습 문제(종합유형)
        • 2023 실전 연습 - 분석해보기(무료도구)
        • 2023 실전 연습 - 분석해보기(EnCase)
      • 2024 실전 연습 문제
        • 2024 실전 연습 - 분석해보기(무료도구)
        • 2024 실전 연습 - 분석해보기(EnCase)
    • 4. 기출 유형
  • 디지털포렌식과 친해지기
    • 1. BIT의 저장
      • 0) 준비사항!
        • 0-1) 주요 분석 도구 간단 소개 및 설정
        • 0-2) Python 을 이용한 개발 환경 구성
        • 0-3) Python 소스로 실행파일 만들기
      • 1) BIT, BYTES와 파일 그리고 Hash
        • 1-1) Hex Viewer 만들기
        • 1-2) BIT의 저장(참고)
      • 2) 저장매체와 섹터 그리고 물리이미징
        • 2-1) 가상 디스크 설정
        • 2-2) 물리이미징(raw) 실습
        • 2-3) 물리이미징 수집 도구 만들기(기초)
      • 3) 파티션
        • 3-1) MBR 파티션 테이블 구조
        • 3-2) GPT(GUID Partition Table) 구조
        • 3-3) 파티션 분석 도구 만들기(기초)
      • 4) 파일시스템 기초 분석
        • 4-1) 파일시스템 직접 만들어 보기
        • 4-2) FAT32 분석
          • 4-2.1) FAT32 분석(BR, Directory Entry - 데이터의 접근)
          • 4-2.2) FAT32 분석 2(FAT, LFN, 삭제)
          • 4-2.3) FAT32 분석 3 (특징과 분석 도구)
        • 4-3) NTFS 기초 분석
          • 4-3.1) NTFS 기초 분석(NTFS BR과 DATA 영역)
          • 4-3.2) $MFT와 MFT Entry
          • 4-3.3) MFT Entry의 주요 속성1($SI,$FILE,$DATA)
          • 4-3.4) MFT Entry의 주요 속성2(인덱스1, resident/Nonresident)
          • 4-3.5) MFT Entry 찾기(인덱스2, $ATTRIBUTE_LIST)
          • 4-3.6) NTFS 에서 파일의 접근 정리
          • 4-3.7) NTFS 주요 메타데이터 파일
          • MFT Entry 분석용
      • 5) 파티션과 파일시스템
      • 6) 사본 이미지 생성(논리/물리이미징)
      • 7) 파일과 친해지기
Powered by GitBook
On this page
  • 1. 파일시스템 직접 만들어 보기
  • 1-1) 파일시스템 만들기 처음 고민할 것
  • 1-2) 파일시스템 만들고분석 해보기
  • 1-3) 파일 탐색기 만들기
  • 2. 파일시스템 포맷하기
  1. 디지털포렌식과 친해지기
  2. 1. BIT의 저장
  3. 4) 파일시스템 기초 분석

4-1) 파일시스템 직접 만들어 보기

1. 파일시스템 직접 만들어 보기

지금까지 우리는 저장매체의 0번 섹터인 MBR부터 파티션 테이블 구조를 공부하였고, 드디어 원하는 파티션 영역에 시작까지 도착하였습니다. 이제 파티션 시작 섹터부터 마지막 섹터 내에 우리가 파일을 저장하고 관리할 파일시스템을 넣어보자. 이 실습은 무조건 필수는 아니나 파일시스템에 대해 어떤 것인지 잘 알 수 있는 좋은 실습일 것입니다.

1-1) 파일시스템 만들기 처음 고민할 것

  • 아주 간단한 구조를 가진 파일시스템에 대해 고민을 먼저 해보고 구현을 해보겠습니다. 당연히 처음부터 모든 구조를 만들면 어려울 수 있으니, 최소한만 아래 내용을 참고하여 ChatGPT를 이용하여 만들어 봅시다.

  • 빠른 실습을 위해 아래 소스를 받아 한번 실행 해보시고, 이후에는 본인이 직접 소스를 만들고 활용해보시는 것을 추천합니다.

  1. 파일시스템부트 코드

우선 파일시스템 가장 시작 위치(파일시스템 부트코드라고 하자)에는 파일시스템에 대한 필요한 정보를 고민해보겠습니다. [0번 섹터]

  1. 파일시스템 표시(8 BYTE) : 원하는 텍스트 / "Start_FS"

  2. 파일시스템 전체 크기(4 BYTE) : 100MB를 표시해보자.

  3. 파일시스템 생성 시간(4 BYTE) : 현재시간을 저장

  4. 파일시스템의 첫번째 폴더 위치(4 BYTE) : 1로 지정하여 1번 섹터를 가리키자

  5. 빈 공간(490 BYTE)

  6. 부트시그니처(2 BYTE) : 원하는 시그니처 지정해보자 / "AA BB"

  1. 파일 시스템 루트 폴더 / 파일 엔트리

  • 첫번째 폴더(루트) 위치해야 할 정보는 무엇일까? 폴더 내 파일에 관한 정보에 들어가야 할 것은 몇 바이트씩 하면 좋을까?

  • 처음이니 가볍게 파일시스템 1섹터(루트폴더)에 8개의 파일정보(파일엔트리)를 가질 수 있도록 해보겠습니다.(파일 엔트리 크기 32BYTE로 1섹터에 16개의 파일엔트리를 저장해보자)

  1. 파일명(14 BYTE)

  2. 파일인지 폴더인지 여부(1 BYTE) :00이면 파일, 11이면 폴더

  3. 파일 삭제 여부(1 BYTE) : 00이면 삭제 안함, FF이면 삭제

  4. 파일 크기(4 BYTE) : 파일의 크기 / 폴더는 0

  5. 파일의 생성시간(8 BYTE) : 파일 생성시간 기록

  6. 시작 섹터번호(4 BYTE) : 파일의 시작 섹터번호

  1. 텍스트로 저장된 파일 만들기

[ 루트 폴더(1번 섹터)]

  1. 루트 파일엔트리 1번 파일명 : SUBFOLDER / 폴더 시작섹터 : 5번

  2. 파일엔트리 2번 파일명 : FILE.TXT 시작섹터 : 100 번 파일크기 : 100섹터의 데이터 내용의 크기 (100번 섹터 내용) : "파일 시스템 첫 도전!"

[5번 섹터]

  1. 파일엔트리1번 파일명 : sub_file.txt 시작섹터 : 20번 파일크기 : 20섹터의 데이터 내용의 크기 (20번 섹터 내용) : "서브폴더 내 파일!!"

1-2) 파일시스템 만들고분석 해보기

ChatGPT 를 이용하여 나만의 파일시스템 만들기
  • 나만의 파일 시스템 만들기 내역

  • 소스(파일시스템 만들기 소스 , 파일시스템 분석 소스)

  • 나만의 파일시스템 시스템 만들기

  1. 우선 위 소스를 실행 후 python으로 실행하여 봅시다. > python "나만의 파일 시스템 만들기.py" 위 소스를 실행하면 위의 요구사항대로 구현한 파일시스템 이미지가 생성됩니다.

  2. HxD를 실행 한 뒤 도구 - 디스크 이미징 열기에서 위에서 생성한 파일시스템을 열어봅시다. 열어보면 섹터 기준을 넣으면 되는데 대부분 512byte가 1섹터이기 때문에 512로 설정됩니다.

  3. 0번 섹터(파일시스템 부트 섹터)한 번 분석해 봅시다.

    1. 파일시스템 표시(8Bytes) : Start_FS 로 원하는 파일시스템 시그니처로 지정(큰 의미 없음)

    2. 파일시스템 전체 크기(4 BYTE) 00 00 40 06 -> 06 40 00 00 = 104,857,600 = 100 Mbytes

    3. 파일시스템의 첫 번째 폴더 위치(4 BYTE) 01 00 00 00 = 1번 섹터 위치

    4. 1섹터 마지막 2바이트 : AA BB 로 우리가 임의 로 지정한 시그니처

    사실 시그니처 부분은 우리가 필요할 수도 있고 필요하지 않는 영역이기는 하나, 만약 우리가 만든 파일시스템이 많은 사람이 쓰게 된다면, 다른 파일시스템과 구분을 하기 위한 용도로 사용 가능합니다. 시간 정보는 HxD 에서 +9시간을 더 해야 합니다. (UTC +9 한국시간)

  4. 바로 밑으로 내리면 1번 섹터이며 1번 파일엔트리를 살펴보겠습니다.

    1. 파일명 : SUBFOLDER

    2. 종류 : 11 (폴더)

    3. 삭제여부 : 00 (삭제 안함)

    4. 파일크기 : 0 BYTES

    5. 생성시간 (바뀔 수 있습니다.)

    6. 시작섹터 번호 : 05 00 00 00 -> 00 00 00 05, 5번 섹터에 해당 폴더 정보 위치

  5. 그럼 이제 2번 파일 엔트리를 분석해보도록 해봅시다. 1. 파일명 : FILE.txt 2. 종류 : 00 (파일) 3. 삭제여부 : 00 (삭제 안함) 4. 파일크기 : 1A 00 00 00 -> 00 00 00 1A (26 bytes) 5. 생성시간 6. 시작섹터 번호 : 64 00 00 00 -> 00 00 00 64 (16진수) -> 100(10진수) / 100번 섹터

  6. 우선 100번 섹터를 먼저 확인해보도록 하겠습니다. 어떤 값이 있는데 무엇인지 알 수 없으나 데이터가 는 것을 볼 수 있습니다.

  7. subfolder의 데이터가 있는 5번 섹터를 한번 가보도록 해봅시다. 자세히 보면 다시 파일 엔트리가 위치는 것을 볼 수 있습니다. 즉, 하위 폴더에 파일이 위치가 있는 것 입니다.

    1. 파일명 : sub_file.txt

    2. 종류 : 00 (파일)

    3. 삭제여부 : 00 (삭제 안함)

    4. 파일크기 : 17 00 00 00 -> 00 00 00 17 (23 bytes)

    5. 생성시간

    6. 시작섹터 번호 : 14 00 00 00 -> 00 00 00 14 (16진수) -> 20(10진수) / 20번 섹터

    [20번 섹터]

1-3) 파일 탐색기 만들기

자 그렇다면.. 이제는 위의 과정을 우리가 직접하는 것 보다 파이썬 소스를 이용하여 프로그램화 시키고, 추가로 삭제, 수정도 해보도록 합시다.

  1. 우리 파일시스템의 부트레코드 0번 섹터를 읽고

  2. 1번 섹터에 있는 루트 폴더의 파일 엔트리를 확인하고, 리스트로 보여줌

  3. 파일 엔트리에 있는 파일의 정보들을 보여줌

  4. 파일 엔트리를 봐서 폴더가 아닌 파일이라면, 해당 파일의 시작 섹터에 있는 데이터를 보여줘

  5. 파일의 삭제를 해줘 -> 이때는 파일 엔트리의 삭제여부 값만 FF 로 변경시켜주면 되겠죠!

  6. 삭제한 파일은 가려죠 (체크박스를 두고 체크하면 보이게 해줘)

  7. 파일을 수정해줘 (수정할때 파일 엔트리의 사이즈 등도 업데이트해줘.)

ChatGPT를 이용하여 충분히 만들 수 있을것고, 만드는 과정에서 원하는 대로 안나오면 뭐가 문제인지 파악해서 ChatGPT한테 물어가면서 얼마든지 수정이 가능할 것입니다.

  • 나만의 파일시스템 탐색기 만들기

ChatGPT 를 이용하여 나만의 파일시스템 분석 탐색기 만들기
  • 나만의 파일 시스템 탐색기 만들기 내역 (질문을 통해 만들어진 소스가 한번에 만들어진 것은 아니며, 여러가지 시행착오 후 질문을 정리한 것 입니다.)

  1. "2. 나만의 파일시스템 탐색기.py" 소스의 마지막을 보면 같은 폴더에 이미지 파일이 위치 해야 합니다. 먼저 "1. 나만의 파일시스템 만들기.py"를 실행하면 자동으로 생성되기 때문에 참고하시면 됩니다."

  2. python 명령어를 통해 파일시스템 탐색기 파이썬 코드를 실행해보도록 합시다. > python "1. 나만의 파일 시스템 만들기.py" (파일시스템이미지.img가 만들어져 있으면 실행 할 필요 없음) > python "2. 나만의 파일 시스템 탐색기.py"

  3. 파일을 더블클릭 파일의 내용을 새창에서 확인이 가능합니다. 또한 우측에 파일엔트리 분석해서 나온 결과를 확인할 수 있습니다.

  4. 폴더 타입인 부분을 들어가면, 해당 폴더의 파일 엔트리를 분석해서 해당 폴더에 있는 파일을 확인할 수 있습니다. 하단에 Back to Root를 통해 최 상위 폴더로 갈 수 있습니다. (당연하게도 1번 섹터로 가서 리스트를 뿌려주면 되겠죠?)

  5. New File을 선택하면 파일을 만들 수 있습니다. 또한, 파일명과 간단한 텍스트를 저장할 수 있습니다.

  6. 먼저 FILE.TXT 를 수정하여 저장도 가능합니다. 다만 저장하고 나서 재시작을 하거나 SUBFOLDER 갔다가 Back to Root 해야 반영됩니다. (탐색기 개선시 수정 해야 할 내용입니다. 요건 수정을 못했네요!)

  7. 저장 후 HxD에서 새로 이 이미지를 연 다음에 100섹터를 보면 우리가 수정한 내역이 저장 될 것입니다! 다만 그렇다면 100번 섹터의 내용만 수정하면 될까요? 당연히 파일 엔트리의 파일크기가 수정되어야 합니다.

  8. 이제 파일을 삭제한번 해보도록 합시다. 파일 선택 후 Delete File을 선택하면 파일이 삭제됩니다만... 우리는 위에서 처음 구조를 짤 때 파일 엔트리에 삭제여부만 FF 로 변경하는 것으로 하였습니다. 실제로 파일엔트리를 지우거나, 해당 파일의 섹터 영역을 직접 가서 지우는 것은 하지 않았습니다.

  9. 그렇기 때문에 단순하게 FF 여도 보이게 해주면 되겠죠? Show Deleted 를 체크하면 삭제한 파일도 보이는 상태입니다.

  10. 파일을 삭제 할 때 일일이 파일 엔트리를 지우는거 보다는 삭제되었다는 표시만 해주면 조금 편리하지 않을까요? 완벽히 지우기 위해서는 파일 엔트리를 지우고, 해당 섹터를 찾아가서 모두 0으로 덮어쓰거나 하는 방식을 해야 됩니다만.. 우리는 파일 용량이 매우 작기 때문에 상관 없지만, 용량이 매우 크다면 매우 많은 섹터를 사용하게 될 것입니다. 모든 섹터를 일일이 가서 지우는 건 오래 걸릴 것입니다.

2. 파일시스템 포맷하기

  1. 자 이제 파일시스템 포맷을 해보도록 합시다. 포맷하는 방법은 아주 간단합니다. 처음 우리가 이미지 생성한 소스를 그대로 다시 한번 실행하여 봅시다. 당연하게도 생성한 파일시스템 이미지명을 바꾸지 않았다면 초기버전으로 덮어썼을 것입니다.

  2. 이렇게 파일시스템의 구조를 다시 구축하는 것을 포맷으로 이해하시면 됩니다. 물론 이번에는 테스트를 위해 FILE.TXT, sub_file.txt, SUBFOLDER가 있긴 하지만 파일들에 대한 파일 엔트리가 모두 사라질 것이고, 어디에 무슨 파일이 있는지 알 수 없을 것입니다.

  3. 100번 섹터에 00 으로 덮어쓰지 않고 그냥 파일 엔트리 부분만 싹 정리해도 100번 섹터에 어떤 파일이 있었는지 알 수 없고, 그냥 새롭게 만들고 덮어쓰면서 새로 사용하게 되는 것입니다. 우리가 아는 usb, 디스크 포맷이 어떤것인지 이해가 되실거라고 생각됩니다!

  • 우리가 만든 파일시스템은 우리의 탐색기로만 파일의 데이터가 어디에 있는지, 파일명이 무엇인지 파악을 할 수 있습니다. 윈도우나 다른 운영체제는 우리의 파일시스템 구조를 모르기 때문에 활용을 할 수 없는 것이죠.. 만약 제 USB에 위의 파일시스템 구조대로 섹터에 데이터를 입력하면, 우리가 만든 탐색기로만 USB를 읽고 쓰고 할 수 있을 것입니다.

다음 시간부터는 많이 사용하고 알려진 파일시스템에 대해서 분석해보도록 합시다.

3줄 요약

  1. 파일시스템은 만들기 나름이다.

  2. 알려진 파일시스템을 분석하고 공부하는 것은 파일의 부트 코드, 루트 폴더 엔트리, 파일의 내용이 위치하는 섹터번호, 우리가 파일 엔트리라고 명명하였던 것과 유사한 파일을 나타내는 정보 등을 분석하는 것 입니다. 이제 윈도우에서 쓰는 파일시스템을 분석할 수 있으면, 우리가 사용하는 탐색기의 원리를 알 수 있을 것 입니다.

  3. 이런식으로 파일시스템은 운영체제와 상관없이 해당 파일시스템의 구조에 맞게 분석할 수 있다면 파일을 쓰고 0으로 덮어쓰고(삭제) 할 수 있습니다. 반대로 분석할 수 없다면?? 해당 파일시스템의 파일명이 무엇이고, 어디부터 파일 영역인지 알 수 없는 것입니다. (윈도우가 EXT를 지원하지 않기 때문에 EXT 파일시스템으로 구성된 저장매체는 인식하지 못하는 것입니다.)

Previous4) 파일시스템 기초 분석Next4-2) FAT32 분석

Last updated 5 months ago

4KB
5-1) 파일시스템 만들기.zip
archive