qemu毒液漏洞分析(2015.9)
0x00背景
安全娛樂圈媒體Freebuf對該漏洞的有關報道:
提供的POC沒有觸發(fā)崩潰,在MJ0011的博客給出了修改后可以使qemu崩潰的poc。詳見:
http://blogs.360.cn/blog/venom-%E6%AF%92%E6%B6%B2%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90%EF%BC%88qemu-kvm-cve%E2%80%902015%E2%80%903456%EF%BC%89/
?
0x01漏洞重現(xiàn)
注:qemu的用戶交互性體驗相對于vmware來說,極差
a.Linux 的qemu虛擬機
環(huán)境:
Win 10 物理機 + qemu-system-i386.exe (2.0.50) + CentOS 6.3虛擬機
Linux 因為在用戶層就可以直接操作端口,所以在linux虛擬機中將MJ給的POC保存成一個C文件,用gcc編譯后運行,就可以看到qemu崩潰了:
b.Windows的qemu虛擬機
環(huán)境:
Win 10 物理機 + Qemu Manager 7.0 + WinXP虛擬機
Windows因為不可以在用戶層直接和端口操作,需要借助驅(qū)動,所以就存在了和物理機的交互:驅(qū)動加載工具和編譯好的驅(qū)動程序。
測試的過程中,使用了Qemu Manager 7.0來建立共享文件夾。在物理機設置一個共享文件夾,然后就可在windows虛擬機的網(wǎng)上鄰居訪問了:
編寫的驅(qū)動關鍵代碼,換成對應對端口操作的函數(shù)就好了:
物理機中用windbg附加到qemu進程后,在xp虛擬機中加載驅(qū)動后,就可以觀察到windbg捕獲到異常了:
?
注:如果不用windbg附加到qemu.exe進程的話,那么看到的是qemu mannager把虛擬機給關了。
?
0x02分析
MJ的文章對漏洞成因進行了較為詳細的分析了,具體的情況可以查看其blog。下面進行簡要的說明:
qemu接受到FIFO命令后,會先調(diào)用fdctrl_write_data 函數(shù),該函數(shù)會確保fdctrl的狀態(tài)是可寫入的,才會進行下一步操作。
outb(0x8e,0x3f5)對應的函數(shù)為fdctrl_handle_drive_specification_command:
因為 fdctrl->fifo[fdctrl->data_pos - 1] 是我們可控的,加上fdctrl ->data_len =6,不可能大于7,所以可以繞過這兩個對fdctrl寫入狀態(tài)的改寫,其狀態(tài)還是可以被寫入的。
而接受寫入數(shù)據(jù)buffer fdctrl->fifo的大小為0x1000 bytes,poc中對其進行不斷的寫入,也就發(fā)生了越界寫了。
?
?
by:會飛的貓
轉(zhuǎn)載請注明:http://www.cnblogs.com/flycat-2016
?
轉(zhuǎn)載于:https://www.cnblogs.com/flycat-2016/p/5453103.html
總結
以上是生活随笔為你收集整理的qemu毒液漏洞分析(2015.9)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里高级测开:软件测试(功能、接口、性能
- 下一篇: 关于ZBRUSH弯折功能使用问题