在本文中,我们将为读者介绍基于打印机跳板技术的新型C2及其检测方法。
引言
在本文中,我们不仅会为读者详细介绍基于打印作业的新型Command & Control(C2)的工作原理,以及基于C3的打印通道的实现方法;同时,我们还探讨了与这种技术相关的OPSEC事项,并概述了相关的检测方法。
隐秘的C2通道是攻击者进行秘密行动的重要支柱,随着蓝队越来越善于探测传统通道,C2通道的隐蔽性也变得愈发重要。此外,攻击方在完成入侵后,C2的选择余地也是相当有限的,因为它们通常都要求在源机器和目标机器之间具有直接的连接,同时,很多C2现在都已经成为了防御软件的重点关注对象。在C3的LDAP通道的最新版本中,F-Secure开始探索如何以这种方式滥用常见IT基础结构的其他元素,于是,Printer C2就应运而生了。
工作原理
无论使用的是本地打印机还是网络打印机,C3都会将新的打印作业以“Paused”状态插入打印队列中,并使用“Document Name”属性作为数据传输机制。在测试过程中发现,大多数打印队列都支持至少1MB长的文档名称,这个长度对于攻击者来说已经足够了。
为了防止中继(Relays)读取不是发给它们的消息,同时,也为了使C3能够将C3作业与合法的打印作业区分开,我们在作业上附加了两个唯一的标识符。其中,第一个标识符是应该接收消息的中继的名称,第二个标识符用于标识C3作业。由于这两者都是用户定义,因为,我们可以根据需要进行定制。一旦消息被读取,它就会从队列中永久删除。
由于C3创建的作业并不是有效作业,即使它们不处于暂停状态,也不会触发物理打印机的相关操作。此外,处于离线状态的打印机还可以用来进一步降低风险。
使用说明
实际上,打印通道的建立和运行相对来说还是比较简单的。不过,需要注意的是,通道双端必须与同一个打印机队列进行通信,并且必须在同一用户或具有修改其他用户作业能力的用户的上下文中执行。
本文假设您已经拿下了使用C3的据点(foothold)。如果还没有的话,请参考F-Secure关于C3的介绍文章,以获得如何部署支持基础设施的相关说明。
发现目标打印机
鉴于打印机在各种规模的组织中无处不在,因此,寻找合适的打印机往往简直就是小事一桩。对于一种粗略且现成的方法,或者如果您已经登陆到一台未加入域的机器上,则可以使用nmap。
nmap -p 9100,515,631 <IP> -oX printers.xml
下面,我们对上述命令中的参数做简单的说明:
- 9100:大多数打印机使用的原始端口,也称为直接IP端口
- 515:LPR/LPD端口,适用于大多数打印机以及较旧的打印服务器
- 631:IPP端口,适用于大多数现代打印机和基于CUPS的打印服务器
当您在域用户的上下文下展开攻击的话,一个更好的解决方案是使用简单的LDAP查询来发现打印服务器和打印机。这里,我们将使用@AJPC500介绍的通过LDAP搜索Beacon Object File(BOF)的方法来查询Active Directory中的打印服务器。
ldapsearch (objectCategory=printQueue) uNCName
或者,您也可以使用PowerShell来查询远程计算机中的打印机。
Get-Printer -ComputerName GLOBEXROOTDC01
除此之外,您还可以使用WMI查询本地打印机。
wmic printer get name
部署Beacon
选择目标打印机后,从C3中的现有Relay中选择AddNegotiationChannel,并填写以下字段:
- Negotiation Identifier:自动随机分配,无需更改。
- Job Identifier:附加到每个作业末尾的唯一标识符,应根据需要进行相应的修改。
- Printer Address:目标打印机的本地名称或远程网络地址,例如\\192.168.1.1\Printer。
- Max Packet Size:目标打印队列支持的文档名称的最大长度。为保险起见,通常设置为1MB,但也可以尝试更大或更小的值,以提高或降低其性能。
- Outbound Jobs Limit:一次允许的打印作业数。默认值为0,即不受限制,但是,从OPSEC的“通过隐秘性获得安全性”的角度来看,取值为1可能更安全些。
然后,选择新创建的Channel图标,并点击New Relay选项。由于所有相关的字段都已经填好,请继续点击Create和Download Relay选项。一旦在目标系统上运行之后,C3就会磋商输入/输出ID,并建立C2通道。
关于通过上面刚创建的通道部署beacon的具体过程,请访问这里的演示视频。
即使存在单个打印作业的限制,通道也能够支持多个beacon,从而为攻击者提供足够的灵活性。
相关的演示视频,请访问这里。
当打印作业的数量不受限制时,性能会得到进一步的提高。应该注意的是,当尝试使用无限制型打印作业传输大型文件(>100MB)时,通道的稳定性会显著下降,这是由C3尝试提交的作业数量太多引起的。解决办法是将作业数量限制在一个更合理的数量范围之内。
相关的演示视频,请访问这里。
检测方法
为了检测使用打印机在内部网络中进行跳板攻击(pivoting),我们可以在许多地方设置检查岗哨。下面,让我们如何在端点、网络以及正在处理排队作业的打印服务器上检测这种攻击方法。
在端点上进行检测
UI行为
当我们在Windows系统上打印文件时,我们会在任务栏中看到相应的打印机图标。在打印机上使用C3时,同样也会出现打印机图标。每个需要将新作业添加到打印队列的“写入”事件都会导致该图标被显示在任务栏中。
当然,这并不是一种专门针对该攻击的“检测”方法,但是作为攻击方,我们必须意识到眼尖的用户有可能会发现这个问题。
当我们的目标打印机处于脱机状态(或墨水,纸张等确实不足)时,这将变得更加麻烦。虽然该通道仍将运行(即,我们仍可以将作业排队并从另一台主机读取它们),但将通知受感染的用户打印机处于脱机状态,并显示如下所示的消息:
当然,我们可以通过修改以下两个注册表项来禁用这些通知,但这并不是默认设置,并且显然可能会因此露出马脚:
HKCU\Printers\Settings\EnableBalloonNotificationsRemote
HKCU\Printers\Settings\EnableBalloonNotificationsLocal
小结
在本文中,我们不仅为读者详细介绍了基于打印作业的新型Command & Control(C2)的工作原理,以及基于C3的打印通道的实现方法。在下一篇文章中,我们将为读者详细介绍针对这种新型C2的各种检测方法。
发表评论
您还未登录,请先登录。
登录