취약점 분석 트랙 박상준
윈도우 아티팩트를 이용해 포렌식 분석을 할 수 있다. 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를 포렌식하면 여러가지 정보를 얻을 수 있다는 것을 알아낸 것은 비교적 최근임.
3. OS에서 어떤 효율성을 갖는가.
→ 개인 정보 보호, 진단 및 원격 측정과 관련된 Windows 기능을 수행함.
→ 하드웨어 또는 소프트웨어에서 발생하는 문제들을 식별하는 데에 도움이 된다.
ex) 어떠한 특정 장치에서 충돌이 더 발생하는지 확인할 수 있다.
4. 기타 특징
→ 아래 사진과 같이 EventTranscript.db에 윈도우 이벤트들을 기록하게 설정할 수 있다.
→ 진단 데이터 뷰어 열기 를 누르면 윈도우에서 기록하는 로그들을 볼 수 있다.
5. 분석 도구
•
진단 데이터 뷰 → microsoft Store
•
수많은 이벤트들을 Execl로 추출 해주는 스크립트
관리자 모드로 파워쉘 열고
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 공식 문서
그 외