前言
当我们拿下一台windows主机权限的时候之后,我们第一步需要全面了解主机的信息,而文件执行记录也是一个非常重要的点,下面总结常见文件执行记录的位置、以及单条清除方法
从日志中获取
Audit Process Creation (592/4688)
在启用了”审核进程创建”时记录4688的情况下(系统默认是关闭的,需要手动开启),Windows 7
、Windows Server 2008
及以上版本,会在每次创建一个进程时会把事件以Event ID
为4688
记录到windows安全日志中
注:Windows XP/2003
的Event ID
为592
开启:Edit Default Domain Policy -> Policy location: Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Advanced Audit Configuration -> Detailed Tracking
策略名称: Audit Process Creation
查看ID为4688
的安全事件:
命令行获取:1
wevtutil qe security /rd:true /f:text /q:"Event[System[(EventID=4688)]]"
清除方法:可以参考三好学生师傅这篇文章
Program Inventory Event Log
Program Inventory
win7及以上存在,主要用于记录软件活动摘要、安装的程序、安装的Internet Explorer加载项、更新的应用程序、已删除的应用程序
文件夹中的位置:C:\Windows\System32\winevt\Logs\Microsoft-Windows-Application-Experience%4Program-Inventory.evtx
,如图
在Windows事件查看器的位置:Applications and Services Logs\Microsoft\Application-Experience\Program-Inventory
,如图
日志获取:1
wevtutil qe /f:text Microsoft-Windows-Application-Experience/Program-Inventory
Envent IDs:
- 800 (
summary of software activities
) - 900 & 901 (
new Internet Explorer add-on
) - 903 & 904 (
new application installation
) - 905 (
updated application
) - 907 & 908 (
removed application
)
清除方法:可以参考三好学生师傅这篇文章
Program-Telemetry Event Log
win7及以上存在,在应用程序启动时为应用程序处理应用程序兼容性缓存请求
文件夹中的位置:C:\Windows\System32\winevt\Logs\Microsoft-Windows-Application-Experience%4Program-Telemetry.evtx
在Windows事件查看器的位置:Applications and Services Logs\Microsoft\Application-Experience\Program-Telemetry
,如图
日志获取:1
wevtutil qe /f:text Microsoft-Windows-Application-Experience/Program-Telemetry
Event IDs:500/505
清除方法:可以参考三好学生师傅这篇文章
从注册表中获取
ShimCache (AppCompatCache)
用来识别应用程序兼容性问题。缓存数据跟踪文件路径、大小、上次修改时间和是否被执行(取决于操作系统),Windows XP的ShimCache被限制为96条记录,此后所有版本最多保留1024条记录。
注:虽然记录在ShimCache
中的存在但是并不能100%证明文件是被执行过的,但它确实显示了与文件交互的窗口
注册表位置:
注:数据加密,重启之后更新1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache
解析工具(C#):1
https://github.com/EricZimmerman/AppCompatCacheParser/
例子
以csv格式保存的指定路径1
AppCompatCacheParser.exe --csv .
按上次修改时间排序1
AppCompatCacheParser.exe --csv . -t
如果我们想离线分析,我们可以用这个项目:https://github.com/mandiant/ShimCacheParser
导出注册表1
reg export "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache" ShimCache.reg
解析1
python ShimCacheParser.py -o test.csv -r ShimCache.reg -t
结果
清除方法:
导出
ShimCache
1
reg export "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache" ShimCache.reg
重启之后(只能重启之后
ShimCache
才会更新,注销不行),导入注册表将重启之后的覆盖掉1
reg import ShimCache.reg
UserAssist
跟踪在资源管理器中打开的可执行文件和完整路径,其中UserAssist保存了windows执行的程序的运行次数和上次执行日期和时间。
注册表位置:
注:记录实时更新,数据rot-13加密
1 | 当前用户: |
解析工具:https://www.nirsoft.net/utils/userassist_view.html
图形化界面
命令行使用1
2
3UserAssistView.exe /stext out.txt //保存文本格式
UserAssistView.exe /shtml out.txt //保存html格式
UserAssistView.exe /sxml out.txt //保存xml格式
清除方法:删除对应的键值即可
MUICache
每次开始使用新的应用程序时,Windows都会自动从exe文件的版本资源中提取应用程序名,并将其存储在名为
MuiCache
的注册表项中,供以后使用。
注:无加密,记录实时更新
注册表位置:
windows server 2003及以前的1
2
3
4
5当前用户:
HKEY_CURRENT_USER/Software/Microsoft/Windows/ShellNoRoam/MUICache
所有用户:
HKEY_USERS\<sid>\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache
windows server 2003及以后的1
2
3
4
5当前用户:
HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache
所有用户:
HKEY_USERS\<sid>\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache
图形化界面:
解析工具:http://www.nirsoft.net/utils/muicache_view.html
命令行使用1
2
3MUICache.exe /stext out.txt //保存文本格式
MUICache.exe /shtml out.txt //保存html格式
MUICache.exe /sxml out.txt //保存xml格式
或者命令行直接查询注册表也可以1
reg query "HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache"
清除方法:删除对应的键值即可
RunMRU
保存Win+R启动程序的历史记录
注册表位置:
注:数据无加密,记录实时更新1
2
3
4
5当前用户:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
所有用户:
HKEY_USERS\<sid>\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
命令行查询注册表1
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU"
清除方法:删除注册表对应的键值即可
AppCompatFlags Registry Keys
保存所有以兼容模式启动的程序(包括以管理员身份运行的程序):
注:无加密,数据实时更新1
HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
查询方式直接查询注册表即可:1
reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"
保存所有执行过的程序:
解析工具:https://nirsoft.net/utils/executed_programs_list.html
这个工具会解析如下路径(包含了上面我们说过的MUICache
,也包含了我们后面说的Prefetch
)
注:1 ~ 4无加密,5加密,1 ~ 5数据实时更新1
2
3
4
51. Registry Key: HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache
2. Registry Key: HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache
3. Registry Key: HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Persisted
4. Registry Key: HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store
5. Windows Prefetch folder (C:\Windows\Prefetch)
图形化界面:
命令行解析:1
2
3ExecutedProgramsList.exe /stext out.txt //保存文本格式
ExecutedProgramsList.exe /shtml out.txt //保存html格式
ExecutedProgramsList.exe /sxml out.txt //保存xml格式
清除方法:删除对应的注册表键值
Background Activity Moderator (BAM)
BAM是一个控制后台应用程序活动的Windows服务,该服务存在于windows10 version 1709及以后版本中
注册表路径为:
注:记录实时更新,数据无加密1
HKLM\SYSTEM\CurrentControlSet\Services\bam\UserSettings\{SID}
记录包含了程序路径和上次执行日期和时间,其中执行日期键值类型为FILETIME(64bit little Endian)
执行时间提取:以winrar
为例子
把filetime
转化为datetime
1
2
3
4
5
6
7
8
9
10
11from __future__ import division
import struct
import sys
from binascii import unhexlify
from datetime import datetime, timedelta
nt_timestamp = struct.unpack("<Q", unhexlify("dc14dd91be7cd501"))[0]
epoch = datetime(1601, 1, 1, 0, 0, 0)
nt_datetime = epoch + timedelta(microseconds=nt_timestamp / 10)
print(nt_datetime.strftime("%Y/%m/%d %H:%M:%S"))
output:2019/10/07 03:23:21
清除方法:删除对应的注册表键值
RecentApps
win10之后特有,RecentApps包含了系统上已访问的多个应用程序和文件的引用。除了应用程序和文件名之外,RecentApps还提供了应用程序的路径,启动计数,文件的完整路径以及上次访问文件的时间。
注册表位置为:
注:记录实时更新,数据无加密1
HKCU\Software\Microsoft\Windows\Current Version\Search\RecentApps
RecentApps
键的下面是一系列由GUID命名的子项,在RecentApps下的每个GUID
子项都对应一个应用程序。一些GUID子项也具有其他子项,它们与应用程序访问的特定文件相对应。
注:LastAccessedTime
是采用64位的FILETIME
格式,转化为datetime
也比较简单,用系统自带的w32tm.exe
就行1
2
3w32tm.exe /ntte 131781889970180000
output: 152525 08:03:17.0180000 - 2018/8/8 16:03:17
或者用powershell1
2
3powershell -c "[datetime]::FromFileTime(0x1d42eee43808fa0)"
output: 2018年8月8日 16:03:17
清除方法:删除对应的注册表键值
从文件中获取
Prefetch
Prefetch是预读取文件夹,用来存放系统已访问过的文件的预读信息,扩展名为PF。之所以自动创建Prefetch文件夹,是为了加快系统启动的进程。
查看该功能是否开启:1
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters" /v EnablePrefetcher
键值代表的含义1
2
3
40 = Disabled
1 = Application launch prefetching enabled
2 = Boot prefetching enabled
3 = Applaunch and Boot enabled (Optimal and Default)
位置为:
注:实时更新,数据加密1
C:\Windows\Prefetch
解析工具:https://github.com/EricZimmerman/PECmd
参数:1
2
3
4
5PECmd.exe -f "C:\Temp\CALC.EXE-3FBEF7FD.pf"
PECmd.exe -f "C:\Temp\CALC.EXE-3FBEF7FD.pf" --json "D:\jsonOutput" --jsonpretty
PECmd.exe -d "C:\Temp" -k "system32, fonts"
PECmd.exe -d "C:\Temp" --csv "c:\temp" --json c:\temp\json
PECmd.exe -d "C:\Windows\Prefetch"
PS:按csv
导出的有两个文件:"time_prefix".PECmd_Output.csv
和"time_prefix".PECmd_Output_Timeline.csv
,前者保存了详情信息,后者只保存了运行时间和可执行程序的名称
"time_prefix".PECmd_Output_Timeline.csv
的
"time_prefix".PECmd_Output.csv
清除方法:根据PECmd
导出的结果删除对应的pf文件即可
JumpLists
记录用户最近使用的文档和应用程序,方便用户快速跳转到指定文件
位置:1
%APPDATA%\Microsoft\Windows\Recent
查询:直接列出文件(夹)即可1
dir %APPDATA%\Microsoft\Windows\Recent
清除方法:清除%APPDATA%\Microsoft\Windows\Recent
路径下的文件即可
Amcache / RecentFileCache.bcf
Windows中的使用这两个文件来跟踪具有不同可执行文件的应用程序兼容性问题,它可用于确定可执行文件首次运行的时间和最后修改时间。
win7
、windows server 2008R2
等系统保存位置:
只包含了程序的创建时间、上次修改时间、上次访问时间和文件名
1 | C:\Windows\AppCompat\Programs\RecentFileCache.bcf |
win8
、win10
、windows server 2012
等系统保存位置:
包含了文件大小、版本、sha1、二进制文件类型等等信息
注:Win7系统安装KB2952664
后,也会支持Amcache.hve1
C:\Windows\AppCompat\Programs\Amcache.hve
RecentFileCache.bcf
解析工具
c#
版:https://github.com/EricZimmerman/RecentFileCacheParser
用法实例:1
2RecentFileCacheParser.exe -f "C:\Windows\AppCompat\Programs\RecentFileCache.bcf" --csv "c:\temp"
RecentFileCacheParser.exe -f "C:\Windows\AppCompat\Programs\RecentFileCache.bcf" --json "D:\jsonOutput" --jsonpretty
结果
python
版:https://github.com/prolsen/recentfilecache-parser
用法1
rfcparse.py -f C:\Windows\AppCompat\Programs\RecentFileCache.bcf
Amcache.hve
解析工具
c#
版: https://github.com/EricZimmerman/AmcacheParser
python
版: https://github.com/williballenthin/python-registry/blob/master/samples/amcache.py
powershell
版: https://github.com/yoda66/GetAmCache/blob/master/Get-Amcache.ps1
用法示例:1
2
3AmcacheParser.exe -f "C:\Windows\AppCompat\Programs\Amcache.hve" --csv C:\temp
AmcacheParser.exe -f "C:\Windows\AppCompat\Programs\Amcache.hve" -i on --csv C:\temp
AmcacheParser.exe -f "C:\Windows\AppCompat\Programs\Amcache.hve" -w "c:\temp\whitelist.txt" --csv C:\temp
如果我们直接执行的话,会提示:”正由另一进程使用,因此该进程无法访问此文件”
解决方法是把Amcache.hve
复制到其它目录,我们可以使用shadow copy
把Amcache.hve
复制到当前目录,然后再执行就可以了
结果
清除方法可以参考三好学生师傅的这篇文章:链接
SRUM (System Resource Usage Monitor)
Technology that monitors desktop application programs,services, windows apps and network connections
适用于win8
及以上系统,数据加密,实时记录
可以使用python解析:https://github.com/MarkBaggett/srum-dump
用法实例:1
2
3srum_dump2.exe --SRUM_INFILE c:\Windows\system32\sru\SRUDB.dat
python srum_dump2.py --SRUM_INFILE c:\Windows\system32\sru\SRUDB.dat
清除方法:待补充
win10时间轴
Windows Timeline
是Windows10在1803版中引入的一个新特性
用户可以使用Win
+ Tab
可以对其进行访问,时间轴就像浏览器的历史记录一样,它记录了包含您访问过的网站,还包含您编辑的文档,您玩过的游戏,您查看或创建的图像等,其保存的记录在ActivitiesCache.db
之中
参考文章:
https://kacos2000.github.io/WindowsTimeline/WindowsTimeline.pdf
https://cclgroupltd.com/2018/05/03/windows-10-timeline-forensic-artefacts/
ActivitiesCache.db
位置在
注:无加密,数据实时更新1
C:\Users\<username>\AppData\Local\ConnectedDevicesPlatform\<random_char>\ActivitiesCache.db
本质是sqlite3
数据库文件,它包含的表如下
其中最重要的一个表是Activity
,Activity
表包含的字段有AppId
(包含应用程序的路径),开始时间,结束时间等等
清除方法:删掉sqlite3
数据库文件中指定记录即可
other
计划任务
计划任务往往是一个值得关注的点也是一个容易忽略的点。站在攻击的角度来讲,计划任务可以持久化后门、执行指定恶意程序等等;站在防御、取证的角度来讲,计划任务执行之后,系统是不会自动删除的(重启或者注销也是不会删除的),这就可能导致入侵者会忽略把计划任务清除,这就有利于我们的取证
列出所有任务1
2
3
4
5cmd:
schtasks.exe
powershell:
Get-ScheduledTask
根据文件夹列出所有任务
powershell:1
Get-ScheduledTask -TaskPath "\"
根据任务名查看任务的详情信息1
schtasks.exe /query /v /tn test /fo list
清除方法:删除指定的计划任务即可:schtasks.exe /delete /tn Task_name /F
总结
站在攻击者的角度来说,获取系统中的文件执行记录有利于我们信息收集、清理系统中的文件执行记录能进一步防止暴露自己
站在防御、取证的角度来说,定期清理系统中的文件执行记录能防止一些敏感信息泄露,但是这些信息能够被伪造和删除的所以不能盲目相信
Reference
https://3gstudent.github.io/3gstudent.github.io/
https://blog.1234n6.com/2018/10/available-artifacts-evidence-of.html?m=1