Your printer is not your printer ! - Hacking Printers at Pwn2Own Part I
印表机近年来已成为企业内网中不可或缺的设备之一,功能也随着科技的发展日益增多,除了一般的传真及列印之外,也开始支援AirPrint 等云端列印服务,让列印更加方便,直接使用行动装置就可以轻松列印,更成为了IoT 中,不可或缺的一环,正因为其便利,也常被用于列印公司内部机敏文件,使得在企业中印表机的安全性更加的重要。
而前年我们也在Canon 及HP 的印表机中发现了Pre-auth RCE 的漏洞( CVE-2022-24673及CVE-2022-3942 ) 及Lexmark 发现漏洞( CVE-2021-44734 ),并在Pwn2Own Austin 2021 中取得了Canon ImageCLASS MF644Cdw、 HP Color LaserJet Pro MFP M283fdw 及Lexmark MC3224i 的控制权,而成功获得Pwn2Own 中骇客大师(Master of Pwn) 的点数,这篇研究将讲述Canon 及HP 漏洞的细节及我们的利用方式
印表机近年来已成为企业内网中不可或缺的设备之一,功能也随着科技的发展日益增多,除了一般的传真及列印之外,也开始支援AirPrint 等云端列印服务,让列印更加方便,直接使用行动装置就可以轻松列印,更成为了IoT 中,不可或缺的一环,正因为其便利,也常被用于列印公司内部机敏文件,使得在企业中印表机的安全性更加的重要。
而前年我们也在Canon 及HP 的印表机中发现了Pre-auth RCE 的漏洞( CVE-2022-24673及CVE-2022-3942 ) 及Lexmark 发现漏洞( CVE-2021-44734 ),并在Pwn2Own Austin 2021 中取得了Canon ImageCLASS MF644Cdw、 HP Color LaserJet Pro MFP M283fdw 及Lexmark MC3224i 的控制权,而成功获得Pwn2Own 中骇客大师(Master of Pwn) 的点数,这篇研究将讲述Canon 及HP 漏洞的细节及我们的利用方式
早期在使用印表机时,往往会需要使用IEEE1284 或是USB 的Printer cable 来将印表机接上电脑,并且在使用时会额外装上厂商所附的驱动程式。而现今的印表机已可以接上网路,并多了各式各样的功能,通常只要将印表机接上区网,区网中的电脑就可以轻易地发现你所新安装的印表机。
目前市面上的印表机预设都开了非常多的服务,不外乎就是为了让列印更加方便,像是FTP、AirPrint、Bonjour 等等服务。
Motivation
为何要研究印表机呢?
红队内网需求
过去我们团队在执行红队演练过程中,印表机普遍出现于现代企业内网中,几乎都会有一台以上,但往往是被忽略的一块,也常常没在更新。印表机本身也非常适合作为攻击者的藏身处,通常很难被侦测出来。值得一提的是比较大型的企业也很有可能将其接上AD,成为获取机密资讯的入口。
Pwn2Own Austin 2021
另外一点是印表机在2021 时,首次成为了Pwn2Own Mobile 主要推动的目标之一,而我们刚好当时也准备再次挑战Pwn2Own 舞台,便决定一探究竟
目前市面上的印表机预设都开了非常多的服务,不外乎就是为了让列印更加方便,像是FTP、AirPrint、Bonjour 等等服务。
Motivation
为何要研究印表机呢?
红队内网需求
过去我们团队在执行红队演练过程中,印表机普遍出现于现代企业内网中,几乎都会有一台以上,但往往是被忽略的一块,也常常没在更新。印表机本身也非常适合作为攻击者的藏身处,通常很难被侦测出来。值得一提的是比较大型的企业也很有可能将其接上AD,成为获取机密资讯的入口。
Pwn2Own Austin 2021
另外一点是印表机在2021 时,首次成为了Pwn2Own Mobile 主要推动的目标之一,而我们刚好当时也准备再次挑战Pwn2Own 舞台,便决定一探究竟
通杀HIDS-Linux绕过文件系统向磁盘写入shellcode
此时shellcode已经落地磁盘成功,并且将block标记使用后,该block的数据就是受到保护的,不会被文件系统再使用或者覆盖
此时shellcode已经落地磁盘成功,并且将block标记使用后,该block的数据就是受到保护的,不会被文件系统再使用或者覆盖
字节vArmor客户端代码解读
attachBpfToTracepoint
因为在加载eBPF时需要具体指定对应的时间类型和eBPF相关的代码段,所以这里需要先定义一个attachBpfToTracepoint函数,用于将eBPF代码段和对应的事件类型进行绑定
attachBpfToTracepoint
因为在加载eBPF时需要具体指定对应的时间类型和eBPF相关的代码段,所以这里需要先定义一个attachBpfToTracepoint函数,用于将eBPF代码段和对应的事件类型进行绑定
execLink, err := link.AttachRawTracepoint(link.RawTracepointOptions{
Name: "sched_process_exec",
Program: tracer.objs.TracepointSchedSchedProcessExec,
})
if err != nil {
return err
}
tracer.execLink = execLink