layout: post title: 关于在网络中隐私的研究
没有保护隐私的权利,我们也能自己来维护<!--more-->
前段时间可谓是盒泄漏时代,各个组织和公司都在争着把自己拥有的用户隐私数据往出送,以致于现在在一定程度上可以说没有准备的人默认就是实名上网了 (我也没有准备好😂) 。不过其实如果说做好准备的话除非对方有天大的本事,不然都无法找到在网络中实际操作的人。所以我这次想从原理上来说一说关于隐私的保护方案。
因为考虑到泄露隐私这种事情实在是太容易了,所以我们一般来说如果想保护的话也很难做到面面俱到,只能针对单独的身份或者行为进行保护,如果真的想保证完全的隐私,那恐怕就不能待在地球上网了。所以尤其是在中国这种地方就更加困难,毕竟实名的东西也很多,关联起来也很简单。
一般来说如果只是访问网站的话是很难泄露隐私的,毕竟获取隐私信息的主要方法是通过关键信息关联,比如手机号、邮箱还有IM账号等方便关联实人的联系信息,所以对于其他访问者来说这些信息本来就是不可见的。一般能泄露给访问者的信息基本上只有在网站上进行了写入可以公开信息的东西,比如注册账号、发帖、发消息之类的,当然一般来说普通人之所以开盒也都是因为发送了东西才会引起其他人的注意,不发东西也没有目标啊。
在这种情况下的泄露关联很简单,也很好避免,一般这种就是查发送的信息和公开的个人信息,可能不是所有人都会公开手机号,不过IM账号大多数人都会公开,也许是腾讯的系统并不怎么安全,像QQ号查绑定手机的社工库还挺多的,尤其是用的时间比较长,比较常用的QQ号可以说是100%泄露了手机号。通过手机号查人就更简单了,对于普通人来说什么转账查询、通过快递订单泄露查询什么的可以说是应有尽有,我自己也查过自己,可以说是轻松就能查到,加上我常用的用户名,我只能说其实我在实名上网😭。
当然除了上述普通的社工方案,也有比较高级的技术方案,比如MITM攻击、钓鱼攻击、以及第三方引用泄露等等,不过这些难度还是挺大的,主要还是因为现在加密技术的成熟,可以大大提高这些攻击的难度。
作为在互联网上访问的人来说,你对目标网站的任何访问网站管理员自然是知道的一清二楚,毕竟你的访问肯定得让网站程序知道吧,不然网站程序怎么给用户返回正确的信息?在这种情况下泄露的信息就更多了,防御的难度也更大了。首先最先泄露的就是IP地址,毕竟在TCP协议中访问一个网站那数据想原路返回也得提前知道访问者的地址啊,就像访问者也能很轻松知道网站的IP地址一样。对于大多数网站管理员来说其实IP地址能获知的隐私信息也不是特别多,最多就是知道你在哪个城市,再精确估计也最多到小区,在IPv4已经被分配完的时代,大多数运营商都用了NAT,所以一个IP下可能包含很多个用户,当然对于运营商的人来说那就不一样了,他们可以根据地址分配的时间以及使用的端口精准的找到访问者的物理位置。顺便一说,如果这个网站允许其他用户使用第三方的图片等资源同样也可以获得访问者的IP。
除了IP之外,还有就是用户自己输入的信息,像对其他访问者不可见的信息对于网站管理员那自然是一览无余的,这个就实在是太简单了,其实说来钓鱼网站也是一样的道理,没有防备的人可能输入的信息就是完全准确的,以致于当网站被攻破时泄露的数据也是准确的。
上述的信息可以说是一些显式的信息,除此之外还有一些隐式的隐私信息,比如访问习惯,访问时间,还有访问的终端信息之类的,虽然这些信息单独拿出来都是没有意义的,但是统一整理出来就能定位到一个人,像很多广告的精准投放就是这个原理。而且这些隐式的隐私信息相比之下就会更加难以去除,相对来说利用也更加困难。
作为用户与网站之间的连接者ISP,他们获取隐私信息的方式就相当于是MITM,像以前数据没有加密的时候,那所有信息对于ISP来说都是完全透明的,那也没有什么隐私而言,还好现在成熟的加密技术可以有效的防止他们获取到用户的信息。不过即使是在加密时代,不恰当的处理依然是会泄露自己的信息。首先我们要知道他们会知道什么,虽然访问的内容对于运营商可能是不可知的,但是大多数情况现在人们都不会使用加密的DNS,所以用户访问的网站域名首先就会被泄露。另外即使使用了加密的DNS,很遗憾的是TLS1.2及以前版本有个叫做SNI的特性,这个东西是完全明文的,运营商同样也能根据这个知道你访问的网站。除此之外就是访问的IP了。一般来说现在的统计信息能很轻松知道哪个IP对应于哪个域名,还好有像Cloudflare这种CDN公司,许多网站指向的IP都是相同的,以致于根本没法根据访问的IP来推测用户访问的是哪个网站(当然对于CDN公司本身肯定是知道的一清二楚,包括访问与输入输出的内容也一样),因此运营商现在也几乎没办法仅通过IP来获知用户在访问哪个网站了。
首先对于上述问题,我们可以发现大多数的隐私泄露都是用户自己造成的,主要是自己输入的信息。一般来说如果遇到一定需要输入自己信息的一些网站,我们可以提前设定好一个完整的虚拟网络身份,名字和一些住址信息啥的还是比较好整的,不过难整的是联系信息,像中国手机号是实名的,如果用其他国家不实名的手机号运营商还是能通过基站定位到,而其他在中国的很多服务则必须使用手机号登录,这就是所谓的前台匿名,后台实名吧。当然中国服务不能用,我们也可以考虑用国外的,比如Google Voice啥的,不过我也没整过,我也只用过一些公共接码平台。邮箱的话相对倒是好整一些,注册一个邮箱不是什么复杂的事情。银行卡虽然很难整不过大多数网站我们应该不需要用到银行卡,真要付款可以考虑一下数字货币,国外的很多支付平台现在也都支持了。在上述信息准备好后我们在需要用到隐私信息的地方就只需要填自己做好的信息就可以。另外密码最好用密码管理器,所有网站的密码都使用随机字符,保存密码的设备最好用硬件Key,而且方便销毁的那种,以避免钓鱼事件的发生。
在上述情况我们可以很明显的看出来除了自己泄露的隐私信息,还有很大一部分是由于主动访问导致的,这种情况倒是也有很多解决办法,比较常见的就是使用代理,当然一层代理不行,一层代理实际上对于ISP来说跟没挂差不多,很轻松就能关联起来,要挂至少得两层以上,这样访问时的IP才能和实际上使用的IP脱钩,不然运营商一查目标网站访问IP的访问者,一看流量就知道是谁在访问了。
当然像我们这种没什么钱的人想整多层代理还是比较困难的,毕竟一台服务器不便宜,这时候我们可以用Cloudflare做中间那一层(虽然Cloudflare想追踪也很容易),这样ISP的追踪就很困难了,基本上就只能查到用户正在访问Cloudflare下保护的网站,其他什么也不知道。
如果连服务器都没有也可以用Tor,这个网络就相当于是一个社区维护的多层代理了,通常因为用的人多,所以安全性可能比自己搭的还要好。当然如果有条件的话可以自己的服务器和Tor叠起来用,这样还能避免某些网站歧视Tor出口节点以及可能会遇到蜜罐节点的问题。其实相比之下I2P要更加安全,但是体验……实在是有点拉跨,再怎么隐私我们也得考虑一下体验问题。
另外再希望安全些的话最好买用于当代理的服务器时也挂上Tor,付款的时候使用数字货币,以避免服务器商出卖或者信息泄露的问题。
还有一个很重要的问题就是DNS和SNI,想要解决这个问题,首先DNS也得过代理,不过也行,还有一种叫做DoH的DNS也可以在一定程度上保证安全,至少运营商看不到了,但是DoH的服务商还是能看到,所以还是都过代理比较好。SNI的话主要是现在有些网站它不支持像ESNI或者ECH啥的所以没办法,反正只要出口节点不要关联到自己就行。另外代理最好使用透明代理,而不是系统代理,因为有些软件它不想走代理,比如在使用带有穿透的功能,像直播或者语音电话啥的如果过网站服务器比较费流量,所以为了避免因为这些情况导致的代理失效,使用透明代理是更好的选择。
这里算是比较复杂的部分了,因为要做到这一点可能成本会更高。为了防止网站管理员获知访问者的行为,我们一般除了上述的操作外还要做一些别的操作,比如需要使用纯净的系统,并且在这个系统上不能够操作任何与现实有关的事情,而且随时都要挂着透明代理,一旦做了不正确的操作一定要及时销毁。据说Subgraph OS就挺好的(最好不要用Windows),有些时候管理员可以通过你不细心的地方发现你的关联性,所以最好用虚拟机或者另外的物理机,我的意见是用树莓派就挺好,系统装TF卡里,有必要的时候把卡直接拔出来一折就销毁掉了,非常的方便,内存用打火机稍微烤一下数据就消失了(危)。
用了上面的方式已经可以避免访问环境造成的隐私泄露了,但还有一个是时间,比如我要发布一个东西,时间一般来说是我按下发布按钮时就会发布,但是这样如果有人从你家窗口看到你按下回车的瞬间文章就出现在了他的屏幕上,那不就很轻松的发现了你与发布的东西的关联性了嘛,所以如果真的要考虑的话时间问题也很重要,比如我想在发送这篇文章的时候不想让别人知道我什么时候发送的,我可以在我的服务器上写一个脚本,当它在某个时间点时在自动commit&push上来,这样大伙就不知道我发送的具体时间了。评论也是差不多的道理,只是操作更复杂一些,有可能会用到浏览器自动化工具,就是操作起来更麻烦一些。
从上面来看想搞比较完美的隐私还是很困难的,所以全程隐私基本上在地球上不太现实。如果只是希望在发布或查看某些信息时需要隐私就可以用到以上方案了,我们可以编一个身份,拿树莓派安装个自己喜欢的Linux系统去个咖啡厅连上公共WiFi在上面用数字货币挂着Tor在服务器商买个VPS然后用Tor连上去在上面再搭个代理,再用这个Tor+代理去访问网站,用编好的身份注册,看好想发布的位置再用VPS写个脚本选个喜欢的时间通过自动化脚本把想说的话发出去,有必要的时候再随手找个焚烧炉把树莓派丢进去销毁,我们的隐私行动就完满结束啦😂。