防火墙是我们电脑里必不可少的一个安全防护软件,它可以防止可疑软件进行网络连接,有效的阻止木马病毒,但是我前段时间研究MS07035漏洞时却很偶然的发现一个很多防火墙都存在的缺陷。这个缺陷的表现为防火墙因别错误而无法拦截或无法正确获得进程文件路径,这个缺陷经我测试,属于银行的防火墙非常的多,我测试了很多的防火墙,还有一些因为时间原因,就没有继续测试,但是经过测试的防火墙产品来看,这个缺陷应该是普遍存在的。一.缺陷症状
我们使用两两个经过特殊构造的执行程序来也是该缺陷。执行程序aaaaaa....,aaaaa.exe和bbbbbb..........,bbbbbb.exe。名称中的..........分别代表N个a或b,为什么需要这种形式我稍后再说明,在后面的叙述中,为了方便就简称为a.exe和b.exe。这两个程序一个以TCP网是连接端口为9999的聊天程序,a.exe为服务端,b.exe为客户端。为了测试的准确性可将a.exe与b.exe放置于两台计算机上。该程序运行后将伪装为IEXPLORE.EXE访问网络。
测试结果为:
1.金山网镖
没出任何提示,直接穿越防火墙,获得进程名完全错误。
1.天网个人防火墙
提示程序被修改了,无法获取实际进程名。
2.瑞星个人防火墙下载版
没有出现任何提示,直接穿越防火墙。虽然通过查看cmdline可以看到真实进程,但是其进程名完全错误。
3.费尔个人防火墙
没有出现任何提示,直接穿越防火墙,获得进程名称完全错误。
看过这些结果,相信大家都和我第一次发现该缺陷是一样的惊讶。这个缺陷的危害相信也不用我多说了,大家也该明白为什么说这是缺陷而不是漏洞了吧!因为防火墙并没有失效,只是被软件骗了。
二.陷阱原理篇
程序是怎么做到欺骗的呢?编写过程序的朋友一定知道一个名为GetModuleFileName的函数。该函数可以返回同进程的路径全名,比如C:\pro-gram files\lnternet explorer\IEXPLORE.EXE,那么这些信息是哪里来的呢!使用OIIyDBG加载调试一个a.exe文件,OD停在入口点后按ALT+M组合键打开内存窗口,右键双击地址为00020000的那一行。
在新弹出的窗口中单击右键,选择文本-UNICODE(64字符),向下拉动滚动条就会看到所示字符。
原理讲完了,听上去什么都是那么美好,下面要泼冷水了,因为信息被修改了,所以不只是防火墙,不能获得正常的路径,程序自身所使用的API也不能正确地获得进程路径,这样的函数如GetModuleFileName。这对于自己写程序还好说,但是对于改造其他程序来说,只能是尝试着做了。当然,如果你HOOK若这些函数并返回正确的路径,应该能改造成功,这些就留给大家慢慢研究吧。
三.利用篇
前面说了改别人的东西比较困难,但并不代表一定不成功,我写了个小程序供大家改造其他文件,它的使用方法十分简单。
使用该工具我成功地改造了大家很常用的NC,测试结果NC一切正常并成功穿透防火墙!最后注意对瑜伽课的软件对其改造一定会失败,所以请脱壳后再尝试。
本文来源:危险漫步博客
发表评论: