Search
Duplicate

윈도우 아티팩트

취약점 분석 트랙 박상준
윈도우 아티팩트를 이용해 포렌식 분석을 할 수 있다. EventTranscript.db는 윈도우 이벤트를 기록하는 SQLite 데이터베이스로, 브라우징 기록, 장치 연결과 설정, 소프트웨어 설치 및 설정 등 6가지 유형의 이벤트를 기록한다. 이벤트 로그들은 JSON 형태로 기록되며, 이를 파싱해 브라우저 히스토리, PnP Driver 히스토리, 소프트웨어 인벤토리 등을 추출할 수 있다.

윈도우 아티팩트란

윈도우에서 어플리케이션/윈도우 사용하면서 남겨지는 사용 흔적이다.
시스템에서 생성된 증거는 생성 증거와 보관증거 2가지로 분류되는데, 아티팩트생성 증거이다.
생성 증거 : System과 Application이 자동적으로 생성한 데이터들
→ ex) 레지스트리, 프리패치/수퍼패치, 이벤트 로그 등등
보관 증거 : 사람의 상상과 감정을 표현하기 위해서 작성한 데이터
→ ex) “직접”작성한 메일, Blog or SNS, 문서 등

윈도우 아티팩트 종류들

LNK 파일 → 바로가기, 빠른 실행 등에 생성되는 파일
JumpList → 자주 사용한 문서와 프로그램 관리하는 링크파일
ShellBags → 접근한 폴더 정보를 저장한 레지스트리
…등등 많은 윈도우 아티펙터를 이용해 포렌식해볼 수 있는 것들이 많다.

New forensic source

→ 윈도우 아티클이라는 용어를 어제 들어본 뉴비이지만 그래도 최근에 나온 기술들도 팔로우업 하고 싶어서 가장 최근에 업로드 된 EventTranscript.db Deep Dive 를 보고 정리했습니다.

EventTranscript.db Forensics

1. 아티팩트 구조

→ 실행 시 클립보드로 복사된 것, 실행 시간 추적 등의 이벤트를 기록한다.
→ SQLite 데이터베이스에 6가지 유형의 이벤트를 기록한다.
→ SQLite에는 아래와 같은 스키마 형태로 저장된다.
EventTranscript.db 의 스키마 테이블
navicat 으로 DB를 로드하면 스키마 테이블을 볼 수 있음.
navicat 으로 트라이 해보았으나 db에 연결을 실패해서 스키마를 직접 못보고 캡쳐했습니다.

기록하는 이벤트 유형

브라우징 기록
장치 연결과 설정
타이핑, Inking 등 Input Data
제품과 서비스 성능
제품과 서비스 사용 기록
소프트웨어 설치 및 설정
→ 이벤트 로그들을 JSON형태로 기록함.
→ 이벤트 타입 이름은 2200개 이상이 있다.
→ 이벤트 로그와 Windows레지스트리 정보들이 섞여서 로그에 찍힘. ex) 화면 해상도, focus time 등등

이벤트 로그 분석

