绕过Cylance:第三部分 - Netcat与Nishang ICMP C2通道
David Fletcher //
以下技术方法展示了在特定Cylance防护环境中获取C2通信的方法。测试前未检查集中式基础设施和终端代理的配置。该环境可能存在配置错误,且可能不符合Cylance基础设施部署的最佳实践。然而,根据我们的经验,配置错误并不罕见,而且往往会对环境的整体安全状况造成灾难性后果。这就是为什么我们在接受其声称的保护级别之前要测试部署。此外,这些文章还说明了深度防御的必要性。在每个成功建立C2的实例中,二级或三级控制本可以(也应该)弥补初始控制的失败。分层防御是任何环境中保护的关键要素,组织必须面对这样一个事实:信息安全没有银弹。请在此处查看第一部分(使用SVAgent绕过),在此处查看第二部分(关于使用DNSCat2绕过)。
Netcat
第三种未被Cylance检测到的C2方法是原始netcat。在这种情况下,监听器是一个原始netcat shell向外传输。netcat可执行文件被下载到目标主机并执行,如下所示。
在C2服务器上,netcat被配置为监听此端口以接收入站通信。从终端主机连接后,返回了一个Windows shell。
聪明的攻击者可能会上传netcat的Nmap端口版本,名为Ncat,它支持TLS加密。这将使C2通道更加难以检测。
与之前的C2通道不同,原始netcat C2不符合特定协议。除了之前关于过滤下载和应用程序白名单的建议外,这种通信可以通过协议检查来阻止。如果边界防火墙支持检查协议符合性的应用级代理,此流量将被丢弃。
Nishang ICMP C2通道
最后一种未被Cylance检测到的非传统C2方法是使用ICMP负载进行通信。在这种情况下,使用了Nishang框架中的PowerShell脚本Invoke-PowerShellIcmp.ps1。
调查Cylance的部署配置发现,它被配置为阻止通过本机PowerShell.exe解释器执行任何内容。
然而,PowerShell ISE在此主机上可用。因此,可以将脚本加载到ISE中,并通过单击播放按钮或使用熟悉的import-module语法来暴露其功能。在这种情况下,使用了播放按钮。
PowerShell脚本加载后,如下所示调用。
等待的C2服务器捕获了客户端的回调,授予了对目标计算机的传输shell访问权限。
在这种情况下,组织可以对ICMP做出一般性决策。如果用户不需要ping互联网上的主机,组织可以简单地丢弃来自内部主机的所有出站ICMP消息。
虽然PowerShell ISE对此脚本工作良好,但应注意避免任何包含对本机PowerShell解释器嵌入式调用的脚本。此外,如果引用了本机解释器,多线程脚本可能会表现出相同的问题。
以下PowerShell脚本在通过PowerShell ISE启动时被发现可以工作。
- DomainPasswordSpray.ps1
- Invoke-Kerberoast.ps1
- Invoke-PowerShellICMP.ps1
- PowerView.ps1
- PowerUp.ps1
CylancePROTECT脚本控制模块仅阻止对本机解释器的调用。
对cmd.exe和PowerShell_ise.exe的访问应以与PowerShell.exe相同的方式受到限制。这两种工具都为攻击者在环境中进行横向移动提供了巨大的能力。