• [드림핵] 윈도우 포렌식 - 시스템 로그

    2026. 5. 17.

    by. 김예삐

    시스템 로그

    Windows 사스템에서 자동으로 기록되는 시스템 로그 파일

    • $LogFile
    • $UsnJrnl

    ⇒ 📁파일의 생성, 변경, 삭제 이력을 추적 가능!


    $LogFile

    • 파일시스템의 저널링(Jonurnaling) 기능을 위해 존재하는 파일
    • 파일 혹은 디렉토리를 생성하거나, 수정하거나 삭제하는 행위가 각각 트랜잭션에 해당하고, 이러한 트랜잭션을 기록하는 파일
    저널링(Jonurnaling)
    - 데이터 변경을 디스크에 반영하기 전에 행위를 기록하여, 오류가 발생했을 때 복구할 수 있도록 하는 기능
    - 데이터를 기록하기 이전 그 위치와 시점을 별도의 파일에 기록해두고, 문제가 발생하면 해당 파일을 참조하여 작업이 이루어지기 이전 상태로 시스템을 복원
    - 저널링의 단위는 트랜잭션 (쪼갤 수 없는 업무 처리의 최소 단위) 

     

    $LogFile 수집 및 분석

    • 경로: [root]\$LogFile 
    • 사용도구: NTFS Log Tracker

    https://sites.google.com/site/forensicnote/ntfs-log-tracker

     

    blueangel's ForensicNote - NTFS Log Tracker

    NTFS Log Tracker v1.9

    sites.google.com

     

    $LogFile, $MFT 추출

    (이대로 추출해서 파일 탐색기로 열어보면 안 보임)

     

     

    파일 안에 추출은 잘 되어 있으므로 속성 제거해주면 보임

    attrib -s -h "경로\$LogFile"
    attrib -s -h "경로\$MFT"

    참고로 S = System, H = Hidden 을 뜻하고, 해당 파일의 시스템 속성과 숨김 속성을 제거하는 명령어

     

     

    $LogFile, $MFT의 경로를 넣어주고 Parse 버튼 누르기 

     

     

    결과를 저장할 DB 파일 이름, 경로 설정 → Start 

     

     

    DB Browser for SQLite로 확인하면 더 보기 편함 !

    https://sqlitebrowser.org/dl/

     

    Downloads - DB Browser for SQLite

    (Please consider sponsoring us on Patreon 😄) Windows Our latest release (3.13.1) for Windows: Free code signing provided by SignPath.io, certificate by SignPath Foundation. Windows PortableApp Our latest release (3.13.1) for Windows: Note - If for any r

    sqlitebrowser.org

     

    (드림핵 공부하기 바로 전에 롤 했더니 롤 로그가 보이네 ..)

     

    EventTime

    • 이벤트가 발생한 시간으로, 시스템 시간으로 표현됨

    Event

    • 이벤트에 대한 정보
    • Renaming File은 파일 이름이 변경된 이벤트를 의미

    Detail

    • 이벤트에 대한 상세 기록

    Filename&FullPath

    • 파일의 이름과 전체 경로 확인 가능 

     

    LogFile 분석 팁

    Event 설명
    File Creation 파일 생성
    File Deletion 파일 삭제
    Writing Content of Resident File 파일 데이터 변경
    * Resident File: 700 Byte 이하의 파일
    Writing Content of Non-Resident File 파일 데이터 변경
    * Non-Resident File: 700 Byte 이상의 파일
    Renaming File 파일 이름 변경
    Directory Creation 디렉토리 생성
    Directory Deletion 디렉토리 상세
    • 이벤트가 발생한 시간은 EventTime 컬럼을 통해 확인 가능 
    • 각 파일에 대한 시간 데이터 (CreateTime, ModifiedTime, MFT_ModifiedTime, AccessTime)도 확인 가능
    • FullPath 필드는 $MFT에 저장된 데이터와 연계해 해당 파일의 전체 경로를 나타낸 것 
    • LSN 뿐만 아니라 RedoInfo 컬럼을 통해 정확히 어떤 트랜잭션이 일어났는지 상세한 디스크 변경 과정도 알아낼 수 있음
      → 이를 응용해 시스템에 발생했던 트랜잭션을 거꾸로 되돌리면서 파일 복구 작업도 가능
      https://github.com/F-INSIGHT/Slides/blob/master/FITALK/2013/(130525)%20%23FITALK%20-%20NTFS%20Log%20Tracker%20(korean).pdf
     

    Slides/FITALK/2013/(130525) #FITALK - NTFS Log Tracker (korean).pdf at master · F-INSIGHT/Slides

    Contribute to F-INSIGHT/Slides development by creating an account on GitHub.

    github.com


    $UsnJrnl 

    • 응용 프로그램이 특정 파일의 변경 여부를 파악하기 위해 사용하는 로그
    • NTFS 파일시스템에서 지원하는 기능 중 하나 
    • $LogFile과는 달리 파일 복원 목적으로 기록되는 로그가 아니라, 단순 파일에 대한 작업이 있었다는 사실을 확인하기 위한 목적으로 생성 (시간 순서대로 엔트리를 저장하고, 오래된 데이터는 삭제) 

     

    $UsnJrnl 경로

    • 실제 파일 이름은 $J 
    • 경로: [root]\$Extend\$UsnJrnl\$J 

     

     

    $J와 $MFT 함께 추출 

     

     

    $UsnJrnl, $MFT 경로 설정하고 → 분석 시작

     

     

    이번에도 결과를 저장할 DB 이름과 경로 설정

     

     

    TimeStamp

    • 이벤트가 발생한 시각 (시스템 시각으로 출력) 

    FileName

    • 이벤트가 발생한 대상 파일 

    Event

    • 대상 파일에 발생한 이벤트

    FullPath

    • 대상 파일의 경로
    • $MFT와 연계해서 가져오는 데이터 

     

    Event 설명
    File_Created 파일 생성
    File_Deleted 파일 삭제
    Data_Added 파일 데이터 추가
    Data_Overwritten 파일 데이터 덮어 쓰기
    Data_Truncated 파일 데이터 축소
    Basic_Info_Changed 파일/디렉토리의 속성 변경
    Access_Right_Changed 파일/디렉토리의 접근 권한 변경
    File_Closed 파일/디렉토리 닫힘
    File_Renamed_Old -
    File_Renamed_New  파일 이름 변경(전, 후) 
    • 환경에 따라 차이가 있을 수 있지만, $UsnJrnl은 보통 4~5일 정도 기간의 데이터를 보관할 수 있다고 함

    $LogFile, $UsnJrnl 활용

    1. 랜섬웨어 분석 상황

    • 파일의 암호화, 전송할 임시 파일 생성, 원본 파일의 삭제 과정 등 관련된 로그가 다수 생성
      → 이때 트랜잭션을 복구해 몇며 파일을 되살리는 작업이 가능할 수 있음 
    • $UsnJrnl을 통해 파일 암호화, 이름 변경, 압축 등 다양한 이벤트를 확인 가능
      (대부분의 악성코드는 폴더/파일을 시스템에 생성하거나 변경하도록 설계되어 있기 때문에 $LogFile, $UsnJrnl 분석이 아주 유용)

    2. 자료 유출 사건 분석 상황

    • 회상 내부망에서 파일을 다운로드 받아, USB로 해당 파일을 옮기고, 다운로드 받은 파일을 삭제했다고 가정
    • 내부망 PC에서 파일 다운로드(파일 생성, 데이터 쓰기) 기록이 발견될 것이고, 이후 삭제 기록이 발견될 것
    • USB가 NTFS 파일시스템이라면, 해당 USB 내에서도 LogFile, $UsnJrnl이 발견될 것
      → 파일이 생성된 흔적과 생성한 시각을 찾아낼 수 있음

    3. 안티-포렌식 행위 분석 상황

    • 안티 포렌식: 디지털 포렌식 분석을 막기 위해 의도적으로 파일을 삭제하거나 훼손하는 행위
    • $LogFile, $UsnJrnl 파일에서 공격자가 삭제한 아티팩트의 종류, 삭제한 시간 확인 가능

     

    교차 검증

    • 하나의 사건이 발생한 흔적을 여러 자료로부터 중복되게 확인하는 것 
    • 같은 이벤트를 기록하는 여러 아피택트를 동시에 관찰해 사실 관계를 올바르게 파악하는 것이 맞는지 중복해서 확
    • 같은 아티팩트를 도구 A와 도구 B를 통해 동시에 분석해봄으로써 해당 도구가 해당 아티팩트를 정상적으로 분석했는지 확인

    ⇒  디지털 포렌식 분석을 수행할 때 실수를 줄이고 편향된 분석을 하지 않기 위해서는 교차 검증이 필수적 


    Track_the_file

    문제 설명
    드림이는 컴퓨터를 살펴보다가 수상한 점을 발견했습니다. 바로 malware.exe라는 프로그램이 컴퓨터에 생성되어 있다는 것이었어요. 드림이는 누군가가 USB를 연결해 파일을 복사해온 것으로 추측하고 있습니다.
    시스템 로그를 분석해 malware.exe 파일이 시스템에 복사된 시간을 찾아보세요!

    Info
    FLAG = DH{yyyy_MM_dd_hh_mm_ss}
    yy, MM, dd, hh, mm, ss는 시간을 표현하는 방식으로 각각 연, 월, 일, 시, 분, 초를 나타냅니다.
    예를 들어 시간이 2024-01-02 03:04:05라면, FLAG는 DH{2024_01_02_03_04_05}입니다.
    시간은 UTC+9를 기준으로 합니다.

    $LogFile, $J 추출 

     

     

    ㅎ..이거 저만 안 열리나요? 

     

    방법 변경.. DB 안에 있는 UsnJrnl 테이블 전체를 CSV로  추출.. 

    (보기 너무 불편해서 malware.exe만 따로 추출해서 확인해야겠다)

     

     

    malware.exe 파일이 시스템에 복사된 시간 2024-04-04 21:10:46 (UTC+9)

    (참고로 실행 흔적 시각은 MALWARE.EXE-F029871F.pf 생성 시각인 21:36:12)

     

     

    테이블 새로고침 하니까 드디어 제대로 나온다.. 

     

    🎉DH{2024_04_04_21_10_46}

    댓글