Security & Forensic

DFIR +32
반응형


간혹 다운로드된 파일을 어디에서 다운로드 받은건지 알고 싶을때가 있다.

웹 브라우져 이력을 분석하면 되지만 간단하게 알 수 있는 방법을 고민하다가 찾아낸 자료

Zone.Identifier 를 이용하면 된다.

 

네이버 클라우드에서 파일 다운로드

CMD에서 Zone.Identifier 확인

F:\temp>more < 캘빈클라인가방앞.JPG:Zone.Identifier

[ZoneTransfer]

ZoneId=3

ReferrerUrl=https://cloud.naver.com/

HostUrl=https://files.cloud.naver.com/file/download.api?resourceKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 

F:\temp>more < 인천공항주차대행안전주차.pdf:zone.identifier

[ZoneTransfer]

ZoneId=3

ReferrerUrl=https://cloud.naver.com/

HostUrl=https://files.cloud.naver.com/file/download.api?resourceKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 

주의

OS 로컬 보안 설정이나 어플리케이션에 따라 Zone.Identifier ADS가 생성되지 않는 경우도 있다.

반응형

반응형

정보유출 흔적 조사

 

자료 저장 매체를 이용한 부분과 온라인을 이용한 부분으로 나누어 살펴본다. 

두 경우 모두 여러가지 아티팩트를 분석해서 시간적 연관성을 기반으로 수행한다.

 

자료 저장 매체 이용

1) 이동형 매체 사용 흔적

  대상 아티팩트 : 레지스트리/setupapi.log, setupapi.dev.log 파일/이벤트로그
  획득 정보 : 
시간 정보, 마운트 드라이브 정보


usb device view

usb Forensic Tracker

2) 1)에서 구한 USB 사용 시간 전후 파일 접근 이력

  대상 아티팩트 : 저널파일 / 로그파일 / $MFT 파일 / 최근 사용자 행위
  획득 정보 :  파일 정보

 

$MFT
F:\RawCopy>RawCopy64.exe /FileNamePath:c:0 /OutputPath:f:\temp\c-Dir

$LogFile
F:\RawCopy>RawCopy64.exe /FileNamePath:c:2 /OutputPath:f:\temp\c-Dir

$UsnJrnl
F:\ExtractUsnJrnl>ExtractUsnJrnl64.exe /DevicePath:C: /OutputPath:F:\temp\c-Dir

 

3) 드라이브 파일 복사, 이동 이력
  대상 아티팩트 : 저널파일 / 로그파일 / $MFT 파일 / ShellBag / Shellbag MRU
  획득 정보 :  파일 정보
. 특히 1)에서 구한 시간 및 드라이브로의 파일 이동/복사 분석

 

NTFS Log Tracker

Shellbag Analyzer

Last Activity View

특정 시간대 즉 USB 이용 시간대와 비슷한 시간대에 H 드라이브에 접근 했음을 알 수 있다.

 
4) 시간 전후 실행 프로그램 정보

  대상 아티팩트 : 프리패치분석, 프로그램 및 접근파일 정보 / AppCache / ShimCache
  획득 정보 :  응용 프로그램 정보

 

JumpList View

온라인 매체 이용

1) 웹 접속 이력 

  대상 아티팩트 : Web Cache / Chrome History / Last Activity View
  획득 정보 :  
시간 정보, 접속 URL

 

2) 정보 중 "mail" 문자열 포함 URL 분석 

  대상 아티팩트 : Web Cache / Chrome History / Last Activity View
  획득 정보 :  
시간 정보, 접속 URL

 

  웹 메일 통한 정보 유출 분석을 위한 메일 관련 웹 URL 파악

 

IE History View

Chrome History View

3) 정보 중 웹 하드, 클라우드 드라이브 문자열 포함 URL 분석 

  대상 아티팩트 : Web Cache / Chrome History / Last Activity View
  획득 정보 :  
시간 정보, 접속 URL

 

  웹 하드, 클라우드 저장소를 통한 정보 유출 분석을 위해 관련 웹 URL 파악

 

4) 특정 웹 접속 시간 전후 파일 접근 이력
   자료 저장 매체 이용 부분의 2)와 동일

 

Last Activity View

Jump List View


5) 대상 웹 접속 시간 전후 브라우저 캐쉬 분석

IE WebCache 분석
dir c:\webcache*.dat /s /w

tasklist | find /i "taskhost" 또는 tasklist | findstr /i /c:"taskhost"

taskkill /f /im "taskhostw.exe" /t 또는 taskkill /f /im "taskhostex.ext" /t 또는 taskkill /f /im "taskhost.ext" /t
WebCachev__.dat을 붙잡고 있는 부모 프로세스 제거

 

 xcopy /s /c /e /h /i /r /y "%localappdata%\Microsoft\Windows\Webcache\*.dat" C:\test
또는 

xcopy /s /c /e /h /i /r /y "c:\Users\chohb\AppData\Local\Microsoft\Windows\WebCache\*.dat" C:\test
WebCachev__.dat을 C드라이브로 복사

 

esentutl /mh WebCachev__.dat
파일이 Dirty Shutdown 상태인지 확인

 

esentutl /p WebCachev__.dat
Dirty Shutdown --> Clean Shutdown으로 변경

 

nirsoft사의 esedatabaseview나 ESEViewer로 확인

 

참고 : https://secuworld.tistory.com/33

반응형

반응형

시스템 이상징후 판단 기준

 

동적 분석이 아닌 정적 분석에 의해 간단하고 빠르게 판단할 수 있는 전적으로 나름대로의 개인적인 기준을 정리해 봄

 

프로세스(실행 가능한 PE 포맷)

- OS 필수 프로세스와 동일한 경로에 위치하면서 파일명을 비교하여 유사율이 조직 내부 기준(%) 이상인 경우
- OS 필수 프로세스와 다른 경로에 위치하면서 파일명이 동일한 경우
- OS 필수 프로세스와 비교하여 실행된 프로세스 개수, 프로세스 실행 권한, 숨김, 실행경로, 부모 프로세스가
  기본 정보와 다를 경우

- OS 필수 프로세스와 동일한 경로에 위치하면서 이름더 같은데 실행 기본 사용자가 다른 것
- 속성이 숨김일 경우. 특히 시작 프로그램에 등록되어 있으면서 숨김 속성일 경우

- Code Siging/디지털 서명 이 안되어 있을 경우

- Code Signing/디지털 서명 이 되어 있지만 패커 정보(패킹주체, 회사)가 없는 경우

- 악성코드들이 주로 사용하는 API를 사용하는 경우. 프로세스가 로드하는 DLL이나 호출하는 API가 악성코드가 자주
  또는 반드시 사용하는 API를 호출

- VirusTotal 검색 또는 Open Source ClamAV 검색

- 실행 후 삭제되었거나 원격으로 실행된 프로세스 (프리패치는 존재하지만 실행파일은 존재하지 않는 경우)

- ADS(Alternative Data Stream) 형태로 존재하는 실행 가능한 포맷(exe, dll, sys, scr, ocx)의 파일
- 로드된 DLL 또는 윈도우즈 폴더 내 DLL 목록에서 버전이 없는 파일이 있는 경우(추가로 DLL을 로드하여 사용하는
  프로세스 정보)

- 부모 프로세스가 winword.exe, excel.exe, powerpoint.exe 이면서 자식 프로세스가 cmd.exe, wscript.exe,

   powershell.exe이면 굉장히 위험


OS 기본 주요 프로세스 예제

smss.exe 1) 프로세스 실행 경로 : C:\Windows\System32
2) 부모프로세스명 : System
3) 실행허용 개수 : 1
4) 실행권한 : System
winint.exe 1) 프로세스 실행 경로 : C:\Windows\System32
2) 부모프로세스명 : 없음
3) 실행허용 개수 : 1
4) 실행권한 : System
윈7 - : taskhost.exe
윈8 : taskhostex.exe
윈10 : taskhostw.exe
1) 프로세스 실행 경로 : C:\Windows\System32
2) 부모프로세스명 : 윈7 이하 : services.exe / 윈8 이상 : svchost.exe
3) 실행 허용 개수 : Login user count
4) 실행권한 : User
lsass.exe 1) 프로세스 실행 경로 : C:\Windows\System32
2) 부모프로세스명 : wininit.exe
3) 실행허용 개수 : 1
4) 실행권한 : System
winlogon.exe 1) 프로세스 실행 경로 : C:\Windows\System32
2) 부모프로세스명 : 없음
3) 실행허용 개수 : Login user count
4) 실행권한 : System
csrss.exe 1) 프로세스 실행 경로 : C:\Windows\System32
2) 부모프로세스명 : 없음
3) 실행허용 개수 : xp - Login user count / vista이상 - Login user count + 1
4) 실행권한 : System
lsm.exe
( Xp만 체크한다 )
1) 프로세스 실행 경로 : C:\Windows\System32
2) 부모프로세스명 : wininit.exe
3) 실행허용 개수 : 1
4) 실행권한 : System
expolorer.exe 1) 프로세스 실행 경로 : C:\Windows\
2) 부모프로세스명 : 없음
3) 실행허용 개수 : Login user count
4) 실행권한 : User
iexpolorer.exe 1) 프로세스 실행 경로 : C:\Program Files\Internet Explorer or C:\Program Files (x86)\Internet Explorer
2) 부모프로세스명 : explorer.exe
3) 실행허용 개수 : Login user count
4) 실행권한 : User

네트워트 (IP나 웹 URL)

- 외부로 접속된 IP/URL 주소가 악성코드 유포지 목록에 포함된 IP 주소인 경우(Open Source DataSet 이용)

   http://www.malware-domains.com/files/justdomains.zip
   https://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.txt
- 웹 평판과 연동

- VirusTotal 검색

- Hosts, Hosts.ics 파일에 임의로 등록된 /IPURL

 

일반 파일

- 내부에 실행 가능한 스크립트를 가진 매크로 존재 (특히 다운로드된 파일)

- 숨긴 파일이나 숨긴 폴더 내에 존재하는 파일

- 일반 폴더가 아닌 특수 목적의 시스템 폴더에 존재하는 파일

- Hosts, Hosts.ics 파일이 사용자 의도와 상관없이 변경된 경우

 

서비스나 자동 실행 파일

- 최근에 등록되었거나 자동실행 여부 등 속성이 변경된 경우

- 서비스 실행 파일이나 로드하는 DLL이 최근에 접근일자가 변경된 경우

 

반응형

'DFIR > 시스템 분석' 카테고리의 다른 글

시스템 이상징후 기초 분석  (0) 2020.03.12

반응형

시스템 이상징후 기초 분석

 

분석을 위해 CMD 창을 띄워서 실행 결과를 표시할 때 만약 한글이 깨져 보인다면 CMD 출력 창을 UTF-8로 변경한다.

C:\Dropbox\DFIR\Window\SystemBasic\Tools\RegRipper>chcp -> 현재 코드페이지 

활성 코드 페이지: 949

C:\Dropbox\DFIR\Window\SystemBasic\Tools\RegRipper>chcp 65001  -> 코드페이지 변경

 

포렌식이나 침해사고 분석에서 시간은 매우 중요하다. 파일의 MAC Time이나 이벤트 발생 시간등과 직접적 연관이 있고

데이터 표현이나 분석에서 중요한 기법인 TimeLine 에서 시간은 기본이다. 수 많은 데이터에서 분석 범위를 한정하기 위해서도 이벤트 발생 시간으로 그 범위가 결정되어 보다 빠르고 정밀하게 분석이 가능하다.

 

표준 시간대(TimeSozne) 변경 여부
C:\>w32tm /tz
시간대: Current:TIME_ZONE_ID_UNKNOWN Bias: -540min (UTC=LocalTime+Bias)
[Standard Name:"대한민국 표준시" Bias:0min Date:(지정되지 않음)]
[Daylight Name:"대한민국 일광 절약 시간" Bias:-60min Date:(지정되지 않음)]

NTP 설정 및 활성화 여부
C::\>w32tm /dumpreg /subkey:parameters
값 이름                       값 종류                값 데이터
-------------------------------------------------------
NtpServer                  REG_SZ              time.windows.com,0x9
ServiceDll                 REG_EXPAND_SZ       %systemroot%\system32\w32time.dll
ServiceDllUnloadOnStop    REG_DWORD           1
ServiceMain                REG_SZ              SvchostEntry_W32Time
Type                        REG_SZ              NTP

서비스 상태
C:\>sc query w32time
SERVICE_NAME: w32time
        종류               : 30  WIN32
        상태              : 1  STOPPED
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        검사점         : 0x0
        WAIT_HINT          : 0x0

C:\>w32tm /query /status
윤초 조정: 3(동기화되지 않음)
계층: 0(지정되지 않음)
정밀도: -23(틱당 119.209ns)
루트 지연: 0.0000000s
루트 분산: 0.0000000s
참조 ID: 0x00000000(지정되지 않음)
마지막으로 동기화한 시간: 지정되지 않음    <- 주의깊게 살펴봐야 함
원본: Local CMOS Clock <- NTP가 내려가 있을 경우임. 
폴링 간격: 10(1024s)

 

또는

 

윤초 조정: 0(경고 없음)
계층: 4(보조 참조 - (S)NTP로 동기화됨)
정밀도: -23(틱당 119.209ns)
루트 지연: 0.1376417s
루트 분산: 7.9801694s
참조 ID: 0x28515E41(원본 IP:  40.81.94.65)
마지막으로 동기화한 시간: 2020-03-12 오후 3:14:52
원본: time.windows.com,0x9
폴링 간격: 12(4096s)


동기화 주기 
C:\>w32tm /query /configuration
......

MinPollInterval: 10 (로컬)
MaxPollInterval: 15 (로컬)
......
FrequencyCorrectRate: 4 (로컬)
......
UpdateInterval: 360000 (로컬)
......

OS 시간변경 여부

관련 이벤트 ID

security log : XP 이하 : 520, 577 / Vista 이후 : 4616

system log : XP 이하없음 / Vista 이후 : 1, 34

Application log : XP 이하없음 / Vista 이후 : 20000

F:\temp>LogParser.exe -stats:off -i:evt "select TimeGenerated, Message from security where EventID=4616"

F:\temp>LogParser.exe -stats:off -i:evt "select TimeGenerated, Message, strings from system where EventID=6013"

TimeGenerated       Message                Strings
------------------- ---------------------- --------------------------
2020-02-17 12:38:56 시스템 작동 시간은 15초입니다.     ||||15|60|-540 대한민국 표준시
2020-02-18 08:47:25 시스템 작동 시간은 11초입니다.     ||||11|60|-540 대한민국 표준시
2020-02-18 12:00:00 시스템 작동 시간은 11568초입니다.  ||||11568|60|-540 대한민국 표준시
2020-02-19 08:46:00 시스템 작동 시간은 9초입니다.      ||||9|60|-540 대한민국 표준시
2020-02-19 12:00:00 시스템 작동 시간은 11649초입니다.  ||||11649|60|-540 대한민국 표준시
2020-02-20 08:51:38 시스템 작동 시간은 9초입니다.      ||||9|60|-540 대한민국 표준시
2020-02-20 11:59:59 시스템 작동 시간은 11311초입니다.  ||||11311|60|-540 대한민국 표준시
2020-02-20 12:00:00 시스템 작동 시간은 11312초입니다.  ||||11312|60|-540 대한민국 표준시
2020-02-21 08:46:09 시스템 작동 시간은 10초입니다.     ||||10|60|-540 대한민국 표준시
2020-02-21 11:59:59 시스템 작동 시간은 11640초입니다.  ||||11640|60|-540 대한민국 표준시

 

F:\temp>wevtutil qe System /q:"*[System[(EventID=6013)]]" /e:Events /uni:false /f:text

……

Event[38]:

  Log Name: System

  Source: EventLog

  Date: 2020-03-11T08:43:17.827

  Event ID: 6013

  Task: N/A

  Level: 정보

  Opcode: N/A

  Keyword: 클래식

  User: N/A

  User Name: N/A

  Computer: chohb

  Description:

시스템 작동 시간은 14초입니다.

……

 

F:\temp>wevtutil qe /rd Security /q:"*[System[(EventID=520) or (EventID=4616)]]" /e:Events /uni:false /f:text
Event[17]:
  Log Name: Security
  Source: Microsoft-Windows-Security-Auditing
  Date: 2020-02-27T11:48:42.317
  Event ID: 4616
  Task: Security State Change
  Level: 정보
  Opcode: 정보
  Keyword: 감사 성공
  User: N/A
  User Name: N/A
  Computer: chohb
  Description:
시스템 시간이 변경되었습니다.

주체:
        보안 ID:                S-1-5-19
        계정 이름:              LOCAL SERVICE
        계정 도메인:            NT AUTHORITY
        로그온 ID:              0x3E5

프로세스 정보:
        프로세스 ID:    0x1584
        이름:           C:\Windows\System32\svchost.exe

이전 시간:              ‎2020‎-‎02‎-‎27T02:48:42.313630900Z
새 시간:                ‎2020‎-‎02‎-‎27T02:48:42.317348000Z

이 이벤트는 시스템 시간이 변경되면 생성됩니다. 시스템 권한으로 실행되는 Windows 시간 서비스가 정기적으로 시스템 시간을 변경하는 것은 정상입니다. 다른 시스템 시간 변경은 컴퓨터를 임의로 변경하려는 시도를 나타낼 수 있습니다.

 

Prefetch

C:\>dir %windir%\prefetch\rundll*.pf

2019-07-19  오후 01:17             4,467 RUNDLL32.EXE-65953559.pf

2019-07-19  오전 11:05             4,445 RUNDLL32.EXE-A3EE2396.pf

 

C:\>PECmd.exe -f c:\Windows\prefetch\RUNDLL32.EXE-65953559.pf | findstr /i /c:"timedate.cpl"

Rundll32-XXXXXXXXXX.pf 가 있고 해당 프리패치 내 참조 파일 목록에 timedate.cpl이 있으면 OS 시간 변경을 유출할 수 있지만 제어판을 열어도 동일 흔적이 남기 때문에 다른 흔적도 같이 살펴보아서 정상 시간 변경 여부를 판단해야 한다.

 

부팅 이력

최근 부팅 시간

F:\temp>uptime.exe 또는 F:\tool\forensic>net stats work
\\CHOHB has been up for: 0 day(s), 7 hour(s), 25 minute(s), 37 second(s)

F:\temp>systeminfo
시스템 부트 시간:        2020-03-12, 오전 8:41:50

 

부팅 이력

관련 이벤트 ID

F:\temp>wevtutil qe System /q:"*[System[(EventID=6005) or (EventID=6006) or (EventID=6008) or (EventID=6009)]]" /e:Events /uni:false /f:text 

Event[37]:
  Log Name: System
  Source: EventLog
  Date: 2020-03-01T18:51:20.926
  Event ID: 6005
  Task: N/A
  Level: 정보
  Opcode: N/A
  Keyword: 클래식
  User: N/A
  User Name: N/A
  Computer: chohb
  Description:
이벤트 로그 서비스가 시작되었습니다.

 

F:\>LogParser.exe -stats:off "select timegenerated, message from system where eventid = '6005' or eventid = 6006"
TimeGenerated       Message
------------------- ---------------------
2020-02-17 12:34:52 이벤트 로그 서비스가 시작되었습니다.
2020-02-17 12:38:29 이벤트 로그 서비스가 멈추었습니다.
2020-02-17 12:38:56 이벤트 로그 서비스가 시작되었습니다.
2020-02-17 18:02:34 이벤트 로그 서비스가 멈추었습니다.

F:\script\batch>wevtutil qe Security /q:"*[System[(EventID=4624) or (EventID=4627) ]]" /e:Events /uni:false /f:text
Event[87]:
  Log Name: Security
  Source: Microsoft-Windows-Security-Auditing
  Date: 2020-02-27T11:49:02.355
  Event ID: 4624
  Task: Logon
  Level: 정보
  Opcode: 정보
  Keyword: 감사 성공
  User: N/A
  User Name: N/A
  Computer: chohb
  Description:
계정이 성공적으로 로그온되었습니다.

주체:
        보안 ID:                S-1-5-18
        계정 이름:              CHOHB$
        계정 도메인:            WORKGROUP
        로그온 ID:              0x3E7

로그온 정보:
        로그온 유형:            5
        제한된 관리 모드:       -
        가상 계정:              아니요
        상승된 토큰:            예

 

공유 현황

의도치 않게 생성된 공유 폴더나 기존 공유 폴더의 접근 권한 변경 확인. admin$나 IPC$는 원격에서 해당 PC에
프로그램을 실행 시킬 수 있으므로 특히 주의가 필요하다. 

F:\temp>net share
F:\temp>wmic path win32_share get * /format:table

 

공유폴더 접근 권한

F:\temp>net share IPC$
공유 이름          IPC$
경로
설명               원격 IPC
최대 사용자 수     제한 없음
사용자
캐싱               문서의 수동 캐시
사용 권한          Everyone, FULL  <- Everyone, FULL이다

 

F:\temp>F:\tool\OS\accesschk.exe -h IPC$
IPC$
  RW BUILTIN\Administrators
  RW S-1-5-32-549
  RW BUILTIN\Backup Operators
  RW NT AUTHORITY\INTERACTIVE
  RW NT AUTHORITY\SERVICE
  RW NT AUTHORITY\BATCH

 

F:\temp>net share users
공유 이름          Users
경로               C:\Users
설명
최대 사용자 수     제한 없음
사용자
캐싱               문서의 수동 캐시
사용 권한          BUILTIN\Administrators, FULL
                   Everyone, FULL

F:\temp>F:\tool\OS\accesschk.exe -d C:\Users
C:\Users
  RW NT AUTHORITY\SYSTEM
  RW BUILTIN\Administrators
  R  BUILTIN\Users
  R  Everyone

 

AllShareFolderACL.zip
0.13MB

 

중요 폴더 권한

F:\temp>icacls C:\WINDOWS
C:\WINDOWS NT SERVICE\TrustedInstaller:(F)
           NT SERVICE\TrustedInstaller:(CI)(IO)(F)
           NT AUTHORITY\SYSTEM:(M)
           NT AUTHORITY\SYSTEM:(OI)(CI)(IO)(F)
           BUILTIN\Administrators:(M)
           BUILTIN\Administrators:(OI)(CI)(IO)(F)
           BUILTIN\Users:(RX)
           BUILTIN\Users:(OI)(CI)(IO)(GR,GE)
           CREATOR OWNER:(OI)(CI)(IO)(F)
           APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(RX)
           APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(OI)(CI)(IO)(GR,GE)
           APPLICATION PACKAGE AUTHORITY\모든 제한된 응용 프로그램 패키지:(RX)
           APPLICATION PACKAGE AUTHORITY\모든 제한된 응용 프로그램 패키지:(OI)(CI)(IO)(GR,GE)

F:\temp>F:\tool\OS\accesschk.exe -d C:\windows
C:\Windows
  RW NT SERVICE\TrustedInstaller
  RW NT AUTHORITY\SYSTEM
  RW BUILTIN\Administrators
  R  BUILTIN\Users
  R  APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES
  R  APPLICATION PACKAGE AUTHORITY\?? ??? ?? ???? ???

 

세션 연결 확인

C:\>net session /list

NBT(NetBIOS) Session

arp spoofing 시도 등 원격에서 호스트명을 알아내기 위해 주로 사용하는 명령어가 nbtstat -c
C:\>nbtstat -c
Wi-Fi:
노드 IpAddress: [10.102.10.72] 범위 ID: []
    캐시에 이름 없음

 

F:\script\batch>nbtstat -a 10.102.10.72
이더넷:
노드 IpAddress: [10.102.10.219] 범위 ID: []
           NetBIOS 원격 컴퓨터 이름 테이블
       이름               유형         상태
    ---------------------------------------------
    TEST           <00>  UNIQUE      등록됨
    TEST           <03>  UNIQUE      등록됨
    TEST           <20>  UNIQUE      등록됨
    ..__MSBROWSE__.<01>  GROUP       등록됨
    WORKGROUP      <00>  GROUP       등록됨
    WORKGROUP      <1D>  UNIQUE      등록됨
    WORKGROUP      <1E>  GROUP       등록됨
......

 

로그온-오프 내역

F:\script\batch>wevtutil qe Security /q:"*[System[(EventID=4624) or (EventID=4627) ]]" /e:Events /uni:false /f:text
Event[87]:
  Log Name: Security
  Source: Microsoft-Windows-Security-Auditing
  Date: 2020-02-27T11:49:02.355
  Event ID: 4624
  Task: Logon
  Level: 정보
  Opcode: 정보
  Keyword: 감사 성공
  User: N/A
  User Name: N/A
  Computer: chohb
  Description:
계정이 성공적으로 로그온되었습니다.

주체:
        보안 ID:                S-1-5-18
        계정 이름:              CHOHB$
        계정 도메인:            WORKGROUP
        로그온 ID:              0x3E7

로그온 정보:
        로그온 유형:            5
        제한된 관리 모드:       -
        가상 계정:              아니요
        상승된 토큰:            예


F:\script\batch>F:\tool\OS\NTLast.exe -f

 - No Records - Check to see if auditing is on

<참고> 시스템 감사 정책이 활성화되어 있어야 한다.

 

네트워크 관련

NIC 동작 모드

F:\script\batch>F:\tool\OS\promiscdetect.exe

 

Promiscuous Mode가 발견되면 Warning과 함께 알려준다.

 

현재 연결 내역

F:\script\batch>netstat -anb

 

라우팅 정보

F:\script\batch>netstat -r

<참고>

네트워크 데이터 흐름을 분석하기 위해 라우팅 정보를 수집해야 한다. 만약 게이트웨이 등이 내부 개인 PC등으로 설정되어 있으면 중계 컴퓨터로 사용될 수도 있다. "netstat -r" 명령어로 인터페이스 / 라우팅 테이블 정보를 확인한다. 특히 네트워크 인터페이스 정보를 분석해야 하는 이유는 MAC의 변조 유무를 파악하여 sniffer / spoofing 공격에 당하고 있는지를 파악할 수 있어야 한다.

 

DNSQuery

C:\>ipconfig /displaydns

ARP
F:\script\batch>arp -a[v]

 

<참고>

ARP Cache Table의 내용을 공격자의 의도대로 변경한다. 그 결과 패킷의 전송 방향이 달라진다.

 

예약 작업

F:\script\batch>schtasks
폴더: \Microsoft\XblGameSave
작업 이름                                다음 실행 시간         상태
======================================== ====================== 
XblGameSaveTask                          N/A                    준비

 

폴더: \Microsoft\Windows\WaaSMedic
작업 이름                                다음 실행 시간         상태
======================================== ======================
PerformRemediation                       2020-03-15 오전 6:51:5 준비

 

프로세스 분석

<참고>
악성코드 등에서 자주 사용하는 레지스트리 경로, 등록된 이상한 파일 들이 있는지 확인

1. HKCR\Wordpad.Document.[version]\shell\open\command 
: 문서를 더블 클릭할 때마다 실행

2. HKLM\SOFTWARE\Microsoft\Command Processor\AutoRun
: cmd.exe를 실행할 때마다 실행

3. HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
:  GUI Application이 시작될 때마다 DLL을 memory 내로 Load함

4. HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify
: 사용자 로그온/로그오프, 화면보호기 시작 등 이벤트에 외부 기능을 차단하는 알림 

 

자동실행 프로그램

C:\>rip.exe -r "f:\Test\chohb.NTUSER.DAT" -f system -p autoruns

C:\>reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" 
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 
    TrustNetCert    REG_SZ    C:\Program Files (x86)\UNETsystem\TrustNET\NPH\TrustNetCert.exe 
    MagicMRS    REG_SZ    C:\Program Files (x86)\DreamSecurity\SmartMobileSign\Launcher.exe 
    CrossEXService    REG_SZ    C:\Program Files (x86)\iniLINE\CrossEX\crossex\CrossEXService.exe


시작프로그램
C:\>Autorunsc.exe  -> 아래 레지스트리 조회
HKLM\System\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\StartupPrograms
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit


C:\>wmic Startup get * /format:list

부팅 시 실행
C:\>Autorunsc.exe -b
HKLM\System\CurrentControlSet\Control\Session Manager\BootExecute

AppInit DLLs
C:\>Autorunsc.exe -d

Explorer AddOn
C:\>Autorunsc.exe -e
HKLM\SOFTWARE\Classes\Protocols\Filter

실행 목록(활성 프로세스)
C:\>pslist64.exe -t

프로세스 계층형 조회

-> 원래 부모 프로세스가 아닌 다른 프로세스를 부모로 가지면 상세 분석 필요

-> 윈도우 기본 프로세스랑 이름이 비슷하거나 이름이 같으면서 기본 경로가 다르면 상세 분석 필요

C:\>tasklist
C:\>wmic process list brief [ or wmic path win32_process get * /format:list ]

로드 DLL
C:\>Listdlls.exe /?
C:\>Listdlls.exe [ -r ]
C:\>Listdlls.exe -u
C:\>tasklist /m

Handle
C:\>handle.exe 

서비스 목록
F:\script\batch>sc query

F:\>wmic service list brief

F:\>wmic path win32_service get * /format:list

F:\>tasklist /svc

 

활성 드라이브 목록

F:\>sc query type= driver | more

 

최근 실행 명령어

HKU\{UserSID}\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU

반응형

'DFIR > 시스템 분석' 카테고리의 다른 글

시스템 이상징후 판단 기준  (0) 2020.03.13

반응형

Windows Search DB 분석

 

윈도우 검색(Windows Search)은 색인(Indexing)을 사용하여 빠르게 검색할 수 있도록 지원하는 윈도우 운영체제의 기능이며 윈도우 검색에서 기본 색인 대상은 일반 파일을 비롯하여 이메일, 메신저, 웹 히스토리 등의 정보이다.

 

파일명 : Windows.edb <- EDB(Extensible Storage Engine DB) 포맷

파일경로 : C:\ProgramData\Microsoft\Search\Data\Applications\Windows


분석 데이터

* Outlook Mail Data (Time ,Contents)
* OneNote Title
* Internet History (URLs, Last visit time)
* Lnk list
* Network Drive (When adding offline)
* Favorites
* File, Folder Information (Time, Contents(2KB), Path,...)
* Activity History (Recently used programs, Windows 10 Timeline)

 

WinSearchDBAnalyzer Advantages

- WinSearchDBAnalyzer can recovery deleted records.

- WinSearchDBAnalyzer works well on Windows 10.

- WinSearchDBAnalyzer can extract and analyze Windows.edb from live
  system.

- Regardless of status of the file, WinSearchDBAnalyzer can parse any
  file.
(Dirty status is OK)

- WinSearchDBAnalyzer shows more information than the other tools .

  (File categorization by extension, File hierarchy, File Contents)

- WinSearchDBAnalyzer can apply to UTC time.

 

분석

F:\>forecopy.exe -f C:\ProgramData\Microsoft\Search\Data\Applications\Windows\Windows.edb f:\test

F:\>esentutl.exe /mh f:\test\Windows.edb | findstr /i /c:"state"
            State: Dirty Shutdown

F:\>esentutl.exe /p f:\test\Windows.edb
F:\>esentutl.exe /mh f:\test\Windows.edb | findstr /i /c:"state"
            State: Clean Shutdown

ESEDatabazseView Tool

F:\>ESEDatabaseView.exe /table "f:\test\windows.edb" * /scomma "f:\test\Windowsedb\WindowSearch_*.csv"

F:\>tasklist |findstr /i /c:"ESEDatabaseView.exe"
ESEDatabaseView.exe          24036 Console                    1     31,688 K <- 프로세스 종료 확인

 

