Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2243668
  • 博文数量: 230
  • 博客积分: 9346
  • 博客等级: 中将
  • 技术积分: 3418
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-26 01:58
文章分类

全部博文(230)

文章存档

2015年(30)

2014年(7)

2013年(12)

2012年(2)

2011年(3)

2010年(42)

2009年(9)

2008年(15)

2007年(74)

2006年(36)

分类: 网络与安全

2013-02-20 13:08:47

ISP 共享上网限制的攻防对抗


春节后,有不少朋友问我,春节回家后发现 ISP 对上网共享进行了限制,问有没有什么好的办法解决?

这个话题说起来很大,这永远是一对对立的矛与盾的关系。

要想知道如何突破封锁,对于喜欢鱼的人来说讲起来很简单,但鱼未必好吃、未必适合自己的胃口;对于喜欢渔的人来说,倒不妨多谈一些技术细节。


共享限制的几种方法

这里只谈一些我自己的观点,未必正确和全面,也希望大家能够给予指点。


方法一:TTL 判断

在 IP 报文头中,有一个字段是 TTL,它的特点是每跨一跳路由就自动减 1,减到 0 就被丢弃,目的是避免由于链路回环造成的数据无限回绕。

另外一点,不同的操作系统的默认 TTL 值是不同的。

例如:

    Windows 是 128;

    Linux 早期(RH73)是 255,现在是 64;

    早期 Cisco 交换机一般都是 255(现在不知道,没机会接触了);

    早期 FreeBSD 是 64(现在不知道,没机会接触了);

    早期 Solaris 是 255(现在不知道,没机会接触了);


OK,知道了这些特性,那么如果 ISP 在接入层设置一个 TTL 监测器,同一条链路(或账号)过来的数据包的 TTL 出现了不同的差异,则基本可以断定共享了。


方法二:ID 判断

在 IP 报文头中还有一个字段是 ID,它的特点是 IP 协议栈每发出一个数据,ID 号会递增(2bytes 值,因此到 65535 后会回滚)。

可以想象一下,如果内部有共享,那么 ISP 看到的 ID 一定不是连续的,而是随机离散。


方法三:连接数参考判断

原理很简单,就是判断连接数是否很多。

这不足以断定是否是共享,但至少可以向分析 SPAM 邮件那样给个分值,最后根据得分判断是否有问题。


方法四:MAC 地址判断

有的 ISP 在初装的时候,安装人员要登记上网电脑的 MAC 地址(MAC 地址全球唯一,前 3bytes 代表厂商编码,后 3bytes 代表厂商内部编号)。

如果家里有个小路由,小路由的 MAC 一定和当初登记的不同,ISP 可以以此来判断。


方法五:TCP 指纹分析

每个机器的 TCP 协议栈都有各自的特点,比如 initwnd,比如 MSS,比如 timestamp 等。

虽然经过小路由,做了 NAT(网络地址转换),IP 头会被改写,但 TCP 头属于 NAT 环节的 payload,不会被涉及,仍保留了各系统协议栈的特性。

这些如果再细说就比较难了,建议去看《TCP/IP 详解》卷一。


方法六:应用层深度报文检测(DPI)

有些常用的应用层实际上在传输数据的时候是携带内网地址信息的,ISP 可以通过深度挖掘,来分析是否有共享的情况。


针对性突破

目前我知道的大概有这么多,这其中有几个,ISP 应该还没真正利用起来,当然也有我描述不全的。

知道了限制的方法,就有逐一破解之道。


针对方法一:TTL 判断

破解思路:让 ISP 看不到 TTL 的变化。

实现方法:用 Linux 做网关,然后利用 iptables 强行修改每一个出去的 IP 报文头部的 TTL 值,使其对外看起来是统一的,或者搭建 socks5 代理。

所需技能:iptables 的使用、了解 IP 首部、会使用 tcpdump 或 wireshark 抓包验证、搭建及使用 socks5 服务器。


针对方法二:ID 判断

破解思路:让 ISP 看不到 ID 随机变化

实现方法:使用 CU 上 ssffzz1 版主曾经写过的 ipid 模块,或直接使用 iptables 提供的 u32 模块(后者比较 Geek),或者搭建 socks5 代理。

所需技能:iptables 的使用、了解 IP 首部、会使用 tcpdump 或 wireshark 抓包验证、了解如何编译内核、了解如何给 iptables 打补丁、搭建及使用 socks5 服务器。


针对方法三:连接数参考判断

破解思路:让 ISP 看不到有那么多连接数。

实现方法:这个判断基本已经被废弃了,因为不准。另外这个也确实不好突破,但通过 VPN 的方式是可以的,前提是外网要有。因此这里不提供破解之法。

所需技能:无(没必要,也不好做处理)。


针对方法四:MAC 地址判断

破解思路:让 ISP 接入层看到的 MAC 地址与之前的一致。

实现方法:利用小路由的 MAC 地址克隆的功能。若是其他系统做网关,则修改自身 MAC 地址即可。改成和之前登记的一致。

所需技能:小路由及其他操作系统的 MAC 地址修改。


针对方法五:TCP 指纹分析

破解思路:让 ISP 看不到 TCP 协议栈的差异。

实现方法:利用代理的方式实现上网共享,所有请求都统一由代理服务器完成,ISP 看到的只有代理服务器。

所需技能:搭建及使用 socks5 服务器。(http 也可以,例如 squid、nginx)


针对方法六:应用层深度报文检测(DPI)

破解思路:让 ISP 看不到报文内部细节。

实现方法:别无他法,走 VPN 吧。

所需技能:在 GW 上设置 VPN Client 连接外部 VPN Server(需要有资源才行)。


由于个人能力有限,可能分析得不一定正确,也不一定全面,请大家给予指点。

顺祝各位玩得开心!@白金-PT


参考资料:

    《TCP/IP 详解》卷一、RFC 793、RFC 1323

    

    

    

    http://blog.chinaunix.net/uid-12798245-id-114886.html

    http://blog.s135.com/book/squid/

    http://blog.chinaunix.net/uid-461391-id-2399924.html

    http://blog.chinaunix.net/uid-12798245-id-114821.html

阅读(4402) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~