|
网站首页
|
新闻中心
|
系统安全
|
网络安全
|
安全技术
|
下载中心
|
安全365社区
|
首页
安全动态
IT新闻
安全人物
本站动态
漏洞公告
病毒警报
木马预警
流氓软件
漏洞分析
入侵检测
升级补丁
安全配置
信道安全
设备安全
协议安全
WEB安全
病毒分析
木马研究
脚本注入
后门探讨
技术应用
数据安全
企业专区
收藏本站
设为首页
会员登录:
站内搜索:
新闻中心
系统安全
网络安全
安全技术
下载中心
|
网络安全首页
|
信道安全
|
设备安全
|
协议安全
|
Web安全
|
费尔防火墙的不足与SPI型防火墙的攻克
费尔防火墙的不足与SPI型防火墙的攻克
作者:未知 文章来源:网络 点击数: 更新时间:2007-11-28 1:36:04
费尔防火墙是一种典型的SPI型的
防火墙
。SPI意指服务提供者接口(Service Provider Interface)。在Winsock 2中增加了对更多传输
协议
的支持。Winsock 2不仅提供了一个供应用程序访问
网络
服务的Windows socket应用程序编程接口(API),还包含了由传输服务提供者和名字解析服
Winsock 2的SPI是以动态链接库的形式(DLL)存在的,它是通过WSPStartup函数为上层函数提供接口,而其他的传输服务提供者函数则是通过分配表的方式来访问WS2_32.DLL。传输服务提供者的动态链接库只有在应用程序需要时才由Ws2_32.dll来装入内存中的,在不需要时则会被自动卸载。
费尔
防火墙
的工作核心就是一个DLL,它的安装方式是破坏性的,它用自己替换了系统里当前的SPI,在应用程序访问
网络
时,首先调用费尔的DLL,再由费尔的DLL调用系统当前默认的SPI。一旦系统在安装费尔
防火墙
之后安装另外的基于SPI工作的程序,必将扰乱了
系统
的SPI链。甚至引起SPI链的死锁。如下所示:
↓数据 ↓数据 ↓数据
|系统SPI--1| |费尔SPI--1|→|系统SPI--1| |第三方SPI| |
系统
SPI--1|
↓数据 ↓数据 ↓数据 ↓数据
|系统SPI--2| |费尔SPI--2|→|系统SPI--2| |费尔SPI--1|→|
系统
SPI--2|
↓数据 ↓数据 ↓数据 ↓数据
|系统SPI--3| |
系统
SPI--3|←←← |费尔SPI--2|→ ←
↓数据 ↓数据
|
系统
SPI--3|
正常情况下 加了费尔
防火墙
以后 又加了第三方SPI以后
所以真正健壮的SPI型
防火墙
的DLL安装方式不应该是替换,而是加入到SPI链里。流程如下:
获取
系统
所有的SPI(WSCEnumProtocols)
找到IPPROTO_TCP类的SPI信息
构造一个类似的SPI信息做自己的注册信息(GUID不同)
安装自己的SPI注册(WSCInstallProvider)
重新整理SPI的链表次序,确保自己是在首位的(WSCWriteProviderOrder)
做完了安装的功能还要处理SPI的工作DLL,即重构WSPStartup函数。在WSPStartup函数里,我们要做的工作仅仅是找到自己DLL在链表中的位置,再找到自己的下一个SPI,保留它的函数表到自己函数表。
即然知道了SPI
防火墙
的工作原理,我们就可以轻易跳过它了。我们只要在自己的DLL的WSPStartup里动动手脚,让它永远指向
系统
的SPI就可以了。
PS:SPI的安装类的代码文件在COMMON文件夹里。由于它的析构函数会卸载SPI,所以要把类对象声明成全局的。另外在DLL的范例里,WSPStartup里有一段被注释的代码,那段代码就是用来让本身的SPI指向系统SPI的。我是根据名称判断的,其实严谨的方法应该是通过GUID。在这段代码下面被注释条包起来的一段代码是用于查找链表中下一个SPI服务的。大家可以自己试试。最后提醒大家,玩SPI可能会导致你的
系统
上不了网,请先保存注册表项分支:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\Protocol_Catalog9\Catalog_Entries。
最后友情提示一下:我的类里面有个函数对汉字支持不好,请不要在汉字路径下运行。要不自己修改一下也好。
发现这段代码没有处理行末符,现在我重写了一个……
void CSocketHook::Convert2Unicode(WCHAR *pWChar, CHAR *pChar)
{
int wNeedLen = MultiByteToWideChar(CP_ACP, 0, pChar, -1, pWChar, 0);
if(wNeedLen > 0)
{
WCHAR * wPbuf = new WCHAR[wNeedLen];
MultiByteToWideChar(CP_ACP, 0, pChar, -1, wPbuf, wNeedLen);
wcscpy(pWChar,wPbuf);
delete[] wPbuf;
pWChar[wNeedLen + 1] = ’\0’;
}
}
文章录入:郝丽 责任编辑:郝丽
上一篇文章:
网络安全基础知识之防火墙应用
下一篇文章: 没有了
【字体:
小
大
】【
发表评论
】【
加入收藏
】【
告诉好友
】【
打印此文
】【
关闭窗口
】
网友评论:
(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
解析“虚拟内存不足”
网银安全认证用户不足3%
|
设为首页
|
加入收藏
|
联系站长
|
友情链接
|
版权申明
|
站长邮箱:
webmaster@anquan365.com
联系电话:86-10-67634029
Copyright © 2006-2008
www.anquan365.com
北京华安普特网络科技有限公司 版权所有