昨日看到一个新闻,绍兴越城警方侦破史上最大规模数据窃取案:上市黑产公司忽悠运营商窃取30亿条公民信息。http://epaper.oeeee.com/epaper/A/html/2018-08/20/content_44759.htm

为什么可怕

首先这是很容易很隐蔽的。

这样子拿你的Cookie你没有任何办法阻挡的。除非你只访问有HTTPS加密的网页。

拿到你一个人的Cookie其实也不是太可怕,但是从运营商拿到所有人的Cookie就很可怕了。

拿到Cookie,最傻B的做法就是拿来加粉、刷量了。拿到这么多数据基本上你可以在任何领域呼风唤雨了。

《1984》,如果是被动分析你的流量,那顶多就是老大哥在看着你在面具下的超我,而拿到Cookie就相当于老大哥可以进入你的大脑,主动做信息收集。隐蔽点你不知道,逼急了他可以以你的身份去做任何事。

剑桥分析公司已经破产了,扎克伯格在听证会接收了参议员的轮番质询,而这些数据还是用户受到红包利益引诱主动授权的。这个主动授权机制也很奇妙,最后会提到。

新闻摘录

从2014年开始,黑产公司通过竞标的方式,先后与全国多家运营商签订正式的服务合同,为其提供精准广告投放系统的开发、维护。比如流量使用提醒等,主要靠这个系统。

警方发现有超过50家公司与该公司进行推广、加粉等业务合作,涉及北京、杭州、福州、深圳、临汾、东莞、厦门、上海、广州、成都等10个地市区。

Cookie相当于用户账号的登录凭证,不需要获取账号和密码,通过Cookie就可以进入用户账号,直接操作账号做任何事情。

什么是Cookie,为什么会有Cookie

更详细百度一下吧。

HTTP是无状态的,也就是如果没有Cookie等其他手段,你重复访问一个页面,对于服务器来说他不知道你还是你。所以服务器会生成一些唯一的标识码传给你,保存在浏览器进程或者电脑硬盘内,下次你再访问一个页面时给服务器这个唯一的标识码,他就知道,哦,你又来了。

最开始服务器会把一些你的个性化定制的内容一并写入Cookie,但是后来个人拥有的终端太多了,配置无法漂移,所以现在基本上这些都保存在云上了,Cookie内只保留一个唯一的标识码当索引,配置信息再根据标识码来获取。

如果没有唯一标识码的Cookie,你每次访问一个页面都需要提交用户名和密码确认你是你,这个成本很高。一般认证会有多因素认证,密码提交太多次也不安全,所以唯一标识码的Cookie就是一个令牌,只要通过初始认证后,今后只需拿着令牌就可以。这个实现在TCP握手、SSL协商中间都会有。

举个通俗的例子,假设你的姨妈给你找了她同事的女儿相亲,第一次见面你们要约在一个咖啡馆,你、姨妈、姨妈同事、姨妈同事女儿一起过来,通过了身份证验证,确认了不是酒托,然后你扫描她的三围,说错了,你扫描她的三维后录入脑海,下次你们两个就可以直接见面无需再像第一次那么繁琐了。你通过三维扫描有损压缩生成摘要后存入你脑海的那段代码就是Cookie。

Cookie的隐蔽性

使用Cookie操作账号是没有任何记录的。一般系统在登录时会双因素认证,把登录账户的IP地址记录到系统,展示给用户登录记录,分析是否在常用地址登录等等,然而使用Cookie跳过了这个阶段。而且Cookie不在GET的URL里,所以Web服务器的Log也不会有任何留存。只有吃饱了没事做的程序员才会在业务层面对Cookie转换成的用户和IP地址对应记录到Log内。这个记录量非常庞大,意义不大。一般我们认为Cookie泄露都是客户自己的问题,服务器不需要对这种做处理。

怎么发现的

公开披露的是有用户报案称其发现自己的微博、QQ等社交账户在不知情的情况下添加了陌生好友、关注。在阿里安全归零实验室提供的技术协助下。我觉得不太可能。用户一般发现这种情况我们会认为是用户自己的问题,要不密码太简单被人猜测,要不密码很复杂被人撞库,要不在不安全的WIFI环境下被人嗅探密码,要不电脑不安全被人安装木马,要不使用低版本的浏览器被人一秒控制。除开XSS、CSRF、Clickjacking服务器漏洞外,没人会想到从运营商的流量来拿Cookie。单个用户去找微博QQ没人理你。

所以我无责任猜测认为比较靠谱的发现可能是,某安全实验室里面有个人中招了,然后利用自己系的所有Log数据和多个平台的威胁情报分析出来了,然后再反过来联系受害者去报案。

什么情况下是安全的

大公司一般都有HTTPS全网加密,在HTTPS加密完美部署配置保护下,你怎么被搞都是安全的。当然不排除App不验证证书,大公司海量网站有某个网站没有SSL加密拿到Cookie再去突破有SSL加密的网站等等等。

敏感操作有记录的。拿Cookie要比较隐蔽都是去GET一些数据,不会去做敏感操作,因为敏感操作会有其他审计记录,用户也会发现,一些涉及到资金操作的大公司一般会有加一次认证。

Cookie有时间限制,分为非持久Cookie和持久Cookie。有些Cookie的机制是Session的一个索引,所以如果服务器有20分钟类似的Session失效机制Cookie也会失效。也就是拿到Cookie要乘早用(是的,打弟弟也要乘早)。还有些持久性Cookie是比如你用户名和密码通过认证后,服务器使用你的用户名和过期时间加上他的私钥使用对称算法算出来的,这种Cookie不受Session的限制,可以保留到天长地久。这种Cookie比较可怕,所以在“记住我”选择的时候需要谨慎。

Cookie可以加HttpOnly限制JavaScript不能读取。

OAuth2认证

最后科普下合法的使用数据分析的认证方法。

rfc6749

这是OAuth2的认证协议流程

以剑桥分析公司(Client)需要拿你(Resource Owner)存在非死不可网站(Resource Server)的数据来分析做例子。

  • 首先剑桥分析公司(Client)必须先让你(Resource Owner)在他们网站注册,确认你是你。然后把你导向非死不可网站(Resource Server)。
  • 在非死不可的网站(Resource Server)里,你需要在SSO(Authorization Server)做认证确认你是你,然后有一个页面提示你“剑桥分析公司需要访问你的数据,你是否授权”。这一切都是在非死不可网站(Resource Server)完成的,剑桥分析公司(Client)无法干预。
  • 如果你(Resource Owner)授权后,非死不可SSO(Authorization Server)会给剑桥分析公司(Client)一个Authorization Code。
  • 剑桥分析公司(Client)再拿着Authorization Code去SSO(Authorization Server)得到一个Access Token。Authorization Code会在使用后或者短时间内销毁。以后就可以直接使用Access Token拿到你(Resource Owner)的数据了。
  • 这个Access Token就类似Cookie的机制,也就是剑桥分析公司(Client)拿着这个令牌无需知道你(Resource Owner)的用户名和密码就可以获取你的数据。
  • 当然Access Token也会泄露,所以有效期时间会很短,还会有一个更长有效期的Refresh Token,可以根据Refresh Token再去获取新的Access Token。
  • 你(Resource Owner)所有的事情通过浏览器(User Agent)完成。

具体Authorization Code流程如下:

看明白了不,不明白也没关系,你只要知道互联网精英们为你做了很多保护,然而这一切在Cookie泄露下一无用处。