V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
copriwolf
V2EX  ›  程序员

请问如何防范中间人攻击

  •  
  •   copriwolf · 2015-01-12 20:33:33 +08:00 · 10428 次点击
    这是一个创建于 3607 天前的主题,其中的信息可能已经有所发展或是发生改变。

    作为一个局域网的普通用户,没有路由管理权,请问各位,如何能够识别中间人攻击(ip重复冲突?看arp表?),并防范阻止?

    32 条回复    2015-01-14 19:44:06 +08:00
    samueldeng
        1
    samueldeng  
       2015-01-12 20:43:15 +08:00 via iPad   ❤️ 1
    攻击者如果有交换机权限,没有办法防范吧?
    如果没有权限,通常用arp sproofing吧,这时,除了arp绑定就没有其他办法了吧?
    mengzhuo
        2
    mengzhuo  
       2015-01-12 20:55:24 +08:00
    TLS
    kiritoalex
        3
    kiritoalex  
       2015-01-12 20:59:03 +08:00 via iPhone
    HSTS
    copriwolf
        4
    copriwolf  
    OP
       2015-01-12 21:00:02 +08:00
    @mengzhuo 那么请问除了建立在SSL/TLS协议以外的协议都是不安全无法防范的?
    msg7086
        5
    msg7086  
       2015-01-12 21:03:53 +08:00 via iPhone
    Ssl也可以中间人,只要有一个可信ca的签发权就行了
    copriwolf
        6
    copriwolf  
    OP
       2015-01-12 21:10:26 +08:00   ❤️ 1
    @msg7086 这个似乎是之前新闻里微软一个下属软件开发的伪造了可信证书。。。似乎一般ssl中间人是通过SSLStrip这类软件降级处理吧
    msg7086
        7
    msg7086  
       2015-01-12 21:12:53 +08:00 via iPhone   ❤️ 1
    @copriwolf 我随便举个栗子。
    CNNIC就可以拿来做中间人。(做没做我们不讨论。
    billlee
        8
    billlee  
       2015-01-12 21:14:09 +08:00   ❤️ 2
    @copriwolf IPSec, ssh 这些也是可以抵抗 MITM 攻击的,有可靠的消息认证就行。
    futursolo
        9
    futursolo  
       2015-01-12 21:31:26 +08:00   ❤️ 3
    @billlee

    同意楼上,一般能防MITM的要具有以下特征:

    1、握手加密而且具有可信CA(SSL、TLS之类,CNNIC和WoSign就不点评了)或拥有预协商密钥(L2TP)
    2、加密方法足够强大(AES、CHACHA20之类,RC4和SM2就不点评了)

    综上,一般情况下,以下的协议是安全的:
    1、HTTPS(排除RC4、3DES算法,排除CNNIC、WoSign的CA证书)
    2、OpenVPN(基于TLS,只要你能连上就是安全的)
    3、L2TP *Over IPSec*(必须要Over IPSec,没了就没加密了)
    4、IKEv2(基于TLS和可信CA发的证书,安全性比OpenVPN还好)
    5、SSTP(基于TLS和可信CA发的证书,安全性和IKEv2相同,稳定性加强,用443端口)
    6、ShadowSocks(基于N+1种加密算法,只要你不选RC4或RC4-MD5算法就是安全的)
    7、任何用SSL Stream过又验证CA甚至客户端证书的TCP连接(UDP大家都懂,DNS什么的)
    futursolo
        10
    futursolo  
       2015-01-12 21:32:11 +08:00
    当然,SSH也算一个
    copriwolf
        11
    copriwolf  
    OP
       2015-01-12 21:37:26 +08:00
    Halry
        12
    Halry  
       2015-01-12 21:48:22 +08:00 via Android
    @futursolo 谢谢提醒没关手机里面的cnnic和wosign
    为什么rc4-md5还不安全呢?
    kiritoalex
        13
    kiritoalex  
       2015-01-12 21:58:46 +08:00 via iPhone
    @copriwolf SSLstrip能使通信失去证书,加了HSTS特性的网站会报错(chrome根本不给你打开网页的机会,即使你想继续也不行)
    Mrun
        14
    Mrun  
       2015-01-12 22:03:35 +08:00
    @futursolo RC4_MD5为什么不安全?
    futursolo
        15
    futursolo  
       2015-01-12 22:09:02 +08:00
    @Halry
    嘛,简单点说好了。
    ShadowSocks的RC4不安全是因为Key复用的问题,也就是算法有问题,RC4-MD5上已经修复了这个问题了。

    RC4-MD5不安全的原因是因为加密强度太弱,主要是给ARM或MIPS架构的CPU(也就是手机和路由器)准备的,正常情况下使用是没问题的(因为当年clowwindy说过ShadowSocks的加密是为了模糊流量,不是为了加密而加密),但是要遇上曙光4000暴解的话估计也就数分钟的事(不过估计也要等到你干了什么不惜动用曙光4000也要把快递送到你家门口的事再说)。
    20140930
        16
    20140930  
       2015-01-12 22:22:32 +08:00
    现在浏览器增加的Public Key Pinning 功能也可以应对这种攻击吧?
    billlee
        17
    billlee  
       2015-01-12 22:32:21 +08:00
    @futursolo 不能认为 shadowsocks 是安全的. shadowsocks 只有加密,没有认证。中间人可以篡改数据,在使用流加密算法时这个问题尤其严重。
    Halry
        18
    Halry  
       2015-01-12 22:55:51 +08:00 via Android
    @futursolo 那chacha20在mips上面的性能如何?
    jecvay
        19
    jecvay  
       2015-01-12 23:08:05 +08:00
    @billlee 中间人如何知道shadowsocks的密钥
    deepurple
        20
    deepurple  
       2015-01-12 23:24:58 +08:00
    @samueldeng 似乎看到了熟人
    xiaoks
        21
    xiaoks  
       2015-01-13 00:49:57 +08:00
    这是啥上网环境啊。遇到这种环境,我一般把设备wifi功能关了。然后看看书。
    就算你是大侠,也不应该在这种环境里凑热闹。熟话说的好,乱棍打死老师傅。
    别以为自己做了某些措施就安全了。
    copriwolf
        22
    copriwolf  
    OP
       2015-01-13 01:50:52 +08:00   ❤️ 1
    @xiaoks 可是现实也有很多这样的环境,街边的麦当劳,甜品店的wifi很有可能就是这样的环境,所以有时候重视讨论一下还是挺好的。。。。。
    cnnblike
        23
    cnnblike  
       2015-01-13 02:08:52 +08:00
    @futursolo 曙光4000暴解根本是一件不用担心的事情了……与其花大笔计算费用,还不如一个快递让你进去交代。除非你在国外,但如果在国外,翻墙干啥?
    intosec
        24
    intosec  
       2015-01-13 12:32:40 +08:00 via Android
    一是防范路由链路不被中间人劫持,静态arp绑定,静态路由,关闭代理自动发现功能等等。不过要是人家直接控制了路由器,这些都没用了。
    二是防范流量被中间人解密和篡改,那就是上面的各种办法了。https不算安全,它可以被降级成http或者被中间人替换证书。
    关于gfw能解密哪些协议的问题,大家可以找些敏感词去测试一下。
    xiaoks
        25
    xiaoks  
       2015-01-13 13:52:29 +08:00
    @copriwolf 这里交代一下,我并不是对网络安全不重视。其实我就是做网络安全的。
    我给出上面的答案,是因为我对安全更加敏感。对小白用户说,也是最好的选择。

    既然你说到这样的问题了,我就说说逼不得已的时候我是怎么处理的。

    首先在开机之后,静止几秒。因为这时候很多软件都开始尝试联网,获取ip,获取dns。你现在着急联网,秒被路由“下毒”。等1-2分钟,数据请求不密集时,登录wifi,并且秒登录vpn。注意:一定要全局加密。用shadowsocks这种,你的QQ等还是暴漏在外面的。vpn的加密等级最好高一点,推荐openvpn。

    接下来你的所有数据都走vpn,路由上可以抓到的数据都是你的笔记本与vpn的加密信息。目前这种加密无解,你可以放心了吧。
    billlee
        26
    billlee  
       2015-01-13 14:12:41 +08:00   ❤️ 1
    @jecvay 修改数据不需要密钥。对于任意的流加密算法,记明文为 P, 密钥流为 KS, 密文为 E. 有
    E = P Xor KS

    假设攻击者知道密文 E, 明文中某个字段的位置和值 P[begin:end], 想要把明文中的对应字段篡改为 M[begin:end], 只要计算出差异

    DIFF = M[begin:end] Xor P[begin:end]

    就可以再计算一个
    ME = E
    ME[begin:end] = E[begin:end] Xor DIFF

    这样生成的 ME 就能够被解密成篡改后的明文,达到了在不知道密钥的情况下破坏数据完整性的目的。

    就针对 shadowsocks 来说,攻击者可以猜测协议中的目的地址字段,将它修改成攻击者控制的服务器,然后 ssserver 就把解密的数据发送给攻击者了。

    shadowsocks 只是一个混淆协议,不是安全协议。
    jecvay
        27
    jecvay  
       2015-01-13 16:22:56 +08:00
    @billlee orz吊吊吊
    threezhiwang
        28
    threezhiwang  
       2015-01-13 16:58:40 +08:00
    @futursolo 点评下SM2
    futursolo
        29
    futursolo  
       2015-01-13 19:24:09 +08:00
    @billlee
    根据偶的印象,为了避免探测,ShadowSocks会把无法解密的数据拿去扔掉,根本不会理会(但会把连接失败写到系统日志里)。而且每一个连接的密钥都是基于初始向量单独生成的,不同的链接之间也不会共用密码,即使猜到了密码也没用,只能暴解但个连接的实际密码。密码方面,采用和L2TP预协商密钥类似的密码方法是可以达到加密的效果的,只要加密强度足够大,解密也是需要时间的,何况还要把密码给md5一遍以增加长度。
    参见:[](https://github.com/shadowsocks/shadowsocks/blob/master/shadowsocks/encrypt.py)

    @Halry
    很遗憾,手头没有可以测试MIPS设备。(唯一的TP-LINK也被母上大人命令不准破坏,目前智能路由之类的功能都是用开发板充当网关实现的)但是ChaCha20对于精简指令集的CPU有优化是真的,性能虽不及RC4,但是比AES是好多了。而且主要是因为安全性有保障,要不Google也不会在移动端HTTPS用CHACHA20-POLY1305。(使用移动版Chrome开google.com,注意是Chrome,其余浏览器无效)

    @cnnblike
    嘛,这个,法庭上要讲证据。
    至于为什么身在人间也要翻墙回天朝的原因其实也很简单,大家要上B站看番。

    @threezhiwang
    目前的应用情况太少,实际的加密强度尚不明确(与AES的使用范围相比真是冰山一角),且算法持有人略坑,不排除持有某些未公开漏洞的可能。如果属实那查水表就太方便了。
    threezhiwang
        30
    threezhiwang  
       2015-01-14 09:07:42 +08:00
    @futursolo 不知你所述的SM2是否为商密2号算法,此算法为非对称算法,基于ECC,曲线已公开,SM1未公开
    futursolo
        31
    futursolo  
       2015-01-14 18:48:07 +08:00
    @threezhiwang
    就是那个东西,论文看过了,感觉也不怎么样,和ECDSA差不多的感觉,但并未明确指出解密年限。而且,由于应用范围过窄,不知道是否会出现魔数。这种东西必须要大量验证以后才可以被信任,而且发明者偶觉得完全不可信。建议目前还是用ECDSA或者RSA。
    threezhiwang
        32
    threezhiwang  
       2015-01-14 19:44:06 +08:00
    @futursolo SM2就是选了条ECC 256的曲线,然后运算中掺杂了点SM3进来。SM2是定长签名算法,就好像RSA1024,解密年限这东西,参见ECC强度吧。既然是开源的,就没有可信不可信的说法了吧,而且算法这东西,不是大量验证,而是长时间的开源审计吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1178 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:04 · PVG 07:04 · LAX 15:04 · JFK 18:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.