WinSearchDBAnalyzer Tool

- 삭제된 파일에 대한 정보 및 파일 내용도 확인 가능

 

- 인덱스된 폴더 및 파일 확인

 

- Web 접속 이력 : http. https

- IE를 통해 다운로드 받은 파일 내역

 

- OutLook 메일 내역

 

- 삭제 파일 내역

반응형

반응형

웹 분석-Chrome

 

아티팩트 저장 경로

Cache

%USERPROFILE%\AppData\Local\google\chrome\user data\default\cache 폴더

 

History
%USERPROFILE%\AppData\Local\google\chrome\user data\default\history 파일

History파일에는 사용자가 방문한 URL 및 접속 시간, 다운로드 내역 등이 기록됩니다. 
Chrome브라우저의 방문기록은 urls 테이블과 visits 테이블에 의해 방문 url과 방문 기록을 분리하여 관리합니다. 
urls 테이블에는 방문했던 사이트 고유의 url들이 저장되고, visits 테이블에는 urls 테이블을 참조하여 방문 이력이 
관리 됩니다. 다운로드 기록은 downloads 테이블과 downloads_url_chains 테이블에 의해 관리되며 downloads에는 
다운로드 받은 파일에 대한 내역이 기록되고 downloads_url_chains테이블에는 다운로드 받은 url들이 기록됩니다.
활용성이 높은 데이터가 들어있는 Table은 downloads, downloads_url_chains, urls, visits가 있습니다.

History DB Table List

downloads Table
다운로드 받은 파일을 관리, 저장경로, 다운로드 시작 시간, 용량 등의 항목이 기록됩니다.


downloads_url_chains Table
다운로드 받은 파일의 원래 URL 관리

 

urls Table 
사용자의 접속 URL을 관리, 접속 URL, 최근 접속 시간, 총 접속 수 등을 기록


visits Table
접속 URL, 접속 시간 등 접속 기록은 urls 테이블을 포함하여 visits 테이블에 저장 

 

keyword_search_terms
크롬 검색 키워드

 

Cookie
%USERPROFILE%\AppData\Local\google\chrome\user data\default\Cookies 파일

쿠키는 일반적으로 웹마다 남기는 형태가 다르기 때문에 그 형식을 정확히 알기란 어렵거나 쿠키를 암호화 등을 통해

관리한다면 정확한 의미나 값을 파악하는게 쉽지 않다.

 

Download

%USERPROFILE%\AppData\Local\google\chrome\user data\default\history 파일

 

Typed URL

%USERPROFILE%\AppData\Local\google\chrome\user data\default\shortcuts 파일

검색어를 포함하여 주소창에서 직접 입력한 후 접근한 사이트. 그러므로 keyword_search_terms 보다 폭넓은
데이터 포함

New Tab

%USERPROFILE%\AppData\Local\google\chrome\user data\default\top sites 파일

최근 접근 Top 10 Web URL


Bookmarks

%USERPROFILE%\AppData\Local\google\chrome\user data\default\Bookmarks 파일
Privacy 관련 자료로 암호화되어 있어 DB를 직접 열 수 없다. 


Visited Link

%USERPROFILE%\AppData\Local\google\chrome\user data\default\Visited Links 파일
Privacy 관련 자료로 암호화되어 있어 DB를 직접 열 수 없다. 


Preferences

%USERPROFILE%\AppData\Local\google\chrome\user data\default\Preferences 파일

백업, 북마크, 브라우저, 검색 엔진, 다운로드, 확장 기능, 플러그인, 세션, 싱크 설정 정보, 클라우드 프린트,
DNS 프리패칭 정보

 

이러한 정보들의 관리 방법이나 경로는 크롬 버전이 달라질 때 마다 변경될 수 있다.


위 정보 중 백업, 북마크, 검색 엔진, 다운로드 설정 정보를 통해서도 사용자의 행위를 프로파일링 해볼 수 있다. 하지만, 특정인의 특징이라고 보기에는 다소 보편적인 내용이기 때문에 효과가 크지 않다. 
반면, 클라우드 프린트, DNS 프리패칭, 줌 레벨은 사용자의 인터넷 사용 패턴을 알려주기 때문에 프로파일링하는데 큰 도움이 된다. 해당 정보는 넓은 의미에서 프라이버시로 볼 수 있지만, 일반 사용자 입장에서는 딱히 삭제할 방법이 없다.

 

분석

SQLite 
크롬 브라우저에서는 Sqlite db 형태로 파일을 관리하므로 손쉽게 Sqlite Browser를 통해 분석이 가능

F:\temp>sqlite3.exe "%USERPROFILE%\AppData\Local\google\chrome\user data\default\history"
sqlite> .table
Error: database is locked

 

F:\temp>dir "%USERPROFILE%\AppData\Local\google\chrome\user data\default\history" 
2020-03-10  오후 05:11        11,239,424 History 

F:\temp>forecopy.exe -f "%USERPROFILE%\AppData\Local\google\chrome\user data\default\history" "f:\temp"

F:\temp>dir "f:\temp\history"
2020-03-10  오후 05:19        11,239,424 history

F:\temp>sqlite3.exe "f:\temp\history"
sqlite> .database
main: f:\temp\history
sqlite> .table
downloads                meta                     urls
downloads_slices         segment_usage            visit_source
downloads_url_chains     segments                 visits
keyword_search_terms     typed_url_sync_metadata


History

sqlite> pragma table_info(urls);
0|id|INTEGER|0||1
1|url|LONGVARCHAR|0||0
2|title|LONGVARCHAR|0||0
3|visit_count|INTEGER|1|0|0
4|typed_count|INTEGER|1|0|0
5|last_visit_time|INTEGER|1||0
6|hidden|INTEGER|1|0|0


sqlite> SELECT datetime(last_visit_time / 1000000 - 11644473600, 'unixepoch', 'localtime') last_visit_time,url,title 

FROM urls ORDER BY last_visit_time DESC [limit 10];

 

Download

sqlite> SELECT datetime(end_time / 1000000 - 11644473600, 'unixepoch', 'localtime') end_time, target_path, tab_url

FROM downloads ORDER BY end_time DESC limit 10;

Keyword Search
select b.url, a.term, datetime(b.last_visit_time / 1000000 - 11644473600, 'unixepoch', 'localtime')

from keyword_search_terms a, urls b  where a.url_id = b.id;

 

기타 Cookies, Typed URL, New Tab도 동일한 방식으로 분석하면 된다. 다만 각 SQLite DB 내 Table 구조 및 Field에

대한 이해가 선행되어야 한다.

 

DB Browser for SQLite Tool

BrowsingHistoryView Tool

Internet Explorer, MicroSoft Edge, Mozilla Firefox, Google Chrome, Opera and Safari 통합 히스토리 분석

 

GUI

CLI

F:\>BrowsingHistoryView.exe /LoadIE 0 /LoadFirefox 0 /LoadSafari 0 /LoadChrome 1 /HistorySource 1 /scomma "f:\test\chrome-back.csv"

F:\tool\forensic\browsinghistoryview-x64>dir "f:\test\chrome-back.csv"
2020-03-10  오후 02:05         1,585,621 chrome-back.csv


F:\temp>F:\tool\forensic\LogParser\LogParser.exe -h -i:csv "f:\test\chrome-back.csv" -headerRow:on

Fields:
  Filename (S)    RowNumber (I)    URL (S)          Title (S)
  Visit Time (S)  Visit Count (I)  Visited From (S) Visit Type (S)
  Web Browser (S) History File (S) User Profile (S) Browser Profile (S)
  URL Length (I)  Typed Count (I)  Record ID (I)

F:\temp>F:\tool\forensic\LogParser\LogParser.exe -i:csv -iDQuotes:auto "select * from 'f:\test\chrome-back.csv'"

<참고>

Visit Type

Hindsight
Chrome 모든 아티팩트를 대상으로 TimeLine 구성

 

TimeLine 생성

C:\Temp>hindsight.exe -i "C:\Users\chohb\AppData\Local\Google\Chrome\User Data\Default" -b Chrome -f sqlite -o "c:\temp\chrome_forensic"

DB Browser for SQLite로 TimeLine 조회

SNSS(Server Session) 파일 분석
다음 두 가지 파일이 SNSS 포맷을 가진 크롬 관련 파일이다.

- Current Session / Current Tabs
- Last Session / Last Tabs

 

위 파일은 현재 탭을 포함한 탭 및 세션 상태와 관련된 모든 것을 저장합니다. 가장 최근의 정보이므로 포렌식에서 

매우 민김한 정보일 수 있다.

분석 시에는 해당 파일들이 Shared read/write 권한이 없어서 실기간으로 접근이 불가능하며 권한을 임의로 부여해도

크롬 실행 시 다시 초기의 권한으로 변경한다.


Current Tab/Session, Last Tab/Session 분석  - Current Web URL 확인

C:\>forecopy.exe -f "C:\Users\chohb\AppData\Local\Google\Chrome\User Data\Default\Current Session" c:\test

C:\>forecopy.exe -f "C:\Users\chohb\AppData\Local\Google\Chrome\User Data\Default\Current Tabs" c:\test

C:\>forecopy.exe -f "C:\Users\chohb\AppData\Local\Google\Chrome\User Data\Default\Last Tabs" c:\test

C:\>forecopy.exe -f "C:\Users\chohb\AppData\Local\Google\Chrome\User Data\Default\Last Session" c:\test

 

Tab 분석

C:\Tools\Forensic\Chromagnon\dist>chromagnonTab.exe "c:\test\Current Tabs"

SelectedNavigationInTab - Tab: 16, Index: 0, Time: 13228317039685565

UpdateTabNavigation - Tab: 16, Index: 0, Url: https://chrome-apps-doc2.appspot.com/extensions/tabs.html

SelectedNavigationInTab - Tab: 20, Index: 0, Time: 13228319147209300

UpdateTabNavigation - Tab: 20, Index: 0, Url: https://secuworld.tistory.com/34

 

C:\Tools\Forensic\Chromagnon\dist>chromagnonTab.exe "c:\test\Last Tabs"

......

UpdateTabNavigation - Tab: 21, Index: 0, Url: chrome://newtab/

UpdateTabNavigation - Tab: 21, Index: 1, Url: https://www.google.com/search?q=chrome+cookie+forensic&oq=chrome+cookie+forensic&aqs=chrome..69i57j0.34298j0j7&sourceid=chrome&ie=UTF-8

UpdateTabNavigation - Tab: 21, Index: 2, Url: https://www.google.com/search?ei=j3lnXq6VI4y2mAW3mozoBQ&q=chrome+cookie+forensic+sqlite+query&oq=chrome+cookie+forensic+sqlite+query&gs_l=psy-ab.3...2404.6489..6866...0.0..0.136.1767.1j14......0....1..gws-wiz.......0i30j0i13i30j33i160j33i21.GPMZ9fq-5Z8&ved=0ahUKEwjumPy05o_oAhUMG6YKHTcNA10Q4dUDCAs&uact=5

UpdateTabNavigation - Tab: 21, Index: 3, Url: https://digitalisx.tistory.com/entry/Google-Chrome-History-with-Python

SelectedNavigationInTab - Tab: 23, Index: 6, Time: 13228315714799040

UpdateTabNavigation - Tab: 23, Index: 3, Url: https://secuworld.tistory.com/

UpdateTabNavigation - Tab: 23, Index: 4, Url: https://secuworld.tistory.com/manage

UpdateTabNavigation - Tab: 23, Index: 5, Url: https://secuworld.tistory.com/manage/posts

UpdateTabNavigation - Tab: 23, Index: 6, Url: https://secuworld.tistory.com/manage/newpost/34?type=post&returnURL=https%3A%2F%2Fsecuworld.tistory.com%2Fmanage%2Fposts

UpdateTabNavigation - Tab: 23, Index: 7, Url: https://secuworld.tistory.com/manage/posts

UpdateTabNavigation - Tab: 23, Index: 8, Url: https://secuworld.tistory.com/manage/newpost/34?type=post&returnURL=https%3A%2F%2Fsecuworld.tistory.com%2Fmanage%2Fposts

UpdateTabNavigation - Tab: 23, Index: 9, Url: https://secuworld.tistory.com/manage/posts

Session 분석

C:\Tools\Forensic\Chromagnon\dist>chromagnonSession.exe "c:\test\Current Session"

......

UpdateTabNavigation - Tab: 19, Index: 0, Url: https://secuworld.tistory.com/34

......

SetSelectedTabInIndex - Window: 13, Index: 0

SetTabIndexInWindow - Tab: 14, Index: 0

SetPinnedState - Tab: 14, Pinned: 0


C:\Tools\Forensic\Chromagnon\dist>chromagnonSession.exe "c:\test\Last Session"

......

SetTabIndexInWindow - Tab: 8, Index: 1

SetPinnedState - Tab: 8, Pinned: 0

SetSelectedNavigationIndex - Tab: 2, Index: 9

UpdateTabNavigation - Tab: 2, Index: 9, Url: https://secuworld.tistory.com/manage/posts

SetSelectedTabInIndex - Window: 1, Index: 1

......

UpdateTabNavigation - Tab: 2, Index: 9, Url: https://secuworld.tistory.com/manage/posts

......

 

Chromagnon
2020년 3월 현재 아직 Python v3.x 는 지원하지 않지만 Python v2.x에서 exe로 만들어 실행하면 된다.

이 또한 크롬이 실행중일 경우 Access Denied가 발생하여 분석이 안된다.

 

E:\Tools\Chromagnon>py -2 chromagnonCache.py "C:\Users\admin\AppData\Local\Google\Chrome\User Data\Default\Cache" [ -o c:\temp\ ]

--------------------------------------------------------------------------------
Hash: 0x3ac547ab
Usage Counter: 0
Reuse Counter: 0
Creation Time: 2020-01-15 04:42:01.214355
Key: https://images.contentstack.io/v3/assets/bltefdd0b53724fa2ce/bltfe1709fd28e63c7e/5d07f061b0b16b1c530d1197/logo-maps-24-color.svg
State: Normal
Data (6848 bytes) at 0xc1031126 : HTTP Header image/svg+xml
Data (883 bytes) at 0xa30113d8 : Data
--------------------------------------------------------------------------------
......

 

E:\Tools\Chromagnon>py -2 chromagnonDownload.py "C:\Users\admin\AppData\Local\Google\Chrome\User Data\Default\history"
2019-12-11 00:08:53.688932      https://github.com/packetzero/dnsparser E:\temp\dnsparser-master.zip
2019-12-11 00:27:13.877036      https://bitbucket.org/paulc/dnslib/downloads/   E:\temp\paulc-dnslib-9b80cd497f3d.zip
2019-12-11 01:28:54.747286      http://www.dnspython.org/kits/1.16.0/   E:\temp\dnspython-1.16.0.zip

 

E:\Tools\Chromagnon>py -2 chromagnonHistory.py "C:\Users\admin\AppData\Local\Google\Chrome\User Data\Default\history"
2019-12-10 07:45:50.957715      35      https://www.daum.net/
2019-12-10 07:46:35.677765      1       https://sports.media.daum.net/sports

E:\Tools\Chromagnon>py -2 chromagnonVisitedLinks.py "C:\Users\admin\AppData\Local\Google\Chrome\User Data\Default\Visited Links" "http://www.naver.com"
http://www.naver.com False

반응형

반응형

웹 분석 - IE

 

분석 대상

웹 캐시, 접속 히스토리, 검색 키워드, 쿠키, 파일 다운로드 목록, 아이콘 캐시, 세션복원 정보, 호환성 목록, DOM 저장소 내용, 북마크 

 

웹 캐시

• 행위의 동기, 목적, 수단, 방법 등 많은 정보 획득 가능
• 웹 브라우저에서 열람한 파일도 저장이 되어 내용 확인이 가능
• 특히 html 캐시 파일을 통해 웹 메일 내용 분석이 가능할 수 있다.

접속 히스토리
• 사용자가 방문한 웹 사이트 접속 정보 저장
• 방문 사이트 URL, 방문 시간, 방문 횟수, 사이트 제목 등
• 저장 형식
  직접 접근 – URL 입력 창에 직접 주소 입력
  간접 접근 – URL 링크를 통해서 접근


쿠키
웹 사이트 방문 시 자동으로 사용자 저장장치에 저장되는 텍스트 데이터
자동 로그인 기능 -> 로그인 아이디 저장 옵션 활성화 시 로그인 아이디 획득 가능
쇼핑몰 열람한 물건, 장바구니 물건
웹 하드 찜 해놓은 자료, 다운받은 자료 등 획득 가능

 

IE 웹 브라우저 위치
Location of Internet Explorer history
Windows 7, 8, 10
C:\Users\<username>\Favorites
C:\Users\<username>\AppData\Local\Microsoft\Windows\WebCache
C:\Users\<username>\AppData\Local\Microsoft\Internet Explorer\Recovery

OS별, IE 버전별로 다를 수 있음

Format of Internet Explorer history
Bookmarks
Internet Explorer Bookmarks are stored in separate Internet Shortcut (.url) files within the 'Favorites' folder.

Cache
Internet Explorer Cache records are stored in the 'WebCacheV01.dat' ESE database, within the 'Content' containers. The cached files are stored as separate files in locations specified within the ESE database.

Cookies
Internet Explorer Cookie records are stored in the 'WebCacheV01.dat' ESE database, within the 'Cookies' containers. The cookie files are stored as separate files in locations specified within the ESE database.

Downloads
Internet Explorer Downloads are stored in the 'WebCacheV01.dat' ESE database, within the 'iedownload' containers.

Session Data
Internet Explorer Session Data is stored in a number of .dat files within the 'Recovery' folder.

Website Visits
Internet Explorer Website Visits are stored in the 'WebCacheV01.dat' ESE database, within the 'History' containers.

 

C:\Users\chohb\AppData\Local\Microsoft\Windows\WebCache 디렉터리
2020-03-10  오전 09:50       297,795,584 WebCacheV01.dat   <- Windows EDB(Extensible Storage Engine DB) Format
2020-03-10  오전 09:48            16,384 WebCacheV01.jfm

 

분석

F:\>forecopy.exe -f C:\Users\chohb\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat f:\test

F:\temp>dir f:\test\WebCacheV01.dat
2020-03-10  오전 10:07       297,795,584 WebCacheV01.dat

 

F:\temp>C:\Windows\SysWOW64\esentutl.exe /mh f:\test\WebCacheV01.dat

F:\temp>C:\Windows\SysWOW64\esentutl.exe /mh f:\test\WebCacheV01.dat | findstr /i /c:"state" 
            State: Dirty Shutdown

 

메타데이터 확인, Dirty Shutdown 상태 확인, 만약 Dirty Shutdown 상태이면 아래 명령으로 Clean Shutdown 상태로 변경

 

F:\temp>C:\Windows\SysWOW64\esentutl.exe /p f:\test\WebCacheV01.dat

F:\temp>C:\Windows\SysWOW64\esentutl.exe /mh f:\test\WebCacheV01.dat | findstr /i /c:"state"
            State: Clean Shutdown


ESEDatabaseView Tool

GUI

<컨테이너 설명>

ㆍ각 정보들은 Container_N 형식의 이를을 가진 테이블에 저장되어 있고 분석 대상 항목별로 각 테이블이 존재한다.
ㆍ각 Container_N 테이블에 저장되는 정보의 종류는 Containers 테이블의 ContainerId 칼럼과 Name 칼럼을 참조
ㆍHistory는 ContainerID 40, 341, 344, 79. 10, 62 등 name 이 history인 ContainerId에 저장

예를 들어 ContainerID 35, History Table 내역이다.

 

CLI

F:\temp>F:\tool\forensic\esedatabaseview\ESEDatabaseView.exe /table "f:\temp\WebCacheV01.dat" * /sxml "f:\test\WebCacheExportIE\webcache_*.xml"

 

내보내기 파일 이름에 '*' 문자를 사용하면 테이블 이름이 Container1 인 경우 내 보낸 파일 이름은 webcache_Container1.csv가 됩니다. 이때 주의할 점은 읽어들이는 WebCache 파일 폴더와 Export 하고자 하는 폴더가 서로 달라야 한다.

 

각 테이블(컨테이너) 설명은 webcache_Containers.??? 파일에 존재한다.
F:\Test\WebCacheExportIE>LogParser.exe -i:xml "select containerid, name, directory from 'F:\Test\WebCacheExportIE\webcache_Containers.xml' [where name like '%download%']"

이 작업은 다소 시간이 걸릴 수 있다. 아래 명령으로 작업 종료 여부를 확인하면 된다.

F:\temp>tasklist |findstr /i /c:"ESEDatabaseView.exe"

F:\temp>dir f:\test\WebCacheExportIE

Connect History

F:\temp>LogParser.exe -i:csv "select containerid, name, extract_token(directory, -2, '\\'), rownumber from 
'F:\Test\WebCacheExportIE\webcache_Containers.csv' where directory like '%History%' order by name "

위에서 하얀색이 Connect History이다. 이에 해당되는 Container_XX(ID) 를 분석하면 된다.

 

F:\temp>LogParser.exe -h -i:xml "f:\test\WebCacheExportIE\webcache_Container_35.xml" -headerRow:on

Fields: <- Field도 당연히 테이블마다 다르다. 조회해야할 컨테이너 번호는 <컨테이너 설명> 참고
  entryid (I)         containerid (I)  cacheid (I)         urlhash (I)  securedirectory (I) filesize (I)     type (I)            flags (I)
  accesscount (I)     synctime (I)     creationtime (I)    expirytime (I)  modifiedtime (I)    accessedtime (I) 

  postchecktime (I)   synccount (I)   exemptiondelta (I)  url (S)          responseheaders (S)

F:\temp>LogParser.exe -i:xml "select accessedtime, url from 'F:\Test\WebCacheExportIE\webcache_Container_35.xml'"

Download Lists

F:\temp>LogParser.exe -i:csv "select containerid, name, extract_token(directory, -2, '\\'), rownumber
from 'F:\Test\WebCacheExportIE\webcache_Containers.csv' where directory like '%download%' order by name "

위에서 하얀색이 Download  이다. 이에 해당되는 Container_XX(ID) 를 분석하면 된다.

F:\temp>LogParser.exe -h -i:xml "f:\test\WebCacheExportIE\webcache_Container_28.xml" -headerRow:on

Fields:
  entryid (I)         containerid (I)  cacheid (I)         urlhash (I)  securedirectory (I) filesize (I)     type (I)            flags (I)
  accesscount (I)     synctime (I)     creationtime (I)    expirytime (I)  modifiedtime (I)    accessedtime (I) 
  postchecktime (I)   synccount (I)   exemptiondelta (I)  url (S)          responseheaders (S)

 

F:\temp>LogParser.exe -i:xml "select accessedtime, url from 'F:\Test\WebCacheExportIE\webcache_Container_28.xml'"
-> 조회해야할 컨테이너 번호는 <컨테이너 설명> 참고
accessedtime       url
------------------ -------------------------------------------------
131605413646823263 iedownload:{64953B9E-FA60-11E7-9BCC-BCAEC53A859B}
131605413718460058 iedownload:{64953B9F-FA60-11E7-9BCC-BCAEC53A859B}
131605413837932764 iedownload:{7195ED56-FA60-11E7-9BCC-BCAEC53A859B}

...... <- Download 내역은 바로 알기가 어렵다. 아래 IE10Analyzer처럼 별도 도구를 이용하여 분석

 

Web Cache
logparser에서 extract_token 함수를 적용하기 위해 Export Format을 csv로 변경
F:\temp>ESEDatabaseView.exe /table "f:\temp\WebCacheV01.dat" * /scomma "f:\test\WebCacheExportIE\webcache_*.csv"  


F:\temp>LogParser.exe -i:csv "select containerid, name, extract_token(directory, -2, '\\'), rownumber, directory from 
'F:\Test\WebCacheExportIE\webcache_Containers.csv' where directory like '%cache%' order by Directory "

위에서 하얀색이 Web Cache 이다. 이에 해당되는 Container_XX(ID) 를 분석하면 된다.

 

Cookies

F:\temp>LogParser.exe -i:csv "select containerid, name, extract_token(directory, -2, '\\'), rownumber from 
'F:\Test\WebCacheExportIE\webcache_Containers.csv' where directory like '%cookie%' order by name "

위에서 하얀색이 Cookie 이다. 이에 해당되는 Container_XX(ID) 를 분석하면 된다.

 

BrowsingHistoryView Tool
Internet Explorer, MicroSoft Edge, Mozilla Firefox, Google Chrome, Opera and Safari 통합 히스토리 분석

GUI

CLI

F:\temp>BrowsingHistoryView.exe /LoadIE 1 /LoadFirefox 0 /LoadSafari 0 /LoadChrome 0 /HistorySource 1 /scomma "f:\test\ie-back.csv"

F:\tool\forensic\browsinghistoryview-x64>dir "f:\test\IE-back.csv" 
2020-03-10  오후 02:05         137,401 IE-back.csv


F:\temp>F:\tool\forensic\LogParser\LogParser.exe -h -i:csv "f:\test\IE-back.csv" -headerRow:on

Fields: 
  Filename (S)    RowNumber (I)    URL (S)          Title (S) 
  Visit Time (S)  Visit Count (I)  Visited From (S) Visit Type (S) 
  Web Browser (S) History File (S) User Profile (S) Browser Profile (S) 
  URL Length (I)  Typed Count (I)  Record ID (I) 

F:\temp>F:\tool\forensic\LogParser\LogParser.exe -i:csv -iDQuotes:auto "select * from 'f:\test\IE-back.csv'"

<참고>

Visit Type 값은 없다

 

IE10Analyzer Tool

<참고>

기타 분석 항목별 다양한 오픈소스 분석 도구들이 존재한다. 

분석 목적, 분석 방법, 설치 여부(Setup 수행 ? Portable ?), 실행 형태(GUi/CLI ?) 등에 따라 분석 항목별로 2 - 3개의 도구들로 분석하여 Cross Check 해본다.  포렌식 분석 시 대상 시스템에 변화를 주어서는 안된다. 무결성의 문제가 발생한다.

만약 어쩔 수 없다면 시스템 영역이 아닌 별도 사용자 영역에 최소한의 변화만 발생시키도록 한다. 예를 들어 레지스트리를 변경시키는 Setup 설치 도구 보다는 CLI를 지원하는 도구를 USB에서 실행하여 실행 결과를 USB에 저장하는 것이 더 좋은 것이다.

 

<참고>

ESEDatabaseView가 분석할 수 있는 ESE Databases
.  contacts.edb - Stores contacts information in Microsoft live products.
.  WLCalendarStore.edb - Stores calendar information in Microsoft Windows Live Mail.
.  Mail.MSMessageStore - Stores messages information in Microsoft Windows Live Mail.
.  WebCacheV24.dat and WebCacheV01.dat - Stores cache, history, and cookies information in Internet Explorer 10.
.  Mailbox Database.edb and Public Folder Database.edb - Stores mail data in Microsoft Exchange Server.
.  Windows.edb - Stores index information (for Windows search) by Windows operating system.
.  DataStore.edb - Windows updates information (Located under C:\windows\SoftwareDistribution\DataStore )
. spartan.edb - Stores the Favorites of Internet Explorer 10/11. (Stored under

                    %LOCALAPPDATA%\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\AC\MicrosoftEdge\

                    User\Default\DataStore\Data\nouser1\120712-0049)

 

 

 

반응형

반응형

삭제파일 목록 조회

 

휴지통은 사용자가 삭제한 파일이나 폴더가 완전 삭제하기 전에 이동되는 중간 임시 영역이다. 이러한 휴지통은 파일시스템으로 보면 하나의 디렉터리에 불과하다. 이러한 휴지통 디렉터리의 접근은 다른 어플리케이션은 불가능하고 단지 휴지통 어플리케이션만 가능하며 휴지통 내 파일 역시 휴지통 어플리케이션이 해석 가능한 포맷의 파일명을 가진 것들만 표시가 가능하다.

 

사용자가 삭제한 즉 휴지통으로 이동된 파일 또는 폴더는 실제 파일은 그대로 남겨둔 채 파일 시스템에 기록된 파일 또는 폴더의 메타 정보만을 변경한다. 그러므로 포렌식 관점에서 덮어쓰여 지지만 않았으면 복원이 얼마던지 가능하고 원본 파일 복원을 위해 다양한 정보를 저장하는 파일을 휴지통 정보 파일이라고 부른다. 이러한 휴지통 정보파일은 Vista 이전 버전에서는 단일 파일로 관리하였고 Vista 이후 부터는 삭제된 개체별로 하나씩 생성하여 관리하고 있다.

 

파일 삭제 시 메타 정보 변화

삭제 시 : 원본파일 MFT Entry 삭제, 휴지통 폴더의 새로운 MFT Entry 생성
복원 시 : 휴지통 폴더의 MFT Entry 삭제, 원본파일 MFT Entry 생성

휴지통 파일

휴지통은, 내부에 삭제된 파일을 저장할 때 아래와 같은 규칙을 통해 파일의 이름을 생성한다. 

Windows XP 휴지통 정보 파일
삭제된 파일명 : D[drive letter][index number].[extension of original]
정보 파일명 : INFO2


Windows 7+ 휴지통 정보 파일
삭제된 파일명 : $R[random].[extension of original]
정보 파일명 : $I[same with $R].[extension of original]


윈도우 vista 이전에서는 파일이 삭제될 경우 INFO2 파일과 D로 시작하고 원본 파일의 확장자로 끝나는 파일이 생성된다. 


"D" + 드라이브경로 + 증가되는 숫자 + "." + 원본 파일의 확장자 예) Dc1.hwp


D로 시작하는 파일은 삭제된 파일의 실제 데이터이며 INFO2 파일은 삭제된 파일을 표현하는데 사용되는 정보가 저장되어있다.  Vista 방식에서 사용되는 $I 와 다르게 INFO2 단일 파일에 삭제된 파일들의 메타정보가 저장되며 파일이 추가적으로 삭제될 경우 계속 업데이트 되는 방식이다. 

Vista+ 에서는 위와같은 방식을 사용하지 않고 삭제된 파일별로 $I, $R 파일이 생성되는데 $R의 경우 원본 파일의 내용이 저장되어있으며 $I는 삭제된 파일의 정보를 저장하고있다.
$R,I의 명명 규칙은 $R 혹은 $I 문자열 뒤 랜덤 영문(대문자),숫자 값과 원본 파일의 확장자로 명명되어있다.

$R의 경우 원본파일 그 자체이기 때문에 OS별로 차이점이 없지만 $I는 OS별로 조금씩 다르므로 분석 시 유의해야 한다.

 

파일이 휴지통으로 이동된 후 완전 삭제되더라도 디스크 내부에서 $I 파일의 조각을 발견하게 된다면 삭제된 파일이 

존재하였다는 중요한 단서가 될 수 있다. 

획득 정보

INFO2
원본 파일 경로 및 이름 (File Record)
휴지통 내의 파일 식별자 (Record Number)
원본 파일이 위치하고 있었던 드라이브의 번호 (Drive Designator)
파일이 삭제된 날짜 및 시간 (File Deleted Date/Time)
원본 파일 크기 (Deleted File Physical Size)

$I
원본 파일 크기 (File Size)
파일이 삭제된 날짜 및 시간 (File Delete Date/Time)
원본 파일 경로 및 이름 (File Record)


휴지통은 파일명 규칙에 맞지 않는 파일이 휴지통에 있을 경우, 일반적인 휴지통 열람으로는 내용을 보여주지 않는다.

이와 같은 특성 때문에 악성코드 혹은 사건 용의자가 정보를 은닉하는데 애용되기 때문에 반드시 파일 시스템을 해석하여 내부의 정보를 살펴볼 필요가 있다는 점을 기억하자. 

 

휴지통 폴더 내부에는 사용자 계정 별로 계정 SID 이름으로 된 폴더가 존재하고 서로 공유되지 않고 독립적으로 사용되며 다른 사용자의 접근은 일반 사용자 권한으로는 불가능하다. 그러므로 조사를 원하는 사용자의 휴지통 경로를 구분하여 분석을 진행할 필요가 있다.

 

각 파티션마다 휴지통 폴더가 생기는 이유?

드라이브(파티션)마다 각각 휴지통 폴더가 존재한다. 서로 다른 파티션은 논리적으로 독립된 공간이다. 따라서 같은 파티션 내에서 파일을 이동 시키면 해당 파일 데이터는 그대로 둔 채 경로만 변경한다. 하지만 파티션 간에 데이터를 이동할 경우에는 원본 파티션에서 데이터를 읽어 목적지 파티션에서 해당 데이터를 써야만 한다. 여기서 각 파티션은 하나의 볼륨 내에 존재하는 것을 의미한다.

 

C: 파티션에 운영체제를 설치한 후 D: 파티션에서 파일을 지웠다면 이 파일은 C:의 휴지통 폴더로 이동하는 것이 아니라 D:의 휴지통 폴더로 이동한다. 즉 D: 파티션에서 파일을 지울 때마다 C:로 이동시켜야 하는 번거로움이 없어진다. 그렇지 않다면 큰 파일이나 많은 양의 파일을 한번에 지울 경우 파일을 지우는 시간이 무척 많이 걸릴 것이며 시스템 성능 저하를 초래할 것이다.

 

하지만  바탕화면의 휴지통을 클릭했을 때 C: 파티션뿐만아니라 D: 파티션에서 삭제된 파일도 보이는게 그 이유는 볼륨 내에 존재하는 모든 파티션의 휴지통 폴더에서 같은 휴지통 이름을 가지는 폴더를 전부 링크 시켜 놓아 함께 보여주기 때문이다.

 

Rifiuti
Rifiuti[2] is a for analyzing Windows Recycle Bin INFO2 file in Window XP- and $i Files in Windows Vista+. 

rifiuti.exe : INFO2 파일 분석
rifiuti-vista[64].exe : $i 파일 분석

 

먼저 휴지통 폴더 조회

C:\>dir /ad /s c:\ | findstr /i /c:"recy" 
2020-03-09  오전 09:05              $Recycle.Bin 
 c:\$Recycle.Bin 디렉터리 
 c:\$Recycle.Bin\S-1-5-18 디렉터리 
 c:\$Recycle.Bin\S-1-5-21-795312640-3018449293-233669703-1001 디렉터리 

C:\>dir c:\$Recycle.Bin /s
c:\$Recycle.Bin 디렉터리
2020-03-09  오후 08:30                 2 WhufT^].jpg

 c:\$Recycle.Bin\S-1-5-21-795312640-3018449293-233669703-1001 디렉터리
2019-12-14  오후 01:09               104 $IZ522XF.vscode
2017-11-14  오전 08:41                98 $I4HT8VQ.lnk 
2019-12-20  오후 01:31               102 $IJ8H8A0.lnk 
2019-12-13  오전 09:20               122 $IQRGYB6.lnk 

휴지통 내 lnk 링크 파일은 형식이 lnk 이지만 일반 링크파일 분석 방법으로 분석이 되지 않는다.

 

C:\rifiuti>rifiuti-vista64.exe c:\$Recycle.Bin\S-1-5-21-795312640-3018449293-233669703-1001
Recycle bin path: 'c:\$Recycle.Bin\S-1-5-21-795312640-3018449293-233669703-1001'
Version: 2
Index   Deleted Time    Size    Path
$IZ522XF.vscode 2019-12-14 04:09:57     12      C:\vscodeworkspace\JavaScript\.vscode
......

 

C:\rifiuti>rifiuti-vista.exe f:\$RECYCLE.BIN\S-1-5-21-2555433415-3599755044-3103386514-1001

Recycle bin path: 'c:\$Recycle.Bin\S-1-5-21-795312640-3018449293-233669703-1001'

Version: 2

OS Guess: Windows 10 or above

Time zone: Coordinated Universal Time (UTC) [+0000]

 

Index   Deleted Time    Size    Path

$I27ZKYW.torrent        2019-07-09 12:42:55     105071  C:\Temp\한나몬타나_시즌1.torrent

$IAZX7PY.torrent        2019-07-11 10:32:03     473356  C:\Temp\[limetorrents.info]Hannah.Montana.Season.4.torrent

$I0I5U18.avi    2019-07-11 10:32:12     218361856       C:\Temp\SEZON 4\Hannah Montana Forever.S04E01.640x480.avi

$I4IEUQQ.avi    2019-07-11 10:32:12     222615552       C:\Temp\SEZON 4\Hannah Montana Forever.S04E08.640x480.avi

$I4OEP2Z.avi    2019-07-11 10:32:12     221011968       C:\Temp\SEZON 4\Hannah Montana Forever.S04E09.640x480.avi

......


NTFS Journal Files
$MFT 추출
C:\>RawCopy64.exe /FileNamePath:C:0 /OutputPath:C:\Results

$LogFile 추출
C:\>RawCopy64.exe /FileNamePath:C:2 /OutputPath:C:\Results

$UsnJRNL 추출
C:\>ExtractUsnJrnl64.exe /DevicePath:C: /OutputPath:C:\Results

$UsnJRNL CSV 저장, 반드시 Comma로 필드 분리
C:\>UsnJrnl2Csv64.exe /UsnJrnlFile:C:\Results\$UsnJrnl_$J.bin /OutputFormat:csv /Separator:,

/OutputPath:C:\Dropbox\DFIR\Window\FileSystem\Results

C:\>LogParser.exe -h -i:CSV c:\Results\UsnJrnl_2019-07-18_23-37-34.csv -headerrow:on
Fields:
  Filename (S)           RowNumber (I)               癤풭ffset (S)
  FileName (S)           USN (I)                     Timestamp (T)
  Reason (S)             MFTReference (I)            MFTReferenceSeqNo (I)
  MFTParentReference (I) MFTParentReferenceSeqNo (I) FileAttributes (S)
  MajorVersion (I)       MinorVersion (I)            SourceInfo (S)
  SecurityId (I)

C:\>LogParser.exe -stats:on -i:csv "select Timestamp, FileName,  FileAttributes, reason

from UsnJrnl_2019-07-18_23-37-34.csv where reason like '%delete%'"
Timestamp           Filename                                                                  FileAttributes           Reason
------------------- ------------------------------------------------------------------------- ------------------------ ------------
2019-07-17 01:51:25 C:\Results\UsnJrnl_2019-07-18_23-37-34.csv archive                  CLOSE+FILE_DELETE
2019-07-17 01:51:25 C:\Results\UsnJrnl_2019-07-18_23-37-34.csv archive                  CLOSE+FILE_DELETE
2019-07-17 01:51:55 C:\Results\UsnJrnl_2019-07-18_23-37-34.csv hidden+archive+temporary CLOSE+FILE_DELETE
2019-07-17 01:51:55 C:\Results\UsnJrnl_2019-07-18_23-37-34.csv archive                  CLOSE+FILE_DELETE
2019-07-17 01:52:20 C:\Results\UsnJrnl_2019-07-18_23-37-34.csv hidden+archive+temporary CLOSE+FILE_DELETE
2019-07-17 01:52:20 C:\Results\UsnJrnl_2019-07-18_23-37-34.csv archive                  CLOSE+FILE_DELETE
2019-07-17 01:52:20 C:\Results\UsnJrnl_2019-07-18_23-37-34.csv hidden+archive+temporary CLOSE+FILE_DELETE
2019-07-17 01:52:20 C:\Results\UsnJrnl_2019-07-18_23-37-34.csv archive                  CLOSE+FILE_DELETE
2019-07-17 01:53:26 C:\Results\UsnJrnl_2019-07-18_23-37-34.csv archive                  CLOSE+FILE_DELETE
2019-07-17 01:53:26 C:\Results\UsnJrnl_2019-07-18_23-37-34.csv archive                  CLOSE+FILE_DELETE
......

Windows Search DB

Windows Search DB를 통해서도 삭제 파일 정보 확인 가능

WinSearchDBAnalyzer Tool

- 삭제된 파일에 대한 정보 및 파일 내용도 확인 가능

반응형

반응형

다운로드 받은 파일 조회

 

각 파일의 Zone.Identifier 값으로 다운로드 여부를 판단하며 Zone.Identifier 값이 3이면 인터넷으로부터 다운로드된 파일이라   있다.


Zone.Identifier는
 ADS 일종으로 아래와 같은 값을 가진다.

Zone ID

1 - 로컬 인트라넷

2 - 신뢰할 있는 사이트(URLZONE_TRUSTED)

3 - 인터넷

4 - 제한된 사이트(URLZONE_UNTRUSTED)

 

분석
ADSIdentifier Tool

Windows-based command-line application that identifies, and optionally removes, NTFS Alternate Data Streams.


F:\tool\forensic>ADSIdentifier.exe /folder:f:\

Dir Command

F:\tool\forensic>dir f: /S /R | findstr /i /c:":$D" |findstr /i /c:"Zone.Identifier"

Powershell

PS F:\tool\forensic> get-ChildItem f:\* -Recurse -ErrorAction SilentlyContinue | get-item -Stream Zone*

다운받은 파일을 어디서 다운받았는지 출처 확인

네이버에서 "한글양면인쇄.pdf" 파일을 다운받은 후 아래 명령어로 확인

C:\temp>more < 한글양면인쇄.pdf:Zone.Identifier

[ZoneTransfer]

ZoneId=2  <- ZoneID가 3이 아닌 2이네. 추가 혹인이 필요해 보임

ReferrerUrl=https://cloud.naver.com/

HostUrl=https://files.cloud.naver.com/file/download.api?resourceKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

반응형

반응형

사용자의 PC 사용 성향, 패턴을 분석하는데 유용하다, 문서 작업을 많이 하는지 인터넷을 많이 하는지.......주로 어떤 프로그램을 많이 실행하는지 또한 고의적으로 삭제하지 않는 한 OS에 의해 삭제되지 않으므로 삭제된 프로그램이나 파일의 사용 흔적을 조사할 수 있다.

RecentDoc 분석
Windows 탐색기를 통해 최근 오픈된 문서 목록
최근 접근(사용) 폴더/문서, 거의 lnk 파일 ( = 바로가기 파일) 형태로 존재, 폴더 목록에 대한 lnk 파일도 존재한다.

Recent 디렉터리에는 최근에 사용된 파일이나 폴더들의 항목들이 '바로가기'의 형태로 존재

C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Recent Folder

F:\temp>dir /a-d C:\Users\chohb\AppData\Roaming\Microsoft\Windows\Recent Folder /O-D 
2020-03-09  오후 01:42               466 temp (9).lnk 
2020-03-09  오후 01:42               687 DFIR-Windows-Behaviour-Analyze.docx.lnk 
2020-03-09  오후 12:51               748 2020년도.lnk
......


링크파일분석 참고 : https://secuworld.tistory.com/24?category=849780

폴더로 관리되는 RecentDoc은 최근에 접근, 열람한 문서 정보가, 레지스트리에 저장되는 UserAssist는 주로 최근에 실행한 응용 프로그램 정보가 저장된다.

 

참고로 최근 열어본 문서 레지스트리
HKU\%UserSID%\Software\Microsoft\Office\{Version}\{Program}\File MRU
HKLM\Software\HNC\Hwp\6.5\RecentFile
HKLM\Software\HNC\Hwp\{Version}\HwpFrame\RecentFile
HKU\%UserSID%\Software\Adobe\Acrobat Reader
HKU\%UserSID%\Software\Adobe\Adobe Acrobat
HKU\%UserSID%\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs
HKU\%UserSID%\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU
HKU\%UserSID%\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedPidlMRU
HKU\%UserSID%\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU
HKU\%UserSID%\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU

RecentfilesView
GUI

CLI
F:\tool\forensic\recentfilesview>RecentFilesView.exe /sxml "f:\temp\RecentFiles.xml" /sort ~"Modified Time"


F:\tool\forensic\recentfilesview>F:\tool\forensic\LogParser\LogParser.exe -i:xml "select * from 'f:\temp\RecentFiles.xml'"

 

RecentFiles.xml 파일 내용

regripper
F:\tool\forensic\recentfilesview>F:\tool\forensic\RegRipper2.8\rip.exe -r f:\test\reg-hive-backup\chohb.NTUSER.DAT -p recentdocs

F:\tool\forensic\recentfilesview>F:\tool\forensic\RegRipper2.8\rip.exe -r f:\test\reg-hive-backup\chohb.NTUSER.DAT -p recentdocs_tln

JumpList 분석

Win 7 이상 . 최근 접근한 문서나 자주 열람하는 문서 정보

윈도우 7 이전에는 Recent와 UserAssist로 사용자의 편의성을 위하여 목록들을 유지하였다. 하지만 7에 와서는 이 두개에 더해 새로운 기능이 추가되었는데 바로 점프리스트이다. 점프리스트란 작업 표시줄에서 아이콘에 마우스를 우클릭하면 이전에 열었던 목록이나 자주 여는 파일의 목록들이 나타난다. 이를 점프리스트라 한다.

점프 목록은 윈도우 7+에서 응용프로그램 실행 시 작업 표시줄에 표시된다. 작업 표시줄에 나타나는 응용프로그램에 마우스를 위치시킨 후 마우스를 우클릭하면 해당 응용프로그램으로 최근에 열거나 사용했던 파일들이 표시된다. 이를 점프 목록이라 부른다. 다음은 Adobe Acrobat 프로그램의 점프 목록이다.

바로가기(lnk, 링크파일)는 단순히 특정 개체에 대한 정보와 실행 통로를 제공해 주는데에 그치는 반면, 점프 리스트는 아래와 같은 정보를 추가적으로 저장하여 사용자의 편의를 높혀준다.

  • Recent(최근 항목) : 응용프로그램을 통해 최근 열람한 파일. 기존 최근 접근 문서 목록도 점프리스트에 포함
  • Frequent(자주 사용하는 항목) : 응용프로그램을 통해 자주 열람하는 파일
  • Tasks(작업) : 경우에 따라 미디어 재생, 새 문서 작성 등의 기능을 빠르게 이용
  • Pinned(사용자 고정) : 응용프로그램의 사용이 종료되어도 작업 표시줄에 응용프로그램 아이콘을 남겨두기 위한 기능(사용자가 자주 사용하는 응용프로그램일 가능성이 크다)

점프리스트는 Windows 7부터 추가된 기능으로 바로가기의 확장형이라고 볼 수 있기 때문에, 정보의 해석과 활용은

바로가기 링크 파일과 유사하다. 다만 기존 링크파일 외 새롭게  추가된 전용 포멧을 사용하는 .CustomDestinations 파일과 컴파운드 파일 포맷을 사용하는 .automaticDestination-ms 파일이 각각 존재하기 때문에, 전용 도구와 컴파운드 뷰어를 활용하여 추가로 분석을 해야한다. 

“Recent” 라는 이름으로 이전에 Acrobat으로 열었던 파일 목록을 저장하고 있다. 자주 방문한 경로나 파일은 “Frequent” 라는 이름의 목록으로 따로 표현해 주기도 한다. 이러한 목록을 점프 목록이라 한다. 점프 목록은 특정 응용프로그램에만 적용되는 것이 아니라 윈도우 탐색기(Windows Explorer)와 같은 기본 프로그램에도 적용된다. 윈도우 탐색기의 점프 목록은 최근에 방문했던 폴더 경로가 포함되어 있다. 단순히 방문만 한다고 기록되는 것은 아니고 특정 폴더에서 파일을 실행시키거나 행위를 했을 때만 점프 목록에 기록된다. 브라우저의 경우에는 최근에 방문한 사이트 경로나 자주 사용하는 사이트 경로도 저장된다. 게다가 브라우저에 따라 최근 닫은 사이트 경로도 포함해주기도 한다. 

이처럼 점프 목록은 이전부터 사용된 응용프로그램 로그인 “Recent” 폴더(최근 사용 문서)나 “UserAssist” 키보다 더 많은 그리고 더 중요한 정보를 포함하고 있다. 게다가 최근 사용 문서 정보처럼 사용자가 일부러 삭제하지 않는 이상 운영체제 설치때부터 계속해서 관련 로그를 저장한다. 따라서, 윈도우 7에서 포렌식 분석 시 필수적으로 분석해야 하는 자료 중 하나이다.

 

포렌식 관점에서 Jump List는 사용자의 응용프로그램 사용 흔적 및 패턴을 파악할 수 있고 윈도우 설치 시부터 자동 설정되는 부분도 있기 때문에 의도적으로 삭제하는 경우가 아닌 이상 지속적으로 로그가 저장이 된다. 만약 삭제될 경우에도 볼륨에 그대로 유지되어 복구가 가능하다.

 

JumpList는 기존 RecentDoc 및 UserAssist 외 Win7+ 에서 추가로 생성

자주 사용하는 문서 + 자주 사용하는 프로그램 <- MRU 알고리즘에 의해 MRU List로 관리

운영체제가 자동으로 생성하거나 사용자가 생성(Pinned)

링크파일(lnk)이 아닌 CDF(Compound Document File) 형태로 존재

   . AutomaticDestinations 폴더의 내용은 CDF(Compound Document File; 이하 복합문서) 형태로 저장
   . Compound File Explorer(CFX;
http://www.coco.co.uk/developers/CFX.html) 를 통해 구조 분석 가능
   . CustomDestinations의 경우 자체 포멧을 사용
악성 파일 실행 흔적 / 외장저장장치 파일 열람 흔적  /  웹 사이트 접속 이력 확인 가능
AutomaticDestinations, CustomDestinations 두 가지 점프리스트 포멧이 모두 내부적으로는 바로가기(.lnk) 파일을 포함하고 있어서 분석 관점에서 정보의 해석과 활용은 바로가기 파일과 교차하여 진행하는 것이 좋다. 

 

또한 JumpList의 항목은 사용자의 삭제 행위에 의해서만 삭제되기 때문에, 의도적으로 삭제되지 않는 한 파일이나 프로그램 사용에 관련된 정보를 획득할 수 있다. 반대로는 삭제된 흔적이 발견되는 경우, 사건에 관련하여 용의자 의도를 의심해볼 필요가 있을 것이다. 단, 점프 리스트 자체를 사용하지 않음으로 설정하면 관련 파일들이 모두 삭제되어진다.

※ Compound Document Format : FAT 파일 시스템과 굉장히 유사한 형태로 되어 있는 파일 포멧으로, 파일 시스템이 파일을 저장하듯 내부의 스트림(Stream)으로 데이터를 저장, 관리할 수 있기 때문에 목적에 따라 자주 사용되는 포멧이다. (대표적으로는 Office 2003까지의 문서 파일들이 사용하였고, 지금 설명하는 점프리스트의 AutomaticDestinations 파일이나, 윈도우의 스티커 노트, HWP 문서 등이 이 포멧을 사용한다.)

 

AutomaticDestinations
자주 사용되는 목록(Frequent)나 작업목록(Tasks)가 존재 -> 운영체제가 자동 생성
F:\temp>dir /a-d c:\Users\chohb\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations /O-D
2020-03-09  오후 01:52         2,455,770 f01b4d95cf55d32a.automaticDestinations-ms
2020-03-09  오후 01:52           424,960 7fbc827655307cb6.automaticDestinations-ms
2020-03-09  오후 01:51         3,270,144 5f7b5f1e01b83767.automaticDestinations-ms"
......

CustomDestinations
최근 사용한 목록(Recent)나 사용자가 직접 고정시킨 항목(Pinned)  -> 응용프로그램이 자동 생성 + 사용자 생성

F:\temp>dir /a-d c:\Users\chohb\AppData\Roaming\Microsoft\Windows\Recent\CustomDestinations /O-D
2020-03-09  오후 01:35            22,354 5d696d521de238c3.customDestinations-ms
2020-03-09  오전 08:48             5,349 99fdce3ec7898a04.customDestinations-ms
2020-03-09  오전 08:46                24 f18460fded109990.customDestinations-ms
......

 

파일명 구성 : 앞의 16글자는 Application ID로 각 App에 해당하는 ID를 띄고 있으며 각 파일의 내부를 확인해보면 여러 항목들이 존재하는 것을 확인할 수가 있다. 이러한 App ID는 http://kali-km.tistory.com/entry/Jump-List-App-ID  에서 Ctrl+F로 찾아서 어떠한 프로그램의 점프 리스트 목록인지 확인할 수가 있다.

 

내용을 확인할 때는 HxD로 열어서 확인하거나 BinText를 통해서도 확인이 가능하다. 하지만 정확히 분석하기 위해서는 JumpList와 관련된 툴을 이용하는 것이 좋다.

 

분석

JumplistView Tool

GUI

Jump list filename이 데이터 출처이다. 이를 통해 OS나 응영프로그램이 자동으로 생성한 것인지

사용자가 직접 생성한 것인지 파악할 수 있다.

 

CLI
F:\tool\forensic\jumplistsview>JumpListsView.exe /sxml F:\temp\JumpList.xml
F:\tool\forensic\jumplistsview>F:\tool\forensic\LogParser\LogParser.exe -stats:off -i:xml "select filename, full_path, accessed_time, application_name from 'F:\temp\JumpList.xml'"

JLECmd

F:\tool\forensic\jumplistsview>F:\tool\forensic\JLECmd.exe -d c:\Users\chohb\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations all

F:\tool\forensic\jumplistsview>F:\tool\forensic\JLECmd.exe -d c:\Users\chohb\AppData\Roaming\Microsoft\Windows\Recent\CustomDestinations all

반응형

반응형

파일 행위 분석-LastVisitedPidlMRU

Windows XP의 LastVisitedMRU 이름이 Windows Vista 부터 LastVisitedPidlMRU로 변경

LastVisitedPidlMRU 키는 응용프로그램에서 파일을 열기 위해 사용하는 특정 실행 파일을 추적합니다.
또한 각 값은 해당 응용프로그램이 액세스 한 마지막 파일의 디렉토리 위치를 추적합니다. 즉 최근에
사용자가 사용한 프로그램 및 최근에 접근한 폴더를 확인이 가능하다.

레지스트리 주요경로 
Windows XP- 
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU

HKU\[SID]\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU


Windows 7+ 

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedPidlMRU

HKU\[SID]\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedPidlMRU


HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedPidlMRU

HKU\[SID]\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedPidlMRU

최근 10개 데이터 조회
해당 레지스트리 값은 REG_BINARY 값이므로 reg query로 조회하면 직접 한 번에 내용을 읽을 수 없으므로 아래와 같은 방법으로 분석한다.

 

분석

분석 데이터는 최근 사용자 TimeLine 분석(https://secuworld.tistory.com/16) 을 통해 확인할 수 있다.

LastActivityView

Data Source를 보면 OpenSavePidlMRU, LastVisitedPidlMRU 등 레지스트리도 추출하여 표시한다.

 

RegRipper / rip.exe

regripper Tool 모든 plugin 분석

C:\>rip.exe -r "C:\Test\reg-hive-backup\chohb.NTUSER.DAT" -f ntuser >> c:\temp\rr-ntuser.txt


rr-ntuser.txt 파일 내용

응용 프로그램별로 가장 최근에 접근한 폴더 확인

 

반응형

반응형

파일 행위 분석-OpenSavePidlMRU

  • Windows XP의 OpenSaveMRU 이름이 Windows Vista 부터 OpenSavePidlMRU로 변경
  • Windows 탐색기 공용 대화 상자를 통해 최근에 열거나 저장된 파일 정보 저장
  • Web Browsers 및 Applications을 통해 열거나 저장한 파일 정보 저장
  • 파일의 확장자 별로 그룹화되어 있음

사용자가 최근에 열거나 저장한 파일 확인.
Windows의 표준 열기 / 저장 대화 상자에서 파일 이름을 선택할 때마다 다음 키 아래에 새 레지스트리 항목이 추가됨
단, 어떤 프로그램의 대화 상자을 통해서 열엇는지는 알 수 없다. 이 정보는 LastActivityView 도구나 $MFT, $Usnjrnl, $Logfile 분석을 통해 확인할 수 있다.

레지스트리 주요경로
Windows XP-
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU  

HKU\[SID]\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU 

Windows 7+ 

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU

HKU\[SID]\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU


공통
NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg3


F:\>reg query "HKU\S-1-5-21-2555433415-3599755044-3103386514-1001\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU"

F:\>reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU"

OpenSaveFilesView

GUI

CLI
F:\tool\forensic\opensavefilesview-x64>OpenSaveFilesView.exe /sxml f:\temp\OpenSaveFilesView.xml

F:\>LogParser.exe -h -i:xml "f:\temp\OpenSaveFilesView.xml
Fields:
  filename (S)           extension (S)               order (I)
  open_time (S)          file_modified_time (S)      file_created_time (S)
  file_size (S)          file_attributes (S)         file_owner (S)
  filename_only (S)

F:\tool\forensic\opensavefilesview-x64>F:\tool\forensic\LogParser\LogParser.exe -i:xml "select filename, file_modified_time, open_time from 'f:\temp\OpenSaveFilesView.xml'"
filename                                                       file_modified_time          open_time
--------------------------------------------------------------------------------- ---------------------- ---------------------
F:\temp\요즘부자.png                                   2020-03-05 오후 1:04:36  2020-03-05 오후 1:04:36
F:\temp\요즘부자.png                                   2020-03-05 오후 1:04:36  2020-03-05 오후 1:04:36
F:\Security\M-Trend 2019 보안 특별보고서.pdf   2020-03-05 오전 9:45:55  -
F:\Security\M-Trend 2019 보안 특별보고서.pdf   2020-03-05 오전 9:45:55  2020-03-05 오전 9:45:54
......

LastActivityView

Data Source를 보면 OpenSavePidlMRU, LastVisitedPidlMRU 등 레지스트리도 추출하여 표시한다.

 

RegRipper / rip.exe

regripper Tool 모든 plugin 분석

C:\>rip.exe -r "C:\Test\reg-hive-backup\chohb.NTUSER.DAT" -f ntuser >> c:\temp\rr-ntuser.txt


rr-ntuser.txt 파일 내용

반응형

반응형

응용 프로그램 호환성(AmCache) 분석

 

이 파일은 프로그램이 실행될 때 프로그램 경로를 임시 저장하기 위한 용도로 사용하는 것으로 파일 이름처럼 최근 실행한 프로그램 정보만 저장되어 있다.

실행한 모든 프로세스 정보가 저장되는 것은 아니고 실행 파일에서 또 다른 실행 파일이 파생(드롭퍼)되거나 다른 볼륨이나 시스템에서 복사(인터넷 다운로드 포함)된 프로그램을 실행한 경우 해당 프로그램의 정보가 자주 남는다고 한다.

 

Amcache의 경우 지속적으로 누적되다보니 시스템을 오래 사용하면 굉장히 많은 데이터를 확인할 수 있습니다. 침해사고 분석 시 악성코드(프로그램, 프로세스) 실행 흔적을 가장 먼저 봅니다. 그 중 가장 가치 있는 정보가 호환성 캐시와 앱캐시입니다.

 

앰캐시(Amcache.hve) 파일은 프로그램 호환성 관리자(Program Compatibility Assistant)와 관련된 레지스트리 하이브 파일로 응용 프로그램의 실행정보를 저장한다. 

이 파일을 통해서 응용 프로그램의 실행경로, 최초 실행시간을 확인할 수 있을 뿐 아니라, 삭제시간까지 추정할 수 있다. 응용 프로그램의 최초 설치시간 및 삭제시간까지 확인할 수 있기 때문에 프리패치(Prefetch) 파일, 아이콘캐시(Iconcache.db) 파일 분석과 병행하면 응용 프로그램의 전체적인 타임라인을 구성할 수 있다.

 

또한, 앰캐시 파일은 안티포렌식 프로그램, 포터블 프로그램 및 외장저장장치 흔적을 기록하고 있어 디지털 포렌식 관점에서 중요한 아티팩트이다.

 

하지만 작업스케줄 중 ‘ProgramDataUpdater’가 수행될 때마다 초기화가 되는 단점이 있다. ProgramDataUpdater’는 기본적으로 하루에 한 번 수행된다. 따라서 ‘RecentFileCache.bcf’를 아티팩트로 사용하려면 하루에 한 번씩 backup을 해주거나 ‘ProgramDataUpdater’위 수행시간을 늘려주면 된다.

 

이 파일은 “C:\Windows\AppCompat\Programs\” 폴더에 존재

F:\temp>dir C:\Windows\AppCompat\Programs\

윈도우7에서의 RecentFileCache.bcf 파일이 윈도우 8에서는 Amcache.hve파일로 대체되었음


프로그램 호환성 관리자와 관련된 레지스트리 하이브 파일
- 응용프로그램의 실행정보 저장
- 응용프로그램의 실행경로, 최초 실행시간, 삭제시간 정보 등 저장
- 프리패치 파일과 병행하면 프로그램의 전체적인 타임라인 구성 가능

포렌식 관점
- 모든 실행파일의 목록, 전체 경로 확인
- 파일의 최초 실행시간, 삭제시간 확인
- 안티 포렌식 프로그램, 외부 저장장치 흔적 추적

 

분석

AppCompatCacheParser

Examples: AppCompatCacheParser.exe --csv c:\temp -t -c 2
              AppCompatCacheParser.exe --csv c:\temp --csvf results.csv

 

F:\temp>"f:\tool\forensic\AppCompatCacheParser\AppCompatCacheParser.exe" --csv f:\temp --csvf amcache.csv

F:\temp>F:\tool\forensic\LogParser\LogParser.exe -stats:on -i:csv "select * from 'f:\temp\amCache.csv'"

AmcacheParser
D:\>RawCopy64.exe /filenamepath:c:\Windows\appcompat\Programs\Amcache.hve /outputpath:d:\temp

D:\>AmcacheParser.exe -f "d:\Temp\Amcache.hve" --csv "d:\temp"


RegRipper
C:\Tools\Forensic\RegRipper2.8>regex.exe -h f:\test\reg-hive-backup
F:\tool\forensic\RegRipper2.8>rip.exe -r "f:\Test\reg-hive-backup\Amcache.hve" -p amcache

반응형

반응형

응용 프로그램 호환성(Shim Cache, AppCompat Cache) 분석

 

호환성 문제를 신경써야 하는 이유는 윈도우가 버전업 되면서 API도 변경되는데 이 경우 대체 API로 리다이렉트하여 실행될 경우 보안 문제가 발생할 수도 있기 때문이다. 응용 프로그램 실행 흔적 분석에 있어 PreFetch는 128개 라는 크기(개수) 제한으로 인해 PreFetch에는 없는 정보가 Shim Cache-AppCompatCache로 불리기도 함-에는 존재할 수가 있다.

 

응용 프로그램 간 호환성을 제어하고 트러블슈팅과 문제 해결을 위해 만든 파일
악성코드 실행 시 호환성 문제 자주 발생하기 때문에 침해분석에 활용

프리패치와 비슷한 응용프로그램의 실행 정보 저장

- 모든 실행 파일의 경로, 크기, 마지막 수정시간, 마지막 실행 시간 등의 정보를 저장 
- 하지만 프리패치는 한정적이라 사라질 가능성이 있음. 그렇지만 Shim Cache에는 존재할 수 있음

 

또한, 최근 악성코드는 프리패치와 같이 알려진 흔적을 모두 삭제하는 경향이 있다. 이런 상황에서 호환성 캐시 정보는 분석에 매우 중요하게 사용될 수 있다. 특히, 시간 정보가 포함되기 때문에 더할 나위없이 유용하다. 마지막 업데이트 시간이 XP에만 존재하는 것은 안타깝다.

 

뛰어난 공격자라면 각 운영체제 버전에 맞게 호환성 문제가 없는 프로그램을 사용하겠지만, APT 공격과 같이 오랫동안 여러 시스템을 감염시켜야 하는 경우 시스템 버전이 다양하기 때문에 호환성 캐시에 흔적이 저장될 가능성이 매우 크다.

 

호환성 캐시는 해당 시스템에서 실행 시 호환성 문제가 발생했던 응용프로그램의 정보를 저장하고 있다. 일반적인 캐시의 역할과 마찬가지로 이미 실행했던 프로그램이라면 데이터베이스를 살펴보기 전에 호환성 캐시를 이용해 빠르게 처리한다. 호환성 캐시 정보는 레지스트리에 저장되는데 경로는 다음과 같다.

 

Shim Cache 세 가지 경우에 따른 레지스트리 경로

1) 호환성 충돌 대화상자에서 사용자가 “이 프로그램이 제대로 설치되었습니다.”를 선택한 경우

C:\>reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store"

 

2) 응용프로그램 호환성 데이터베이스에 없을 경우 : 호환성 캐시 레지스트리

C:\>reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache" [/s]

 

3) 응용프로그램 호환성 해결 설정 : 호환성 모드, 권한 등 설정된 경우

C:\>reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" [/s]

 

분석

ShimCacheParser Tool
E:\Tools\ShimCacheParser>py -2 ShimCacheParser.py -l -o "e:\temp\shimcache.csv"
[+] Dumping Shim Cache data from the current system...
[+] Found Windows 10 Creators Update Apphelp Cache data...
[+] Found Windows 10 Creators Update Apphelp Cache data...
[+] Writing output to e:\temp\shimcache.csv...


E:\Tools\ShimCacheParser>type e:\temp\shimcache.csv | more 
Last Modified,Last Update,Path,File Size,Exec Flag 
10/30/14 00:51:20,N/A,C:\Users\admin\AppData\Local\Temp\nsv36D4.tmp\UninstallASM.exe,N/A,N/A 
02/20/20 03:31:34,N/A,C:\Users\Public\Documents\DuzonISS\ArgosLiveUpdate\ArgosLiveUpdateUninstaller.exe,N/A,N/A 
05/11/19 09:43:41,N/A,C:\WINDOWS\system32\reg.exe,N/A,N/A 
......


F:\temp>LogParser.exe -stats:on -i:csv "select filename, path from 'f:\temp\ShimCache.csv'"
Filename              Path
--------------------- ----------------------------------------------------------------------------------
f:\temp\ShimCache.csv F:\OSTEMP\nsd4F90.tmp\UninstallASM.exe
f:\temp\ShimCache.csv C:\Program Files (x86)\Google\Chrome\Application\80.0.3987.132\Installer\setup.exe
f:\temp\ShimCache.csv F:\tool\forensic\CrowdResponse64.exe
f:\temp\ShimCache.csv F:\tool\forensic\CrowdResponse.exe
f:\temp\ShimCache.csv C:\WINDOWS\system32\DllHost.exe
f:\temp\ShimCache.csv F:\Dropbox\LiveForensic\Windows\Tools\accesschk.exe
f:\temp\ShimCache.csv F:\Dropbox\LiveForensic\Windows\Tools\accesschk64.exe
f:\temp\ShimCache.csv F:\Dropbox\LiveForensic\Windows\Tools\CrowdResponse.exe
f:\temp\ShimCache.csv F:\Dropbox\LiveForensic\Windows\Tools\CrowdResponse64.exe
f:\temp\ShimCache.csv F:\Dropbox\LiveForensic\Windows\Tools\gawk.exe
......

Python v2.x만 지원, v3.x 지원안됨. 그래서 실행 파일을 만들어 실행
F:\temp>f:\tool\forensic\ShimCacheParser\ShimCacheParser.exe -l -o f:\temp\ShimCache.csv
F:\temp>f:\tool\forensic\ShimCacheParser\ShimCacheParser.exe -l
[+] Dumping Shim Cache data from the current system...
[+] Found Windows 10 Creators Update Apphelp Cache data...
[+] Found Windows 10 Creators Update Apphelp Cache data...
Last Modified Last Update Path File Size Exec Flag
10/30/14 00:51:20 N/A F:\OSTEMP\nsd4F90.tmp\UninstallASM.exe N/A N/A
03/04/20 00:29:04 N/A C:\Program Files (x86)\Google\Chrome\Application\80.0.3987.132\Installer\setup.exe N/A N/A
03/04/20 08:43:35 N/A F:\tool\forensic\CrowdResponse64.exe N/A N/A
11/19/18 23:43:24 N/A F:\tool\forensic\CrowdResponse.exe N/A N/A
......

RegRipper
C:\Tools\Forensic\RegRipper2.8>regex.exe -h f:\test\reg-hive-backup
F:\tool\forensic\RegRipper2.8>rip.exe -r "f:\Test\reg-hive-backup\system" -p appcompatcache

F:\tool\forensic\RegRipper2.8>rip.exe -r "f:\Test\reg-hive-backup\system" -p appcompatcache_tln

F:\tool\forensic\RegRipper2.8>rip.exe -r "f:\Test\reg-hive-backup\system" -p shimcache

F:\tool\forensic\RegRipper2.8>rip.exe -r "f:\Test\reg-hive-backup\system" -p shimcache_tln 



<참고 1>

ShimCacheParser Tool 의 아쉬운 점은 디스크 이미지의 분석은 불가능하고 라이브 시스템에서만 동작한다는 점이다.
따라서 타임라인 통합 분석이 힘든 라이브 포렌식에 유용하게 활용 가능하다.

 

<참고 1>

윈도우의 호환성 관리
윈도우는 어떻게 호환성 문제가 있는 프로그램을 식별하고 해결하는 것일까? 응용프로그램 호환성 데이터베이스가 이 역할을 해준다.  호환성 처리 모듈은 DLL로 구성되어 있고, 호환성 데이터베이스는 Appfix Package라는 형식의 .sdb 파일로 존재한다. 관련 파일은 다음 위치에서 확인할 수 있다.

*  C:\Windows\AppPatch\

DLL 이외에 다음과 같은 인덱싱된 SDB(Shim Database) 파일이 보일 것이다.
sysmain.sdb
drvmain.sdb
msimain.sdb
pcamain.sdb

SDB 파일의 내용을 XML로 변환해주는 sdb2xml 도구도 있다. 이 도구를 이용해 SDB 파일의 내용을 확인해보면 다양한 응용프로그램 목록을 확인할 수 있다.

윈도우에서 응용프로그램을 실행하게 되면 kernel32.dll의 CreateProcessInternalW 함수가 시작되고, 해당 함수는 내부적으로 BasepCheckBadApp 익스포트 함수를 호출한다. 이 함수가 호환성 체크를 담당하는 함수로 데이터베이스 정보를 탐색하기 전에 먼저 호환성 캐시 데이터를 확인한다. 만약, 캐시에서 응용프로그램의 호환성 문제를 발견하지 못하면 데이터베이스를 확인하고 만약 문제가 있을 경우 처리 방안을 선택할 수 있도록 "이 프로그램이 제대로 설치되지 않앗을 수 있습니다" 라는 사용자 알람 창을 표시한다.

반응형

반응형

최근 실행 프로그램 분석(RunMRU 분석)

 

시작 실행 경로를 통해서 실행시킨 명령어 또는 응용 프로그램 정보

 

레지스트리 조회

경로 : HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU

 

F:\tool\forensic\rifiuti>reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU" /s
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
    a    REG_SZ    cmd\1
    b    REG_SZ    certmgr.msc\1
    c    REG_SZ    fsmgmt.msc\1

    d    REG_SZ    \\10.102.10.156\share\1  <- 원격 컴퓨터 접속이나 원격 컴퓨터 내 프로그램 실행

    e    REG_SZ    \\10.102.10.155\1

    f    REG_SZ    \\10.102.10.145\1

    g    REG_SZ    \\10.102.10.148\1

......

 

ExecutedProgramsList
GUI

CLI
F:\>F:\tool\forensic\ExecutedProgramsList.exe /sxml "F:\temp\ExecutedPrograms.xml"
F:\>LogParser.exe -stats:off -i:xml "select executed_file, last_executed_on from 'F:\temp\ExecutedPrograms.xml' order by last_executed_on desc"
executed_file                                                                                              last_executed_on
--------------------------------------------------------------------------------------------------------------------------- -------
C:\Windows\System32\SEARCHFILTERHOST.EXE                                              2020-03-05 오후 2:33:56
C:\PROGRAM FILES (X86)\Dropbox\Update\DROPBOXUPDATE.EXE                     2020-03-05 오후 2:33:01
......

 

RegRipper
F:\>F:\tool\forensic\RegRipper2.8\rip.exe -r "f:\test\reg-hive-backup\chohb.NTUSER.DAT" -p runmru 
RunMru 
Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU 
LastWrite Time Thu Jan  1 00:00:00 1970 (UTC) 
MRUList = ba 
a   cmd\1 
b   explorer.exe\1

 

포렌식 도구마다 분석 방법 및 절차가 달라서 결과 또한 다르다. 그래서 동일한 아티팩트에 대해서 몇 가지 도구를 
가지고 Cross Check 하는 것이 좋다.

 

 

반응형

반응형

바로가기 링크파일 분석

 

바로가기 파일(*.lnk), 최근 실행했거나 자주 사용하는 프로그램이나 파일, 폴더 경로에 대한 정보 저장

 

링크 파일(LNK)이라고도 불리며 영문 명칭은 “Windows Shortcut”, “Shell Link” 로 불리며 윈도우에만 존재하는 기능으로 파일, 디렉터리 등 객체를 참조하는 파일, 커맨드라인이 아닌 GUI에서만 동작, lnk 확장자를 가짐

 

다른 OS에는 비슷한 기능으로 심볼릭 링크가 존재한다. 대부분의 사람들이 이 두 기능을 같은 기능으로 보고 있지만 분명히 다른 기능이다. 윈도우의 바로가기 기능은 OS 차원의 기능이고, 심볼릭 링크는 파일시스템 차원의 기능이어서 동작방식부터가 다르다.

 

윈도우의 바로가기 기능의 경우 바로가기 파일을 통해 실현 가능한데, 이 파일은 일반 파일과 동일하게 메타데이터와 MFT 엔트리를 가지고 있고 심볼릭 링크의 경우 원본 파일을 가리키고 있는 것은 파일이 아닌 것으로 파일시스템이 인식하기 때문에 MFT 엔트리를 가지고 있지 않아서 이 두 기능이 다르다고 할 수 있다.

 

윈도우 바로가기 파일은 시스템 사용자가 편의를 위해서 사용하는 경우도 많지만, 운영체제가 자동 실행이나 최근 접근한 데이터, 자주 사용하는 파일/프로그램에 관한 정보를 관리할 때에 사용하기도 한다. 바로가기 파일에는 링크 대상 파일에 관한 생성.접근.수정시간 정보 및 원본 위치 등에 관한 기록을 포함하고 있으므로, 정보 유출에 관한 조사나 시스템 사용에 관한 시간 관계를 정리할 때 유용하게 사용되는 경우가 많다.

 

바로가기 생성
시스템에서 내부적으로 자동으로 생성하는 경우도 있고 어떤 프로그램을 설치하는 과정에서 생성하는 경우도 있고 사용자가 바로가기 생성으로 할 수 도 있다. 

1. 윈도우 설치 시 - 윈도우에서 기본적으로 지원하는 '내 컴퓨터', '작업 표시줄 아이콘' 등도 모두 바로가기 파일이다.

2. 윈도우 설치 후 - 대표적으로 '내 최근 문서' 폴더의 문서 목록들이 있다.

3. 어플리케이션 설치 시 - 어플리케이션 설치 중 '바탕화면에 바로가기 아이콘을 생성 하시겠습니까?' 에서 예 대답으로     아이콘 생성

4. 사용자 임의 생성 - 파일을 마우스 오른쪽 클릭 후 바로가기 생성 하는 것들

 
LNK 파일이 존재하는 폴더

윈도우 버전별로 다를 수 있으며 아래 폴더 외에도 각 운영체제별로 LNK 파일이 생성되는 폴더는 다양하다.

 

바탕화면(Desktop) 폴더

Windows XP/Vista : C:\Documents and Settings\<user name>\Desktop

Windows 7+ : C:\Users\<user name>\Desktop

 

최근문서(Recent) 폴더

Windows XP/Vista : C:\Documents and Settings\<user name>\Recent

Windows 7+ : C:\Users\<user name>\AppData\Roaming\Microsoft\Windows\Recent

 

시작프로그램(Start) 폴더

Windows XP/Vista : C:\Documents and Settings\<user name>\Start Menu\Programs

Windows 7+ : C:\Users\<user name>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs

 

빠른실행(Quick Launch) 폴더

Windows XP/Vista : C:\Documents and Settings\<user name>\Application Data\Microsoft\Internet Explorer\Quick Launch

Windows 7+ : C:\Users\<user name>\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch

 

사용자의 내 음악(My Music), 내 그림(My Pictures), 내 비디오(My Videos) 폴더

“%SystemDrive%\Users\Public” 하위 폴더 링크

 

Send To 폴더 (내보내기 폴더)

%UserProfile%\AppData\Roaming\Microsoft\Windows\SendTo

탐색기에서 마우스 우버튼 -> 보내기 -> 특정 어플리케이션이나 드라이브 선택해서 생성한 링크 파일들

 

위 폴더에는 사용자가 의도적으로 생성한 LNK 파일이 있는 경우도 있지만, 의도하지 않게 생성되는 LNK 파일도 있다. 그 중 하나가 최근문서(Recent) 폴더이다. 이 폴더에는 자동으로 최근에 사용자가 실행했던 파일 및 폴더에 대한 LNK 파일이 저장된다. 따라서, 해당 폴더의 LNK 파일을 분석하면 유용한 정보를 얻을 수 있다.

 

F:\tool\forensic\CrowdResponse>dir /a-d C:\Users\chohb\Desktop\*.lnk
2019-12-20  오후 01:33               982 AhnRpt.lnk
2019-12-20  오후 01:33             1,094 apimonitor.lnk
......

 

바로가기파일 분석 활용
* 자동 생성된 바로가기 파일을 이용해 폴더나 파일의 실행 흔적 분석 (자주 접근하는 문서, 실행하는 프로그램 흔적)
* 링크 대상의 위치를 이용해 외장저장장치를 이용한 데이터 이동 흔적 분석(응용프로그램 및 일반 최근 문서 위주)
* 애플리케이션 취약점을 악용하는 악성코드일 경우, 실행 흔적 분석
* 바로가기 파일 자체로 침해를 확인하기는 어렵기 때문에 타임라인 분석과 연계 분석

분석

lnkanalyser.exe

F:\>lnkanalyser.exe -i "C:\Users\chohb\AppData\Roaming\Microsoft\Windows\Recent\정보자산안전진단도구 (2).lnk"

LECmd
명령어 예제
Examples: 
LECmd.exe -f "C:\Temp\foobar.lnk"

LECmd.exe -f "C:\Temp\somelink.lnk" --json "D:\jsonOutput" --jsonpretty
LECmd.exe -d "C:\Temp" --csv "c:\temp" --html c:\temp --xml c:\temp\xml -q
LECmd.exe -f "C:\Temp\some other link.lnk" --nid --neb
LECmd.exe -d "C:\Temp" --all

개별 파일 분석
F:\tool\forensic\lnkanalyser>F:\tool\forensic\LECmd.exe -f "C:\Users\chohb\AppData\Roaming\Microsoft\Windows\Recent\정보자산안전진단도구 (2).lnk"

폴더 분석

F:\tool\forensic\lnkanalyser>F:\tool\forensic\LECmd.exe -d "C:\Users\chohb\AppData\Roaming\Microsoft\Windows\Recent" --all

 

기타 도구
Windows File Analyzer from http://www.mitec.cz/wfa.html.

Lifer- Windows Link File Examiner, http://code.google.com/p/lifer/downloads/list., https://github.com/Paul-Tew/lifer


기타 많은 도구들이 있다.

 

반응형

반응형

부트 프리패치 분석

부트 프리패치는 NTOSBOOT-BOODFAAD.PF라는 이름을 가지며, 단일 파일로 존재한다. 부트 프리패치는 시스템이 부팅되는 속도를 조금 더 빠르게 하기 위한 것으로 부팅 시 사용되는 시스템 자원을 파악하여 한곳에 모아놓는 역할을 한다.

 

부트 프리패치 파일은 윈도우가 부팅될 때, 최대 120초 동안을 모니터링하여 사용되는 코드와 관련 데이터를 파일로 저장해둔 것으로 부팅 속도를 향상시켜주는 역할을 한다.


분석 관점에서 부트프리패치는 시스템이 부팅될 때 로드되는 파일들의 목록을 확인할 수 있는 여지를 주기 때문에 유용하다. 다만 부트 프리패치 목록에 없다고하여 부팅시 로드되는 악성코드가 없다고 단정할 수는 없다.

 

부트 프리패치 파일은 부팅될 때 참조되는 목록을 저장하기 때문에 쉽게 보면 부트킷(Bootkit)이나 오토런(AutoRun) 류의 악성코드 흔적이 남을 것이라고 생각할 수 있다. 하지만 부트 프리패쳐의 모니터링에 쉽게 확인되는 것은 아니다.

하지만 지속 반복적으로 분석하여  부트 프리패치만 제대로 감시하면 악성코드나 이상한 프로세스의 실행 여부는 확인이 가능할 것 같다.

 

부트 프리패치 파일인 “NTOSBOOT-*.pf”의 참조 목록으로 순서를 나타내는 “Index”로 정렬하여 살펴보면 부팅 시 참조되는 파일 순서를 살펴볼 수 있다.

 

분석

부트 프리패치의 분석 방법은 일반 어플리테이션 프리패치 분석과 동일하다.

참고 : https://secuworld.tistory.com/21?category=849780

 

F:\tool\forensic\rifiuti>F:\tool\forensic\PECmd.exe -f "f:\Test\fetchfiles\NTOSBOOT-B00DFAAD.pf"
Command line: -f f:\Test\fetchfiles\NTOSBOOT-B00DFAAD.pf
Keywords: temp, tmp
Processing 'f:\Test\fetchfiles\NTOSBOOT-B00DFAAD.pf'

Created on: 2020-03-05 오전 4:07:50 +00:00
Modified on: 2020-03-05 오전 4:07:51 +00:00
Last accessed on: 2020-03-05 오전 4:07:51 +00:00

Executable name: NTOSBOOT
Hash: B00DFAAD
File size (bytes): 3,157,736
Version: Windows Vista or Windows 7

Run count: 6
Last run: 2016-10-28 오전 3:00:28 +00:00

Volume information:

#0: Name: \DEVICE\HARDDISKVOLUME1 Serial: 624F594 Created: 2011-11-01 오전 1:46:58 +00:00 Directories: 1 File references: 13
#1: Name: \DEVICE\HARDDISKVOLUME2 Serial: D6BABAFA Created: 2012-10-22 오전 4:35:47 +00:00 Directories: 431 File references: 6,286
#2: Name: \DEVICE\HARDDISKVOLUME3 Serial: CC3BAD7C Created: 2015-07-21 오전 6:19:31 +00:00 Directories: 2 File references: 15
#3: Name: \DEVICE\HARDDISKVOLUME4 Serial: 7A83C754 Created: 2015-12-02 오전 2:09:43 +00:00 Directories: 4 File references: 21
#4: Name: \DEVICE\HARDDISKVOLUME6 Serial: C653E2BE Created: 2016-01-22 오전 9:00:21 +00:00 Directories: 0 File references: 0
#5: Name: \DEVICE\HARDDISKVOLUME7 Serial: 90748064 Created: 2016-02-04 오전 2:12:09 +00:00 Directories: 0 File references: 0

Directories referenced: 438

000: \DEVICE\HARDDISKVOLUME1\SYSTEM VOLUME INFORMATION
001: \DEVICE\HARDDISKVOLUME2\PROGRAM FILES
002: \DEVICE\HARDDISKVOLUME2\PROGRAMDATA
003: \DEVICE\HARDDISKVOLUME2\PROGRAMDATA\KASPERSKY LAB
004: \DEVICE\HARDDISKVOLUME2\PROGRAMDATA\KASPERSKY LAB\KES10
005: \DEVICE\HARDDISKVOLUME2\PROGRAMDATA\KASPERSKY LAB\KES10\BASES
006: \DEVICE\HARDDISKVOLUME2\SYSTEM VOLUME INFORMATION
007: \DEVICE\HARDDISKVOLUME2\WINDOWS
008: \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32
009: \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\CODEINTEGRITY
010: \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\DRIVERS
011: \DEVICE\HARDDISKVOLUME2\$EXTEND
012: \DEVICE\HARDDISKVOLUME2\$RECYCLE.BIN
013: \DEVICE\HARDDISKVOLUME2\$RECYCLE.BIN\S-1-5-21-2709948117-530518507-4126139040-1012
014: \DEVICE\HARDDISKVOLUME2\PROGRAM FILES\ADOBE
015: \DEVICE\HARDDISKVOLUME2\PROGRAM FILES\ADOBE\READER 11.0
......

Files referenced: 3,852

0000: \DEVICE\HARDDISKVOLUME2\$MFT
0001: \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\DRIVERS\CDROM.SYS
0002: \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\CODEINTEGRITY\BOOTCAT.CACHE
0003: \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\DRIVERS\ASWSP.SYS
0004: \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\NTDLL.DLL
0005: \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\DRIVERS\KLIF.SYS
0006: \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\DRIVERS\KLFLT.SYS
0007: \DEVICE\HARDDISKVOLUME2\SYSTEM VOLUME INFORMATION\MDLLOG.DAT
0008: \DEVICE\HARDDISKVOLUME2\SYSTEM VOLUME INFORMATION\002.DAT
0009: \DEVICE\HARDDISKVOLUME2\SYSTEM VOLUME INFORMATION\001.DAT
0010: \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\DRIVERS\NCFSECU.SYS
0011: \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\DRIVERS\NCPMDRV.SYS
0012: \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\DRIVERS\NULL.SYS
0013: \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\DRIVERS\BEEP.SYS
0014: \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\DRIVERS\VGA.SYS
0015: \DEVICE\HARDDISKVOLUME2\WINDOWS\SYSTEM32\DRIVERS\VIDEOPRT.SYS
......

분석 결과 예제

 

반응형

반응형

Superfetch 분석


프리패치의 사용은 메모리의 페이징 아웃 기법(오래 사용되지 않는 메모리 영역을 잠시 보조저장장치의 페이지 파일로 이동시켜 메모리 공간을 확보하는 기술)에 의해 제 기능을 못할 때가 있다. 정작 운영체제가 미리 로딩해 놓은 프리패치 파일이 페이징 아웃 되버리면 다시 응용프로그램을 실행할 때 보조 저장장치의 페이지 파일(pagefile.sys)로부터 로딩을 해야 하는 모순이 생기는 것이다.


성능을 높여보자고 메모리에 올려놓았는데 운영체제가 다시 페이지 파일로 이동시켜 다시 파일에서 읽는 꼴이 되어 버리기 때문에 기대했던 성능 향상은 미비할 수 밖에 없다.


이런 점을 보완하고자 윈도우 Vista 부터는 슈퍼패치 파일에 사용자의 사용 패턴을 기록해두고 자주 사용하는 프로그램의 프리패치 데이터가 페이지 아웃(page-out)될 경우 이를 다시 메모리로 페이지 인(page-in) 시키는 기능을 수행한다.

 

사용자가 오전에 컴퓨터를 부팅하고 실행하는 프로그램과 점심 먹고 실행하는 프로그램, 업무 시간 이후에 실행하는 프로그램은 다를 것이다. 슈퍼패치는 시간 대를 나누어 자주 사용되는 프로그램 목록을 관리하고 이렇게 관리되는 프로그램은 페이지 아웃이 일어나지 않도록 도와준다.

 

슈퍼패치의 설정은 프리패치와 마찬가지로 다음 레지스트리에서 가능하다.
Key: HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters
Value: EnableSuperfetch
0: 비활성화
1: 부트 파일만 슈퍼패치
2: 응용프로그램만 슈퍼패치
3: 부트 파일와 응용프로그램 둘 다 슈퍼패치

하지만 레지스트리 설정보다 우선 하는 것이 슈퍼패치 서비스이다. services.msc 명령을 이용하면 “Superfetch”라는 이름의 서비스, Window 10 RS5 업데이트 이후에는 sysmain을(를) 확인할 수 있다. 슈퍼패치를 종료하고 싶다면 해당 서비스를 중지시켜야 한다. 다만, 해당 서비스를 중지하면 프리패치 서비스도 중지되므로 유의하자.

 

최근 파일리스(fileless) 악성코드가 자주 나오고 실행흔적을 지우는 안티포렌식 기법이 일반화되고 있는 시점에 메모리에 매핑된 파일 목록은 조사에 큰 도움이 될 수 있다. 앞으로는 프로그램 실행 흔적을 판단할 때 슈퍼패치를 꼭 활용하도록 하자.


슈퍼패치 파일은 프리패치 폴더 존재하는데 “Ag”의 접두어어와 “.db”의 확장자를 가진 압축파일과 비압축 파일로 존재한다. 
압축과 비압축 파일은 각각 아래와 같다.

파란색은 비압축 파일로 TRX 파일이라고 하며 빨간색은 압축 파일이.


SuperfetchList.exe 및 SuperFetch.exe Tools

C:\>dir /a-d %windir%\prefetch\*.db

C:\>SuperfetchList.exe /a > c:\temp\SuperFetch.lst

C:\Dropbox\DFIR\Window\Behaviour\Scripts>SuperFetchDumpall.bat

 

<SuperFetchDumpall.bat>

del /S *.unp
del /S *.txt
for /R %%c in (*.db) do C:\Tools\SuperFetch.exe %%c > %%c.txt

CrowdResponse Tool

운영체제 아키텍처를 선택할 수도 있고 폴더를 지정해서 분석할 수도 있다. 기본으로는 현재 시스템의 슈퍼패치 정보를 분석해준다. 분석 결과는 기본 XML로 출력이 된다. XML 출력을 CSV, HTML 등의 형태로 변경하고 싶으면 함께 제공되는 CRconvert 도구를 이용하면 된다.

 

CrowdResponse 도구에서는 다음과 같은 정보를 분석해준다.
* 기본 시스템 정보
* 메모리에 매핑된 파일 목록
* 실행 프로세스명
* 프로그램 경로
* 실행 횟수
* 포그라운드 횟수(?)
* 프로그램 동작 기간
* 프로그램 실행 시간(?)

명령어 예제

C:\Tools\CrowdResponse>CrowdResponse.exe @superfetch /?

C:\Tools\CrowdResponse>CrowdResponse.exe @superfetch -3 > f:\temp\superfetch.xml

 

C:\Tools\CrowdResponse>CrowdResponse64.exe @superfetch /?

C:\Tools\CrowdResponse>CrowdResponse64.exe @superfetch -6 > f:\temp\superfetch.xml


F:\temp>F:\tool\forensic\CrowdResponse64.exe @superfetch -6s f:\test\superfetchs > f:\temp\superfetch.xml 
F:\temp>dir f:\temp\superfetch.xml
2020-03-05  오전 09:48         1,437,118 superfetch.xml

 

F:\temp>type f:\temp\superfetch.xml

xml 결과 파일을 csv로 변환
F:\tool\forensic\CrowdResponse>CRConvert.exe -f "f:\temp\superfetch.xml" -c  [-o f:\temp\superfetchcsv]
실행을 하고나면 아래와 같이 csv 파일 4개가 출력 됩니다. 
F:\tool\forensic\CrowdResponse>dir f:\temp\superfetchcsv
2020-03-05  오전 10:03               445 CrowdResponse_log.csv <- superfetch 서비스 동작 정보
2020-03-05  오전 10:03             3,276 CrowdResponse_superfetch_appentries.csv
2020-03-05  오전 10:03           644,170 CrowdResponse_superfetch_perioddata.csv
2020-03-05  오전 10:03               490 CrowdResponse_system.csv <- 시스템 기본 정보 수집

 

CrowdResponse_superetch_appentries.csv 파일을 열어보면 데이터를 확인 할 수 있습니다.

반응형

반응형

prefetch 분석

 

윈도우의 프리패칭은 부팅할 때나 응용프로그램을 시작할 때 성능을 향샹시키기 위해 구현된 기능이다. 부팅 시에는 120초를 모니터링하고 응용프로그램 시작 시에는 10초를 모니터링 한 후, 모니터링한 정보로 프리패치 파일을 생성한다. 생성된 프리패치 파일은 재부팅할 때나 응용프로그램을 재실행할 때 속도 향상을 위해 사용된다.


프리패치 파일은 “%SystemRoot%\Prefetch” 폴더에 저장되는데 최대 128개의 파일을 유지한다. 새로운 응용프로그램이 실행되면 LRU 알고리즘에 의해 가장 오래 사용하지 않은 응용프로그램의 프리패치 파일이 삭제되고 새 응용프로그램 프리패치 파일이 추가된다. 오래된 프리패치 파일의 삭제는 일반 삭제이므로 비할당영역에서 프리패치 파일을 카빙해보면 상당히 많은 파일을 발견할 수 있다. 저장장치를 여유롭게 사용했다면 윈도우 설치 시점부터 현재까지의 응용프로그램 실행 이력을 확인할 수도 있다

프리패치 파일에는 실행한 프로그램의 경로가 나타내어진다. 이를 통하여 해당 프로그램의 위치를 알 수가 있는데, 만약 프로그램이 USB에 담겨있던 프로그램이라면 이 또한 확인이 가능하다. 일반 프로그램들은 C:\로 시작하지만 이 경우에 있어선 독특하게 \VOLUME으로 시작하는 것을 확인할 수가 있다. 이를 통해 우리는 외부저장장치에 있던 프로그램이 실행되었다는 흔적을 찾을 수가 있다.


프리패치 파일에서 획득 가능한 정보는 다음과 같다.
- 응용프로그램 이름
- 응용프로그램 실행 횟수
- 응용프로그램의 최초 실행 시간은 프리패치 파일 생성시간
- 응용프로그램 마지막 실행 시각
- 응용프로그램 파일의 파일시스템 시간 정보
- 응용프로그램이 위치한 볼륨 정보 
- 응용프로그램이 참조하는 파일 목록(DLL 및 일반 파일) 

 

특정 시스템에서 디지털 포렌식 분석을 수행할 때 사고가 일어난 후 많은 시간이 지나지 않았다면 프리패치 파일에 저장되는 위 정보에서 참조 목록의 순서를 나타내는 Index로 정렬하여 사용자 행위나 공격 흐름을 재구성할 수 있다. 물론, 프리패치 파일만으로는 한계가 있으므로 다양한 시스템 아티팩트를 종합하여 통합 타임라인 분석을 수행해야 한다.

 

한두개의 아티팩트나 이벤트만으로 분석하면 사건의 흐름이나 연관성을 분석하는데 제한적이고 한계가 있으므로 다양한 아티팩트나 이벤트를 대상으로 타임라인 분석을 수행한다


프리패치 분석 중 고려해야 할 몇 가지 사항
들이 있다.

1) 오래된 프리패치 파일은 삭제되어 비할당 영역에 존재할 수 있으므로 카빙을 통해 분석이 가능하다.

2) 원본 실행파일이 제거되어도 프리패치 파일은 시스템에 남아있다. 프리패치 파일은 있는데 실행 파일이 없는 경우

   : 실행 후 실행파일을 삭제한 경우나 psexec 또는  net use 명령으로 원격 실행한 경우

3) 프리패치파일이 존재하지 않는다고 특정 프로그램이 실행되지 않았다는 의미는 아니다.

   실행된 exe 파일을 지웠거나 pxexec 같은 tool을 통해 원격으로 실행한 경우일 수 있다.
   pxexec 같은 tool을 통해 원격으로 실행한 경우에는 프리패치 파일이 생성되지 않는다.

4) 윈도우 XP이후의 모든 운영체제에서 프리패치 파일을 생성하는 것은 아니다.

   윈도우 7이상의 운영체제에서 SSD를 사용할 경우 메모리 최적화 기능으로 인해 프리패치 생성이
   비활성화 되있을 수 있으며, 운영체제의 세부적인 버전별로 차이가 존재한다. 

   또한 프리패치 관련 레지스트리(HKLM\SYSTEM\ControlSet00#\Control\Session Manager\Memory
   Management\Prefetch Parameter\EnablePrefetcher)에서 비활성화  되어 있을 경우도 존재한다.

4) 참조 목록에서 실행가능한 파일이 있는지 확인 : scr, exe, lnk, bat, vbs, js, com, ps1 등

5) 실행 파일이 아닌 워드, 엑셀, pdf 등의 일반 파일에서 cmd.exe, screen.scr, cscript 등을 참조하는 경우 사에
   분석 필요 
6) 참조 목록에서 경로가 일반 드라이브 문자가 아닌 \\Device 또는 \\Device\HARDDISKVOLUME??으로
   시작하거나 고정형 디스크 드라이브 문자 외의 문자로 시작하는 경우 유심히 살펴봐야 한다.

   즉 Full Path의 경로가 로컬의 또 다른 볼륨인지 외장 볼륨인지는 레지스트리에 마운트된 볼륨 정보와 함께
   판단할 필요가 있다.

7) 참조 목록에 별도의 시간 정보가 기록되지 않아 정상 파일을 패치하여 동작하는 부류의 악성코드는 찾기 힘들다는
   한계
가 있다.

 

<참고>

어플리케이션 프리패치는 "[실행파일명] – [파일 위치에 대한 해쉬].pf"와 같은 이름으로 생성된다.

프리패치와 슈퍼패치는 기본적으로 보조기억장치와 주 기억장치의 속도 차이를 극복하기 위해 사용되는 기술이므로

보조 기억 장치의 속도가 빠르다면 불필요한 기술이라고도 볼 수 있다.

 

윈도우 7이상의 운영체제나 윈도우 서버군 OS에서는 SSD를 사용할 경우, 메모리 관리 기술을 자동으로 최적화하는 기능이 추가되었다. 그러므로 실제로 SSD가 사용된 시스템을 조사하다보면 프리패치 파일이 생성되지 않는 환경이 많다.

 

서버 제품군에서 응용프로그램 프리패칭을 사용하지 않는 이유는 응용프로그램이 반복적으로 실행되기 보다는 한번 실행되면 오랫동안 유지되는 환경이기 때문이다.

하지만 Windows 7이상의 모든 운영체제에서 프리패치나 슈퍼패치를 비활성화 하는 것은 아닌 것으로 보인다. 운영체제의 세부적인 버전 별로 자동 설정 여부가 다른 것으로 확인되므로, 우선적으로 프리패치와 슈퍼패치의 존재 여부를 확인한 후, 존재하지 않는다면, 아래 레지스트리와 서비스의 설정 상태를 확인하여 의도적으로 삭제한 것인지 원래 존재하지 않는 것인지를 판단하여 복구 여부를 결정하는 절차로 분석을 진행할 수 있도록 하자.

 

레지스트리 경로

프리패치 생성 여부 레지스트리 경로

* HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters\EnablePrefetcher

* HKLM\SYSTEM\ControlSet00#\Control\Session Manager\Memory Management\Prefetch Parameter\EnablePrefetcher 
* HKLM\SYSTEM\ControlSet00X\Control\Session Manager\Memory Management\Prefetch Parameter\EnableSuperfetch 

 

각각의 키의 값은 아래의 의미를 가진다. 
0 : 사용 하지 않음. 
1 : 응용프로그램 캐싱만 사용 
2 : 부트 캐싱만 사용 
3 : 응용프로그램/부트 캐싱 모두 사용(기본 설정) 

 

C:\>reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters"


관련 서비스 
아래 서비스의 동작 여부를 확인
* Event Log | Windows Event Log (Prefetch 생성에 영향) <- 서비스명 eventlog
* Task Scheduler (Prefetch 생성에 영향) <- 서비스명 schedule
* Superfetch (Superfetch 생성에 영향) <- 최근 서비스명이 sysmain으로 변경

 

프리패치 파일 목록

F:\tool\forensic\RegRipper2.8>dir %windir%\prefetch\*.pf /a-d /o-d
2020-03-04  오후 04:40             9,716 SPPSVC.EXE-7B160CA5.pf
2020-03-04  오후 04:40            12,561 GNDUMP.EXE-7354CC54.pf
2020-03-04  오후 04:39             4,209 SEARCHFILTERHOST.EXE-10E4267C.pf

......

 

PECmd Tool

F:\tool\forensic\RegRipper2.8>F:\script\batch\PECmd.exe -f "c:\windows\prefetch\WINWORD.EXE-A4E0DB06.pf"

일괄 분석

C:\>PECmd.exe -d c:\Windows\prefetch > c:\temp\prefetchAnalyze.lst

 

WinprefetchView Tool
GUI

CLI

C:\>WinPrefetchView.exe /folder %windir%\prefetch /sort "~Modified Time" /sxml f:\temp\winpretchview.xml

 

C:\>LogParser.exe -h -i:xml "f:\temp\winpretchview.xml" -headerrow:on

......

Fields: 

  filename (S)        created_time (S) modified_time (S) file_size (S)
  process_exe (S)     process_path (S) run_counter (I)   last_run_time (S)
  missing_process (S)
......

 

C:\>LogParser.exe -stats:off -i:xml "select * from 'f:\temp\winpretchview.xml'"

반응형

반응형

MUICache 분석

 

다중 언어를 지원하기 위해 응용 프로그램의 이름을 캐시하는 레지스트리. 
평소 사용하지 않는 프로그램의 이름도 표시된다. 
   - 윈도우에서 사용되는 기본 프로그램과 평소에 실행하지 않았던 프로그램 목록도 포함
각각의 국가별로 프로그램 명칭 및 경로를 관리

분석자 입장에서는 이 MUICache 목록에 일반적이지 않은 프로그램들이 추가되어 있지 않은지 확인해봐야 한다. 일반적인 프로그램 중 윈도우에서 사용되는 기본 프로그램들은 이미 목록에 있을테고 사용자가 설치하여 사용하는 프로그램도 한번이라도 실행했다면 MUICache 목록에 기록이 된다. , 일부러 지우지 않는한 한번이라도 실행된 프로그램은 MUICache에 남는다.

 

어플리케이션(프로그램)이 실행할 때마다, 윈도우는 실행 파일 리소스에서 프로그램의 이름을 추출한다. 추후 재사용을 위해, "MUICache"로 알려진 레지스트리 키에 저장을 한다. 

 

MUICache는 프로그램 실행을 보여주는 UserAssist 키와 비슷한 역할을 한다고 볼 수 있으며, 공격자가 실행한 악성코드, 삭제 프로그램등의 흔적을 찾을 수 있다. 포렌식에서는 MUICache목록에 일반적이지 않은 프로그램이 추가되어 있지 않은지 확인이 필요하다. MUICache 는 시간 정보가 없으므로 실행 후 삭제된 프로그램이나 히든 프로그램들의 실행 흔적 분석에 좋다.

 

레지스트리 경로
흔히들 부팅 후 사용되는 메모리의 양을 줄이기 위해 레지스트리에서 MUICache를 지우는 경우가 있습니다.
지우셔도 상관은 없습니다. 아래 레지스트리를 자세히 보시면 평소 실행하지 않았던 프로그램들도 목록에 포함되어 있는걸 확인하실 수 있습니다.

 

하이브파일 : NTUser.DAT
HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache

HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache

HKEY_CURRENT_USER\Software\Software\Classes\LocalSettings\MuiCache

HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\ShellNoRoam\MUICache
HKEY_USERS\{SID}\Software\Microsoft\Windows\ShellNoRoam\MUICache

F:\>reg query "HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache"

HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache
    LangID    REG_BINARY    1204
    C:\WINDOWS\system32\explorerframe.dll.FriendlyAppName    REG_SZ    ExplorerFrame
    C:\WINDOWS\system32\explorerframe.dll.ApplicationCompany    REG_SZ    Microsoft Corporation
    C:\WINDOWS\system32\shell32.dll.FriendlyAppName    REG_SZ    Windows 셸 공용 Dll
    C:\WINDOWS\system32\shell32.dll.ApplicationCompany    REG_SZ    Microsoft Corporation
    C:\Windows\System32\fsquirt.exe.FriendlyAppName    REG_SZ    fsquirt.exe
    C:\Windows\System32\fsquirt.exe.ApplicationCompany    REG_SZ    Microsoft Corporation
    D:\Program Files (x86)\Evernote\Evernote\Evernote.exe.FriendlyAppName    REG_SZ    Evernote

.......


MUICacheView.exe

F:\>MUICacheView.exe /sxml muicache.xml /sort "Application Name"

F:\tool\forensic\RegRipper2.8>type muicache.xml

F:\tool\forensic\RegRipper2.8>F:\script\batch\LogParser.exe -stats:off -i:xml "select * from 'muicache.xml'"
application_path                                                           application_name
-------------------------------------------------------------------------- ------------------------------------------------------- 
F:\tool\network\chromedriver\chromedriver.exe.FriendlyAppName              chromedriver.exe
F:\tool\network\chromedriver.exe.FriendlyAppName                           chromedriver.exe
F:\temp\hConvert2pfx.exe.FriendlyAppName                                   Covert2Pfx
F:\Dropbox\DFIR\Window\SystemBasic\Tools\REGA.exe.ApplicationCompany       DFRC
D:\Program Files (x86)\Notepad++\notepad++.exe.ApplicationCompany          Don HO don.h@free.fr
C:\Program Files (x86)\markany\maepsrt\ePageSaferRT.exe.FriendlyAppName    ePageSafer NoAX (REPORT)
D:\Program Files (x86)\Evernote\Evernote\Evernote.exe.FriendlyAppName      Evernote

......

 

regripper

C:\Tools\Forensic\RegRipper2.8>regex.exe -h f:\test\reg-hive-backup


F:\tool\forensic\RegRipper2.8>rip.exe -r "f:\test\reg-hive-backup\chohb.NTUSER.DAT" -p muicache
F:\tool\forensic\RegRipper2.8>rip.exe -r "f:\test\reg-hive-backup\chohb.NTUSER.DAT" -p muicache_tln

F:\tool\forensic\RegRipper2.8>rip.exe -r "f:\test\reg-hive-backup\chohb.USRCLASS.DAT" -p muicache 
F:\tool\forensic\RegRipper2.8>rip.exe -r "f:\test\reg-hive-backup\chohb.USRCLASS.DAT" -p muicache_tln 

반응형

반응형

UserAssist 분석

 

레지스트리 키의 일종으로 최근에 실행한 프로그램이나 자주 사용하는 프로그램의 목록, 마지막 실행날짜, 실행 횟수 등이 기록되어 있다.  각 사용자의 NTUSER.DAT 레지스트리 파일에 응용 프로그램의 실행 횟수를 유지한다.

 

추가적으로 Windows7/Vista 이후부 터 생겨난 UAC로 인해 일반사용자가 특정 경로에 파일이나 레지스트리를 쓰게 되면 파일, 레지스트리 가상화가 이루어지는데 이때 가상화를 통해 쓰여진 데이터는 NTUSER.dat가 아닌 UsrClass.dat에 저장되기 때문에 정확한 분석을 위해 UsrClass.dat도 추가적으로 수집 및 분석해야 한다.

 

계정 sid 조회

F:\tool\forensic\usbdeviceforensics>whoami /user <- 현재 사용자 SID
chohb\chohb     S-1-5-21-2555433415-3599755044-3103386514-1001


F:\tool\forensic\usbdeviceforensics>WMIC useraccount get name, sid /format:table

Name                    SID
Administrator          S-1-5-21-2555433415-3599755044-3103386514-500
chohb                    S-1-5-21-2555433415-3599755044-3103386514-1001
DefaultAccount         S-1-5-21-2555433415-3599755044-3103386514-503
Guest                     S-1-5-21-2555433415-3599755044-3103386514-501
WDAGUtilityAccount  S-1-5-21-2555433415-3599755044-3103386514-504

 

레지스트리 경로

값이 인코딩 되어 있다.
경로 1 : HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist

경로 2 : HKU\{USER}\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\

 

- {USER} 부분은 확인하고자 하는 계정의 SID

- 하위에 응용프로그램 GUID\Count 구조로 구성되어 있거 인코딩되어 있어 바로 읽기가 불가능

- 그러므로 MUICache와는 달리 프로그램으로 보는게 훨씬 보기 좋음

 

레지스트리 외 관련 파일
참고 : https://secuworld.tistory.com/30

 

regripper
C:\Tools\Forensic\RegRipper2.8>regex.exe -h f:\test\reg-hive-backup

F:\tool\forensic\RegRipper2.8>rip.exe -r "f:\test\reg-hive-backup\chohb.NTUSER.DAT" -p userassist_tln
1583282229|REG|||[Program Execution] UserAssist - {1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\cmd.exe (14)
1583282217|REG|||[Program Execution] UserAssist - C:\Tools\Forensic\RegRipper2.8\rr.exe (1)
1583282207|REG|||[Program Execution] UserAssist - C:\Tools\Forensic\RegRipper2.8\rip.exe (1)
1583282169|REG|||[Program Execution] UserAssist - Microsoft.Windows.Explorer (99)
1583281338|REG|||[Program Execution] UserAssist - {6D809377-6AF0-444B-8957-A3773F02200E}\Notepad++\notepad++.exe (13)
1583280390|REG|||[Program Execution] UserAssist - windows.immersivecontrolpanel_cw5n1h2txyewy!microsoft.windows.immersivecontrolpanel (9)

......

 

UserAssistView Tool

F:\>F:\temp\userassistview\UserAssistView.exe /sxml userassist.xml

F:\>F:\script\batch\LogParser.exe -stats:off -i:xml "select * from 'UserAssist.xml' order by item_name "

userassist.xml 내용

F:\tool\forensic\RegRipper2.8>type userassist.xml      

< 참고 >

Item_name에 실행 파일의 전체 경로가 나오는데 경로를 잘 살펴봐야 한다. 예를 들어 \\tsclient\...이런 경우는 원격 PC의 실행 파일을 실행한 경우이다.

 

UserAssist 정보는 실행시간 정보가 있어서 IECache나 Prefetch의 정보들과 연관지어 분석을 하시면 악성코드가 어떤 경로를 통해서 다운로드되고 실행되었는지를 파악하기 좋음.

보통 사용자의 동의를 구하지 않고 실행된 악성코드가 2~3회 실행되는 경우는 그다지 많지 않습니다. 즉, 딱 한번 그러니까 특정 취약점이나 사회공학 기법에 의해 악성코드를 실행하고 서비스를 올려서 C&C와 통신을 하게 되는데 딱 한번 실행되기 때문에 Prefetch 폴더에 있는 악성코드라 의심되는 파일의 prefetch 파일의 생성시간을 가지고 감염 시간대를 좁혀 나갈 수 있음

 

반응형

반응형

USB 사용 이력 분석은 사실 간단한 작업이 아니다. 

다양한 아티팩트들을 대상으로 많은 분석 경험에 의해서 분석 방법과 절차, 결과 판단의

기준을 수립하는 것이 좋다.

 

포렌식 관점에서 아래 사항을 같이 연관분석하는 것이 가장 좋아 보인다.
1. USB 장치 사용 이력 조회 : 장치명, Connection Time, 볼륨명 및 Disconnection Time 

2. 파일 시스템 $Usnjurl, $logfile, $MFT 등을 이용하여 Connection Time과 Disconnection Time 사이 파일 I/O 분석

3. Web Cache, JumpList, 가장 최근 접근 문서, UserAssist, 링크파일, 프리패치 등을 같이 분석하여 USB 내 파일 I/O 분석

4. Last Activity View Tool을 이용하여 최근 활동 내역 분석

 

이벤트 로그 분석
아래 참조된 이벤트 파일(evtx 파일)들은 OS 유형에 따라 존재하지 않을 수도 있으며 

각각 다른 이름으로 존재할 수도 있으므로 인터넷 등을 조회해서 관련 이벤트 파일을 찾은 후

아래와 같은 방법과 절차대로 분석을 진행하도록 한다.


Microsoft-Windows-Storage-ClassPnP%4Operational.evtx 분석

C:\>wevtutil epl /lf "C:\WINDOWS\System32\winevt\logs\Microsoft-Windows-Storage-ClassPnP%4Operational.evtx" "c:\temp\storage-pnp-operation.evtx"

 

C:\>logparser.exe -stats:off -i:evt "select TimeGenerated, Strings from 'C:\temp\storage-pnp-operation.evtx'"

 

Microsoft-Windows-DriverFrameworks-UserMode/Operational 분석

USB 장탈착 이력, 윈도우 8+ 에서는 파일이 존재하지 않는다.

 

System Event Log 분석

f:\temp>wevtutil epl system system-export.evtx


F:\>LogParser.exe -stats:off -i:evt "select Timegenerated, strings from 'F:\temp\system-export.evtx' where strings like '%usb%'"

 

기타 Event Log 분석

* C:\Windows\System32\winevt\Logs\Microsoft-Windows-DriverFrameworks-UserMode%4Operational.evtx (Windows 7)
* C:\Windows\System32\winevt\Logs\Microsoft-Windows-Storage-ClassPnP/Operational.evtx  (Window 10)
* C:\Windows\System32\winevt\Logs\Microsoft-Windows-WPD-MTPClassDriver/Operational.evtx

 

운영제체 로그 파일

아래 파일을 통해 USB 연결사실과 최초 연결 시각을 확인 할 수 있다.

Windows 2000/XP : %SystemRoot%\Setupapi.log

Windows Vista/7/8 : %SystemRoot%\inf\Setupapi.dev.log

 

* C:\Windows\INF\setupapi.dev.log 
* C:\Windows\INF\ setupapi.dev.yyyymmdd_hhmmss.log 
* C:\Windows\INF\setupapi.upgrade.log 
* C:\Windows\setupapi.log 

 

레지스트리

* HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet001\Enum\USB

* HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet001\Enum\USBSTOR 
* HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices 
* HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses 
* HKEY_USERS\SID\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2 
* HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList 
* HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Portable Devices 
* HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Search\VolumeInfoCache 
* HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\SWD\WPDBUSENUM 

레지스트리는 OS 유형 및 버전에 따라 레지스트리 경로, 키 이름 등이 서로 다를 수 있다.

 

USBDevView Tool
GUI & CLI
From : https://www.nirsoft.net/utils/usb_devices_view.html

 

F:\>USBDeview.exe /sxml f:\temp\usbdevview.xml /sort ~"last plugin/unplugin date"

F:\>LogParser.exe -h -i:xml "F:\temp\usbdevview.xml" -headerrow:on

F:\>LogParser.exe -stats:off -i:xml "select device_name, drive_letter, last_plug_unplug_date, last_plug_unplug_date from F:\temp\usbdevview.xml"

 

만약 한글이 깨져 보이면 아래와 같이 인코딩을 변환한다.

F:\> powershell
PS F:\> get-content F:\temp\usbdevview.xml | set-content -Encoding utf8 F:\temp\usbdevview2.xml

 

USB Forensic Tracker Tool

GUI

USB-Device-Tracking-Artifacts.pdf
0.34MB

 

USB 분석 예제

1. USB VID & PID 조회

C:\Temp>reg query HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\CdRom&Ven_Generic&Prod_Autorun_Disk&Rev_8.00

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\Disk&Ven_&Prod_MXUB3SES-32G&Rev_1.00

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\Disk&Ven_ASMT&Prod_2105&Rev_0

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\Disk&Ven_Duzon&Prod_DuzonC&T&Rev_8.01

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\Disk&Ven_LGE&Prod_USB_Drive&Rev_0.00

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\Disk&Ven_SanDisk&Prod_Cruzer_Blade&Rev_1.27

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\Disk&Ven_SanDisk&Prod_Ultra&Rev_1.00

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\Disk&Ven_SanDisk&Prod_Ultra_USB_3.0&Rev_1.00

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\Disk&Ven_Seagate&Prod_FreeAgent_Go&Rev_0148

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\Disk&Ven_SMI&Prod_USB_DISK&Rev_1100

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\Disk&Ven_USB&Prod_Flash_Disk&Rev_1100

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\Disk&Ven_ZYRUS&Prod_NEXTIK_2.0&Rev_2.00

 

- Naming Rule (VIP&PID) : ......\Disk&Ven_{Vendor Name}&Prod_{Product Name}&Rev_{Version} <- Device Class ID

 

2. Serial Number 조회

포렌식에서 가장 자주 활용되는 정보로써 연결한 저장장치를 확인하는데 사용된다. 압수물과 Serial Number를 대조하여 해당 PC에 연결했던 USB가 맞는지 확인이 가능하다.  Device Class ID인 VID&PID 하위 폴더 이름이 Serial 정보이다. 
요즘은 저가형 제품에서 Serial Number가 없는 경우나 OS가 정상적으로 인식할 수 없는 이상한 값이나 형태흫 가진 경우가 있는데 이런 Serial Number가 없는 경우는 OS Pnp Manager에서 자동으로 UID값을 생성하여 부여한다.

 

먼저 레지스트리 하이브 파일 추출을 위해 레지스트리 하이브 파일 경로를 조회

C:\Temp>reg query HKLM\system\currentcontrolset\control\hivelist
Windows\System32\config\SYSTEM
Windows\System32\config\SOFTWARE
EFI\Microsoft\Boot\BCD
Windows\System32\config\DEFAULT
Windows\System32\config\SECURITY
......

 

레지스트리 하이브 파일 추출

C:\Tools\Forensic\RegRipper2.8>regex.exe -h reg-hive-backup

Collecting Registry Hive Files...
===== Complete! =====

C:\Tools\Forensic\RegRipper2.8>dir reg-hive-backup
2020-03-04  오전 09:57         4,980,736 Amcache.hve
2020-03-04  오전 09:57         6,815,744 chohb.NTUSER.DAT
2020-03-04  오전 09:57        10,747,904 chohb.USRCLASS.DAT
2020-03-04  오전 09:57        34,340,864 COMPONENTS
2020-03-04  오전 09:57           786,432 DEFAULT
2020-03-04  오전 09:57           262,144 Default User.NTUSER.DAT
2020-03-04  오전 09:57           262,144 Default.NTUSER.DAT
2020-03-04  오전 09:57           262,144 DefaultAppPool.NTUSER.DAT
2020-03-04  오전 09:57             8,192 DefaultAppPool.USRCLASS.DAT
2020-03-04  오전 09:57             2,907 RegEx.log
2020-03-04  오전 09:57            65,536 SAM
2020-03-04  오전 09:57            65,536 SECURITY
2020-03-04  오전 09:57    <dir>         SETUPAPI
2020-03-04  오전 09:57       109,314,048 SOFTWARE
2020-03-04  오전 09:57        27,000,832 SYSTEM 

 

Serial Number 조회

아래 S/N 중 &숫자는 포트번호로 동일 USB일 경우 1, 2, 3 ..... 이런식으로 증가하여 표시된다.

 

C:\Tools\Forensic\RegRipper2.8>rip.exe -r reg-hive-backup\SYSTEM -p usbstor
Launching usbstor v.20141111
usbstor v.20141111
(System) Get USBStor key info

USBStor
ControlSet001\Enum\USBStor

CdRom&Ven_Generic&Prod_Autorun_Disk&Rev_8.00 [Thu Jan  1 00:00:00 1970]
  S/N: 33EF4ONR86CV&0 [Thu Jan  1 00:00:00 1970]
  Device Parameters LastWrite: [Thu Jan  1 00:00:00 1970]
  Properties LastWrite       : [Thu Jan  1 00:00:00 1970]
    FriendlyName    : Generic Autorun Disk USB Device
  S/N: 4ZCPATZI8AEE&0 [Thu Jan  1 00:00:00 1970]
  Device Parameters LastWrite: [Thu Jan  1 00:00:00 1970]
  Properties LastWrite       : [Thu Jan  1 00:00:00 1970]
    FriendlyName    : Generic Autorun Disk USB Device
  S/N: 6L6TK3IF7J8O&0 [Thu Jan  1 00:00:00 1970]
  Device Parameters LastWrite: [Thu Jan  1 00:00:00 1970]
  Properties LastWrite       : [Thu Jan  1 00:00:00 1970]
    FriendlyName    : Generic Autorun Disk USB Device
  S/N: AOD3GO4TO5MG&0 [Thu Jan  1 00:00:00 1970]
  Device Parameters LastWrite: [Thu Jan  1 00:00:00 1970]
  Properties LastWrite       : [Thu Jan  1 00:00:00 1970]
    FriendlyName    : Generic Autorun Disk USB Device
  S/N: DWBINC6BT76D&0 [Thu Jan  1 00:00:00 1970]
  Device Parameters LastWrite: [Thu Jan  1 00:00:00 1970]
  Properties LastWrite       : [Thu Jan  1 00:00:00 1970]
    FriendlyName    : Generic Autorun Disk USB Device
  S/N: IDK37G60DRJI&0 [Thu Jan  1 00:00:00 1970]
  Device Parameters LastWrite: [Thu Jan  1 00:00:00 1970]
  Properties LastWrite       : [Thu Jan  1 00:00:00 1970]
    FriendlyName    : Generic Autorun Disk USB Device
  S/N: V5X9IKN8Z25O&0 [Thu Jan  1 00:00:00 1970]
  Device Parameters LastWrite: [Thu Jan  1 00:00:00 1970]
  Properties LastWrite       : [Thu Jan  1 00:00:00 1970]
    FriendlyName    : Generic Autorun Disk USB Device

    (위의 경우처럼 하나의 Priduct에 S/N이 여러 개인 경우는 동일한 회사 동일한 제품/모델의
     서로 다른 USB를 여러 개 사용한 경우임)


Disk&Ven_&Prod_MXUB3SES-32G&Rev_1.00 [Thu Jan  1 00:00:00 1970]
  S/N: 000000000000003587&0 [Thu Jan  1 00:00:00 1970] <- 일련번호 및 포트번호 
  Device Parameters LastWrite: [Thu Jan  1 00:00:00 1970]  <- 마지막 사용 시간(이상하네 ?)
  Properties LastWrite       : [Thu Jan  1 00:00:00 1970]
    FriendlyName    : MXUB3SES-32G USB Device <- 제품명
......

 

C:\Tools\Forensic\RegRipper2.8>rip.exe -r c:\test\reg-hive-backup\SYSTEM -p usb [ or usbdevices ]

VID_8087&PID_0A2B [Thu Jan  1 00:00:00 1970]
  S/N: 5&283f8949&0&5 [Thu Jan  1 00:00:00 1970]
  Device Parameters LastWrite: [Thu Jan  1 00:00:00 1970]
  Properties LastWrite       : [Thu Jan  1 00:00:00 1970]
    ParentIdPrefix: 6&2f6ddbc3&0

......

 

3. Drive Letter 조회

C:\Tools\Forensic\RegRipper2.8>rip.exe -r c:\test\reg-hive-backup\SYSTEM -p mountdev
mountdev v.20130530
(System) Return contents of System hive MountedDevices key

Device: \??\USBSTOR#CdRom&Ven_Generic&Prod_Autorun_Disk&Rev_8.00#IDK37G60DRJI&0#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}
  \??\Volume{8aad119b-96dc-11e9-8673-3c6aa784a53e}

Device: DMIO:ID:N짯혘체횚횉HD혙ju혞o횑!,
  \DosDevices\C:

Device: _??_USBSTOR#Disk&Ven_Duzon&Prod_DuzonC&T&Rev_8.01#DWBINC6BT76D&1#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
  \DosDevices\E:
  \??\Volume{18be7fe9-06f6-11ea-8767-3c6aa784a53e}

Device: \??\USBSTOR#CdRom&Ven_Generic&Prod_Autorun_Disk&Rev_8.00#DWBINC6BT76D&0#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}
  \DosDevices\D:
  \??\Volume{18be7fe8-06f6-11ea-8767-3c6aa784a53e}
......

 

C:\>reg query "HKLM\SOFTWARE\Microsoft\Windows Portable Devices\Devices" /s

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Portable Devices\Devices\SWD#WPDBUSENUM#{02797B4E-C3A4-11E9-86AB-3C6AA784A53E}#0000000000100000
    FriendlyName    REG_SZ    D:\

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Portable Devices\Devices\SWD#WPDBUSENUM#{A6B307E3-C4DD-11E9-86AE-3C6AA784A53E}#000000000C805000
    FriendlyName    REG_SZ    D:\

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Portable Devices\Devices\USB#VID_05AC&PID_12A8&MI_00#6&27C02643&0&0000
    FriendlyName    REG_SZ    Apple iPhone
......

C:\>reg query "HKLM\System\CurrentControlSet\Enum\WpdBusEnumRoot\UMB" /s
오류: 오류: 시스템이 지정된 레지스트리 키 또는 값을 찾을 수 없습니다. <- 키가 없음

 

4. USB 연결 시간

최초 연결 시간은 아래 파일 장치 드라이버 설치 파일로 확인

SetupAPI Logfile – Section Start
Windows 2000/XP : %SystemRoot%\Setupapi.log
Windows Vista/7/8(RP) : %SystemRoot%\inf\Setupapi.dev.log

 

레지스트리에서의 관련 값은 보안 등의 이유로 PnP 관리자가 수시로 값을 변경할 수 있어서 실제 최초 연결시간이라 단정지울 수 없고 USB 최초 연결 시간 자체가 침해사고 대응이나 포렌식 관점에서 큰 의미가 없다고 생각된다.

 

부팅 후 최초 연결 시간이나 마지막 연결 시간등도 최초 또는 가장 마지막 즉 가장 최근의 값만 저장하고 있으므로 동일 USB를 여러 본 꽂아서 작업을 했을 때를 생각하면 이 또한 침해사고 대응이나 포렌식 관점에서 큰 의미가 없다고 생각된다.

 

이벤트 뷰어나 신뢰할 만한 기타 도구들을 이용하여 USB 장치 사용 시간을 확인해 보는게 효율적일 수도 있다. 도구를 활용할 때는 2 - 3 개의 도구를 활용하여 Cross Check 하는 것이 분석 신뢰도를 높일 수 있을 것이다.

 

5. 이벤트 로그를 통한 USB 관련 이벤트 조회

< EventID >

Connection : 2003 / 2004 / 2006 / 2010 / 2101 / 2105 / 2106 
Disconnection : 2100 / 2102

 

C:\DFIR\EventLog>wevtutil epl system system_backup.evtx

F:\>LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 1, '|') as Username, EXTRACT_TOKEN(Strings, 2, '|') AS Workstation FROM 'system_backup.evtx' WHERE EventID = '2008'"

 

또는

문자열 검색

