$J
$J: NTFS의 로그 파일로, 로그에는 파일의 생성, 이름 수정, 삭제와 같은 파일의 변경사항이 포함된다. 구조는 단순히 레코드의 연속으로 이루어져 있으며, $J 파일은 오로지 변경사항만을 위해 기록된다. $UsnJrnl 파일의 ADS로 저장되어 있다. ($UsnJrnl:$J)
접근 방법으로는 $UsnJrnl의 MFT Entry에서 $Data(0x80)의 RunList를 참조하여 접근한다.
아래는 $J를 레코드별로 구분한 모습과 레코드의 필드에 대한표이다.
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'파일의 실행 방법은 "wmic process call create 'ADS 적용된 파일'"명령어를 사용하여 실행할 수 있다. 실행 결과 해당 시스템의 'C:\Users\korea'이하에 '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