Security & Forensic

전체 글 +51
반응형

파일 행위 분석-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

 

반응형

반응형

Window OS에서 제공하는 이벤트 뷰어(eventvwr.msc)를 톻한 윈도우 이벤트 로그 분석

 

1.UI

이벤트 Export 가능 : evtx, xml, txt, csv 저장 가능

 

2. Filter

구성된 필터를 XML형태의 쿼리로 조회 편집이 가능하다.

 

3. 필터를 통한 조회

로드하고자 하는 쿼리 파일은 <QueryList>로 시작하는 XML 파일이어야 한다.

 

<security-event-view.xml>

<QueryList>

  <Query Id="0" Path="Security">

    <Select Path="Security">*[System[(Level=1  or Level=2 or Level=3 or Level=4 or Level=0 or Level=5) and TimeCreated[@SystemTime&gt;='2019-06-01T06:21:55.000Z' and @SystemTime&lt;='2019-07-15T06:21:55.999Z']]]</Select>

  </Query>

</QueryList>

 

필터 로드 및 조회

c:\>eventvwr /v:"c:\DFIR\EventLog\security-event-view.xml"

 

. 사용자 지정 보기에 View_1 메뉴가 추가되면서 결과가 표시된다.

. 이 방법은 시스템에 변화를 발생시키므로 포렌식 분석 관점에서는 좋은 방법은 아니다.

반응형

반응형

1.  윈도우 이벤트 로그란 ?
윈도우 이벤트 로그는 윈도우의 운용과정에서 발생하는 특정 동작(이벤트)을 체계적으로 기록한 바이너리 로깅 시스템이다.
윈도우도 시스템 방화벽, 응용프로그램 관리 등에 관한 로그를 텍스트 형태로 기록하고 있지만이벤트 로그에서는 시스템의 전반적인 동작을 보다 종합적이고 체계적으로 기록하므로 디지털 포렌식 조사 시 중요하게 살펴 보아야 할 대상이다.

, 시스템 운용 로그의 관점에서 볼 때, 이벤트 로그는 사용자의 행위 보다는 시스템의 운용 상태를 알 수 있는 정보가 많다. 따라서 사건 용의자에 관한 부정 조사 보다는 침해사고 대응에 효과적으로 이용되는 것이 현실이기도 하다.

침해사고 조사 시 이벤트 로그를 면밀하게 살펴 본다면, 악성코드가 실행된 원인을 비롯하여 유입 경로(내부 네트워크) 등 다양한 정보를 획득할 수 있을 것이다.

 

2.  주요 이벤트 IDs

아래는 침해사고 조사 시 주로 확인되는 몇가지 이벤트 ID에 관한 예시이다. 실제 조사 시에는 아래 표의 이벤트 ID에만 의존해서는 안되며, 숙지하고 있는 주요 이벤트 ID에 관해 빠르게 확인한 후 사건과 관련된 키워드 검색 및 관련 시간대에 존재하는 이벤트 로그를 정밀하게 조사하는 것이 바람직하다.

이벤트 ID는 OS 종류 및 버전별로 서로 다를 수 있으며 OS 업데이트시에도 추가, 변경, 삭제 등의 변화가 있을 수 있다.

반응형