发布于: 雪球转发:5回复:29喜欢:4
今天在研究系统的安全隐患问题,做一些常用网站的方案研究

突然明白为何上次爆发很多apple id被盗用多是163邮箱的原因了

以下就是我们测试抓包发现,赤裸裸地明文账号和密码。。。。。

所以,奉劝大家不要用163邮箱做自己的重要个人邮箱和验证信息邮箱

另外也不要随意在外面登陆不明WIFI(这样你的登陆信息可能被人抓包记录)

$网易(NTES)$ 

下图就是我们抓包的截图,赤裸裸!!!!!

精彩讨论

全部讨论

蜀黍兜兜里有糖2016-04-26 11:11

MD5 没卵用并不是因为有 MD5 库,而是攻击者其实根本不需要知道你的原始密码,如果服务器保存的是 MD5 后的密码,用户提交的密码也是 MD5 后的,那么攻击者只需要抓包得到 MD5 后的密码是啥就行了,之后就可以用这个 MD5 字符串伪造登录数据获得用户权限,管你是三次还是一百次,对他而言无任何意义。

RSA 是有用的,他是非对称加密,公钥用于加密可以开放给任何人知道,私钥用于解密只有服务器知道,同样的用户登录场景,如果在提交用户密码之前(不管是原始密码还是 MD5 的密码),就用公钥把密码字符串加密,这样提交后中间人抓包只能得到 RSA 密文,他是解不开的,完全没卵用,只有服务器上的私钥才能进行解密。

现在的问题就是过于相信中间环节的,以为一个 MD5 搞定一切,呵呵

onedot2016-04-26 10:59

是的,RSA是目前相对最安全的一个方法

蜀黍兜兜里有糖2016-04-26 10:57

MD5 或 SHA 什么的完全没卵用,管你是三五次还是一百次,我根本不需要知道你的原始密码,只需要抓包得到你的 MD5 或 SHA 后的散列字符串就行了,对服务器来说,这个散列字符串就是你的密码(顺便说雪球登录就是这样的,抓包后就能得到的密码散列字符串,使用这个散列字符串就能通过程序顺利登录账号)。

真要防,需要在提交之前就把 POST 参数序列完全用 RSA 或 AES 加密(可以通过 JS 实现,最好用 RSA,如果用 AES 的话,JS 不能保证密钥安全),并加上完整性验证,我做的一个网站是这样解决的:服务器登录页每小时生成一对随机密钥,把公钥写回到登录页面的隐藏 FORM 里(公钥不怕泄露,只能用于加密,不能用来解密),用户点提交后就把参数字符串先用 SHA 散列出一个完整性验证字符串,添加到参数字符串后面,再把这整个字符串用公钥加密,最后才提交,这意味着数据在到达路由之前就已经是加密的了,中间人随便截获,没卵用,数据到达服务器后首先把参数用私钥解密(私钥只在服务器上有,并且密钥对每小时更换),解密后对参数字符串前半段进行 SHA 散列后与后半段进行比较,可以得知是否被中途篡改,最后才进行正常逻辑处理(通常来说加密后的数据没谁闲得无聊去篡改,篡改后也没法解出原文来,加上这一步主要是验证一下再处理防止程序出错)。@onedot

老农X2016-04-26 08:53

深以为然。现在泄漏数据最多的就是dns劫持导致的。

青火火凤2016-04-26 08:41

很专业,很正确,很有价值

onedot2016-04-26 08:23

原因见我最新回复,新时代新问题

onedot2016-04-26 08:22

这次主要是新时代遇到新问题,因为现在我们app都用一些第三方bug监控工具(估计很多都会用),他们提供类似查看问题发生前若干回溯的网络请求,所以仅仅md5+https没有意义,这些对第三方平台就是透明的,数据一旦泄露就可以被伪造请求.不是不信任第三方但这个安全隐患必须堵上,所以我们会再加一个rsa和时间戳再加https

老农X2016-04-26 08:18

很多帽子客都有一次后的md5,纯粹浏览器post到sever,做rsa编码麻烦一大堆,主要防止的还是奸商与网络提供商狼狈为奸抓节点。

蜗牛队长2016-04-26 08:09

我也点评一下吧,我也认为做个md5会提升一定的安全性,这个安全性仅仅是密码被明文获取的可能性降低,而不是该网站被盗取的安全性。

http协议的假设前提就是路由是安全的,不会被窃听篡改。如果担心这一点,应该主动使用https协议。另外,无论是使用md5,还是rsa加密,还是challenge算法,salt算法,还是签名算法。这些都是常规的保证秘密不被明文获取的方法,都有个共同前提,你的路由是安全的。如果路由已经被劫持,更常见的作弊方法是直接dns劫持或者ip转向,让你到一个看起来像原始站点的伪造站点。这样被盗的可能性也是比较大的。
http协议是无上下文的,对于获得认证权限这一步来说,无论你怎么做我都只需要把你发给服务器的数据记下来repost即可。我并不需要知道你的原始密码是多少。所以本机和路由的不安全是一定会导致你访问服务器的不安全。

onedot2016-04-25 22:11

当然加一层RSA处理还是有用,如果用APP的BUG崩溃记录的第三方服务,因为已经崩溃日志和网络请求跟踪已经是APP的TCP协议的处理之后了,所以如果只依赖TLS的话,你的传输数据还是直接会暴露给第三方!如果只是简单MD5加密通过TLS再安全传输依然会有被伪造的概率。所以自己和服务器再加一层RSA和TOKEN过期校验才可靠