[Suninatas] Forensic 32

·2025년 1월 24일

Security

목록 보기
23/60

문제

파일을 다운로드하게 되면 손상된 USB 이미징 파일이 있다.
Hex Editor로 열게 되면 아래와 같은 화면을 볼 수 있다.

FAT32 파일 시스템이라는 것을 알 수 있다.
냅다 FTK Imager에 넣으려고 시도해보니 열리지 않았다.

삭제되었거나 조작된 부분이 있을거라고 생각했고, 보통 워게임의 경우 파일 시스템 구조를 조작하니 FAT32 파일 시스템의 구조에 대해서 찾아보았다.

FAT32 파일 시스템 구조

Reserved Area

  • 파일 시스템 구조의 가장 앞에 위치하여 기본 정보를 저장
  • 크기는 가변적
  • 32개의 sector가 사용됨

데이터가 정해져 있는 sector

  • 0번, 6번 sector : 'Boot Sector'
  • 1번, 7번 sector : 'FSINFO'
  • 2번, 8번 sector : 'Boot Strap'

Boot Sector

  • 파일 시스템의 핵심 정보와 부팅 코드를 포함
  • BIOS Parameter Block : 파일 시스템 및 디스크의 기본 설정
    • OEM 이름 : 파일 시스템을 생성한 프로그램 정보
    • 섹터 크기 : 섹터 하나의 크기
    • 클러스터 크기 : 클러스터당 섹터 수
    • FAT 영역 시작 위치: FAT 테이블의 첫 번째 섹터
    • 루트 디렉토리 시작 위치 : 데이터 영역에서 루트 디렉토리 위치
    • 부팅 코드 : 운영 체제를 로드하는 머신 코드
  • 실행 가능한 부트 코드
  • 0번 섹터 (VBR - Volume Boot Record)
  • 6번 섹터 : Boot Sector의 백업본으로, 0번 섹터가 손상되었을 경우 복구에 사용

FSINFO (Filesystem Information Sector)

  • FAT32 파일 시스템의 상태 정보를 기록
  • 디스크의 여유 공간을 관리하기 위한 정보를 저장
  • 디스크에서 다음에 사용할 클러스터를 추적
  • Signature Field : FSINFO를 나타내는 값
  • Free Cluster Count : 디스크에 남아 있는 빈 클러스터의 개수
  • Next Free Cluster : 파일 시스템에서 다음으로 사용할 빈 클러스터의 번호
  • 1번 섹터 : FSINFO의 주요 정보 저장
  • 7번 섹터 : FSINFO의 백업본으로, 1번 섹터 손상 시 복구에 사용

Boot Strap

  • 부트 로더 또는 초기화 코드를 저장
  • 운영 체제 부팅 절차를 지원
  • 실행 코드 : 부팅 가능한 디스크라면, 운영 체제를 메모리에 로드하는 코드
  • 종료 서명 : 부트 섹터의 끝을 나타내는 서명 값 (0x55AA)
  • 2번 섹터 : Boot Strap 코드의 기본 저장 위치
  • 8번 섹터 : Boot Strap 코드의 백업본, 2번 섹터 손상 시 복구에 사용

Reserved Area에서 눈여겨보아야할 시그니처 부분

영역오프셋(바이트)시그니처 값설명
Boot Sector0x00EB XX 90점프 코드: 부트 코드를 실행하기 위한 점프 명령 (XX는 가변적).
0x03"MSDOS5.0" 또는 유사 값OEM 이름: 디스크 포맷 도구 또는 파일 시스템의 이름.
0x0BBytesPerSector섹터당 바이트 수 (예: 512 바이트).
0x0DSectorsPerCluster클러스터당 섹터 수 (FAT32에서는 일반적으로 8).
0x0EReservedSectorsReserved Area에 있는 섹터 수 (일반적으로 32).
0x24SectorsPerFATFAT 테이블의 섹터 수.
0x2A0x29확장 부트 레코드 시그니처 (확장 정보를 나타냄).
0x2BVolumeID볼륨 ID (랜덤으로 생성되는 고유 값).
0x36FileSystemType파일 시스템 타입 (예: "FAT32 ").
0x1FE ~ 0x1FF0x55 0xAA부트 시그니처 (디스크의 유효성을 확인하기 위한 마커).
FSINFO0x0052 52 61 41 (RRaA)FSINFO 시그니처 1 (FSINFO 파일의 유효성 확인).
0x1E472 72 41 41 (rrAa)FSINFO 시그니처 2 (추가 유효성 확인).
0x1E8FreeClusterCount사용 가능한 클러스터 수 (미사용 클러스터 수를 추적).
0x1ECNextFreeCluster다음에 사용할 클러스터 번호.
0x1FE ~ 0x1FF0x55 0xAAFSINFO의 종료 시그니처.
Boot Strap Code-코드 영역운영 체제 부팅을 위한 실행 코드가 포함됨.
0x1FE ~ 0x1FF0x55 0xAABoot Strap 영역의 종료 시그니처.

FAT Area

클러스터의 상태 관리, 파일 데이터를 찾기 위한 맵 역할로 두 개의 FAT 테이블이 복제본으로 저장되어 있다.

Data Area

디스크의 나머지 공간으로, 파일 데이터와 디렉토리 엔트리가 저장된다.

  • 클러스터 단위로 관리
    • 클러스터는 FAT 테이블에 의해 추적
    • 루트 디렉토리와 하위 디렉토리 엔트리도 이 영역에 저장
  • 파일 데이터
    • 파일의 데이터는 여러 클러스터에 걸쳐 있을 수 있으며, FAT 테이블을 통해 클러스터 체인을 연결

문제 풀이

다시 문제 풀이를 해보면 문제를 풀 때 눈여겨 보아야 할 부분은 시그니처 부분인데, 표와 Gex Editor를 비교해보자.

자, RRaA 를 찾게 되면, FSINFO 섹터의 첫 부분을 알 수 있다.
Boot Sector에서 부트 시그니처 값인 0x1FE~0x1FF에 위치한 값이 55 AA여야 하는데 0x126~0x127에 위치한 것으로 보아하니 아마 0으로 덤프된 값이 삭제된 것이 아닐까 생각하며 부트 시그니처 부분이 0x1FE에 올 때까지 0을 삽입했다.

  • 0xD26에 위치한 아이는 백업본

이렇게 수정해준 후 FTK Imager에서 열어줍니다.

우리가 여기에서 알아야 할 것은 1. 테러 계획이 들어있는 문서의 수정 일시(UTC+9) 2. 다음 테러 장소 였기 때문에 가장 수상해보이는 2차 테러 계획이라는 문서를 우클릭하여 export 해주었습니다.

문서를 열어보면 아래와 같습니다.

다음 테러 장소는 Rose Park인 것 같고, 문서의 수정 일시는 속성을 통해 알 수 있었습니다.

저는 문제해결을 하기 위해 Cyberchef를 통해 MD5 값을 구해주었습니다.
2016-05-30_11:44:02_Rose Park의 해시값을 구해주었고, 먼저 한 번 풀었기 때문에

이러한 문구가 떴습니다.


다음 번 포스팅에서는 다른 포렌식 문제 풀이, 논문 분석, 파일 시스템 개념 중 하나에 관해 작성해보지 않을까 싶습니다.

참고
https://hec-ker.tistory.com/268
워게임 라이트업 기술 블로그들...

profile
Whatever I want | Interested in DFIR, Security, Infra, Cloud

0개의 댓글