| 风云防火墙存在严重漏洞,所有版本通杀,低权限用户可导致机器崩溃。
2007-6-30日,看到CB投递的新版风云防火墙,朋友AYANAMI REI让我看看它的技术到底如何。没想到随便看了下,却发现一些严重的BUG
风云防火墙所有包含主动防御模块的版本,都存在8处以上严重的参数检查漏洞。该漏洞可导致目标机器上任意权限的用户可以使系统蓝屏重启,以达到攻击者的一些进一步提权或其它目的
该漏洞位于风云防火墙驱动程序FYTdiDrv.sys中
在刚刚发布的最新版本中
该驱动通过修改KeServiceDescriptorTable(SSDT)挂钩了多个函数
包括:
ZwCreateKey
ZwCreateSection
ZwTerminateProcess
ZwSetInformationFile
ZwCreateFile
ZwRestoreKey
ZwDeleteValueKey
ZwSetValueKey
ZwCreateKey
这些函数的HOOK处理中都存在严重的参数检查漏洞
没有对用户层传入的指针做任何检查,只靠单一的SEH来保证程序安全
而SEH是无法处理内核指针错误的
只要任何用户态程序传入错误的内核态指针给被挂钩的系统函数,系统就会立即蓝屏
例如其中的ZwCreateKey,其HOOK后的代码大概是这样的:
MyZwCreateKey(....)
{
SEH_plog...
......
some codes
...
if (ObjectAttributes)
{
if (!ObjectAttributes.RootDirectory)
.......
some codes
}
}
这里可以看到,对其中一个指针ObjectAttributes没有做任何有效性检查,而直接取其中的数据
我们可以用这样一段测试代码:
ZwCreateKey(&KeyHandle,KEY_ALL_ACCESS,0xF7654321,NULL,NULL,NULL,NULL);
其中第三个参数ObjectAttributes就是我们传递给函数的一个无效的内核地址
这时系统就会蓝屏,并显示错误为PAGE_FAULT_IN_NONPAGED_AREA ,导致错误的模块为风云防火墙的驱动:FYTdiDrv.sys
而没有安装风云防火墙机器上运行此代码,则不会有任何问题(当然如果你安装的其他软件也有类似BUG,就不好说了)
同样的漏洞在其他被挂钩的函数中同样存在
这里提供一个测试程序及源代码,仅用于演示之用,请勿用于非法用途
测试办法:安装最新版风云防火墙,安装时注意选上:注册表监控
运行测试程序,点 立即BSOD 系统即会立即蓝屏重启
希望作者能够及时解决这些漏洞,祝国产软件越来越强大 :)
漏洞演示程序下载:
mj0011.ys168.com
漏洞演示目录下FYEXP.rar
风云防火墙安全漏洞导致蓝屏问题已经第一时间解决
2007-6-30早些时候,我们报道了国产风云防火墙的最新版本中存在一些漏洞。官方立即对此做出反映,于今日发布了又一次的更新。
2007.6.30更新内容:对论坛用户名为"关注"的用户提出"参数检查漏洞"进行了改进.感谢其提供的漏洞测试程序.
2007.6.29更新内容:1.优化防火墙驱动,提高兼容性和稳定性
2.ARP防御功能增加安全模式功能,只响应来自网关的ARP请求(局域网隐身)
3.进程防范规则增加CRC校验功能
4.解决公测版本部分机器待机后唤醒蓝屏问题
5.修正UDP接收数据流量未统计BUG
6.其它一些细节完善
风云防火墙更新仍存漏洞,低权限用户可导致系统崩溃
风云防火墙在昨天我的文章出来后,连夜更新了软件,先赞一个!这样卓越的态度才是国产安全软件商需要学习的
上午生病了,中午拿到新版一看
可惜的是,更新的版本仍存在漏洞,安装了风云防火墙后,低权限用户仍可使系统崩溃
新版的代码修改后大体是这样的(还是以ZwCreateKey为例)
MyZwCreateKey(....IN POBJECT_ATTRIBUTES Oba)
{
...some codes....
if (MmIsAddressVaild(Oba)
{
if (MmIsAddressVaild(Oba.ObjectName)
{
if (MmIsAddressVaild(Oba.ObjectName.RootDirectory)
....some codes...
GetObjectName(Oba.RootDirectory,Oba.ObjectName,Pool);
....some codes..
}
}
....some codes...
}
现在是对引用的每个指针做有效性检查,不过程序员疏忽了一点。
就是在进行完MmIsAddressVaild后,在使用这个参数前(GetObjectName),如果发生了线程切换,导致Oba指针所在内存变成了无效页,那么系统还是会崩溃。
所以正确的办法是,在使用参数前,对其所在的页使用MmMapLockedPages等系列函数给所在页上锁,然后再进行使用,这样才能真正保证使用时该页不是无效的。
正如昨天某位访客说的,安全软件使用驱动程序,和操作系统紧密结合,如果一旦出现任何问题,就会导致系统崩溃,蓝屏重启,甚至用户重要文件丢失, 所以安全软件的驱动程序必须要经过大量测试和检验,才能投放市场,带病写了这篇文章(- -出了一身汗),希望这次的事件能给存在更严重漏洞的国内其它几家安全/杀毒软件,敲响警钟,尽快修改,以免被人利用,导致用户遭受安全风险。
也希望风云防火墙的作者看到此文,尽快修复该漏洞。 |