-
虚拟化思想的简要介绍
-
QEMU虚拟化安全
-
QEMU攻击面
-
设备模拟漏洞
pm_smbus_init
函数初始化SMBus
的模拟,其中注册了一个MMIO地址空间,其中的地址空间MemoryRegionOps
为pm_smbus_ops
,代码如下:
|
|
SMBHSTSTS
这个虚拟机内部发过来的命令的时候,在一定条件(虚拟机内部可以控制该条件)下会将s->smb_index
进行自增操作,但是这里并没有对其进行安全检查,如果虚拟机内部的恶意用户一直增加该值,它会变成一个非常大的值,在SMBus
的模拟中,smb_index
用来索引s->smb_data
数组,而该数组大小只有PM_SMBUS_MAX_MSB_SIZE(32)
个字节。所以,如果smb_index
增大到超过32的时候就会访问到smb_data
数组定义之后的数据。在处理SMBHSTSTS
这个命令的后面可以看到,既有对s->smb_data[s->smb_index]
的读操作,也有写入该地址的操作。所以该漏洞会导致虚拟机对QEMU地址空间的s->smb_data
之后的内存进行任意读写,由于smb_index
是32位数据,所以理论上能读写的地址空间为4GB。通过越界读来获取QEMU的内存地址分布信息,绕过ASLR,通过写控制QEMU进程的PC指针,实现代码流控制。
|
-
外部漏洞
SetPixelFormat
消息的时候,产生漏洞的代码如下。
|
set_pixel_format
函数用来处理VNC_MSG_CLIENT_SET_PIXEL_FORMAT
消息,其参数red_max
、green_max
、blue_max
都来自远程客户端,可以是任意值,将这些值赋值到vs->client_pf
相应的成员中。其值在随后的write_png_palette
函数调用中被用来做被除数,如果远程恶意客户端把red_max
设置为0,那么write_png_palette
函数中就会就会产生除0错误,导致虚拟机崩溃。
|
-
QEMU安全思考
-
Reference
《QEMU/KVM源码解析与应用》——李强 编著
原文始发于微信公众号(山石网科安全技术研究院):QEMU虚拟化安全的攻击面探索与思考
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论