F:\tool\forensic\usbdeviceforensics>F:\script\batch\LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 1, '|') as Username, EXTRACT_TOKEN(Strings, 2, '|') AS Workstation FROM 'F:\temp\system_backup.evtx' WHERE strings like '%usb%'"

6. 파일 I/O 조회

USB에 어떠한 정보를 복사했는지 확인 필요

이러한 경우 링크파일을 분석하여 외장형 드라이브에서 연결된 폴더 및 파일 정보를 확인하여 추측

이때, 해당 드라이브에 사용된 저장매체가 무엇인지 구체적으로 확인이 필요할 때가 있는데 이럴때는 레지스트리의 EMDMgmt 정보와 조합하여 확인 가능

링크파일에는 Volume Serial Number가 포함되어 있어 EMDMgmt에 있는 USB의 Volume Serial Number와 맵핑하여 연결점을 찾을 수 있다.

매핑할때 주의점은 EMDMgmt의 볼륨 시리얼은 10진수 표현값이며, 링크파일의 볼륨 정보는 16진수있다. 따라서 16진수를 10진수로 변환하여 비교해야 한다. 

 

링크파일, 점프리스트, 프리패치 등 아티펙트별로 별도 분석 도구나 명령을 이용하거나 아래 rip처럼 통합 분석 도구를 활용하거나 본인의 성향, 인지도, 분석 목적, 분석 결과 신뢰도 등에 따라 적절히 선택하여 사용

 

C:\Tools\Forensic\RegRipper2.8>rip.exe -r c:\test\reg-hive-backup\chohb.NTUSER.DAT -p recentdocs

C:\Tools\Forensic\RegRipper2.8>rip.exe -r c:\test\reg-hive-backup\chohb.NTUSER.DAT -p userassist

 

반응형

반응형

RDP Connection 내역

아래 명령을 실행하면 환경변수 $TEMP로 설정된 디렉토리에 csv 파일이 저장된다.

F:\script\powershell>powershell -executionpolicy bypass -f RDPConnectionParser.ps1
Writing File: f:\Temp\2020-03-03T16.24.38_RDP_Report.csv
Done!

 

RDPConnectionParser.zip
0.00MB

 

F:\script\powershell>type f:\temp\2020-03-03T16.24.38_RDP_Report.csv
"TimeCreated","User","ServerName","IPAddress","EventID","Action"
"2020-02-17 ?? 12:45:59","CHOHB\chohb","chohb","LOCAL","21","logon"
"2020-02-17 ?? 6:02:33","CHOHB\chohb","chohb",,"23","logoff"
"2020-02-18 ?? 8:47:25","CHOHB\chohb","chohb","LOCAL","21","logon"
"2020-02-18 ?? 6:02:18","CHOHB\chohb","chohb",,"23","logoff"

 

< 참고 >

Event ID21이면 RDP logon,

Event ID22이면 RDP Shell Start,

Event ID23이면 RDP logoff,

Event ID24이면 RDP DisConnected,

Event ID25이면 RDP ReConnection

 

이벤트 로그 조회

Session 관련 이벤트 파일

F:\temp>dir %windir%\system32\winevt\logs\*session*.evtx

Microsoft-Windows-RemoteDesktopServices-SessionServices%4Operational.evtx

Microsoft-Windows-TerminalServices-LocalSessionManager%4Admin.evtx

Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx

 

< RDP Files >

%User Profile%\Documents\Default.rdp 파일도 일단 수집하자.
분석 대상 시스템에서 RDP 접속을 한 흔적 파악하는데 사용될 수 있다. RDP 접속 후 네트워크를 통해 용의자가 파일을 전송하였거나, 정보를 획득할 수 있다는 가능성을 제기할 수 있으며, 침해사고 관점에서는 원치 않은 접속 요청에 대한 정보를 수집하여 시스템의 악성 행위 시점을 판단하는데 도움을 줄 수 있다.

 

파일 저장

F:\temp>wevtutil epl /lf "C:\WINDOWS\system32\winevt\logs\Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx" "c:\temp\TerminalServices-LocalSessionManager-Operational.evtx"

 

컬럼명 조회

C:\>LogParser.exe -h -i:evt "c:\temp\TerminalServices-LocalSessionManager-Operational.evtx"

 

조회

F:\temp>LogParser.exe -stats:off -i:evt "select Timegenerated, strings, Eventid from 'c:\temp\TerminalServices-LocalSessionManager-Operational.evtx' where Eventid='21' or Eventid='22' or Eventid='23' or Eventid='24' or Eventid='25'"

 

C:\DFIR\EventLog>wevtutil epl system system-export.evtx

 

Security 이벤트 파일

C:\DFIR\EventLog>wevtutil epl security security-export.evtx

 

C:\>LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 8, '|') as LogonType,EXTRACT_TOKEN(strings, 9, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 11, '|') AS Workstation, EXTRACT_TOKEN(Strings, 17, '|') AS ProcessName, EXTRACT_TOKEN(Strings, 18, '|') AS SourceIP FROM 'C:\temp\Security-Export.evtx' WHERE EventID = 4624 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY') and EXTRACT_TOKEN(Strings, 8, '|')='10' "

 

< 참고 > 이벤트 로그 내용을 Text로 저장

C:\>wevtutil qe /lf "C:\WINDOWS\system32\winevt\logs\Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx" /f:text > "c:\temp\TerminalServices-LocalSessionManager-Operational.txt"

 

System 이벤트 파일

C:\DFIR\EventLog>wevtutil epl system system-export.evtx

동일한 방법으로 조회

 

NTLM Based Logon

possible pass-the-hash

C:\>LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 8, '|') as LogonType, EXTRACT_TOKEN(strings, 10, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 11, '|') AS Workstation, EXTRACT_TOKEN(Strings, 17, '|') AS ProcessName, EXTRACT_TOKEN(Strings, 18, '|') AS SourceIP FROM 'C:\temp\Security-Export.evtx' WHERE EventID = 4624 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY') AND AuthPackage LIKE '%NtLmSsp%' AND Username NOT LIKE '%$'"

 

All Logon History

이벤트 ID 4624에 대한 로그인 유형

로그인 유형에 대해 각각 조회가 가능하다.

 

C:\>LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 8, '|') as LogonType,EXTRACT_TOKEN(strings, 9, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 11, '|') AS Workstation, EXTRACT_TOKEN(Strings, 17, '|') AS ProcessName, EXTRACT_TOKEN(Strings, 18, '|') AS SourceIP FROM 'C:\temp\Security-Export.evtx' WHERE EventID = 4624 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY')"

 

콘솔 로그인

C:\>LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 8, '|') as LogonType,EXTRACT_TOKEN(strings, 9, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 11, '|') AS Workstation, EXTRACT_TOKEN(Strings, 17, '|') AS ProcessName, EXTRACT_TOKEN(Strings, 18, '|') AS SourceIP FROM 'C:\temp\Security-Export.evtx' WHERE EventID = 4624 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY') and EXTRACT_TOKEN(Strings, 8, '|')='2' "

 

네트워크 로그인

C:\>LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 8, '|') as LogonType,EXTRACT_TOKEN(strings, 9, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 11, '|') AS Workstation, EXTRACT_TOKEN(Strings, 17, '|') AS ProcessName, EXTRACT_TOKEN(Strings, 18, '|') AS SourceIP FROM 'C:\Dropbox\DFIR\Window\Behaviour\Results\Security-Export.evtx' WHERE EventID = 4624 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY') and EXTRACT_TOKEN(Strings, 8, '|')='3' "

 

Failed Logon History

unsuccessful logon

C:\>LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 10, '|') as LogonType,EXTRACT_TOKEN(strings, 11, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 13, '|') AS Workstation, EXTRACT_TOKEN(Strings, 19, '|') AS SourceIP FROM 'C:\temp\Security-Export.evtx' WHERE EventID = 4625 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY')"

 

Find specific User

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 10, '|') as LogonType,EXTRACT_TOKEN(strings, 11, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 13, '|') AS Workstation, EXTRACT_TOKEN(Strings, 19, '|') AS SourceIP FROM 'C:\temp\Security-Export.evtx' WHERE EventID = 4625 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY') AND Username = 'Administrator'"

          

Find specific IP

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 10, '|') as LogonType,EXTRACT_TOKEN(strings, 11, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 13, '|') AS Workstation, EXTRACT_TOKEN(Strings, 19, '|') AS SourceIP FROM 'C:\temp\Security-Export.evtx' WHERE EventID = 4625 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY') AND SourceIP = '10.1.47.151'"

 

check ntlm based attempts

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 10, '|') as LogonType, EXTRACT_TOKEN(strings, 11, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 13, '|') AS Workstation, EXTRACT_TOKEN(Strings, 19, '|') AS SourceIP FROM 'C:\temp\Security-Export.evtx' WHERE EventID = 4625 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY') AND AuthPackage LIKE '%NtLmSsp%' AND Username NOT LIKE '%$'"

 

LogOff History

C:\>LogParser.exe -stats:OFF -i:EVT "Select TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 1, '|') AS Username, EXTRACT_TOKEN(Strings, 2, '|') AS Domain FROM 'C:\Dropbox\DFIR\Window\Behaviour\Results\Security-Export.evtx' WHERE EventID = 4634 AND Domain NOT IN ('NT AUTHORITY')"

반응형

반응형

침해사고 분석 대응과 관련하여 저장장치 사용, 웹 활동 등 사용자들의 일반 행위들을 시간순으로 확인
어플리케이션 실행 , 웹 활동(인터넷 검색 등), 자주 열어본 파일 등을 시간 순으로 표시

 

Window + TAB 키를 치면 표시되는 데이터들이며 이 정보는 "Windows 에서 PC의 내 활동을 수집하도록 허용" 
옵션을 선택 활성화해야 수집이 되며
현재를 기준으로 최대 30일 동안 사용자의 활동을 확인할 수 있습니다.

분석 내용
응용프로그램 실행 이력
인터넷 검색 등 웹 활동 이력
자주 열어본 파일이나 최근 접근 파일 확인
사용자의 과거 활동 이력 추적
사건 발생 전후 생성, 수정, 삭제, 접근한 파일 분석

파일 경로
Users\AppData\Local\ConnectedDevicesPlatform\L.\ActivitiesCache.db <- SQLite DB Format
예제
C:\Users\chohb\AppData\Local\ConnectedDevicesPlatform\c0fe10dddb98dd4b\ActivitiesCache.db

 

분석
Last Activity View

From : https://www.nirsoft.net/utils/computer_activity_view.html


실행중인 시스템의 다양한 소스에서 정보를 수집하고 사용자 행위 및 이벤트의 로그를 표시하는 도구

수집 데이터에는 exe 파일 실행, 열기/저장 대화 상자 열기, 탐색기 또는 기타 소프트웨어에서 파일/폴더 열기,
소프트웨어 설치, 시스템 종료/시작, 응용 프로그램 또는 시스템 충돌, 네트워크 연결/연결 끊기 등이 포함

Actions/Events List
The following actions and events are currently supported by LastActivityView:

  • Run .EXE file: .EXE file run directly by the user, or by another software/service running in the background.
  • Select file in open/save dialog-box: The user selected the specified filename from the standard Save/Open dialog-box of Windows.
  • Open file or folder: The user opened the specified filename from Windows Explorer or from another software.
  • View Folder in Explorer: The user viewed the specified folder in Windows Explorer.
  • Software Installation: The specified software has been installed or updated.
  • System Started: The computer has been started.
  • System Shutdown: The system has been shut down, directly by the user, or by a software that initiated a reboot.
  • Sleep: The computer has been placed into sleep mode.
  • Resumed from sleep: The computer has been resumed from sleep mode.
  • Network Connected: Network connected, after previously disconnected.
  • Network Disconnected: Network has been disconnected
  • Software Crash: The specified software has been crashed.
  • Software stopped responding (hang): The specified software stopped responding.
  • Blue Screen: Blue screen event has been occurred on the system.
  • User Logon: The user logged on to the system.
  • User Logoff: The user logged off from the system. This even might caused by a software that initiated a reboot.
  • Restore Point Created: Restore point has been created by Windows operating system.
  • Windows Installer Started
  • Windows Installer Ended
  • Wireless Network Connected: Windows connected to a wireless network, the connection information is displayed in the 'More Information' column.
  • Wireless Network Disconnected: Windows disconnected from a wireless network, the connection information is displayed in the 'More Information' column.

GUI

CLI

C:\>LastActivityView.exe /sort "~ action time" /sxml C:\temp\LastActivity.xml

 

필드명 조회

C:\>logparser.exe -h -i:xml "C:\temp\LastActivity.xml" -headerrow:on

Fields:

  action_time (S)      description (S)    filename (S)    full_path (S)

  more_information (S) file_extension (S) data_source (S)

 

조회

C:\>logparser.exe -stats:off -i:xml "select action_time, filename, description, data_source from 'C:\temp\LastActivity.xml'"

 

WxTCmd
Wxtcmd는 ActivitiesCache.db 의 테이블 중 Activity테이블과  Activity_PackageIDs테이블을 파싱하여
tsv형태로 저장해준다.


F:\>WxTCmd.exe -f "C:\Users\chohb\AppData\Local\ConnectedDevicesPlatform\c0fe10dddb98dd4b\ActivitiesCache.db" --csv f:\temp\activitiescache

 

F:\tool\forensic\WxTCmd>dir f:\temp\activitiescache
2020-03-06  오전 10:15         1,547,408 20200306101553_Activity.tsv
2020-03-06  오전 10:15         4,452,590 20200306101553_Activity_PackageIDs.csv


F:\>LogParser.exe -h -i:tsv "f:\temp\activitiescache\20200306101553_Activity.tsv"
Fields:
 Filename (S)
 RowNumber (I)
 Id|Executable|DisplayText|ContentInfo|StartTime|EndTime|LastModifiedTime|ExpirationTime|CreatedInCloud|LastModifiedOnClient|OriginalLastModifiedOnClient|ActivityType|IsLocalOnly|ETag|PackageIdHash|PlatformDeviceId|Duration (S)

F:\>LogParser.exe -i:tsv "select * from f:\temp\activitiescache\20200306101553_Activity.tsv"

F:\>LogParser.exe -i:tsv "select * from 'F:\temp\activitiescache\20200306101553_Activity_PackageIDs.csv'"

SQLite
F:\>sqlite3.exe C:\Users\chohb\AppData\Local\ConnectedDevicesPlatform\c0fe10dddb98dd4b\ActivitiesCache.db

sqlite> .database
main: C:\Users\chohb\AppData\Local\ConnectedDevicesPlatform\c0fe10dddb98dd4b\ActivitiesCache.db

sqlite> .table
Activity            Activity_PackageId  DataEncryptionKeys  Metadata
ActivityOperation   AppSettings         ManualSequence      SmartLookup

sqlite> pragma table_info(Activity); 
0|Id|GUID|1||1
1|AppId|TEXT|1||0
2|PackageIdHash|TEXT|0||0
3|AppActivityId|TEXT|0||0
4|ActivityType|INT|1||0
5|ActivityStatus|INT|1||0
6|ParentActivityId|GUID|0||0
7|Tag|TEXT|0||0
8|Group|TEXT|0||0
9|MatchId|TEXT|0||0
10|LastModifiedTime|DATETIME|1||0
11|ExpirationTime|DATETIME|0||0
12|Payload|BLOB|0||0
13|Priority|INT|0||0
14|IsLocalOnly|INT|0||0
15|PlatformDeviceId|TEXT|0||0
16|CreatedInCloud|DATETIME|0||0
17|StartTime|DATETIME|0||0
18|EndTime|DATETIME|0||0
19|LastModifiedOnClient|DATETIME|0||0
20|GroupAppActivityId|TEXT|0||0
21|ClipboardPayload|BLOB|0||0
22|EnterpriseId|TEXT|0||0
23|OriginalPayload|BLOB|0||0
24|OriginalLastModifiedOnClient|DATETIME|0||0
25|ETag|INT|1||0
26|UserActionState|INT|0|0|0
27|IsRead|INT|0|0|0
28|GroupItems|TEXT|0||0
29|DdsDeviceId|TEXT|0||0

sqlite> select * from Activity;

반응형

반응형

log parser를 이용하여 윈도우 이벤트를 분석하기 위해 먼저 이벤트 로그를 파일로 저장한다.

 

첨고로 각 단계에서 참조된 이벤트ID에 대한 자세한 정보는 https://docs.microsoft.com/ko-kr/windows/security/threat-protection/auditing/event-4625 를 참조한다.


이벤트 로그 저장

C:\DFIR\EventLog>wevtutil epl security security-origin.evtx

C:\DFIR\EventLog>wevtutil epl system system_backup.evtx

C:\DFIR\EventLog>copy "c:\Windows\System32\winevt\Logs\Microsoft-Windows-Windows Firewall With Advanced Security%4Firewall.evtx" firewall_backup.evtx

 

예제

특정 이벤트ID 조회

C:\DFIR\EventLog>LogParser.exe' -stats:OFF -i:EVT "SELECT * FROM 'Security-Origin.evtx' WHERE EventID = '5038'"

          

이벤트ID별 발생 건수

C:\DFIR\EventLog> LogParser.exe -stats:OFF -i:EVT "SELECT COUNT(*) AS CNT, EventID FROM 'Security-origin.evtx' GROUP BY EventID ORDER BY CNT DESC"

 

케이스별 이벤트 조회

이벤트 로그 삭제 내역

EventID 1102

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 1, '|') as Username, EXTRACT_TOKEN(Strings, 2, '|') AS Workstation FROM 'Security-origin.evtx' WHERE EventID = '1102'"

 

RDP Session

Event id 4778

RDP session reconnected

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date,EXTRACT_TOKEN(Strings, 0, '|') AS Username, EXTRACT_TOKEN(Strings, 1, '|') AS Domain, EXTRACT_TOKEN(Strings, 4, '|') AS Workstation, EXTRACT_TOKEN(Strings, 5, '|') AS SourceIP FROM 'Security-origin.evtx' WHERE EventID = 4778"

          

Event id 4779

RDP session disconnected

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date,EXTRACT_TOKEN(Strings, 0, '|') AS Username, EXTRACT_TOKEN(Strings, 1, '|') AS Domain, EXTRACT_TOKEN(Strings, 4, '|') AS Workstation, EXTRACT_TOKEN(Strings, 5, '|') AS SourceIP FROM 'Security-origin.evtx' WHERE EventID = 4779"

 

Event id 4781

User account was renamed

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 0, '|') AS newname, EXTRACT_TOKEN(Strings, 1, '|') AS oldname, EXTRACT_TOKEN(Strings, 2, '|') AS accdomain, EXTRACT_TOKEN(Strings, 5, '|') AS Username, EXTRACT_TOKEN(Strings, 6, '|') AS Domain FROM 'Security-origin.evtx' WHERE EventID = 4781"

          

Event id 4825

RDP Access denied

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 0, '|') AS Username, EXTRACT_TOKEN(Strings, 1, '|') AS Domain, EXTRACT_TOKEN(Strings, 3, '|') AS SourceIP FROM 'Security-origin.evtx' WHERE EventID = 4825"

 

RDP Local Session Log

Successful logon

LogParser.exe -stats:OFF -i:EVT "Select timegenerated as Date, extract_token(strings, 0, '|') as user, extract_token(strings, 2, '|') as sourceip FROM 'Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx' WHERE EventID = 21"

          

find specific user

LogParser.exe -stats:OFF -i:EVT "Select timegenerated as Date, extract_token(strings, 0, '|') as user, extract_token(strings, 2, '|') as sourceip FROM 'Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx' WHERE EventID = 21 AND user LIKE '%Administrator%'"

          

group by user

LogParser.exe -stats:OFF -i:EVT "Select extract_token(strings, 0, '|') as user, count(*) as CNT FROM 'Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx' WHERE EventID = 21 GROUP BY user ORDER BY CNT DESC"

 

RDP Remote Session Log

Successful logon

LogParser.exe -stats:OFF -i:EVT "Select timegenerated as Date, extract_token(strings, 0, '|') as user, extract_token(strings, 2, '|') as sourceip FROM 'Microsoft-Windows-TerminalServices-RemoteConnectionManager%4Operational.evtx' WHERE EventID = 1149"

          

group by user

LogParser.exe -stats:OFF -i:EVT "Select extract_token(strings, 0, '|') as user, count(*) as CNT FROM 'Microsoft-Windows-TerminalServices-RemoteConnectionManager%4Operational.evtx' WHERE EventID = 1149 GROUP BY user ORDER BY CNT DESC"

 

RDP 및 Console 로그인

로그인 성공, EventID 4624

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 8, '|') as LogonType,EXTRACT_TOKEN(strings, 9, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 11, '|') AS Workstation, EXTRACT_TOKEN(Strings, 17, '|') AS ProcessName, EXTRACT_TOKEN(Strings, 18, '|') AS SourceIP FROM 'Security-origin.evtx' WHERE EventID = 4624 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY')"

 

특정 User 로그인

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 8, '|') as LogonType,EXTRACT_TOKEN(strings, 9, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 11, '|') AS Workstation, EXTRACT_TOKEN(Strings, 17, '|') AS ProcessName, EXTRACT_TOKEN(Strings, 18, '|') AS SourceIP FROM 'Security-origin.evtx' WHERE EventID = 4624 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY') AND Username = 'Administrator'"

 

RDP 로그인

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 8, '|') as LogonType,EXTRACT_TOKEN(strings, 9, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 11, '|') AS Workstation, EXTRACT_TOKEN(Strings, 17, '|') AS ProcessName, EXTRACT_TOKEN(Strings, 18, '|') AS SourceIP FROM 'Security-origin.evtx' WHERE EventID = 4624 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY') AND LogonType = '10'"

 

Console 로그인

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 8, '|') as LogonType,EXTRACT_TOKEN(strings, 9, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 11, '|') AS Workstation, EXTRACT_TOKEN(Strings, 17, '|') AS ProcessName, EXTRACT_TOKEN(Strings, 18, '|') AS SourceIP FROM 'Security-origin.evtx' WHERE EventID = 4624 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY') AND LogonType = '2'"

 

특정 IP 로그인

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 8, '|') as LogonType,EXTRACT_TOKEN(strings, 9, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 11, '|') AS Workstation, EXTRACT_TOKEN(Strings, 17, '|') AS ProcessName, EXTRACT_TOKEN(Strings, 18, '|') AS SourceIP FROM 'Security-origin.evtx' WHERE EventID = 4624 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY') AND SourceIP = '10.1.47.151'"

 

NTLM 로그인

possible pass-the-hash

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 8, '|') as LogonType, EXTRACT_TOKEN(strings, 10, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 11, '|') AS Workstation, EXTRACT_TOKEN(Strings, 17, '|') AS ProcessName, EXTRACT_TOKEN(Strings, 18, '|') AS SourceIP FROM 'Security-origin.evtx' WHERE EventID = 4624 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY') AND AuthPackage LIKE '%NtLmSsp%' AND Username NOT LIKE '%$'"

          

group by NTLM users

LogParser.exe -q:ON -stats:OFF -i:EVT "SELECT COUNT(*) AS CNT, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 8, '|') as LogonType, EXTRACT_TOKEN(strings, 9, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 11, '|') AS Workstation, EXTRACT_TOKEN(Strings, 17, '|') AS ProcessName, EXTRACT_TOKEN(Strings, 18, '|') AS SourceIP FROM 'Security-origin.evtx' WHERE EventID = 4624 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY') AND AuthPackage LIKE '%NtLmSsp%' AND Username NOT LIKE '%$' GROUP BY Username, Domain, LogonType, AuthPackage, Workstation, ProcessName, SourceIP ORDER BY CNT DESC"

          

group by users

LogParser.exe -stats:OFF -i:EVT "SELECT EXTRACT_TOKEN(Strings, 5, '|') as Username, COUNT(*) AS CNT FROM 'Security-origin.evtx' WHERE EventID = 4624 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Username NOT LIKE '%$' GROUP BY Username ORDER BY CNT DESC"

          

group by domain

LogParser.exe -stats:OFF -i:EVT "SELECT EXTRACT_TOKEN(Strings, 6, '|') as Domain, COUNT(*) AS CNT FROM 'Security-origin.evtx' WHERE EventID = 4624 GROUP BY Domain ORDER BY CNT DESC"

          

group by authpackage

LogParser.exe -stats:OFF -i:EVT "SELECT EXTRACT_TOKEN(Strings, 9, '|') as AuthPackage, COUNT(*) AS CNT FROM 'Security-origin.evtx' WHERE EventID = 4624 GROUP BY AuthPackage ORDER BY CNT DESC"

          

group by LogonType

LogParser.exe -stats:OFF -i:EVT "SELECT EXTRACT_TOKEN(Strings, 8, '|') as LogonType, COUNT(*) AS CNT FROM 'Security-origin.evtx' WHERE EventID = 4624 GROUP BY LogonType ORDER BY CNT DESC"

          

group by workstation name

LogParser.exe -stats:OFF -i:EVT "SELECT EXTRACT_TOKEN(Strings, 11, '|') as Workstation, COUNT(*) AS CNT FROM 'Security-origin.evtx' WHERE EventID = 4624 GROUP BY Workstation ORDER BY CNT DESC"

          

group by process name

LogParser.exe -stats:OFF -i:EVT "SELECT EXTRACT_TOKEN(Strings, 17, '|') as ProcName, COUNT(*) AS CNT FROM 'Security-origin.evtx' WHERE EventID = 4624 GROUP BY ProcName ORDER BY CNT DESC"

 

로그인 실패

EventID 4625

unsuccessful logon

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 10, '|') as LogonType,EXTRACT_TOKEN(strings, 11, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 13, '|') AS Workstation, EXTRACT_TOKEN(Strings, 19, '|') AS SourceIP FROM 'Security-origin.evtx' WHERE EventID = 4625 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY')"

          

Find specific User

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 10, '|') as LogonType,EXTRACT_TOKEN(strings, 11, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 13, '|') AS Workstation, EXTRACT_TOKEN(Strings, 19, '|') AS SourceIP FROM 'Security-origin.evtx' WHERE EventID = 4625 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY') AND Username = 'Administrator'"

          

Find specific IP

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 10, '|') as LogonType,EXTRACT_TOKEN(strings, 11, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 13, '|') AS Workstation, EXTRACT_TOKEN(Strings, 19, '|') AS SourceIP FROM 'Security-origin.evtx' WHERE EventID = 4625 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY') AND SourceIP = '10.1.47.151'"

          

check ntlm based attempts

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 10, '|') as LogonType, EXTRACT_TOKEN(strings, 11, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 13, '|') AS Workstation, EXTRACT_TOKEN(Strings, 19, '|') AS SourceIP FROM 'Security-origin.evtx' WHERE EventID = 4625 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY') AND AuthPackage LIKE '%NtLmSsp%' AND Username NOT LIKE '%$'"

          

group by ntlm users

LogParser.exe -stats:OFF -i:EVT "SELECT COUNT(*) AS CNT, EXTRACT_TOKEN(Strings, 5, '|') as Username, EXTRACT_TOKEN(Strings, 6, '|') as Domain, EXTRACT_TOKEN(Strings, 10, '|') as LogonType,EXTRACT_TOKEN(strings, 11, '|') AS AuthPackage, EXTRACT_TOKEN(Strings, 13, '|') AS Workstation, EXTRACT_TOKEN(Strings, 19, '|') AS SourceIP FROM 'Security-origin.evtx' WHERE EventID = 4625 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Domain NOT IN ('NT AUTHORITY') AND AuthPackage LIKE '%NtLmSsp%' AND Username NOT LIKE '%$' GROUP BY Username, Domain, LogonType, AuthPackage, Workstation, SourceIP ORDER BY CNT DESC"

          

group by Username

LogParser.exe -stats:OFF -i:EVT "SELECT COUNT(*) AS CNT, EXTRACT_TOKEN(Strings, 5, '|') as Username FROM 'Security-origin.evtx' WHERE EventID = 4625 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Username NOT LIKE '%$' GROUP BY Username ORDER BY CNT DESC"

 

Log Off

EventID 4634

LogParser.exe -stats:OFF -i:EVT "Select TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 1, '|') AS Username, EXTRACT_TOKEN(Strings, 2, '|') AS Domain FROM 'Security-origin.evtx' WHERE EventID = 4634 AND Domain NOT IN ('NT AUTHORITY')"

 

명시적 자젹증명을 이용한 로그인

EventID = 4648

explicit creds was used

LogParser.exe -stats:OFF -i:EVT "SELECT timegenerated as date, extract_token(strings, 1, '|') as accountname, extract_token(strings, 2, '|') as domain, extract_token(strings, 5, '|') as usedaccount, extract_token(strings, 6, '|') as useddomain, extract_token(strings, 8, '|') as targetserver, extract_token(strings, 9, '|') as extradata, extract_token(strings, 11, '|') as procname, extract_token(strings, 12, '|') as sourceip from 'Security-origin.evtx' WHERE EventID = 4648"

          

Search by accountname

LogParser.exe -stats:OFF -i:EVT "SELECT timegenerated as date, extract_token(strings, 1, '|') as accountname, extract_token(strings, 2, '|') as domain, extract_token(strings, 5, '|') as usedaccount, extract_token(strings, 6, '|') as useddomain, extract_token(strings, 8, '|') as targetserver, extract_token(strings, 9, '|') as extradata, extract_token(strings, 11, '|') as procname, extract_token(strings, 12, '|') as sourceip from 'Security-origin.evtx' WHERE EventID = 4648 AND accountname = 'Administrator'"

          

Search by usedaccount

LogParser.exe -stats:OFF -i:EVT "SELECT timegenerated as date, extract_token(strings, 1, '|') as accountname, extract_token(strings, 2, '|') as domain, extract_token(strings, 5, '|') as usedaccount, extract_token(strings, 6, '|') as useddomain, extract_token(strings, 8, '|') as targetserver, extract_token(strings, 9, '|') as extradata, extract_token(strings, 11, '|') as procname, extract_token(strings, 12, '|') as sourceip from 'Security-origin.evtx' WHERE EventID = 4648 AND usedaccount = 'Administrator'"

          

group by accountname

LogParser.exe -stats:OFF -i:EVT "SELECT COUNT(*) as CNT, extract_token(strings, 1, '|') as accountname from 'Security-origin.evtx' WHERE EventID = 4648 GROUP BY accountname ORDER BY CNT DESC"

          

group by used account

LogParser.exe -stats:OFF -i:EVT "SELECT COUNT(*) as CNT, extract_token(strings, 5, '|') as usedaccount from 'Security-origin.evtx' WHERE EventID = 4648 GROUP BY usedaccount ORDER BY CNT DESC"

 

레지스트리 접근

레지스트리 값 변경

EventID 4657

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '4657'"

 

Object Access

EventID = 4663

An attempt was made to access an object

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '4663'"

 

Admin Logon
Event id 4672
Admin logon
LogParser.exe -stats:OFF -i:EVT "Select TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 1, '|') AS Username, EXTRACT_TOKEN(Strings, 2, '|') AS Domain FROM 'Security-origin.evtx' WHERE EventID = 4672 AND Domain NOT IN ('NT AUTHORITY')

 

Find specific user

LogParser.exe -stats:OFF -i:EVT "Select TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 1, '|') AS Username, EXTRACT_TOKEN(Strings, 2, '|') AS Domain FROM 'Security-origin.evtx' WHERE EventID = 4672 AND Domain NOT IN ('NT AUTHORITY') AND Username = 'Administrator'"

 

group by username

