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