费尔防火墙源代码阅读

费尔防火墙使用了重载系统提供的winsock.dll动态链接库的方法,实现网络数据包的检查;winsock.dll在系统启动时自动加载,ie等网络程序利用了其中提供的WSPSend、WSPRecv等函数实现数据包的收发过程;通过重载这个dll文件,费尔防火墙程序实现了自己的一个动态链接库xfilter.dll(好像是),其中导出了WSPStartup函数和XfIoControl函数,第一个函数将指向winsock.dll的lpWSPSocket、lpWSPCloseSocket、lpWSPConnect、lpWSPAccept、lpWSPSend、lpWSPSendTo、lpWSPRecv、lpWSPRecvFrom函数的指针指向自己实现的函数,名称就是去掉了lp前缀,这样就可以在数据包收发之前进行包检查,从而实现防火墙的功能,达到包过滤目的;这些替换函数称作钩子函数hook function。

ACL(maybe Access Control Link,访问控制链),用来过滤所有进出网络的包的规则库;费尔将规则存在这个链中,对每一个防火墙截获的包,利用规则进行相应的匹配,从而完成转发、丢弃等功能;这里用了一个类:CAclFile;规则类与包检查类的interface是CCheckAcl::GetAccessFromAcl函数。

来看看CAclFile类的内部结构吧!

费尔维护了一个名为xacl.cfg的文件,文件内容就是关于包过滤规则的;这样CAclFile类里就有一个CFile类成员mAclFile;文件内容就是CAclFile类的成员mAclHeader、mAclIntranetIP、mAclTime、mpAclDistrustIP、mpAclTrustIP、mpAclCustomIP、mpAcl这7个,参见XACL_FILE struct结构或者CAclFile::WriteAcl函数。

CAclFile类的其他成员函数大多就是围绕着添加、删除这些数据结构的了,或者是读取ACL、保存ACL等等。

WSPStartup函数是Service Provide Interface入口点,费尔防火墙代码中首先查找系统提供的原始的WSPStartup函数地址,然后调用这个系统提供的函数,获得服务函数列表,然后将其中一些函数替换成自己写的服务函数,并保留原来的函数列表指针,以便以后使用;一共有8个函数被替换。

下面来看看具体的包过滤过程,即对这8个函数一一考察

WSPSocket:

这个当然要先调用系统的lpWSPSocket进行必要的初始化工作,接下来自然是利用此函数的参数调用自己的WSPSocket函数进行具体的协议类型分析工作;譬如,只对address family是internetwork: UDP, TCP, etc. 的进行包过滤;根据protocal参数初始化CCheckAcl类中的成员wProtocal为TCP、UDP等;最后利用wProtocal参数和socket参数创建一个会话session。

WSPCloseSocket:

删除会话,调用系统的lpWSPCloseSocket。

WSPConnect:

设置相应会话的属性,如标识此socket是向外连接的ACL_DIRECTION_OUT,以及端口和远端IP;随后调用GetAccessInfo进行访问判断;GetAccessInfo再进一步调用GetAccessFromAcl;然后GetAccessFromAcl先看防火墙的工作模式是否是passall、denyall等,是的话就直接返回相应策略;否则,根据进程名查找该进程对应的acl文件,从这里可以看出费尔是一个acl文件有一个控制链数组,这个数组每一个元素对应一个进程;找到acl之后,进行5个方面的匹配,进出方向、服务类型、访问时间、网络类型、服务端口,这5个有一个不匹配的,就再次查找acl,再匹配;如果没有acl对应,并且不是win9x系统,就询问用户,剩下的策略没太看懂的说:(

if(bAction == ACL_ACTION_DENY)
    return XF_PASS;
else
    return XF_DENY;

WSPAccept:

接受连接,先调用系统的lpWSPAccept,然后CheckAccept;接下来是设置会话属性,然后类似上面的,调用GetAccessInfo;下略

WSPSend:

CheckSend函数调用;通过函数GetProtocolInfo设置会话属性,然后GetAccessInfo,同上,略

WSPSendTo:

同上,略

WSPRecv:

先调用系统的lpWSPRecv接收数据,然后CheckRecv进行检查;这个过程跟checksend差不多,略

WSPRecvFrom:

同上,略

至此,费尔防火墙的一些核心代码都分析过了,比较粗糙,具体的可以去读源代码了解。

 

to be continued...

阅读更多
个人分类: 病毒与安全
想对作者说点什么? 我来说一句

费尔个人防火墙2.0源代码

2004年10月11日 0B 下载

费尔个人防火墙2.1源程序

2009年09月03日 915KB 下载

费尔个人防火墙源程序.XFILTER

2010年02月17日 962KB 下载

费尔防火墙源代码2.1.0版

2009年07月14日 1.03MB 下载

费尔防火墙 1.0源码

2015年04月06日 4.67MB 下载

费尔防火墙源代码

2015年01月21日 4.81MB 下载

费尔防火墙1.0

2007年08月07日 449KB 下载

费尔个人防火墙源程序

2010年05月05日 999KB 下载

费尔个人防火墙 源代码

2010年10月29日 990KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