LogParser.exe -stats:OFF -i:EVT "Select EXTRACT_TOKEN(Strings, 1, '|') AS Username, COUNT(*) AS CNT FROM 'Security-origin.evtx' WHERE EventID = 4672 AND Username NOT IN ('SYSTEM'; 'ANONYMOUS LOGON'; 'LOCAL SERVICE'; 'NETWORK SERVICE') AND Username NOT LIKE '%$' GROUP BY Username ORDER BY CNT DESC"

 

group by domain

LogParser.exe -stats:OFF -i:EVT "Select EXTRACT_TOKEN(Strings, 2, '|') AS Domain, COUNT(*) AS CNT FROM 'Security-origin.evtx' WHERE EventID = 4672 AND Domain NOT IN ('NT AUTHORITY') GROUP BY Domain ORDER BY CNT DESC"

 

프로세스 관련

event id 4688

new process was created

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 1, '|') AS Username, EXTRACT_TOKEN(Strings, 2, '|') AS Domain, EXTRACT_TOKEN(Strings, 5, '|') AS Process FROM 'Security-origin.evtx' WHERE EventID = 4688"

          

Search by user

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 1, '|') AS Username, EXTRACT_TOKEN(Strings, 2, '|') AS Domain, EXTRACT_TOKEN(Strings, 5, '|') AS Process FROM 'Security-origin.evtx' WHERE EventID = 4688 AND Username = 'Administrator'"

          

Search by process name

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 1, '|') AS Username, EXTRACT_TOKEN(Strings, 2, '|') AS Domain, EXTRACT_TOKEN(Strings, 5, '|') AS Process FROM 'Security-origin.evtx' WHERE EventID = 4688 AND Process LIKE '%rundll32.exe%'"

          

group by username

LogParser.exe -stats:OFF -i:EVT "SELECT COUNT(*) AS CNT, EXTRACT_TOKEN(Strings, 1, '|') AS Username FROM 'Security-origin.evtx' WHERE EventID = 4688 GROUP BY Username ORDER BY CNT DESC"

          

group by process name

LogParser.exe -stats:OFF -i:EVT "SELECT COUNT(*) AS CNT, EXTRACT_TOKEN(Strings, 5, '|') AS Process FROM 'Security-origin.evtx' WHERE EventID = 4688 GROUP BY Process ORDER BY CNT DESC"

 

사용자 권한

event id 4704

A user right was assigned

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '4704'"

          

event id 4705

A user right was removed

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '4705'"

          

event id 4706

A new trust was created to a domain

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '4706'"

 

사용자 계정

event id 4720

A user account was created

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, extract_token(Strings, 0, '|') AS createduser, extract_token(strings, 1, '|') AS createddomain, extract_token(strings, 4, '|') as whocreated, extract_token(strings, 5, '|') AS whodomain FROM 'Security-origin.evtx' WHERE EventID = '4720'"

          

          

Event id 4722

user account was enabled

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, extract_token(strings, 0, '|') as user, extract_token(strings, 1, '|') as domain, extract_token(strings, 4, '|') as whichaccount, extract_token(strings, 5, '|') as whichdomain FROM 'Security-origin.evtx' WHERE EventID = 4722"

 

Event id 4723

attempt to change password for the account - user changed his own password

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, extract_token(strings, 0, '|') as user, extract_token(strings, 1, '|') as domain, extract_token(strings, 4, '|') as whichaccount, extract_token(strings, 5, '|') as whichdomain FROM 'Security-origin.evtx' WHERE EventID = 4723"

 

Event id 4724

attempt to reset user

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, extract_token(strings, 0, '|') as user, extract_token(strings, 1, '|') as domain, extract_token(strings, 4, '|') as whichaccount, extract_token(strings, 5, '|') as whichdomain FROM 'Security-origin.evtx' WHERE EventID = 4724"

 

Event id 4725

user account was disabled

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, extract_token(strings, 0, '|') as user, extract_token(strings, 1, '|') as domain, extract_token(strings, 4, '|') as whichaccount, extract_token(strings, 5, '|') as whichdomain FROM 'Security-origin.evtx' WHERE EventID = 4725"

          

Event id 4726

A user account was deleted

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, extract_token(Strings, 0, '|') AS deleteduser, extract_token(strings, 1, '|') AS deleteddomain, extract_token(strings, 4, '|') as whodeleted, extract_token(strings, 5, '|') AS whodomain FROM 'Security-origin.evtx' WHERE EventID = '4726'"

 

Security-enabled Global group

Event id 4727

A security-enabled global group was created

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '4727'"

          

Event id 4728

A member was added to a security-enabled global group

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, extract_token(Strings, 0, '|') as addeduser, extract_token(strings, 2, '|') as togroup, extract_token(strings, 3, '|') as groupdomain, extract_token(strings, 6, '|') as whoadded, extract_token(strings, 7, '|') as whodomain FROM 'Security-origin.evtx' WHERE EventID = '4728'"

          

Event id 4729

A member was removed from a security-enabled global group

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, extract_token(Strings, 0, '|') as removeduser, extract_token(strings, 2, '|') as fromgroup, extract_token(strings, 3, '|') as groupdomain, extract_token(strings, 6, '|') as whoremoved, extract_token(strings, 7, '|') as whodomain FROM 'Security-origin.evtx' WHERE EventID = '4729'"

          

Event id 4730

A security-enabled global group was deleted

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '4730'"

 

Security-enabled Local group

Event id 4731

A security-enabled local group was created

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, extract_token(strings, 0, '|') as createdgroup, extract_token(strings, 1, '|') as domain, extract_token(strings, 4, '|') as whichaccount, extract_token(strings, 5, '|') as whichdomain FROM 'Security-origin.evtx' WHERE EventID = 4731"

          

Event id 4732

A member was added to a security-enabled local group

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, extract_token(Strings, 0, '|') as addeduser, extract_token(strings, 2, '|') as togroup, extract_token(strings, 3, '|') as groupdomain, extract_token(strings, 6, '|') as whoadded, extract_token(strings, 7, '|') as whodomain FROM 'Security-origin.evtx' WHERE EventID = '4732'"

          

Event id 4733

A member was removed from a security-enabled local group

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, extract_token(Strings, 0, '|') as removeduser, extract_token(strings, 2, '|') as fromgroup, extract_token(strings, 3, '|') as groupdomain, extract_token(strings, 6, '|') as whoremoved, extract_token(strings, 7, '|') as whodomain FROM 'Security-origin.evtx' WHERE EventID = '4733'"

          

Event id 4734

A security-enabled local group was deleted

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 2, '|') AS whichgroup, EXTRACT_TOKEN(Strings, 3, '|') AS domaingroup, EXTRACT_TOKEN(Strings, 6, '|') AS who, EXTRACT_TOKEN(Strings, 7, '|') AS workstation FROM 'Security-origin.evtx' WHERE EventID = 4734"

          

Event id 4738

user account was changed

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, extract_token(strings, 1, '|') as user, extract_token(strings, 2, '|') as domain, extract_token(strings, 5, '|') as whichaccount, extract_token(strings, 6, '|') as whichdomain FROM 'Security-origin.evtx' WHERE EventID = 4738"

          

Event id 4740

A user account was locked out

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, extract_token(strings, 0, '|') as user, extract_token(strings, 1, '|') as workstation, extract_token(strings, 4, '|') as wholocked, extract_token(strings, 5, '|') as whodomain FROM 'Security-origin.evtx' WHERE EventID = '4740'"

          

Event id 4742

computer account was changed

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, extract_token(strings, 5, '|') as user, extract_token(strings, 6, '|') as domain, extract_token(strings, 1, '|') as whichaccount, extract_token(strings, 2, '|') as whichdomain FROM 'Security-origin.evtx' WHERE EventID = 4742"

 

Security-enabled Universal group

Event id 4754

A security-enabled universal group was created

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, extract_token(strings, 0, '|') as createdgroup, extract_token(strings, 1, '|') as domain, extract_token(strings, 4, '|') as whichaccount, extract_token(strings, 5, '|') as whichdomain FROM 'Security-origin.evtx' WHERE EventID = 4754"

          

Event id 4756

A member was added to a security-enabled universal group

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, extract_token(Strings, 0, '|') as addeduser, extract_token(strings, 2, '|') as togroup, extract_token(strings, 3, '|') as groupdomain, extract_token(strings, 6, '|') as whoadded, extract_token(strings, 7, '|') as whodomain FROM 'Security-origin.evtx' WHERE EventID = '4756'"

          

Event id 4757

A member was removed from a security-enabled universal group

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, extract_token(Strings, 0, '|') as removeduser, extract_token(strings, 2, '|') as fromgroup, extract_token(strings, 3, '|') as groupdomain, extract_token(strings, 6, '|') as whoremoved, extract_token(strings, 7, '|') as whodomain FROM 'Security-origin.evtx' WHERE EventID = '4757'"

          

Event id 4758

A security-enabled universal group was deleted

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 2, '|') AS whichgroup, EXTRACT_TOKEN(Strings, 3, '|') AS domaingroup, EXTRACT_TOKEN(Strings, 6, '|') AS who, EXTRACT_TOKEN(Strings, 7, '|') AS workstation FROM 'Security-origin.evtx' WHERE EventID = 4758"

          

A user account was unlocked

Event id 4767

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '4767'"

 

Kerberos TGT

커버로스 프로토콜(Kerberos Protocol) – 서버 접근 권한 관리

클라이언트/서버 외에 제3의 인증서버(Authentication Server, AS)를 도입 하고, 이와 연동된 티켓 부여 서비스(Ticket Granting Service, TGS)를 통해 티켓을 발급하여 유효한 티켓이 있는 유저만 서비스 서버(Service Server, SS)에 접속을 할 수 있도록 제어하는 커버로스(Kerberos) 프로토콜 

 

Event id 4768

Kerberos TGT was requested

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, extract_token(strings, 0, '|') as user, extract_token(strings, 1, '|') as domain, extract_token(strings, 7, '|') as cipher, extract_token(strings, 9, '|') as sourceip FROM 'Security-origin.evtx' WHERE EventID = 4768"

 

group by user

LogParser.exe -stats:OFF -i:EVT "SELECT extract_token(strings, 0, '|') as user, COUNT(*) AS CNT FROM 'Security-origin.evtx' WHERE EventID = 4768 AND user NOT LIKE '%$' GROUP BY user ORDER BY CNT DESC"

 

group by domain

LogParser.exe -stats:OFF -i:EVT "SELECT extract_token(strings, 1, '|') as domain, COUNT(*) AS CNT FROM 'Security-origin.evtx' WHERE EventID = 4768 GROUP BY domain ORDER BY CNT DESC"

 

group by cipher

LogParser.exe -stats:OFF -i:EVT "SELECT extract_token(strings, 7, '|') as cipher, COUNT(*) AS CNT FROM 'Security-origin.evtx' WHERE EventID = 4768 GROUP BY cipher ORDER BY CNT DESC"

 

Kerberos Service

Event id 4769

Kerberos Service ticket was requested

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, extract_token(strings, 0, '|') as user, extract_token(strings, 1, '|') as domain, extract_token(strings, 2, '|') as service, extract_token(strings, 5, '|') as cipher, extract_token(strings, 6, '|') as sourceip FROM 'Security-origin.evtx' WHERE EventID = 4769"

          

group by user

LogParser.exe -stats:OFF -i:EVT "SELECT extract_token(strings, 0, '|') as user, COUNT(*) AS CNT FROM 'Security-origin.evtx' WHERE EventID = 4769 AND user NOT LIKE '%$' GROUP BY user ORDER BY CNT DESC"


group by domain

LogParser.exe -stats:OFF -i:EVT "SELECT extract_token(strings, 1, '|') as domain, COUNT(*) AS CNT FROM 'Security-origin.evtx' WHERE EventID = 4769 GROUP BY domain ORDER BY CNT DESC"

 

group by service

LogParser.exe -stats:OFF -i:EVT "SELECT extract_token(strings, 2, '|') as service, COUNT(*) AS CNT FROM 'Security-origin.evtx' WHERE EventID = 4769 GROUP BY service ORDER BY CNT DESC"

 

group by cipher

LogParser.exe -stats:OFF -i:EVT "SELECT extract_token(strings, 5, '|') as cipher, COUNT(*) AS CNT FROM 'Security-origin.evtx' WHERE EventID = 4769 GROUP BY cipher ORDER BY CNT DESC"

                    

Event id 4771

kerberos pre-atuhentication failed

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, extract_token(strings, 0 , '|') as user, extract_token(strings, 6 , '|') as sourceip FROM 'Security-origin.evtx' WHERE EventID = 4771 AND user NOT LIKE '%$'"


group by user

LogParser.exe -stats:OFF -i:EVT "SELECT extract_token(strings, 0, '|') as user, COUNT(user) AS CNT FROM 'Security-origin.evtx' WHERE EventID = 4771 AND user NOT LIKE '%$' GROUP BY user ORDER BY CNT DESC"

 

domain/computer attemped to validate user credentials

Event id 4776

LogParser.exe -stats:OFF -i:EVT "Select TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 1, '|') AS Username, EXTRACT_TOKEN(Strings, 2, '|') AS Domain FROM 'Security-origin.evtx' WHERE EventID = 4776 AND Domain NOT IN ('NT AUTHORITY') AND Username NOT LIKE '%$'"

 

Search by username

LogParser.exe -stats:OFF -i:EVT "Select TimeGenerated AS Date, EXTRACT_TOKEN(Strings, 1, '|') AS Username, EXTRACT_TOKEN(Strings, 2, '|') AS Domain FROM 'Security-origin.evtx' WHERE EventID = 4776 AND Domain NOT IN ('NT AUTHORITY') AND Username NOT LIKE '%$' AND Username = 'Administrator'"

 

group by username

LogParser.exe -stats:OFF -i:EVT "Select EXTRACT_TOKEN(Strings, 1, '|') AS Username, COUNT(*) AS CNT FROM 'Security-origin.evtx' WHERE EventID = 4776 AND Username NOT LIKE '%$' GROUP BY Username ORDER BY CNT DESC"


group by domain

LogParser.exe -stats:OFF -i:EVT "Select EXTRACT_TOKEN(Strings, 2, '|') AS Domain, COUNT(*) AS CNT FROM 'Security-origin.evtx' WHERE EventID = 4776 GROUP BY Domain ORDER BY CNT DESC"

 

FireWall Rules

Event id 4946

new exception was added to firewall

LogParser.exe -stats:OFF -i:EVT "Select TimeGenerated AS Date, extract_token(strings, 2, '|') as rulename FROM 'Security-origin.evtx' WHERE EventID = 4946"

          

group by rule name

LogParser.exe -stats:OFF -i:EVT "Select Count(*) as CNT, extract_token(strings, 2, '|') as rulename FROM 'Security-origin.evtx' WHERE EventID = 4946 GROUP BY rulename ORDER BY CNT DESC"

          

Event id 4948

rule was deleted from firewall

LogParser.exe -stats:OFF -i:EVT "Select TimeGenerated AS Date, extract_token(strings, 2, '|') as rulename FROM 'Security-origin.evtx' WHERE EventID = 4948"

          

group by rule name

LogParser.exe -stats:OFF -i:EVT "Select Count(*) as CNT, extract_token(strings, 2, '|') as rulename FROM 'Security-origin.evtx' WHERE EventID = 4948 GROUP BY rulename ORDER BY CNT DESC"

 

Code integrity determined that the image hash of a file is not valid
Event id 5038
LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '5038'"

directory service object was modified
Event id 5136

LogParser.exe -stats:OFF -i:EVT "SELECT TimeGenerated AS Date, extract_token(strings, 3, '|') AS Username, extract_token(strings, 4, '|') AS Domain, extract_token(strings, 8, '|') AS objectdn, extract_token(strings, 10, '|') AS objectclass, extract_token(strings, 11, '|') AS objectattrib, extract_token(strings, 13, '|') AS attribvalue FROM 'Security-origin.evtx' WHERE EventID = '5136'"

          

group by username

LogParser.exe -stats:OFF -i:EVT "SELECT COUNT(*) AS CNT, extract_token(strings, 3, '|') AS Username FROM 'Security-origin.evtx' WHERE EventID = '5136' GROUP BY Username ORDER BY CNT DESC"

          

group by domain

LogParser.exe -stats:OFF -i:EVT "SELECT COUNT(*) AS CNT, extract_token(strings, 4, '|') AS Domain FROM 'Security-origin.evtx' WHERE EventID = '5136' GROUP BY Domain ORDER BY CNT DESC"

          

group by objectdn

LogParser.exe -stats:OFF -i:EVT "SELECT COUNT(*) AS CNT, extract_token(strings, 8, '|') AS objectdn FROM 'Security-origin.evtx' WHERE EventID = '5136' GROUP BY objectdn ORDER BY CNT DESC"

          

group by objectclass

LogParser.exe -stats:OFF -i:EVT "SELECT COUNT(*) AS CNT, extract_token(strings, 10, '|') AS objectclass FROM 'Security-origin.evtx' WHERE EventID = '5136' GROUP BY objectclass ORDER BY CNT DESC"

          

group by objectattrib

LogParser.exe -stats:OFF -i:EVT "SELECT COUNT(*) AS CNT, extract_token(strings, 11, '|') AS objectattrib FROM 'Security-origin.evtx' WHERE EventID = '5136' GROUP BY objectattrib ORDER BY CNT DESC"

          

group by attribvalue

LogParser.exe -stats:OFF -i:EVT "SELECT COUNT(*) AS CNT, extract_token(strings, 13, '|') AS attribvalue FROM 'Security-origin.evtx' WHERE EventID = '5136' GROUP BY attribvalue ORDER BY CNT DESC"

          

Event id 5137

A directory service object was created

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '5137'"

          

Event id 5138

A directory service object was undeleted

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '5138'"

          

Event id 5139

A directory service object was moved

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '5139'"

          

Event id 5141

A directory service object was deleted

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '5141'"

 

Network Share Object

Event id 5140

A network share object was accessed

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '5140'"

          

Event id 5142

A network share object was added

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '5142'"

          

Event id 5143

A network share object was modified

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '5143'"

          

Event id 5144

A network share object was deleted

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '5144'"

          

Event id 5145

A network share object was checked to see whether client can be granted desired access

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '5145'"

 

Windows Filtering Platform

Event id 5154

The Windows Filtering Platform has permitted an application or service to listen on a port for incoming connections

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '5154'"

          

Event id 5155

The Windows Filtering Platform has blocked an application or service from listening on a port for incoming connections

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '5155'"

          

Event id 5156

The Windows Filtering Platform has allowed a connection

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '5156'"

          

Event id 5157

The Windows Filtering Platform has blocked a connection

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '5157'"

          

Event id 5158

The Windows Filtering Platform has permitted a bind to a local port

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '5158'"

          

Event id 5159

The Windows Filtering Platform has blocked a bind to a local port

LogParser.exe -stats:OFF -i:EVT "SELECT * FROM 'Security-origin.evtx' WHERE EventID = '5159'"

 

System Log

New Service was installed in system

LogParser.exe -stats:OFF -i:EVT "Select TimeGenerated AS Date, extract_token(strings, 0, '|') AS ServiceName, extract_token(strings, 1, '|') AS ServicePath, extract_token(strings, 4, '|') AS ServiceUser FROM System_backup.evtx WHERE EventID = 7045"

 

Service actions

LogParser.exe -stats:OFF -i:EVT "Select TimeGenerated AS Date, extract_token(strings, 0, '|') as servicename FROM System_backup.evtx WHERE EventID = 7036"

 

group by service name

LogParser.exe -stats:OFF -i:EVT "Select COUNT(*) as CNT, extract_token(strings, 0, '|') as servicename FROM System_backup.evtx WHERE EventID = 7036 GROUP BY servicename ORDER BY CNT DESC"

 

Task Schedule Log

Task was Run

LogParser.exe -stats:OFF -i:EVT "Select TimeGenerated AS Date, extract_token(strings,0, '|') as taskname, extract_token(strings, 1, '|') as username FROM 'Microsoft-Windows-TaskScheduler%4Operational.evtx' WHERE EventID = 100"

 

group by taskname

LogParser.exe -stats:OFF -i:EVT "Select extract_token(strings, 0, '|') as taskname, count(*) as cnt FROM 'Microsoft-Windows-TaskScheduler%4Operational.evtx' WHERE EventID = 100 GROUP BY taskname ORDER BY CNT DESC"

 

action was executed

LogParser.exe -stats:OFF -i:EVT "Select TimeGenerated AS Date, extract_token(strings,0, '|') as taskname, extract_token(strings, 1, '|') as taskaction FROM 'Microsoft-Windows-TaskScheduler%4Operational.evtx' WHERE EventID = 200"

 

group by action

LogParser.exe -stats:OFF -i:EVT "Select extract_token(strings, 1, '|') as taskaction, count(*) as cnt FROM 'Microsoft-Windows-TaskScheduler%4Operational.evtx' WHERE EventID = 200 GROUP BY taskaction ORDER BY CNT DESC"

 

user updated a task

LogParser.exe -stats:OFF -i:EVT "Select TimeGenerated as Date, extract_token(strings, 0, '|') as taskname, extract_token(strings, 1, '|') as user FROM 'Microsoft-Windows-TaskScheduler%4Operational.evtx' WHERE EventID = 140"

          

group by user

LogParser.exe -stats:OFF -i:EVT "Select extract_token(strings, 1, '|') as user, count(*) as cnt FROM 'Microsoft-Windows-TaskScheduler%4Operational.evtx' WHERE EventID = 140 GROUP BY user ORDER BY CNT DESC"

          

group by taskname

LogParser.exe -stats:OFF -i:EVT "Select extract_token(strings, 0, '|') as taskname, count(*) as cnt FROM 'Microsoft-Windows-TaskScheduler%4Operational.evtx' WHERE EventID = 140 GROUP BY taskname ORDER BY CNT DESC"

 

user deleted a task

LogParser.exe -stats:OFF -i:EVT "Select TimeGenerated as Date, extract_token(strings, 0, '|') as taskname, extract_token(strings, 1, '|') as user FROM 'Microsoft-Windows-TaskScheduler%4Operational.evtx' WHERE EventID = 141"


group by user

LogParser.exe -stats:OFF -i:EVT "Select extract_token(strings, 1, '|') as user, count(*) as cnt FROM 'Microsoft-Windows-TaskScheduler%4Operational.evtx' WHERE EventID = 141 GROUP BY user ORDER BY CNT DESC"


group by taskname

LogParser.exe -stats:OFF -i:EVT "Select extract_token(strings, 0, '|') as taskname, count(*) as cnt FROM 'Microsoft-Windows-TaskScheduler%4Operational.evtx' WHERE EventID = 141 GROUP BY taskname ORDER BY CNT DESC"

 

Windows Firewall Log

FW New exception rule was added

LogParser.exe -stats:OFF -i:EVT "Select TimeGenerated AS Date, extract_token(strings, 1, '|') as rulename, extract_token(strings, 3, '|') as apppath, extract_token(strings, 22, '|') as changedapp from 'Firewall_backup.evtx' WHERE EventID = 2004"

          

group by apppath

LogParser.exe -stats:OFF -i:EVT "Select COUNT(*) as CNT, extract_token(strings, 3, '|') as apppath from 'Firewall_backup.evtx' WHERE EventID = 2004 GROUP BY apppath ORDER BY CNT DESC"

 

FW Rule was Changed

LogParser.exe -stats:OFF -i:EVT "Select TimeGenerated AS Date, extract_token(Strings, 1, '|') as rulename, extract_token(Strings, 3, '|') AS apppath, extract_token(Strings, 4, '|') AS servicename, extract_token(strings, 7, '|') AS localport, extract_token(strings, 22, '|') as modifyingapp from 'Firewall_backup.evtx' WHERE EventID = 2005"

          

group by apppath

LogParser.exe -stats:OFF -i:EVT "Select COUNT(*) as CNT, extract_token(strings, 3, '|') as apppath from 'Firewall_backup.evtx' WHERE EventID = 2005 GROUP BY apppath ORDER BY CNT DESC"

          

group by rulename

LogParser.exe -stats:OFF -i:EVT "Select COUNT(*) as CNT, extract_token(strings, 1, '|') as rulename from 'Firewall_backup.evtx' WHERE EventID = 2005 GROUP BY rulename ORDER BY CNT DESC"

          

group by servicename

LogParser.exe -stats:OFF -i:EVT "Select COUNT(*) as CNT, extract_token(strings, 4, '|') as servicename from 'Firewall_backup.evtx' WHERE EventID = 2005 GROUP BY servicename ORDER BY CNT DESC"

          

group by local port

LogParser.exe -stats:OFF -i:EVT "Select COUNT(*) as CNT, extract_token(strings, 7, '|') as localport from 'Firewall_backup.evtx' WHERE EventID = 2005 GROUP BY localport ORDER BY CNT DESC"

          

group by modifyingapp

LogParser.exe -stats:OFF -i:EVT "Select COUNT(*) as CNT, extract_token(strings, 22, '|') as modifyingapp from 'Firewall_backup.evtx' WHERE EventID = 2005 GROUP BY modifyingapp ORDER BY CNT DESC"

 

FW Rule was Deleted

LogParser.exe -stats:OFF -i:EVT "Select TimeGenerated AS Date, extract_token(Strings, 1, '|') as rulename, extract_token(strings, 3, '|') as changedapp from 'Firewall_backup.evtx' WHERE EventID = 2006"

          

group by rulename

LogParser.exe -stats:OFF -i:EVT "Select COUNT(*) as CNT, extract_token(strings, 1, '|') as rulename from 'Firewall_backup.evtx' WHERE EventID = 2006 GROUP BY rulename ORDER BY CNT DESC"

          

group by changedapp

LogParser.exe -stats:OFF -i:EVT "Select COUNT(*) as CNT, extract_token(strings, 3, '|') as changedapp from 'Firewall_backup.evtx' WHERE EventID = 2006 GROUP BY changedapp ORDER BY CNT DESC"

 

Firewall blocked inbound connections to the application

Firewall blocked inbound connections to the application, but did not notify the user

LogParser.exe -stats:OFF -i:EVT "Select Timegenerated as date, extract_token(strings, 1, '|') as file, extract_token(strings, 4, '|') as port from 'Firewall_backup.evtx' WHERE EventID = 2011"

          

group by application

LogParser.exe -stats:OFF -i:EVT "Select COUNT(*) as CNT, extract_token(strings, 1, '|') as file from'Firewall_backup.evtx' WHERE EventID = 2011 GROUP BY file ORDER BY CNT DESC"

 

반응형

반응형

Myeventviewer by NirSoft

From : https://www.nirsoft.net/utils/my_event_viewer.html


Command-Line Options

aveDirect Save the log lines in SaveDirect mode. For using with the other save command-line options ( /scomma, /stab, /sxml, and so on...)
When you use the SaveDirect mode, the event log lines are saved directly to the disk, without loading them into the memory first. This means that you can save a list with large amount of event log lines into your disk without any memory problem, as long as you have enough disk space to store the saved file. The drawback of this mode: You cannot sort the log lines according to the column you choose with /sort command-line option.
/ShowOnlyLastEvents [0 | 1] If you specify '1' value, the last events filter will be activated.
/LastEventsUnit [Unit] Unit to specify the last events filter.
1 = Minutes
2 = Hours
3 = Days
/LastEventsValue [Number of Units] specifies the number of units (Minutes/Hours/Days) for the last events filter.
/VisibleEventTypes [Number] Specifies which type of events to display:
1 = Error
2 = Warning
4 = Information
8 = Audit Success
16 = Audit Failure

You can combine multiple event types, for exmaple: if you want to display both errors and warnings, set the VisibleEventTypes value to 3 (1 + 2 = 3):

/EventLogNames [Name1] [Name2] [Name3]... Specifies the event log names that you wish to load.

Examples:
MyEventViewer.exe /EventLogNames "osession" "security" "Internet Explorer"
MyEventViewer.exe /EventLogNames "Application" "Security"

/cfg <Filename> Start MyEventViewer with the specified configuration file. For example:
MyEventViewer.exe /cfg "c:\config\MyEventViewer.cfg"
MyEventViewer.exe /cfg "%AppData%\MyEventViewer.cfg"
/advanced Starts MyEventViewer with the 'Advanced Filter' window, before loading the events.
/stext <Filename> Save the events list into a regular text file.
/stab <Filename> Save the events list into a tab-delimited text file.
/scomma <Filename> Save the events list into a comma-delimited text file (csv).
/stabular <Filename> Save the events list into a tabular text file.
/shtml <Filename> Save the events list into HTML file (Horizontal).
/sverhtml <Filename> Save the events list into HTML file (Vertical).
/sxml <Filename> Save the events list into XML file.
/sort <column> This command-line option can be used with other save options for sorting by the desired column. If you don't specify this option, the list is sorted according to the last sort that you made from the user interface. The <column> parameter can specify the column index (0 for the first column, 1 for the second column, and so on) or the name of the column, like "Source" and "Time". You can specify the '~' prefix character (e.g: "~Time") if you want to sort in descending order. You can put multiple /sort in the command-line if you want to sort by multiple columns.
/nosort When you specify this command-line option, the list will be saved without any sorting.

예제

최근 3일 이벤트 조회
C:\myeventviewer>MyEventViewer.exe /shtml C:\DFIR\EventLog\Security-Export.html /EventLogNames "Security" /ShowOnlyLastEvents 1 /LastEventsValue 3 /LastEventsUnit 3 /sort "~Time" /sort "Event Type"

evtx 파일 로드
C:\myeventviewer>MyEventViewer.exe /Loadfile "C:\DFIR\EventLog\Security-20190716.evtx" /shtml C:\DFIR\EventLog\Security-Export-2.html /ShowOnlyLastEvents 1 /LastEventsValue 3 /LastEventsUnit 3 /sort "~Time"


최근 이벤트 N개 조회

C:\myeventviewer>MyEventViewer.exe /shtml f:\temp\events.html /ShowOnlyLastEvents 1 /LastEventsValue 2000 /LastEventsUnit 1 /sort "~Time"

조회 결과 정렬
C:\myeventviewer>MyEventViewer.exe /shtml f:\temp\events.html /sort "Event Type" /sort "Log Type"


< 참고 >
 Command Line Interface Mode에서는 특정 이벤트 ID나 From – To 날짜 범위로 조회가 불가능하다.

 

FullEventlogview by NirSoft

From : https://www.nirsoft.net/utils/full_event_log_view.html

 

이전 버전인 MyEventviewer의 부족한 부분을 개선. Command Line Interface Mode에서 특정 이벤트 ID등으로 조회가 가능하다.

Command-Line Options

/ChannelFilter [1 - 3] 
/EventIDFilter [1 - 3] 
/ProviderFilter [1 - 3] 
/ChannelFilterStr [Filter String] 
/EventIDFilterStr [Filter String] 
/ProviderFilterStr [Filter String] 


.

You can use any variable inside the .cfg file in order to set the configuration from command line, here's some examples:

In order to show only events with Event ID 8000 and 8001: 
FullEventLogView.exe /EventIDFilter 2 /EventIDFilterStr "8000,8001"

In order show only events from Microsoft-Windows-Dhcp-Client/Admin channel: 
FullEventLogView.exe /ChannelFilter 2 /ChannelFilterStr "Microsoft-Windows-Dhcp-Client/Admin"

In order to read events from .evtx files stored in c:\temp\logs : 
FullEventLogView.exe /DataSource 3 /LogFolder "c:\temp\logs" /LogFolderWildcard "*"

In order to read events from remote computer: 
FullEventLogView.exe /DataSource 2 /ComputerName "192.168.0.70"

/cfg <Filename>

Start FullEventLogView with the specified configuration file. For example: 
FullEventLogView.exe /cfg "c:\config\felv.cfg" 
FullEventLogView.exe /cfg "%AppData%\FullEventLogView.cfg"

/RunAsAdmin

Run FullEventLogView as administrator.

/stext <Filename>

Save the event log items into a simple text file.

/stab <Filename>

Save the event log items into a tab-delimited text file.

/scomma <Filename>

Save the event log items into a comma-delimited text file (csv).

/stabular <Filename>

Save the event log items into a tabular text file.

/shtml <Filename>

Save the event log items into HTML file (Horizontal).

/sverhtml <Filename>

Save the event log items into HTML file (Vertical).

/sxml <Filename>

Save the event log items into XML file.

/sjson <Filename>

Save the event log items into JSON file.

/SaveDirect

Save the event log items in SaveDirect mode. For using with the other save command-line options ( /scomma, /stab, /sxml, and so on...) When you use the SaveDirect mode, the event log items are saved directly to the disk, without loading them into the memory first. Be aware that the sorting feature is not supported in SaveDirect mode.

/sort <column>

This command-line option can be used with other save options for sorting by the desired column. The <column> parameter can specify the column index (0 for the first column, 1 for the second column, and so on) or the name of the column, like "Record ID" and "Event ID". You can specify the '~' prefix character (e.g: "~Channel") if you want to sort in descending order. You can put multiple /sort in the command-line if you want to sort by multiple columns.

예제
C:\fulleventlogview>FullEventLogView.exe  /ChannelFilter 2 /ChannelFilterStr "Security" /EventIDFilter 2  /EventIDFilterstr "4624" /shtml C:\DFIR\EventLog\Security-Export-3.html /ShowOnlyLastEvents 1 /LastEventsValue 3 /LastEventsUnit 3 /sort "~Time" /RunAsAdmin

 

반응형

반응형

Win32_NTLogEvent class

f:\temp>wmic ntevent /?
NTEVENT - NT 이벤트 로그에 있는 항목입니다.
힌트: 별칭 사용의 BNF입니다. 
(<별칭> [WMIObject] | <별칭> [<경로>] | [<별칭>] <경로>) [<동사 절>]

사용법:
NTEVENT ASSOC [<형식 지정자>]
NTEVENT CREATE <할당 목록>
NTEVENT DELETE
NTEVENT GET [<속성 목록>] []
NTEVENT LIST [<목록 형식>] [<목록 스위치>]

표시할 수 있는 항목
f:\temp>wmic ntevent list /?
속성 목록 작업입니다.

사용법:
LIST [<목록 형식>] [<목록 스위치>]

다음과 같은 LIST 형식을 사용할 수 있습니다.
BRIEF   - EventIdentifier, TypeEvent, Message, RecordNumber, SourceName, TimeGenerated
FULL    - Category, CategoryString, ComputerName, Data, EventCode, EventIdentifier, TypeEvent, InsertionStrings, 
            LogFile, Message, RecordNumber, SourceName, TimeGenerated, TimeWritten, Type, UserName


다음과 같은 LIST 스위치를 사용할 수 있습니다.
/TRANSLATE:<테이블 이름>      - <테이블 이름>의 값을 통해 출력을 변환합니다.
/EVERY:<간격> [/REPEAT:<반복 횟수>] - (X 간격)초마다 값을 반환합니다. /REPEAT를 지정하면 명령이 <반복 횟수>번 실행됩니다.
/FORMAT:<형식 지정자>   - XML 결과를 처리할 키워드/XSL 파일 이름입니다.

사용할 수 있는 포맷
f:\temp>wmic ntevent list /format /?
XML 결과를 처리할 키워드/XSL 파일 이름입니다.

사용법:
/FORMAT:<형식 지정자>

키워드:
CSV / HFORM / HTABLE / LIST / MOF / RAWXML / TABLE / VALUE / XML /
htable-sortby / htable-sortby.x니 / texttablewsys / texttablewsys.x니 / wmiclimofformat /
wmiclimofformat.x니 / wmiclitableformat / wmiclitableformat.x니 / wmiclitableformatnosys /
wmiclitableformatnosys.xsl / wmiclivalueformat / wmiclivalueformat.xsl

사용할 수 있는 속성
f:\temp>wmic NTEVENT get /?
사용법:
GET [<속성 목록>] []
참고: <속성 목록> ::= <속성 이름> | <속성 이름>,  <속성 목록>
다음과 같은 속성을 사용할 수 있습니다.
속성                            유형                    작업
========                   ====                    =========
Category                       N/A                     N/A
CategoryString                N/A                     N/A
ComputerName              N/A                     N/A
Data                             N/A                     N/A
EventCode                     N/A                     N/A
EventIdentifier                 N/A                     N/A
InsertionStrings               N/A                     N/A
LogFile                          N/A                     N/A
Message                        N/A                     N/A
RecordNumber                N/A                     N/A
SourceName                   N/A                     N/A
TimeGenerated                N/A                     N/A
TimeWritten                   N/A                     N/A
Type                             N/A                     N/A
TypeEvent                      N/A                     N/A
UserName                      N/A                     N/A

EventType In Win32_NtLogEvent

Types of Event Logs
Each event entry is classified by Type to identify the severity of the event. They are Information, Warning, Error, 
Success Audit (Security Log) and Failure Audit (Security Log).

Event Type

Description

Information

An event that describes the successful operation of a task, such as an application, driver, or service. For example, an Information event is logged when a network driver loads successfully.

Warning

An event that describes the successful operation of a task, such as an application, driver, or service. For example, an Information event is logged when a network driver loads successfully.

Error

An event that is not necessarily significant, however, may indicate the possible occurrence of a future problem. For example, a Warning message is logged when disk space starts to run low.

Success Audit

(Security log)

An event that describes the successful completion of an audited security event. For example, a Success Audit event is logged when a user logs on to the computer.

Failure Audit

(Security log)

An event that describes an audited security event that did not complete successfully. For example, a Failure Audit may be logged when a user cannot access a network drive.

조회 예제

일반 조회

F:\temp>WMIC path Win32_NtLogEvent WHERE "LogFile='System'" GET Message, TimeGenerated /format:list 

F:\temp>WMIC NtEvent WHERE "LogFile='System'" GET Message, TimeGenerated /format:list 

F:\temp>WMIC NtEvent WHERE "LogFile='System'" GET user, type, Message, InsertionStrings, TimeGenerated /format:list


특정 기간 조회

F:\temp>WMIC NtEvent WHERE "LogFile='System' and TimeGenerated >= '20200210000000.000000-240' and TimeGenerated <= '20290215000000.000000-240'" GET Message, TimeGenerated /format:list


특정 기간 특정 EventID 조회
F:\temp>WMIC NtEvent WHERE "LogFile='System' and EventCode='4624' and TimeGenerated >= '20200210000000.000000-240' and TimeGenerated <= '20290215000000.000000-240'" GET Message, TimeGenerated /format:list

특정 기간 Error 이벤트 조회
F:\temp>WMIC NtEvent WHERE "LogFile='System' and Eventtype='1' and TimeGenerated >= '20200210000000.000000-240' and TimeGenerated <= '20290215000000.000000-240'" GET Message, TimeGenerated /format:list

 

F:\temp>WMIC NtEvent WHERE "LogFile='System' and type='오류' and TimeGenerated >= '20200210000000.000000-240' and TimeGenerated <= '20290215000000.000000-240'" GET Message, TimeGenerated /format:list


<참고>

영문의 경우 "오류" 문자열이 "Error"이다.

 

반응형

반응형

check-windows-event-log.zip
0.00MB

Get-WinEvent

이벤트 목록 확인 

PS C:\Temp> Get-WinEvent -ListLog *

이벤트 건수 확인

PS C:\Temp> (get-winevent -FilterHashtable @{logname="security";id=4624;starttime=(get-date).adddays(-10);endtime=(get-date).adddays(-5)}).count
835

특정 기간 조회
PS C:\Temp> get-winevent -FilterHashtable @{logname="security";id=4624;starttime=(get-date).adddays(-10);endtime=(get-date).adddays(-5)}

   ProviderName: Microsoft-Windows-Security-Auditing
TimeCreated                     Id LevelDisplayName Message
-----------                     -- ---------------- -------
2019-07-08 오후 6:01:22       4624 정보             계정이 성공적으로 로그온되었습니다....
2019-07-08 오후 6:01:20       4624 정보             계정이 성공적으로 로그온되었습니다....
2019-07-08 오후 6:01:18       4624 정보             계정이 성공적으로 로그온되었습니다....
......

 

최근 이벤트 조회
PS C:\Temp> Get-WinEvent -FilterHashtable @{logname='Security'} -MaxEvents 50

 

조회 결과 csv 저장 [1]
PS C:\Temp> get-winevent -FilterHashtable @{logname="security";id=4624;starttime=(get-date).adddays(-10);endtime=(get-date).adddays(-5)} | format-list -property id, timecreate, message | export-csv f:\temp\eve-login.csv

특정 이벤트ID 조회 [2]

PS C:\Temp> get-winevent security | where {$_.id -eq 4624} | where {$_.timecreated -ge (get-date).adddays(-10)} |  where {$_.timecreated -le (get-date).adddays(-5)}
2019-07-13 오후 6:12:55       4624 정보             계정이 성공적으로 로그온되었습니다....
2019-07-13 오후 6:12:55       4624 정보             계정이 성공적으로 로그온되었습니다....
2019-07-13 오후 6:12:55       4624 정보             계정이 성공적으로 로그온되었습니다....
......


<참고>

[1]과 [2]를 비교해보면 FilterHashtable이 훨씬 빠르다

레퍼런스 : https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.diagnostics/get-winevent?view=powershell-7

Get-EventLog
Get-EventLog에서는 FilterHashtable 지원이 안된다. 그리고 Get-WinEvent와 항목의 컬럼명이 서로 다르다. 예를 들어 Get-WinEvent의 이벤트 Id는 ID명으로 표시되지만 Get-EventLog에서는 InstancedID로 표시된다.

 

이벤트 목록 확인 

PS C:\Temp> Get-EventLog  -List

 

최근 이벤트 조회

PS F:\script\powershell> get-eventlog -LogName Security -Newest 5                                                       
   Index Time          EntryType   Source                 InstanceID Message
   ----- ----          ---------   ------                 ---------- -------
   31284 3 03 11:52    SuccessA... Microsoft-Windows...         4672 특수 권한을 새 로그온에 할당했습니다....
   31283 3 03 11:52    SuccessA... Microsoft-Windows...         4624 계정이 성공적으로 로그온되었습니다....
   31282 3 03 11:52    SuccessA... Microsoft-Windows...         4798 사용자의 로컬 그룹 구성원이 열거되었습니다....
   31281 3 03 11:52    SuccessA... Microsoft-Windows...         4798 사용자의 로컬 그룹 구성원이 열거되었습니다....
   31280 3 03 11:52    SuccessA... Microsoft-Windows...         4798 사용자의 로컬 그룹 구성원이 열거되었습니다....


특정 이벤트ID 조회
PS C:\Temp> get-eventlog security | where {$_.Instanceid -eq 4624} | select -First 3

특정 기간 조회
PS C:\Temp> (get-eventlog security | where {$_.InstanceID -eq 4624} | where {$_.TimeWritten.toString("yyyy-MM-dd HH:mm:ss") -ge (get-date).adddays(-10).toString("yyyy-MM-dd HH:mm:ss")} |  where {$_.TimeWritten.toString("yyyy-MM-dd HH:mm:ss") -le (get-date).adddays(-5).toString("yyyy-MM-dd HH:mm:ss")}).count
868

PS C:\Temp> get-eventlog security | where {$_.InstanceID -eq 4624} | where {$_.TimeWritten.toString("yyyy-MM-dd HH:mm:ss") -ge (get-date).adddays(-10).toString("yyyy-MM-dd HH:mm:ss")} |  where {$_.TimeWritten.toString("yyyy-MM-dd HH:mm:ss") -le (get-date).adddays(-5).toString("yyyy-MM-dd HH:mm:ss")} | select -First 3 | select-object InstanceID, @{Name='CTime';Expression={$_.TimeWritten.toString("yyyy-MM-dd HH:mm:ss")}}, Message

 

시스템 이벤트 로그에서 1000 개의 최신 항목에 포함된 건수별 리소스 확인

PS F:\script\powershell>$Events = Get-EventLog -LogName System -Newest 1000                                            

PS F:\script\powershell>$Events | Group-Object -Property Source -NoElement | Sort-Object -Property Count -Descending   


Count Name
----- ----
  227 Microsoft-Windows-Filt...
  154 Microsoft-Windows-Kern...
  113 Service Control Manager
   72 DCOM
   50 Microsoft-Windows-Time...
   49 Microsoft-Windows-Kern...
   42 Microsoft-Windows-Dhcp...
   35 Microsoft-Windows-Ntfs
   34 EventLog
   32 Microsoft-Windows-Grou...
   30 Microsoft-Windows-Wind...
   28 Microsoft-Windows-TPM-WMI
   28 Microsoft-Windows-Kern...
   21 Microsoft-Windows-DHCP...
   14 Microsoft-Windows-Winl...
   14 Microsoft-Windows-Kern...
    7 User32
    7 volmgr
    7 Microsoft-Windows-Dire...
    7 TPM
    7 Microsoft-Windows-Wininit
    7 MEIx64
    7 e1i65x64
    4 Microsoft-Windows-DNS-...
    3 Application Popup
    1 WinDivert

 

에러 이벤트 조회

PS F:\script\powershell> Get-EventLog -LogName System -EntryType Error  


< 참고 >
주요 분석 대상별로 ID나 InstanceID를 바꿔가면서 실행하면 된다.

레퍼런스 : https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-eventlog?view=powershell-5.1


Get-WmiObject
PS C:\Temp>  Get-WmiObject -Query "Select EventCode,TimeGenerated,Type,Message from Win32_NTLogEvent WHERE (LogFile = 'Security' and Eventcode='4624')" | select -First 10 | select-object EventCode,TimeGenerated,Type,Message | ft

 

<참고>

조회 속도는 가장 빠른 거 같다.

레퍼런스 : https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-wmiobject?view=powershell-5.1

 

PowerShell Scripts

check-windows-event-log.ps1

 

Application 이벤트 로그에서 메세지에 "보안"이 포함된 내역 조회
F:\script\powershell>powershell -ExecutionPolicy bypass -f check-windows-event-log.ps1 -LogName Application -Pattern 보안         

 

 

반응형

반응형

사용 예제

eventquery.vbs

1.  cmdlib.wsc 등록

cmdlib.wsc는 Windows 용 WSC 파일로 Microsoft가 개발했으며 Windows Script Component 파일입니다.

F:\script\vbs>regsvr32 cmdlib.wsc /s

 

2. 도움말

F:\script\vbs>cscript eventquery.vbs /?
Microsoft (R) Windows Script Host 버전 5.812
Copyright (C) Microsoft Corporation. All rights reserved.

EVENTQUERY.vbs [/S system [/U username [/P password]]] [/FI filter]
               [/FO format] [/R range] [/NH] [/V] [/L logname | *]

Description:
    The EVENTQUERY.vbs script enables an administrator to list
    the events and event properties from one or more event logs.

Parameter List:
    /S     system              Specifies the remote system to connect to.
    /U     [domain\]user   Specifies the user context under which the command should execute.
    /P     password          Specifies the password for the given  user context.
    /V                           Specifies that the detailed information should be displayed in the output.
    /FI    filter                 Specifies the types of events to filter in or out of the query.
    /FO    format             Specifies the format in which the output is to be displayed.
                                   Valid formats are "TABLE", "LIST", "CSV".
    /R     range           Specifies the range of events to list. Valid Values are:
                               'N' - Lists 'N' most recent events.
                               '-N' - Lists 'N' oldest events.
                               'N1-N2' - Lists the events N1 to N2.
    /NH                    Specifies that the "Column Header" should not be displayed in the output.
                              Valid only for "TABLE" and "CSV" formats.
    /L     logname         Specifies the log(s) to query.
    /?                     Displays this help/usage.

    Valid Filters  Operators allowed   Valid Values
    -------------  ------------------  ------------
    DATETIME       eq,ne,ge,le,gt,lt   mm/dd/yy(yyyy),hh:mm:ssAM(/PM)
    TYPE           eq,ne               ERROR, INFORMATION, WARNING,  SUCCESSAUDIT, FAILUREAUDIT
    ID             eq,ne,ge,le,gt,lt   non-negative integer
    USER           eq,ne               string
    COMPUTER       eq,ne               string
    SOURCE         eq,ne               string
    CATEGORY       eq,ne               string

NOTE: Filter "DATETIME" can be specified as "FromDate-ToDate" Only "eq" operator can be used for this format.

Examples:
    EVENTQUERY.vbs
    EVENTQUERY.vbs /L system
    EVENTQUERY.vbs /S system /U user /P password /V /L *
    EVENTQUERY.vbs /R 10 /L Application /NH
    EVENTQUERY.vbs /R -10 /FO LIST /L Security
    EVENTQUERY.vbs /R 5-10 /L "DNS Server"
    EVENTQUERY.vbs /FI "Type eq Error" /L Application
    EVENTQUERY.vbs /L Application
            /FI "Datetime eq 06/25/00,03:15:00AM-06/25/00,03:15:00PM"
    EVENTQUERY.vbs /FI "Datetime gt 08/03/00,06:20:00PM"
            /FI "Id gt 700" /FI "Type eq warning" /L System
    EVENTQUERY.vbs /FI "Type eq error OR Id gt 1000 "

 

3. 조회

F:\script\vbs>cscript //nologo eventquery.vbs /L security | more
------------------------------------------------------------------------------
Listing the events in 'security' log of host 'CHOHB'
------------------------------------------------------------------------------
 Type          Event  Date Time                Source            ComputerName
 ------------- ------ ------------------------ ----------------- --------------
 감사 성공     4672   2020-03-03 오전 2:03:57  Microsoft-Windows chohb
 감사 성공     4624   2020-03-03 오전 2:03:57  Microsoft-Windows chohb
 감사 성공     4672   2020-03-03 오전 1:57:02  Microsoft-Windows chohb

......

 

리스트 형태 조회

F:\script\vbs>cscript //nologo eventquery.vbs /L Security /FO list
------------------------------------------------------------------------------
Listing the events in 'security' log of host 'CHOHB'
------------------------------------------------------------------------------
Type:         감사 성공
Event:        4672
Date Time:    2020-03-03 오전 2:03:57
Source:       Microsoft-Windows-Security-Auditing
ComputerName: chohb

Type:         감사 성공
Event:        4624
Date Time:    2020-03-03 오전 2:03:57
Source:       Microsoft-Windows-Security-Auditing
ComputerName: chohb

......

 

특정 이벤트ID 조회
F:\script\vbs>cscript //nologo eventquery.vbs /L Security /FO list /Fi "id eq 4624"

 

이벤트 상세 내역 조회 : /V
F:\script\vbs>cscript eventquery.vbs /L Security /Fi "id eq 4624" /FO list /V

 

General VBS

On Error Resume Next 

Const wbemFlagReturnImmediately = &h10 
Const wbemFlagForwardOnly = &h20 

Set wshNetwork = WScript.CreateObject("WScript.Network") 
strComputer = wshNetwork.ComputerName 

'strQuery = "SELECT * FROM Win32_NTLogEvent where logfile='Security' and EventCode='489'" 
strQuery = "SELECT * FROM Win32_NTLogEvent where logfile='Security'" 

WScript.StdOut.WriteLine "" 
WScript.StdOut.WriteLine "=====================================" 
WScript.StdOut.WriteLine "COMPUTER : " & strComputer 
WScript.StdOut.WriteLine "CLASS    : ROOT\CIMV2:Win32_NTLogEvent" 
WScript.StdOut.WriteLine "QUERY    : " & strQuery 
WScript.StdOut.WriteLine "=====================================" 
WScript.StdOut.WriteLine "" 

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\ROOT\CIMV2") 
Set colItems = objWMIService.ExecQuery(strQuery, "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly) 

For Each objItem in colItems 
    WScript.StdOut.WriteLine "Category: " & objItem.Category 
    WScript.StdOut.WriteLine "CategoryString: " & objItem.CategoryString 
    WScript.StdOut.WriteLine "ComputerName: " & objItem.ComputerName 
    strData = Join(objItem.Data, ",") 
    WScript.StdOut.WriteLine "Data: " &  strData 
    WScript.StdOut.WriteLine "EventCode: " & objItem.EventCode 
    WScript.StdOut.WriteLine "EventIdentifier: " & objItem.EventIdentifier 
    WScript.StdOut.WriteLine "EventType: " & objItem.EventType 
    strInsertionStrings = Join(objItem.InsertionStrings, ",") 
    WScript.StdOut.WriteLine "InsertionStrings: " &  strInsertionStrings 
    WScript.StdOut.WriteLine "Logfile: " & objItem.Logfile 
    WScript.StdOut.WriteLine "Message: " & objItem.Message 
    WScript.StdOut.WriteLine "RecordNumber: " & objItem.RecordNumber 
    WScript.StdOut.WriteLine "SourceName: " & objItem.SourceName 
    WScript.StdOut.WriteLine "TimeGenerated: " & objItem.TimeGenerated 
    WScript.StdOut.WriteLine "TimeWritten: " & objItem.TimeWritten 
    WScript.StdOut.WriteLine "Type: " & objItem.Type 
    WScript.StdOut.WriteLine "User: " & objItem.User 
    WScript.StdOut.WriteLine "" 
Next 

eventquery.zip
0.02MB

반응형

반응형

wevtutil은 Window OS에서 제공하는 CLI(Command Line Interface) 이벤트 로그 관리 도구이다.

 

1. 명령어 개요

 

명령과 옵션

옵션

설명

/f:<형식 >

출력 XML 또는 텍스트 형식으로이 되도록 지정 합니다경우 <형식 > XML 출력은 XML 형식으로 표시 됩니다경우 <형식 >은 텍스트 출력 XML 태그 없이 표시 됩니다기본값은 Text입니다.

/e:<사용 >

로그를 사용 하지 않도록 설정 하거나 사용 합니다. <설정 > true 또는 false 일 수 있습니다.

/i:<격리 >

로그 격리 모드를 설정합니다. <격리 > 시스템, 응용 프로그램 또는 사용자 지정 될 수 있습니다격리 모드는 로그의 로그는 같은 격리 클래스의 다른 로그 세션을 공유 하는지 여부를 결정 합니다대상 로그 공유 시스템 격리를 지정 하는 경우 시스템 로그를 사용 하 여 권한 쓰기입니다대상 로그 공유 응용 프로그램 격리를 지정 하면 응용 프로그램 로그를 사용 하 여 권한 쓰기입니다사용 하 여 보안 설명자를 제공 해야 사용자 지정 격리를 지정 하는 경우는 /ca 옵션입니다.

/lfn:<Logpath>

로그 파일 이름을 정의합니다. <Logpath > 이벤트 로그 서비스에서이 로그에 대 한 이벤트를 저장 하는 위치 파일에 전체 경로입니다.

/rt:<보존 >

로그 보존 모드를 설정합니다. <보존 > true 또는 false 일 수 있습니다로그 보존 모드 로그 최대 크기에 도달할 때 이벤트 로그 서비스의 동작을 결정 합니다이벤트 로그에는 최대 크기에 도달 하는 경우 로그 보존 모드가 true 기존 이벤트를 보존할 하 고 들어오는 이벤트는 삭제 됩니다로그 보존 모드 false 이면 들어오는 이벤트 로그에서 가장 오래 된 이벤트를 덮어씁니다.

/ab:<자동 >

로그 자동 백업 정책을 지정합니다. <자동 > true 또는 false 일 수 있습니다.이 값이 true 이면 로그는 백업할 자동으로 최대 크기에 도달 하면 합니다.이 값이 true 이면 보존 (지정 된 고 /rt 옵션) 설정 해야 true로 합니다.

/ms:<MaxSize>

로그의 최대 크기를 바이트 단위로 설정 합니다최소 로그 크기는 1048576 바이트 (1024KB) 및 로그 파일은 항상 64KB의 배수로 입력 되므로 반올림 됩니다 적절 하 게 합니다.

/l:<수준 >

로그 수준 필터를 정의합니다. <수준 > 유효한 수준 값이 될 수 있습니다이 옵션은 전용된 세션을 사용 하 여 로그에 적용할 수만 있습니다설정 하 여 수준 필터를 제거할 수 0입니다.

/k:<Keywords>

로그의 키워드 필터를 지정합니다. <키워드 > 모든 유효한 64 비트 키워드 마스크 될 수 있습니다이 옵션은 전용된 세션을 사용 하 여 로그에 적용할 수만 있습니다.

/ca:<채널 >

이벤트 로그에 대 한 액세스 권한을 설정합니다. <채널 > 보안 설명자 정의 언어 (SDDL)를 사용 하는 보안 설명자가 있습니다. SDDL 형식에 대 한 자세한 내용은 Microsoft 개발자 네트워크 (MSDN) 웹 사이트를 참조 하세요. (https://msdn.microsoft.com).

/c:<Config>

구성 파일의 경로를 지정합니다이 옵션에 정의 된 구성 파일에서 읽을 로그 속성 하면 <구성 >. 하는 경우이 옵션을 사용 하면를 지정 하지는 매개 변수입니다로그 이름은 구성 파일에서 읽힙니다.

/ge:<메타 데이터 >

이 게시자가 발생할 수 있는 이벤트에 대 한 메타 데이터 정보를 가져옵니다. <메타 데이터 > true 또는 false 일 수 있습니다.

/gm:<Message>

숫자 메시지 id입니다. 대신 실제 메시지를 표시합니다. <메시지 > true 또는 false 일 수 있습니다.

/lf:<Logfile>

로그 파일 또는 로그에서 이벤트를 읽어들여야 함을 지정 합니다. <로그 파일 > true 또는 false 일 수 있습니다. True 이면 명령에 매개 변수는 로그 파일의 경로입니다.

/sq:<Structquery>

이벤트는 구조화 된 쿼리로 변수를 지정 합니다. <Structquery > true 또는 false 일 수 있습니다. True 이면 경로 구조적된 쿼리를 포함 하는 파일입니다.

/q:<Query>

읽거나 내보낸 있는 이벤트를 필터링 하려면 XPath 쿼리를 정의 합니다이 옵션을 지정 하지 않으면 모든 이벤트가 반환 되거나 내보낸 됩니다이 옵션 사용할 수 없는 경우 /sq 그렇습니다.

/bm:<책갈피 >

이전 쿼리에서 책갈피가 있는 파일의 경로를 지정 합니다.

/sbm:<Savebm >

이 쿼리는 책갈피를 저장 하는 데 사용 되는 파일의 경로를 지정 합니다파일 이름 확장명은.xml 이어야 합니다.

/rd:<방향 >

이벤트를 읽고 방향을 지정 합니다. <방향 > true 또는 false 일 수 있습니다.True 인 경우, 가장 최근의 이벤트 먼저 반환 됩니다.

/l:<로캘 >

특정 로캘의 이벤트 텍스트를 인쇄 하는 데 사용 되는 로캘 문자열을 정의 합니다이벤트 형식을 사용 하 여 텍스트를 인쇄할 때만 사용할 수는 /f 옵션입니다.

/c:<Count>

읽을 수 있는 이벤트의 최대 수를 설정 합니다.

/e:<요소 >

XML에서 이벤트를 표시할 때 루트 요소가 포함 됩니다. <요소 > 루트 요소 내에서 원하는 된 문자열입니다예를 들어 /e:root 인해 XML 루트 요소 쌍이 포함 된 <루트 >합니다.

/ow:<덮어쓰기 >

내보내기 파일을 덮어쓰도록 지정 합니다. <덮어쓰기 > true 또는 false 일 수 있습니다. True 및 내보내기 파일에 지정 된 경우 이미 확인 하지 않고 덮어씁니다.

/bu:<Backup>

지운된 이벤트를 저장할 파일의 경로를 지정 합니다백업 파일의 이름을.evtx 확장명을 포함 합니다.

r:<원격 >

원격 컴퓨터에서 명령을 실행 합니다. <원격 > 원격 컴퓨터의 이름입니다.im  um 매개 변수는 원격 작업을 지원 하지 않습니다.

/u:<사용자 이름 >

원격 컴퓨터에 로그온 하는 다른 사용자를 지정 합니다. <사용자 이름 > 양식 도메인 \ 사용자 또는 사용자의 사용자 이름이 있습니다이 옵션은만 적용 될 때의 /r 옵션을 지정 합니다.

/p:<암호 >

사용자에 대 한 암호를 지정합니다경우는 /u 옵션을 사용 하 고이 옵션을 지정 하지 또는 <암호 >", 사용자 암호를 입력 하 라는 메시지가 표시 됩니다. 이 옵션은만 적용 될 때 합니다 * */u * 옵션을 지정 합니다.

>batchsettings-&lt<Auth >

원격 컴퓨터에 연결 하기 위한 인증 유형을 정의 합니다. <Auth > 기본, Negotiate, Kerberos 또는 NTLM을 수 있습니다기본값은 협상 합니다.

/uni:<Unicode>

유니코드로 출력을 표시합니다. <유니코드 > true 또는 false 일 수 있습니다경우 유니코드로 출력은 그렇습니다.

2. 예제

2.1 조회 가능한 이벤트 로그 목록

C:\WINDOWS\system32>wevtutil el
AMSI/Debug
AMSI/Operational
AirSpaceChannel
Analytic
Application
CxAudioSvcLog
CxMonSvcLog
DebugChannel
DirectShowFilterGraph
DirectShowPluginControl
Els_Hyphenation/Analytic
EndpointMapper
FirstUXPerf-Analytic
ForwardedEvents
General Logging
HardwareEvents

......

 

2.2 이벤트 로그 파일 메타데이터 조회

C:\WINDOWS\system32>wevtutil gli Microsoft-Windows-TerminalServices-ServerUSBDevices/Operational
creationTime: 2020-03-03T01:09:31.423Z
lastAccessTime: 2020-03-03T01:09:31.424Z
lastWriteTime: 2020-03-03T01:09:31.424Z
fileSize: 69632
attributes: 2080
numberOfLogRecords: 0
oldestRecordNumber: 0

 

2.3 이벤트 로그 조회

wevtutil 명령을 통해 이벤트 로그를 조회하면 아래와 같이 결과가 기본적으로 xml type이다.

C:\WINDOWS\system32>wevtutil qe security

일반 텍스트 형태로 조회

C:\WINDOWS\system32>wevtutil qe security /f:text

최근 N개의 이벤트 조회

C:\WINDOWS\system32>wevtutil qe security /rd:true /c:3 /f:text

 

특정 이벤트ID 조회

wevtutil qe /rd System /q:"*[System[Provider[@Name='Microsoft-Windows-Perflib'] and (EventID=1023)]]" /uni:false /f:text

 

특정 날짜 이벤트 조회

wevtutil qe Security "/q:*[System[TimeCreated[@SystemTime>='2019-07-01T00:00:00' and @SystemTime<='2019-07-10T00:00:00']]]" /f:text /rd:true /c:3

 

특정 이벤트ID의 특정 날짜 이벤트 조회

wevtutil qe Security "/q:*[System[ EventID = 4624 and TimeCreated[@SystemTime>='2018-07-01T00:00:00' and @SystemTime<='2019-07-10T00:00:00']]]" /f:text /rd:true /c:1

 

2.4 이벤트 로그 내보내기

evtx 파일로 내보내기 

wevtutil epl System f:\temp\system_event.evtx

 

텍스트 파일로 내보내기

wevtutil qe System /f:text > f:\temp\system_event.txt

 

반응형