→ 엑셀을 켰다 끄면 이벤트 로그가 남음
→ 아래와 같이 많은 정보들을 얻을 수 있다.
sha-1 값은 malware처럼 virus total에 검색할 때 사용될 수도 있다.
→ 이외에도 아직 식별하지 못한 내용들은 더 있음..
navicat 을 실행했을 때의 로그이다.
navicat 의 버전, 화면해상도, 앱 시작한 시간, 실행 시간(AggregationStartTime, AggregationDurationMS), 포커싱 한 횟수와 시간(InFocusDurationMS) 등 증거수집을 위한 여러가지 정보들을 볼 수 있다.
Win32kTraceLogging.AppInteractivitySummary { "ver": "4.0", "name": "Win32kTraceLogging.AppInteractivitySummary", "time": "2023-07-05T05:42:18.7568289Z", "iKey": "o:0a89d516ae714e01ae89c96d185e9ae3", "ext": { "utc": { "shellId": 281572223425708032, "eventFlags": 258, "pgName": "WIN", "stId": "C7DC9003-EFF7-4470-A48C-E885A432B629", "flags": 1007157808, "epoch": "907862", "seq": 804 }, "privacy": { "dataType": 33554432, "isRequired": false, "dataCategory": 1, "product": 1 }, "metadata": { "f": { "PartATransform_AppSessionGuidToUserSid": 8, "AppSessionId": 8, "AggregationStartTime": 9, "ViewFlags": 5, "EventSequence": 5 }, "privTags": 33554432 }, "os": { "bootId": 24, "name": "Windows", "ver": "10.0.22621.1848.amd64fre.ni_release.220506-1250", "expId": "ME:25762F0,MD:27B9BC4" }, "app": { "id": "W:00006521b0ebb140a024d59d42ea997af8ca0000ffff!00006b54f957502c406cd8a89eb89c3d216a6b0ef243!navicat.exe", "ver": "2022/12/02:17:33:07!399128B!navicat.exe", "asId": 1251 }, "device": { "localId": "s:274FF602-9E40-4A85-BC0A-91C39F5ECABE", "deviceClass": "Windows.Desktop" }, "protocol": { "devMake": "SAMSUNG ELECTRONICS CO., LTD.", "devModel": "950XED", "ticketKeys": [ "22276746" ] }, "user": { "localId": "m:6e3eb1b10d45a31e" }, "loc": { "tz": "+09:00" } }, "data": { "AppId": "W:00006521b0ebb140a024d59d42ea997af8ca0000ffff!00006b54f957502c406cd8a89eb89c3d216a6b0ef243!navicat.exe", "AppVersion": "2022/12/02:17:33:07!399128B!navicat.exe", "CommandLineHash": 287487433, "AppSessionId": "00005F88-0002-0018-12D7-EF0402AFD901", "AggregationStartTime": "2023-07-05T05:23:58.4658331Z", "AggregationDurationMS": 1099110, "InFocusDurationMS": 17375, "FocusLostCount": 2, "NewProcessCount": 1, "UserActiveDurationMS": 17375, "UserOrDisplayActiveDurationMS": 17375, "UserActiveTransitionCount": 0, "InFocusBitmap": "0x0000000100004000", "InputSec": 15, "KeyboardInputSec": 0, "SipKeyboardInputSec": 0, "InjectedKeyboardInputSec": 0, "MouseInputSec": 15, "InjectedMouseInputSec": 0, "TouchInputSec": 0, "InjectedTouchInputSec": 0, "PenInputSec": 0, "InjectedPenInputSec": 0, "ExtPenInputSec": 0, "PrecisionTouchpadInputSec": 14, "InjectedPrecisionTouchpadInputSec": 0, "HidInputSec": 2, "WindowWidth": 1200, "WindowHeight": 835, "MonitorWidth": 1920, "MonitorHeight": 1080, "MonitorFlags": 24, "WindowFlags": 48, "InteractiveTimeoutPeriodMS": 60000, "AggregationPeriodMS": 1200000, "BitPeriodMS": 20000, "AggregationFlags": 49, "SummaryRound": 7, "SpeechRecognitionSec": 0, "GameInputSec": 0, "TargetAsId": 1251, "CompositionRenderedSec": 15, "CompositionDirtyGeneratedSec": 13, "CompositionDirtyPropagatedSec": 0, "BackgroundMouseSec": 0, "AudioInMS": 0, "AudioOutMS": 0, "ViewFlags": 0, "SinceFirstInteractivityMS": 617485, "EventSequence": 117 } }
JSON
복사

2. 아티팩트가 남는 원인

진단 데이터 뷰어로 콘텐츠를 표시하기 위해 윈도우 진단 데이터와 원격의 하위 시스템 데이터들을 로컬에 저장할 수 있도록 하는 DB이다.
→ 윈도우에서 수집한 진단 데이터를 저장하기 위한 도구
→ 이 DB를 포렌식하면 여러가지 정보를 얻을 수 있다는 것을 알아낸 것은 비교적 최근임.

3. OS에서 어떤 효율성을 갖는가.

→ 개인 정보 보호, 진단 및 원격 측정과 관련된 Windows 기능을 수행함.
→ 하드웨어 또는 소프트웨어에서 발생하는 문제들을 식별하는 데에 도움이 된다.
ex) 어떠한 특정 장치에서 충돌이 더 발생하는지 확인할 수 있다.

4. 기타 특징

→ EventTranscript.db는 윈도우 10, 1709버전부터 릴리즈 되었다.
→ 아래 사진과 같이 EventTranscript.db에 윈도우 이벤트들을 기록하게 설정할 수 있다.
위의 사진처럼 설정하EveryThing 으로 EventTranscript 를 검색해보면 .db 가 생긴 것을 볼 수 있다.
→ 이제부터 윈도우는 여러종류의 이벤트EventTranscript.db 에 기록한다.
진단 데이터 뷰어 열기 를 누르면 윈도우에서 기록하는 로그들을 볼 수 있다.

5. 분석 도구

진단 데이터 뷰 → microsoft Store
수많은 이벤트들을 Execl로 추출 해주는 스크립트
EventTranscriptParser
stuxnet999
관리자 모드로 파워쉘 열고 cd C:\Users\best_\Downloads\EventTranscriptParser-main\EventTranscriptParser-main python3 .\EventTranscriptParser.py -f C:\ProgramData\Microsoft\Diagnosis\EventTranscript\EventTranscript.db -o C:\Users\best_\OneDrive\Desktop\Result2
Bash
복사
→ 브라우저 히스토리
→ PnP Driver 히스토리
→ 소프트웨어 인벤토리

느낀점

더 안전하고 흔적을 남기지 않는 OS를 위해서는 기록을 안 남겨야할 것 같은데 성능이나 다른 기능을 위해서 이런 아티팩트들을 남기는 것은 불가피할 것 같다.
EventTranscript말고도 더 좋은 기록들을 볼 수 있는 소스들이 있을텐데 더 공부해볼 수 있었으면 좋겠다.

참고 및 인용

→ EventTranscript발견한 연구자(Kroll) 포스팅들
→ microsoft 공식 문서
그 외