让域名拦截永远闭嘴!过域名拦截全思路! -电脑资料
域名拦截一直都是大家头疼的事情.
下面从原理给出拦截方法和绕过方法.
防火墙或者拦截方式也无非下面五种:
1.函数拦截
2.DNS查询信息拦截
3.反向DNS域名服务器信息拦截
4.网络协议封包拦截
5.DNS,IP等查询信息黑名单强制拦截
6.入侵检测式协议分析
7.等等...
绕行方法:
1.直接通过ip地址连接
2.通过其他DNS查询函数获取IP地址
(dnsapi.dll模块的DnsQuery_A函数,Winsock2.0的getaddrinfo函
数)
3.路由器DNS服务器查询(利用路由器的DNS缓存来查询)
4.手工构造DNS查询封包(Icmp等模块来直接查询)或者IPv6...
5.cmd.exe,whois.exe,ping.exe等函数来查询
6.通过HTTP,FTP等来读取IP地址(也就是所谓的qq空间,微博,二级域名
上线)
7.代理连接(socks4\a,5,http proxy,反向代理,Tor隧道.)
8.利用外部域名服务器查询(比如说提交给web版的whois查询,域名解析服务)
9.等等...
或许还有其他方法,但是可能性和实现难度都过于高,所以可能性不大.
下面来具体解析一下思路
[1].函数拦截:
已知的域名查询信息方法.绝大部分主要是采用
ws2_32.dll,wsock32.dll模块
gethostbyname函数来获取DNS的IP地址然后通过ip地址进行连接.
可以采用1,2,3,4,5,6,7,8的方法来绕行
[2].DNS查询信息拦截:
不管调用什么Api最终都要变成DNS查询包.
于是就可以针对这种包来进行数据查询(DNS查询包是公开的而且无加密)
hook还是底层驱动拦截发送的DNS查询信息进行拦截.
可以采用3,4,5,6,7,8方法绕行
3可以绕行是因为查询在路由器上而不是本机所以可以查询,
网关拦截似乎就没有办法了
[3].反向DNS域名服务器信息拦截:
由于为了加强上线性能,大部分DNS上线都可以通过封包得出域名解析服务器
比如xxx.3322.org域名是绑定到3322的域名解析服务器上的.
所以当进行连接的时候直接查询这个IP是否被绑定过在3322的域名解析服务器上采用5,6,7,8是可以绕行的
[4].网络协议封包拦截:
这种拦截方式可能是360主要采用的方法.比如对付gh0st等协议.
所以不少人采用修改头部信息和信息结构来绕行.
gh0st的协议有着明显的特征,所以很容易找到固定模式,
拦截即可.不过由于开发者的一些技术还是不负责任等行为,导致拦截不够准确.
绕行方法:
1.大家常用的调整包结构(无非就是改改头部特征,改一下结构信息)
2.一劳永逸直接加密即可.(国内使用加密的不多,压缩的倒是不少大部分都是zlib,所以很容易被解包分析,加密算法不用太难,够隐藏特征即可.)
3.如果还觉得怕被识别出密文特征,干脆采用流加密算法-RC4,xxTEA都可以(Bifrost,Flux等远控都是采用RC4,pi 2.20以前是rc4后来用了日本人
的Camellia算法-最初版本.不是后期的强版本,具体看文档)基本上不会从封包中找到固定特征了.
很不幸国内大部分的都是采用第一种绕过的,只能说大部分开发者技术水平确实不如国外开发者.
当然了能绕过即可(不过还是喜欢一劳永逸的方法)
[5].DNS,IP,PORT等查询信息黑名单强制拦截:
既然查询DNS是不可避免的.那干脆就把一些特殊的端口直接封死.
不过由于误杀率过高.而且绕行的方法确实也还是存在的.
据测试360似乎是采用了一些这样的方法,所以一些特殊端口还是最好不要使用.
域名尽量不要采用3322等绑定.最好直接采用http,ftp,二级域名等方式上线.代理也是不错的方法.
比如某国的XX墙就是针对上亿网民部署的是这种拦截方式.
绕行办法:
7,8,或者采用IPv6.不过目前IPv6使用量不多而且也很容易封锁.
代理服务器没什么好说的socks4,5这些都是一些远控都具备的.
Tor Plugin估计知道的人不多,不过经常****的人应该会知道这个插件,本来主要用于firefox,不过由于无聊的程序员很多所以被开发成通用的了采用Tor的远控不是没有.
Aphex的I2K4某些版本是有这个插件的,
大家熟知的Bifrost 1.21也是有Tor插件的(1.2b后就去掉了)
国内用的不多而且速度慢.如果要对国外控制的话最好还是不要采用这类方法.有更有效的方法以后再说.
[6].入侵检测式协议分析:
终于杀软没招了.想不出好的方法,肿么办?
还能记得<<变形金刚>>里面霸天虎入侵的时候,美军找了一帮 来帮忙解析协议吧.正常的网络通讯协议包无非那几种,而远控,后门等采用的不是一般的协议.
或者说传输的数据不是我们一般的数据,
如果采用加密的话杀软是没什么好方法分析的,那剩下的最后一招就是协议白名单了,
当出现无法识别,或者不是日常的协议信息的时候就会发出警报.
这样的话就可以预防一些未知的拦截信息.
采用这种拦截方法的防火墙和杀软很少很少,主要应用在服务器上.
大部分也都是配合硬防的.软防也有.
绕行的方法:
也就是伪装成已有协议,比如http ssl,或者各种隧道技术
http隧道,ftp隧道,各种网络工具的隧道技术.
对于这方面的研究其实很多,只是公开的人很少.资料可以从sf.net
或者codeproject.com等网站上找到.
以前的网络神偷,PcShare,炽天使,无花果的远程控制.采用的是这种
http隧道
有介绍说灰鸽子是,其实只是上线头部采用XML结构,并不是HTTP隧道.
网络神偷的HTTP隧道构造的相当原始.几乎就是一滩xx...
PcShare略好,但是由于双工所以产生不少连接.HTTP是短连接,
一个基于HTTP的长连接很容易被怀疑.
不过这个事情在HTML5后会有比较大的改善.还是很期待Web Socket的
当然了这种方法的坏处就是速度极慢,远没有直接二进制连接速度快,
采用UDP协议也是不错的选择,事实上现在基于RUDP的网络程序很多.
在国外以前也有不少采用UDP协议的,不过由于RUDP实现不好所以许多
都昙花一现.
3G,4G的兴起,UDP体现出比TCP更高的效率和数据流量占用.
基于RUDP的很快也会兴盛起来的.
当然了所谓的自定义协议也不是没有,黑洞2005,和许多rootkit都采用过自定义协议.
不过目前来看都需要驱动配合.或者RAW SOCKET,开发有难度.至于如何选择看各位开发者需求.
关于HTTP隧道,RUDP,自定义协议以后再说.这里不做过多说明.
[写在最后]
至于某些人说的P2P协议什么的,这完全不靠谱的行为,而且P2P需要转接服务器,
虽然利用BT服务器这样来进行转接打洞也不是不可能,但是难度还是不小的.
而且P2P不是放在任何地方都好,远程控制属于直连,长连接方式,根本不适合P2P.
如果P2P服务器被攻击了那不是全完了么?
什么?做成SkyPE那样?好
吧洗洗早点睡吧...