1. 概述:无处遁形的"隐形"操作
在现代网络对抗中,PowerShell 是一把名副其实的双刃剑。它不仅是系统管理员的得力助手,更是高级威胁参与者(APT)和勒索软件团伙在"离地攻击"(Living off the Land, LotL)时的首选武器。
很多攻击者以为,只要不留下恶意可执行文件,或者在内存中执行脚本,就能做到"踏雪无痕"。但实际上,从 Windows 10 和 PowerShell 5.0 开始,微软引入了 PSReadLine 模块,它会在默认情况下悄悄记录用户在控制台中输入的每一条命令------这为安全防守方和应急响应人员(IR)提供了一个极具价值的"黑匣子"。
2. 核心线索:PowerShell 的历史记录文件
如果你正在进行应急响应排查,或者怀疑某台机器被植入了后门,你必须检查以下路径中的文本文件:
默认文件路径:
C:\Users<USER>\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
(注意:将 <USER> 替换为你正在调查的实际 Windows 用户名。)
3. 文件特性与作用
- 行为类似 Bash History :对于熟悉 Linux 的人来说,这个文件就等同于
~/.bash_history。它以纯文本格式保存了该用户在 PowerShell 交互式控制台中执行过的所有命令。 - 独立于事件日志:即使攻击者清除了 Windows 的安全事件日志(Event Logs),只要他们没有专门处理这个文本文件,他们的命令行操作记录依然会完整保留在这里。
4. 实战应用:防守方能从中发现什么?
通过读取 ConsoleHost_history.txt,SOC 分析师和应急响应人员通常可以挖掘出以下关键指标(IOCs):
- 恶意载荷下载 :例如使用
Invoke-WebRequest(或iwr)、Net.WebClient从外部恶意服务器下载 C2 远控木马或横向移动工具。 - 混淆与编码命令 :发现长串的 Base64 编码数据(通常伴随
-enc或-EncodedCommand参数)。 - 权限提升与凭证窃取:例如运行 Mimikatz 的命令,或者尝试导出 SAM 注册表项的操作。
- 防御规避行为 :发现关闭 Windows Defender (
Set-MpPreference) 或绕过执行策略 (-ExecutionPolicy Bypass) 的命令。
查看记录的快捷命令:
如果你当前拥有这台机器的访问权限,可以直接在 PowerShell 中运行以下命令来快速读取历史记录:
powershell
Get-Content (Get-PSReadLineOption).HistorySavePath