Windows Forensic/File System

[Digital Forensic] NTFS File System "$J & ADS" Analysis

DF_m@ster 2023. 12. 27. 17:54
반응형

$J

$J: NTFS의 로그 파일로, 로그에는 파일의 생성, 이름 수정, 삭제와 같은 파일의 변경사항이 포함된다. 구조는 단순히 레코드의 연속으로 이루어져 있으며, $J 파일은 오로지 변경사항만을 위해 기록된다. $UsnJrnl 파일의 ADS로 저장되어 있다. ($UsnJrnl:$J)

 

접근 방법으로는 $UsnJrnl의 MFT Entry에서 $Data(0x80)의 RunList를 참조하여 접근한다.

 

아래는 $J를 레코드별로 구분한 모습과 레코드의 필드에 대한표이다.

$J
Record Field

Offset Info
0x00 ~ 03 Size of Record
0x10 ~ 17 Parent MFT Reference Number
0x18 ~ 1F USN(Update Sequence Number)
0x20 ~ 27 Time Stamp
0x28 ~ 2B Reason Flag
0x01: 기본 $Data 속성에 데이터가 Overwrite됨
0x02: 기본 $Data 속성에 데이터가 추가됨
0x04: 기본 $Data 속성에 데이터가 줄어듦
0x10: 이름 있는 $Data 속성에 데이터가 Overwrite됨
0x20: 이름 있는 $Data 속성에 데이터가 추가됨
0x40: 이름 있는 $Data 속성에 데이터가 줄어듦
0x100: 파일이나 디렉터리가 생성됨
0x200: 파일이나 디렉터리가 삭제됨
0x400: 파일의 확장된 속성이 변경됨
0x800: 접근 권한이 변경됨
0x1000: 객체 명 변경 시 변경 전 이름
0x2000: 객체 명 변경 시 변경 후 이름
0x4000: 인덱스 상태가 변경됨
0x8000: 파일이나 디렉터리의 속성이 변경됨
0x10000: 하드 링크가 생성되었거나 삭제됨
0x20000: 압축 상태가 변경됨(압축됨 or 압축이 풀림)
0x40000: 암호화 상태가 변경됨(암호화됨 or 복호화됨)
0x80000: 객체 ID가 변경됨
0x100000: Reparse 지정 값이 변경됨
0x200000: 이름 있는 $Data 속성의 생성 or 삭제 or 변경
0x80000000: 파일 또는 디렉터리가 닫힘
0x34 ~ 37 File Attributes
0x01: 읽기 전용 파일
0x02: 숨김 파일
0x04: 시스템 파일
0x10: 디렉터리
0x20: Archive 파일
0x40: 디바이스 파일
0x80: 일반 파일
0x100: 임시 파일
0x200: Sparse 파일
0x400: Reparse 파일 or 심볼릭 링크 파일
0x800: 압축 파일
0x4000: 암호화 파일
0x10000: 가상 파일
0x20000: 탐색기가 읽을 수 없는 사용자 데이터 스트림
0x38 ~ 39 Size of File Name
0x3A ~ 3B Offset to File Name
0x3C ~  File Name

 

 

 

ADS

ADS (Alternate Data Streams): NTFS 파일 시스템이 지원하는 메타데이터 유형 중 하나로, 파일이나 디렉터리에 추가적인 데이터 스트림을 저장할 수 있게 해주는 기능이다. ADS를 사용하면 하나의 파일에 여러 데이터 스트림을 가질 수 있게 한다. ADS를 사용하는 파일의 예시로는 Windows 시스템에서 다운로드한 파일의 신뢰성을 판단하기 위해 사용되는 'Zone.Identifier'가 있다.


ADS를 사용하여 저장된 데이터는 원본 파일의 크기를 변경하지 않고 추가 데이터를 숨길 수 있어 표준 파일 탐색 도구로는 보이지 않는다. 이러한 이유로 공격자는 악성 소프트웨어의 탐지를 피하기 위한 용도로 ADS를 사용하여 악성 소프트웨어를 실행한다. ADS 탐지 및 분석 방법은 FTK Imager에서 해당 파일을 클릭하거나, 다른 ADS 탐지 전용 툴을 사용하면 가능하다.

 

1. ADS 파일 생성, 실행, 추출

ADS 파일 생성

'C:\ADS_test' 폴더를 만들고, 이하에 'test.txt' 파일을 저장해 보았다.
"dir /R" 명령어를 통해 해당 디렉터리의 상태를 확인할 수 있다.
아래의 경우 'test.txt'파일 존재와 남은 용량(412,536,197,120 Byte)의 정보를 확인할 수 있다.

디렉터리 확인

 

다음으로, 'hidden.exe'파일을 'test.txt'파일에 ADS를 적용시켜 저장하는 과정이다.

'hidden.exe'는 해당 시스템의 'C:\Users\korea'이하에 'ADS_Success'폴더를 생성하는 실행 파일이다.

명령어는 "type 'ADS 적용할 파일' > 'ADS 적용될 파일'"을 입력한다.

"dir /R" 명령어를 통해 해당 디렉터리의 상태를 확인해 보면, ADS가 적용된 'test.txt:hidden.exe:$DATA'파일의 존재와 남은 용량(411,923,775,008 Byte)이 줄어든 모습을 확인할 수 있다.

ADS 적용 명령어
ADS가 적용된  'test.txt:hidden.exe:$DATA' 파일 확인

 

ADS 파일 실행

ADS가 적용된 'test.txt:hidden.exe:$DATA'파일의 실행 방법은 "wmic process call create 'ADS 적용된 파일'"명령어를 사용하여 실행할 수 있다. 실행 결과 해당 시스템의 'C:\Users\korea'이하에 'ADS_Success'폴더가 성공적으로 생성되었다.

파일 실행 명령어
ADS_Success 폴더 생성

 

ADS 파일 추출

ADS가 적용된 'test.txt:hidden.exe:$DATA'파일의 추출 방법은 "expand 'ADS 적용된 파일' '추출할 파일'"명령어를 사용하여 추출할 수 있다. 추출된 파일의 이름을 'hidden', 확장자를 '.exe'를 하여 실행 파일을 온전히 추출할 수 있다.

 

 

 

2. 'Zone.Identifier' 다운로드 정보 추출

'Zone.Identifier'는 ADS가 적용된 파일로, 인터넷에서 다운로드한 파일의 URL 정보를 담고 있다. 즉 다운로드 한 이미지 파일의 ADS 파일 중 'Zone.Identifier'파일을 읽거나 추출하면 다운로드 URL을 확인할 수 있다.

 

아래는 ADS 파일의 읽기 명령어("more < 'ADS 적용된 파일'")와 추출 명령어("expand 'ADS 적용된 파일' '추출할 파일'")를 순차적으로 적용한 화면이다. 추출된 파일을 열면, URL이 존재함을 확인할 수 있다.

파일 읽기 명령어
파일 추출 명령어

 

 

 

이전 글

[Digital Forensic] NTFS File System "$LogFile" Analysis

 

 

메인 글

[Digital Forensic] NTFS File System Detailed Analysis

반응형