지금까지 공부한 걸 총체적으로 정리할 겸, 게시물을 작성해보려고 한다.
증거수집 단계에 있어서는 가장 기본적인 것은 "쓰기 방지" 설정이다.
쓰기방지는 HW적으로 혹은 SW적으로 수행할 수 있다. 학생인 내가 현실적으로 사용할 수 있는 건 SW적으로 수행할 수 있다.
[HW : Falcon, Tableu]
우선, Registry를 통한 방법이다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies\WriteProtect
의 Value를 Dword 형식으로 1로 설정하면 쓰기 방지가 설정된다.
만약, 0으로 한다면 쓰기 방지가 off 된다.
이런 경우 쓰기방지가 설정되었는지를 다른 측면을 통해 확인할 수 있는 방법은 다음과 같다.
cmd - diskpart - list disk - select disk No. - attributes disk
쓰기방지는 분석 자료의 무결성을 보장하는 첫 단계이기에 추 후 증거능력을 입증하는데에 있어 가장 중요하다. 그래서 이렇게 레지스트리가 정말 잘 적용되었는지 확인하는 것도 필요하다고 생각한다.
레지스트리 외에도, Encase, Kfolt와 같은 분석 도구 안에 자체적으로 내장된 쓰기방지 기능을 활용할 수도 있다.
그럼 쓰기 방지 설정이 완료가 되었으니
이미징을 수행해야 한다. 이미징이란, 데이터들의 bitstream을 그대로 본뜬다고 생각하면된다. FTK, dd, Encase 등 다양한 SW도구들이 있지만, 일반적으로 공부하는 내 입장에서는 FTK를 사용한다.
이처럼 Hash값, 파일의 크기, GUID, 날짜 등 다양한 정보가 담긴 보고서와 함께 이미징이 완료되었음을 알 수 있다.
게시물 한 개에 담기엔 너무 많아서 Link로 대체한다.
정말 단순하게, 모든 파일들은 단지 0과 1의 집합이다. 그럼 이 0과 1을 어떻게 구분할까? 그림인지, 글자인지, 비디오인지, 혹은 그 모두가 다 섞인 정보들인지, 알아야 우리가 사용한다. 사실 추상화를 거쳐서 그렇지, 엄청 세세하고 세밀한 부분들을 컴퓨터가 통제한다. 그렇기에 PNG, JPG, MP3, MP4, PDF, ZIP, DOCX, XLSX 등 다양한 파일들의 포맷은 공식 규격이 정해져있고, 서로 구분할 수 있도록 특정한 문자열이 처음과 끝에(있을수도, 없을 수도 있지만) 존재한다. 이걸 바로 "시그니처"라고 부른다. 앞에 있는건 header, 뒤에는 footage.
Header
Footage
이렇게 시그니처와 함께, 확장자를 통해서 파일이 어떤 것인지 인식하고 사용하는 것이다.
단순하게 생각해서 파일을 은닉하기위한 조치로는 확장자를 바꾸던가, header를 손상시키는 등의 행위를 해서 읽지 못하게 바꾼다.
누구나 한 번 쯤은 본 Pop-Up이다. 확장자를 바꾼다고 그 안의 시그니처를 변하게 할 수는 없기에 저렇게 사용할 수 없게된다는 창이 뜨는 거다.
저 창을 무시하고 바꾼다면,
안 열린다.
하지만 원상 복구 한다면 잘 열릴 것이다. hex값은 건드린게 없기 때문에.
그렇기에 분석하는 입장에서는 파일이 열리지 않는다고 끝난게 아니라, 다른 정보가 은닉이 되어있는것은 아닌지, 확장자만 바뀐건지, 혹은 header, footage도 변경이 가해졌는지 다양한 방법을 통해서 확인할 필요가 존재한다.
그럼 어떻게 ?? 라는 질문에 대해 대답해보자
사실 사용자 행위 분석은 정말 다양한 Artifact가 존재한다. 대표적인 것으로는, $MFT, $Usnjrnl, $Logfile, hiberfil.sys, Eventlog, Web, Registry등 다양하다. 순서대로 알아보자.
우선 NTFS 파일 시스템에 존재하는 $MFT, $Usnjrnl, $Logfile에 대해 알아보자.
자세한 구조에 대한 정보는 다음 게시물에 있다.
NTFS Link : https://velog.io/@hskang00/%EB%94%94%EC%A7%80%ED%84%B8-%ED%8F%AC%EB%A0%8C%EC%8B%9D-%EC%A0%95%EB%A6%AC-7-FAT32-NTFS
$MFT, $Logfile, $UsnJrnl Link : https://velog.io/@hskang00/%EB%94%94%EC%A7%80%ED%84%B8-%ED%8F%AC%EB%A0%8C%EC%8B%9D-40-Usnjrnl-mft-logfile
(작성 중)
NTFS의 MFT에는 정말 다양한 정보가 저장된다. $MFT는 Master File Table의 약자로, NTFS안의 모든 파일과 디렉터리의 정보를 가지고 있다.Logfile은 트랜잭션의 기록을 기록하고, $UsnJrnl은 특정 파일이 Modifed된 정보를 기록한다.(Volume이 변경될 때)
$UsnJrnl은 $Extend의 경로에, 나머지는 Root안에 위치한다.
도구는, NTFS Log tracker를 통해서 분석할 수 있다.
이렇게 3가지 파일들의 분석 결과로, 파일이 언제 생성되었는지, 삭제된 것은 언제인지, 경로를 바꾸거나 이름을 바꾼 적이 있는지등에 대한 정보를 알 수 있다.
분석 결과를 csv로 export했음. 아까 ftk.001한 활동 (생성 결과, 시간)이 있음을 확인함.
다음은 Registry이다.
Registry는 C:\Windows\system\config에 저장되어 있고, ntuser의 경우만 C:\User\UserName 에 저장되어 있다.
Registry 분석을 통해서도 정말 다양한 정보를 알 수 있다.
대략, 마지막 종료 시간, 사용자 목록, 마지막 로그온 한 사용자, 최근에 접근한 프로그램 등등 다양하다. 하나씩 살펴보자.
설치 날짜, 현재 Version, 제품 명 등등의 정보가 있다.
Computer Name
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\ComputerName\ComputerName
Network Interface
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces
Network Lisk
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\NetworkList\Profiles
Cau
Ediya
등 연결 시간과, 이름에 대한 정보가 나타난다.
다만 이 자체적으로는 고유한 값이 기록되지 않아, CCTV 기록이라던가, 신용카드 사용 기록등 여타 다른 정보와 결합되어야 가치가 있을 것 같다.
User
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Accounts\Users
하지만, 보면 알 수 있듯이, Regedit으로는 SAM 분석 못 한다. 시스템 파일이라, 따른 도구를 사용해야한다.
이와 다르게, 유사하게 User를 기록하는 경로가 또 있다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\ProfileList
내부를 살펴보면
이렇게 SID와 함께 목록이 있음을 확인할 수 있다.
이건 목록이고, 그럼 User에 대한 조금 더 구체적인 정보, 예를 들면 마지막으로 Log on 한 사용자에 대한 정보는 다음과 같다.
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\LastLoggedOnUser
이름과 함께, SID도 제공된다.
Registry의 꽃이다. 정말 다양하게 기록된다. 말이 최근이지, 사용자가 행동한 거의 모든 접근이 기록된다고 생각하면된다.
최근 열어본 문서 (Recent Documents)
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs
최근 저장한 파일 (OpenSavdPidMRU)
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU
이렇게 확장자 별로 구분되어 저장되어 있다.
최근 사용한 응용프로그램 (CIDSizeMRU)
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\CIDSizeMRU
최근 사용한 프로그램 (LastVisitedPidMRU)
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedPidlMRU
최근 설치된 응용프로그램
Web은 크게 IE, Chrome, Edge, Firefox 정도로 나눌 수 있고, 각각의 History, Cache, Download, Cookie들을 분석하는 방법도 정해진 절차에서 크게 벗어나지는 않는다.
IE부터 차례차례 살펴보자.
사용자가 입력한 Url.
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\TypedUrls
최근 CPPG 접수를 위해 사용했던 IE의 Url과 github등이 있다. 현재는 대개 사용하지는 않는 Browser이기에 크게 중요한 것 같지는 않다.
IE의 다양한 정보들. (시간, 기본 URL, 설정 정보, 여타 등)
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main
IE10 이상의 Metadata.
유의할 점은, edge와 동일한 파일 경로와 파일을 사용한다는 점이다.
또한, System 파일이라 일반적인 방법으로는 수동 분석을 할 수 없다. 다음과 같은 방법을 거쳐 taskhost를 종료 한 후에 분석이 가능하다.
taskkill /f /im "taskhostw.exe" /t
COM Surrogate 도 종료해야 할 수도 있다.
Users\samsung(계정 Profile)\AppData\Local\Microsoft\Windows\WebCache
분석 도구들로는 IE10Analyzer, ESEDataviewer가 있다.
열어보면 이렇게 여러 Table이 존재함을 확인할 수 있다.
다만 이번에 확인한 사항이 하나 더 있다.
History Table은 (L)과 (M)으로 구분되는데, M의 경우 PC에서 접근한 모든 파일이 기록되는 듯 하다.
진정한 의미의 Web History의 경우 History(L)에 기록되는데,
cppg 결제 기록 말고는 사용자가 직접 사용한 기록은 찾을 수 없었다.
이건 좀 더 찾아봐야할 것 같다. WebCache 파일에 왜 내가 접근한 파일 기록이 있는거지
IE 즐겨찾기
Users\계정명\Favorites
생성 날짜와 함께 확인할 수 있다.
Chrome
Chrome은 다음 경로에 모두 저장하고 있다.
Users\계정 profile\Appdata\Local\Google\Chrome\User Data\Profile
Cache는 해당 경로 안의 폴더에, Download한 목록은 History와 함께 있다.
해당 시간 정보는 Google Chrome Value라는 고유의 Format으로, DCode를 통하면 시간정보 확인이 가능하다.
계정 Avatar Image
Users\계정 profile\Appdata\Local\Google\Chrome\UserData\Profile\Accounts\Avatar Images
계정 Image를 확인할 수 있다.
BookMark
Users\계정 profile\Appdata\Local\Google\Chrome\User Data\Profile\Bookmark
휴지통은
$Recycle.bin 의 경로에 사용자 SID 별로 폴더가 존재한다. 또 그 폴더 안에는 $I / $R 2가지로 구분된다.
$I 에는 원본의 Metadata가, $R에는 실제 데이터가 저장되어 있다.
그니까, 무슨 말이냐면 이런거다.
이건 파일을 열었을 때 확인하는 실제 값들의 모임인 것이고
이건 파일의 경로와 이름이 저장되어 있다.
$I의 첫 8바이트는 Header, 그 다음 8 바이트는 삭제된 파일의 크기, 그 다음 8바이트는 삭제 날짜가 저장되어 있다.
Prefetch는 간단하게 말해서 실행속도를 빠르게 도와주는 파일들의 집합이다. 그러니까, 도움을 받는 파일이 몇 번, 언제 마지막으로, 무엇을 참조하며 실행되는지, 최초 실행 시간(Prefetch 생성 시간)은 언제인지, 파일의 경로등을 확인할 수 있다.
Prefetch 수집 경로는 다음과 같다.
Profile\Windows\Prefetch (FTK 기준)
분석 도구로는 WinPrefetch가 있다.
내 PC의 Prefetch를 분석한 결과를 살펴보자.
802.11 패킷들을 분석해주는 aircrack-ng의 GUI Version을 분석해봤다.
앞서 말한대로, Modified, Created Time과 실행 횟수, Last Run time이 나타남을 확인할 수 있다.
또한 동일한 폴더 안에는 Layout.ini 라는 파일이 존재한다.
해당 파일에는 Prefetch가 존재하는 파일의 목록이 나타난다.
Prefetch는 기본적으로 "생성"이 설정이되어 있다. 또한 다양한 정보를 습득할 수 있기에 가치가 높은 Artifact이다.
다만 생성 여부는 Registry의 설정 값에 따라 변경이 되는데, 다음 경로에서 확인할 수 있다.
HKLM\SYSTEM\ControlSet001\Control\Session Manager\Memory Management\PrefetchParameters
0: Not Use
1: Application Prefetch
2: Boot Prefetch
3: Application and Boot Prefetch (Default)
LNK는 "바로가기"이다. 바탕화면에 아이콘 중 왼쪽 아래에 화살표가 있는 아이콘,
바로 LNK 파일이다.
해당 파일에는 원본 파일이 존재하는 경로와 MAC time, Volume label, Drive Serial Number등이 있다.
LNK는 다양한 곳에 나뉘어 저장된다.
수집 경로는 다음과 같다. (이름 그대로 확장자는 .lnk)
Desktop
Windows 7 : C:\Users\\Desktop
Recent Docs
C:\Users\AppData\Roaming\Microsoft\Windows\Recent
Start
C:\Users\\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
Quick Launch
C:\Users\\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch
분석 도구로는 010Editor, LinkParser 등이 있다.
LNK Parser로 분석한 결과이다.
확인해보면, 원본 File Size, Lnk MAC Time, 원본 MAC Time 등을 확인할 수 있다.
다만 LNK를 통해 접근했다고, 원본 파일의 MAC Time이 바뀌는 것은 아니다.
LNK의 시간이 원본 파일의 MAC보다 더 최신임을 확인할 수 있다.
LNK Parser의 분석 결과, 원본의 속성에서는 바로가기의 원본 파일에 대해서 경로를 확인할 수 있지만, 도구에서는 결과가 나오지 않음을 확인했다.
Lecmd의 경우 UTC + 0 이다. 그러니까 우리는 9더해서 생각하면된다.
(원본 파일 삭제 이전)
(원본 파일 삭제 이후)
또한 원본이 삭제되어도 이름과 경로는 남아있음을 확인 가능하다.
USB는 접속하는 순간 그 흔적이 Registry, Eventlog에 남는다.
흔적이 남는 Registry 경로는 다음과 같다.
1. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB
2. HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
3. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR
1번 경로에서 확인할 수 있는, Vendor ID와 Product ID이다. 각각 제조사 ID, 제품 ID를 의미한다. 해당 폴더 안에는 일정한 형식을 가진 Serial ID를 확인할 수 있다.
다만, 중국 저가형 USB의 경우처럼 모든 제품이 Serial ID를 가지고 있지는 않다. 만약 가지고 있다면 Drive Serial Number + &# 의 형태로 표현된다.
다음은 2번 경로이다.
기본적으로는 Volume GUID를 확인할 수 있다.
042e3857-4b7d-11ec-a061-646e696db06c
또 각 하위 Key들의 Hex값을 열어본다면
이처럼 Vendor "NAME"과 Product "NAME"을 확인할 수 있다.
또 밑으로 내려본다면 Drive letter를 확인 가능하다.
lnk 파일에 남는 값과는 다른 값이다.
만일 USB의 Volume Serial Number, 다시 말해 lnk 파일 분석시에 확인 가능한 값은 USB 연결 후 vol 명령어를 통해 확인할 수 있다.
Setupapi.dev.log에는 최초 연결 시간이 남는다.
C:\Windows\INF에서 검색을 통해 확인할 수 있다.
마지막 연결 시간은 다음 경로에서 확인 가능하다.
HKU{USER}\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2{Volume GUID}
해당 파일의 수정 시간을 확인하면 된다.
+@) 바로가기 파일에 남는 정보인 Volume Serial Number는 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\EMDMgmt에서 확인할 수 있지만, SSD의 경우 이 레지스트리가 기록되지 않음을 유의할 필요가 있다.
+@) Registry를 txt로 내보내기 한다면, 마지막 수정 시간 즉 마지막 연결 시간을 확인 가능하다.
또 기회가 되는대로, 유용한 Artifact를 활용할 수 있는 방안을 모아서 이 게시글에 이어나갈 예정입니다.