2014-04-18 38 views
1

我想为Windows开发基于主机的防火墙,主要用于过滤以HTTPS开头的URL!我知道微软将把WFP作为替代旧式的技术,例如防火墙/过滤器挂钩,NDIS,TDI,WSA和Winsock 2(LSP)。但是WFP目前不支持使用主机名或URL的过滤器。此外,WFP仅在C/C++中,.NET中没有可用的C#包装器。Windows过滤平台从托管代码过滤HTTPS

我尝试了@basil的WinDivert演示应用程序webfilter,它在TCP端口80(默认HTTP),重置服务器连接(TCP RST)以及向客户端(浏览器)发送HTML响应时分析出站通信中的数据包。通过TCP FIN的情况下,URL匹配任何一个文本文件作为命令行参数给出的黑名单条目,并重新注入,否则他们......

handle = WinDivertOpen(
     "outbound && "    // Outbound traffic only 
     "ip && "     // Only IPv4 supported 
     "tcp.DstPort == 80 && "  // HTTP (port 80) only 
     "tcp.PayloadLength > 0", // TCP data packets only 
     WINDIVERT_LAYER_NETWORK, priority, 0 
    ); 

我的问题是:我可以改变这个代码来支持HTTPS (将端口更改为默认值443)以及IPv6?如果是这样,我愿意编写一个P \ Invoke包装类来从托管的C#代码中调用它。

附加说明:该解决方案可以使用SSH隧道绕过,还有另一种绕过它的方法吗?

+0

你究竟在做什么?在协议上过滤似乎相当愚蠢,因为许多有用的站点使用HTTPS(例如,在工作中,我们通过仅通过HTTPS提供的外部门户网站发送webmail,而且我们的许多内部站点也都是HTTPS) –

回答

4

HTTPS使用加密来阻止第三方拦截和修改HTTP流。所以简短的答案是“不”。

原则上,您可以使用WinDivert启动中间人攻击以访问未加密的HTTP流。但是,这将被检测到,并且Web浏览器将严格警告用户他们受到攻击并且不会继续。

+0

感谢您你的答案。我找到了解决我的问题的方法,我更改了'webfilter'的代码来截获DNS查询('udp.DstPort == 53'),我仍在研究黑名单URL的答案。你认为基于DNS主机的应用防火墙是一个好主意吗?我需要执行哪些WinDivert更改才能使其同时适用于Windows Vista,7和8(包括x64和x86平台)? – JohnTube

+0

是的,你可以通过拦截DNS来进行域级别的过滤。要制作在32/64位Windows上运行的WinDivert应用程序,请参阅http://reqrypt.org/windivert-doc.html#installing – Basil

+0

实际上,您可以安全地在除firefox以外的所有浏览器中检测到有线拦截,方法是生成并删除每次运行程序时,都会向LOCAL_MACHINE证书存储区颁发新的CA证书。只要你有管理员权限,你可以在没有用户交互的情况下做到这一点(没有他们知道)。我不会将这些知识用于恶意目的,并且希望鸟类能够在任何人身上发泄。 –