使用PowerShell进行用户密码钓鱼的技术解析
tokyoneon //
伪造凭证提示是一种有效的权限提升和横向移动技术。在Windows环境中,用户经常会遇到看似随机的密码提示,例如Outlook、VPN和其他各种认证协议。攻击者会滥用Windows和PowerShell内置功能来调用凭证弹窗以获取用户密码。
根据MITRE ATT&CK框架的定义:
“当需要额外权限的程序执行时,操作系统通常会提示用户输入正确的凭证以授权任务的提升权限。攻击者可能会模仿常见的操作系统组件,通过PowerShell等语言显示看似合法的凭证提示。”
什么是CredPhish?
CredPhish是一个PowerShell脚本,旨在调用凭证提示并窃取密码。它依赖于CredentialPicker API收集用户密码,使用PowerShell的Resolve-DnsName进行DNS外传数据,并利用Windows Defender的ConfigSecurityPolicy.exe执行任意GET请求。
下图展示了CredPhish的实际操作。请注意,在Windows安全提示中提交凭证后,凭证会立即发送到攻击者的DNS服务器。
默认情况下,CredPhish会使用PowerShell内置的DNS解析器Resolve-DnsName外传凭证。它会将凭证中的每个字符转换为十六进制值,将转换后的值分成预定义的块,并将这些块放入热门网站的子域名中。以下截图显示了十六进制形式的外传凭证示例。注意“tokyoneon”的十六进制值(746f6b796f6e656f6e)出现在google.com和office.com的子域名中。
在解析DNS查询之前,DNS服务器会剥离十六进制子域名以避免生成大量错误响应。在下面的Wireshark截图中,请注意“Answers”字段不再包含子域名,并成功解析为Google的一个IP地址。
CredPhish.ps1配置
CredPhish.ps1设计为一个独立的脚本,不需要Import-Module(这是一种常见的攻击指标)。可配置选项以变量的形式位于PS1脚本的顶部,以避免冗长的命令行参数。
第一行是最重要的,它定义了外传数据的接收地址(即攻击者的Kali服务器):
|
|
接下来的几个变量定义了提示框对目标用户的显示方式。$promptCaption定义了请求凭证的“应用程序”(例如“Microsoft Office”),而**$promptMessage**通常指定与请求关联的账户。
|
|
$maxTries变量定义了提示框在目标提交凭证之前显示的次数。默认值为1以避免引起怀疑。$delayPrompts变量定义了每次提示之间的延迟时间(如果**$maxTries大于1)。$validateCredentials默认禁用,它会尝试通过在高权限上下文中使用Start-Process来本地验证提交的凭证。如果启用且凭证验证通过,则忽略$maxTries**,数据会立即发送到攻击者的服务器。
数据外传方法
如前所述,DNS外传是默认的密码传输方法。$exfilDomains列表包含用于DNS查询的各种域名,并随机选择。$subdomainLength变量确定每个子域名的期望长度。
|
|
要拦截通过DNS外传功能发送的凭证,请在Kali中执行dns_server.py脚本。按Ctrl + c终止DNS服务器,它将重建拦截的明文凭证。
CredPhish内置的另一种外传方法是HTTP请求。它利用Windows Defender中包含的二进制文件“ConfigSecurityPolicy.exe”将凭证发送到攻击者的服务器。将**$enableHttpExfil变量设置为$true**以启用它。
|
|
要拦截通过ConfigSecurityPolicy.exe发送的凭证,请在Kali中启动一个简单的HTTP服务器以在日志中捕获它们。
在网络中,外传的凭证会显示如下:
|
|
由于凭证在传输前进行了URL编码,可以使用Burp的Decoder模块或Python的urllib库通过命令行进行URL解码。
|
|
CredPhish.ps1执行
要快速测试CredPhish,请将credphish.ps1移动到目标Windows 10机器并使用PowerShell执行它。
一种持久化执行方法可能涉及任务计划程序,这是Windows的一个组件,允许在预定义的时间间隔调度脚本执行。以下schtasks示例将每2分钟执行一次credphish.ps1。
|
|
缓解与检测
CredPhish源自Invoke-LoginPrompt、CredsLeaker和Stitch等项目,并不是密码钓鱼的终极解决方案。由于此类攻击通常非常针对用户,因此仍有改进空间。更激进的方法可能涉及使用Cobalt Strike伪造整个Windows 10锁屏并通过这种方式捕获凭证。
这类攻击技术难以通过预防性控制措施缓解,因为它们滥用了系统功能。MITRE ATT&CK框架建议:
- 通过用户培训提高对潜在恶意事件和对话框(例如Office文档提示输入凭证)的意识和警惕性。
- 监控进程执行,检测异常程序和恶意实例的命令和脚本解释器,这些程序可能会提示用户输入凭证。
- 检查并审查输入提示的非法性指标,例如非传统的横幅、文本、时间和/或来源。