ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • $MFT, $LogFile, $UsnJrnl, 바로가기(.LNK) 개념 및 실습
    Digital Forensics/inflearn 2023. 11. 7. 16:35

    개념 정리

    $MFT

    MFT(Master File Table)

    -NTFS 파일 시스템

    -하나의 파일당 하나의 MFT 엔트리를 가짐

    -$MFT란 MFT 엔트리들의 집합

     

     

    MFT 엔트리

    -파일의 이름, 생성/수정/변경시간, 크기, 속성 등을 가지고 있음

    -파일의 디스크 내부 위치, 파일의 시스템 경로를 알 수 있음

     

     

    $LogFile, $UsnJrnl

    $LogFile

    저널링(Journaling)

    -데이터 변경을 디스크에 반영하기 전에 행위를 기록하여 추후 오류 복구에 활용

    • 데이터를 기록하는 동안 시스템에 문제가 생기면 데이터가 손실됨
    • 문제가 발생하기 전에 "어떤 데이터를, 언제, 어디에 쓰는지" 기록
    • 문제가 발생하면 기록을 토대로 작업이 이루어지기 전 상태로 시스템을 복원

     

    트랜잭션(Transaction)

    -"쪼갤 수 없는 업무 처리의 최소 단위"

    -파일이나 디렉토리 생성, 수정, 삭제, MFT 레코드 변경 등

    -$LogFile의 정의 : 메타데이터의 트랜잭션 저널 정보

     

     

    $UsnJrnl

    -파일이나 디렉토리에 변경 사항이 생길 때 이를 기록하는 로그 파일

    -파일 복원의 목적이 아니라, 단순 파일 작업이 있었다는 사실을 확인하기 위함

    -시간 순서대로 엔트리를 저장하고 기본 크기는 32MB

     

     

    바로가기(LNK)

    -'Windows shortcut'

    -.lnk 확장자

     

     

    생성하는 방법

    -사용자가 직접 생성

    -프로그램 설치 시에 생성

    -운영체제가 자동으로 생성

    자동 생성된 .lnk 경로 예시 : C:\Users\사용자이름\AppData\Roaming\Microsoft\Windows\Recent

     

     

    바로가기(LNK)의 경로들

    (cf. %UserProfile%은 C:\Users\사용자이름 경로랑 같고, %ProgramData%는 C:\ProgramData 경로랑 같음)

     

    바탕화면

    • %UserProfile%\Desktop

     

    시작메뉴

    • %ProgramData%\Microsoft\Windows\Start Menu
    • %UserProfile%\AppData\Roaming\Microsoft\Windows\Start Menu

     

    최근 실행

    • %UserProfile%\AppData\Roaming\Microsoft\Windows\Recent

     

    빠른 실행

    • %ProgramData%\Microsoft\Internet Explorer\Quick Launch
    • %UserProfile%\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch
    • %UserProfile%\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar

     

     

     

     

     

    실습 과정

    $MFT Practice

    -FTK Imager 이용, 경로는 [root]\$MFT 추출

    -MFT Explorer 다운로드

    -https://ericzimmerman.github.io/#!index.md

     

     

    크롬에 MFT Explorer 검색 → Eric Zimmerman's tools 사이트 → Ctrl+F로 mft 검색 → MFT Explorer 0.5.1.0 버전 다운로드(경로 : 바탕화면 - MFT - MFTExplorer) → 폴더 안에 MFTExplorer.exe 실행 → FTK Imager 켜서 제일 좌측 아이콘 Add Evidence Item → Logical Drive → 기본이 C드라이브일 때 C:\ - [NTFS] 로 되어있는지 확인 후 Finish → 좌측 Evidence Tree에서 C:\ 누르고 NONAME[NTFS] 누르면 scanning MFT 로딩뜸 → [root] 아래에 내리다보면 $MFT 파일 우클릭 후 export files → 아까 만들어둔 바탕화면에 있는 MFT 폴더 선택하고 확인 → MFT Explorer 열기 → File → Load MFT → 방금 추출한 $MFT 시스템 파일 열기 → MFT 데이터 잘 나오는지 확인

     

     

    *이 실습할 때 MFT Explorer가 FTK Imager보다 좋은 이유

    MFT Explorer 좌측 하단에 보이는 것과 같이 Properties에 나와있는 것들이 지원되기 때문, 가운데 부분에서는 헥스값도 볼 수 있고, 우측에서는 MFT 엔트리들에서 얻을 수 있는 정보들을 뽑아줌, 구체적으로 시간값 같은거 봐야할 때 MFT Explorer가 더 좋고, 유저가 어떤 경로에 어떤 파일을 가지고 있었는지 분석할 때 좋음

     

     

     

    $LogFile, $UsnJrnl Practice

    -FTK Imager 이용

    • [root]\$LogFile 추출
    • [root]\$Extend\$UsnJrnl\$J 추출

     

    -NTFS Log Tracker 다운로드

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

     

     

    크롬에 ntfs log tracker 검색 → blueangel's ForensicNote → NTFS Log Tracker - Google Sites → 쭉 내려가서 cmd 말고 NTFS Log Tracker v1.71 zip을 바탕화면 아까 만든 MFT 폴더 안에 다운로드 → 들어가서 NTFS Log Tracker v1.71.exe 실행 → 잠깐 FTK Imager 들어가서 C 아래 root 아래 $MFT 있던 곳에서 $LogFile 우클릭 export files 추출 → C 아래 root 아래 $Extend 아래 $UsnJrnl 들어가면 $J 우클릭 export files 똑같이 바탕화면 MFT 폴더에 추출 → 파일탐색기로 MFT폴더에 다 잘 들어있는지 확인 → NTFS Log Tracker 들어가서 총 경로 넣는 5개 칸 중 첫번째 칸에 $LogFile, 두번째 칸에 $J, 네번째 칸에 $MFT를 각각 점3개 버튼 눌러서 넣기 → 좌측 상단 버튼 눌러서 Parse Setting 창 뜨면 SQLite DB File Name에 result 입력하고 밑에 Path는 점3개 눌러서 바탕화면의 MFT 폴더 선택 → Timezone Information을 UTC +09:00 으로 맞추면 데이터들이 다 한국시간에 맞춰 변형되어서 생성 → start → DB Browser for SQLite로 열기(크롬에 DB Browser for SQLite 사이트 검색하고 들어가서 다운로드에서 2021 Version 3.12.2 released 누르고 쭉 내려서 Downloads에 있는 DB.Browser.for.SQLite-3.12.2-win64.msi 눌러서 설치) → 아까 result···.db 파일 얻은거 DB Browser에 던져주기 → 데이터베이스 구조 볼 수 있고, 데이터 보기 눌러서 $LogFile, $UsnJrnl 각각에 대한 분석 데이터가 생성된 걸 볼 수 있음

     

    (cf. 만약 추출했는데 바탕화면에 있는 MFT 폴더 내에 추출한 것들이 안 보이면 파일탐색기로 해당 MFT 폴더 들어간 상태에서 점3개 누르고 옵션 누르면 폴더 옵션 뜸, 보기 메뉴 → 좀 내리면 '보호된 운영 체제 파일 숨기기(권장)' 클릭 해제, 시스템파일이라서 기본적으로 안 보이게 설정되어있음, 추가로 '숨김 파일, 폴더 및 드라이브 표시' 체크해주고 '알려진 파일 형식의 파일 확장명 숨기기'는 체크 해제)

     

     

     

    바로가기(LNK) Practice

    FTK Imager 이용하여 추출

    • %UserProfile%\Desktop
    • %UserProfile%\AppData\Roaming\Microsoft\Windows\Recent

     

    LECmd 이용하여 분석

     

     

    FTK Imager에서 맨 좌측 아이콘 Add Evidence Item → Logical Drive → C:\ - [NTFS](기본설정값) → 좌측 Evidence Tree에서 최상위 하나씩 열기 → [root]를 C라고 생각하고 [root]부터 위 경로들 찾기

     

    첫 번째 경로 - %UserProfile%\Desktop

    Users 아래 사용자이름 아래 Desktop 폴더 가면 바로가기 파일들 있는데 우클릭 export files → 경로는 바탕화면에 새폴더 'lnk_jumplist' 만들고 선택하고 확인 → 파일탐색기로 바탕화면 밑 lnk_jumplist 밑 바로가기 파일 만들어진거 확인 → 위에 있는 에릭지머만 툴 url 크롬에 복붙 → LECmd의 1.5.0.0 왼쪽꺼 누르고 다운 → 반디집으로 아까 만들어둔 바탕화면 밑 lnk_jumplist에 압축 풀기 → 파일탐색기로 방금 경로에 생긴 LECmd.exe(CLI, 콘솔을 통한 인터페이스) 실행 → 윈도우 터미널(Windows PowerShell) 열어서 cd .\lnk_jumplist\ → .\LECmd.exe → 기본적으로 사용법 나옴, 안 나오면 .\LECmd.exe -h → 이때 h는 help, 예시보여줘서 매우 친절한 설명, 예를 들어 -f를 보면 뒤에 처리할 파일이 오고 또는 -d 옵션 중에 하나는 꼭 있어야 함, -d 옵션은 그 폴더 아래에 있는 모든 것들을 샅샅히 뒤져서 전부 다 처리하겠다는 뜻 → .\LECmd.exe -f '.\pika.exe - 바로가기.lnk' → 정상 실행 → 입력한 바로가기 파일을 소스파일이라고 부름(타켓은 바로가기가 원본파일을 가르키고 있는거라서 다름) → 파일 사이즈(원본 파일의 크기), Relative Path(상대적 경로), Working Directory(원본 파일 존재하는 경로), 루트 폴더 및 환경변수 정보 등을 알 수 있음 → lnk 구조를 분석하여 구체적인 의미 파악 가능, 이 강의에서는 깊게는 안 들어감

     

    두 번째 경로 - %UserProfile%\AppData\Roaming\Microsoft\Windows\Recent

    Users 밑 사용자이름 밑 AppData 밑 Roaming 밑 Microsoft 밑 Windows 밑 Recent 아래 수많은 lnk들이 있는데 하나하나 다 하는 건 아니고 좌측 Evidence Tree에서 Recent 폴더 우클릭 export files lnk_jumplist 폴더에 추출 → 파일탐색기로 경로 가보면 최근 문서 폴더 생성됨 → .\LECmd.exe -d .\Recent\ 하면 너무 길게 나옴 → .\LECmd.exe -h 다시 한번 헬프 → 예시에 옵션들 json, html, csv 등 다양한 저장할 수 있는 포맷들을 줌, 강의해주신 분은 개인적으로 csv, html 선호 → 파일탐색기로 lnk_jumplist 안에 save라는 폴더 생성 → save 폴더 들어가서 전체 경로 C:\Users\사용자이름\Desktop\lnk_jumplist\save 복사 → .\LECmd.exe -d .\Recent\ --html "C:\Users\사용자이름\Desktop\lnk_jumplist\save" (help 설명 보면 전체 경로를 꼭 쌍따옴표로 묶어달라고 되어있음) → 쭉 나옴과 동시에 파일탐색기 save 폴더에 어떤 폴더가 저장되어 있음 → 안에 index.xhtml 열면 아까 본 모든 lnk가 분석이 되어서 나옴(html이 사람이 보고 검색하기엔 좋은데 자동화하기에 좋진 않음)  → 예시로 하나만 보면, OSPPSVC.exe.log.lnk 일부러 바로가기 생성은 안했는데 파일 실행하다보니까 자동으로 최근 문서에 들어옴, 앞서 언급한 바와 같이 소스랑 타겟은 다른 건데, 파일이 생성된 거는 target created를 보고 알 수 있고(근데 UTC 0기준이라 우리나라는 +9 해야함), 바로가기 파일이 생성된 거는 source created를 보고 알 수 있음 → 즉, 원본파일의 lnk를 기준으로 상대경로, 절대경로 알 수 있고, 중요한 건 드라이브 볼륨의 시리얼 번호를 알려준다는 점(lnk를 통해 어떤 볼륨에 존재했던 파일인지를 알 수 있어서 중요) → 실행창 띄워서 cmd 열기 → vol 치면 볼륨의 일련 번호 나옴(사람마다 다 다름) → 즉, 뭐 삭제되고 다 없고 lnk 하나만 남아도 어떤 사람의 드라이브에 이게 있었다는 증거 → 그외에도 MFT, 머신ID 등 정보들도 다 끼워맞출 수 있지만 깊은 내용이라 이 강의에서는 넘어감 → 이번엔 csv 형태로 뽑아보기 → 윈도우 터미널에서 .\LECmd.exe -d .\Recent\ --csv "C:\Users\사용자이름\Desktop\lnk_jumplist\save" 하면 쭉 나옴 → 파일탐색기 lnk_jumplist 밑 save 안에 csv파일 생김 → 엑셀로 열기 → 내용 깨져있으면 데이터탭에 가져오기에서 '텍스트/CSV에서' 클릭 → 경로는 다시 lnk_jumplist 밑 save 밑 방금 생겼던 csv 파일 더블클릭 → 연결중 창 뜨고 '로드' 클릭 → 아까랑 똑같은 데이터들을 csv 형태로 보여줌(글자 안 깨짐, cf. 나중에 파이썬으로 자동화/시각화할 때 logtotimeline 이런 도구들에 넣을 때 csv 형태로 넣음)

     

     

     

     

     

    새로 알게 된 것

     

    깊게 들어가지는 않아서 이해하기에 어려운 내용은 아니었고, 새롭게 알게 된 용어들이 많아 실습뿐만 아니라 이론적인 공부도 꽤 한 것 같다. 사실 바로가기(LNK) 개념 및 실습 강의를 듣기 전에는 아는 것이 별로 없어서 이 바로가기 파일로 도대체 무엇을 할 수 있길래 이게 수업 내용에 있는 건지 궁금했는데, lnk가 디지털포렌식에서 내가 생각했던 것보다 훨씬 중요한 역할을 할 수 있다는 점이 놀라웠다. 오늘도 재밌었고 다음 강의도 기대된다.

     

     

     

     

     

    https://www.inflearn.com/course/%EA%B8%B0%EC%B4%88-%EB%94%94%EC%A7%80%ED%84%B8-%ED%8F%AC%EB%A0%8C%EC%8B%9D

     

    [무료] 기초부터 따라하는 디지털포렌식 - 인프런 | 강의

    기초부터 따라하는 디지털포렌식 강의입니다. 강의를 따라하다보면 "물 흐르듯, 자연스럽게" 실력이 늘어가는 강의를 추구합니다., 초보자 눈높이에 딱 맞춘, 원리를 이해하는 디지털포렌식 입

    www.inflearn.com

     

     

    본 글은 위의 인프런 강의를 듣고 작성하였습니다.

     

Designed by Tistory.