评论数:800条

如何隐藏你的踪迹,避免跨省追捕[10]:从【身份隔离】谈谈社会工程学的防范

  在今年最后一天,来发本年度最后一篇博文。
  这次又隔了好多天才发文,距离上一篇博文已经20天。不过在22日,俺上博客回复了评论——所以俺静默的时间跨度【没有】超过2周。一切正常,大伙儿无须担心。


★引子


  前几天,俺听说知名的翻墙软件 SSR 的作者(breakwa11)遭遇人肉。从这件事情可以看出——即便如 breakwa11 这样的技术高手,在防范人肉搜索方面也难免有疏忽之处。
  所以,俺借着这个机会,继续聊“社会工程学的防范”。今天这篇以【身份的隔离性】作为切入点。
  (在本系列中,关于“社会工程学的防范”,之前已经写过一篇,今天这篇是第2篇)


★“身份隔离”的重要性


  在“隐匿性”这个领域,“身份隔离”是一个容易被忽视的盲点,甚至包括一些技术高手也忽略了这方面的防范。
  忽视了身份隔离,可能会导致你的不同身份之间存在某种微妙的联系(关联性)。一旦有人想要追溯你的真实身份,这种(跨身份的)关联性会成为你的致命伤。

  在本文中,俺首先对几个关键名词进行解释(以避免歧义);然后,俺会介绍一些常见的“跨身份关联性”;最后,介绍一些防范的指导原则和技术手段。


★名词解释


◇身份


  “身份”这个词儿很通俗,俺就不解释了。
  在本文中会涉及两种“身份”,分别是:“自然人身份”和“网络身份”。

  自然人身份(真实身份)
  这个很好理解。所谓的“自然人身份”,也就是你的【身份证/护照】对应的身份。
  对于大多数人而言,只会有【一个】“自然人身份”;少数特殊的人(比如间谍)可能会有不止一个“自然人身份”。
  在本文中,为了简单起见,只讨论前一种情况。(对于大多数人而言,这已经够了)

  网络身份(虚拟身份)
  某些网民会给自己创造一个“虚拟身份”。这个虚拟身份在现实生活中【找不到】对应的自然人。
  就以俺自己来举例——“编程随想”这个身份就是一个虚拟身份。
  对任何一个网民而言,只要此人愿意,都能够创建出【多个】虚拟身份。

◇网络帐号


  “网络帐号”是指那些需要登录(用户认证)的网络服务。
  比如说你需要登录才能使用你的 Gmail 邮箱,那么这个邮箱帐号就是你的网络帐号。

◇“网络帐号”的【属性】


  不管是哪一种网络服务,其“网络帐号”必定会包含很多属性。
  俺以 Gmail 为例:
  当你注册 Gmail 帐号时,会让你填写一个表格,里面有:用户名、手机号、地理位置......上述这些都是该帐号的“属性”。

◇“属性”的【信息量】?


  关于“信息量”这个概念,当年在写《如何保护隐私》系列的时候,曾经聊过(参见“浏览器指纹”那篇)。

  为了让大伙儿明白“信息量”这个概念,俺通过举例来说明:
  假设你要定位某个人——
  如果你只知道此人的“性别”,那么你只能把范围缩小到二分之一。
  如果你只知道此人的“星座”,那么你只能把范围缩小到十二分之一。
  如果你只知道此人的“身份证号”,那么你基本上可以唯一地锁定此人。
  在这个例子中,“身份证号”的定位效果明显高于另外两个。在技术行话中,咱们称之为:“身份证号”的信息量高于另外两个属性。

  下面俺列举一些常见的属性及其信息量的高低。

信息量很高
身份证号
手机号
手机 IMEI 串号
网卡 MAC 地址
邮箱地址
家庭住址

信息量中等
工作单位
毕业学校
生日(包含“年月日”)
籍贯(精确到区县)

信息量很低
性别
星座
年龄
籍贯(精确到省份)


★“网络帐号”的关联性


  前面喷了一堆口水,解释了相关的概念。现在开始进入正题。
  下面,俺归纳了几种常见的关联性。这些关联性如果出现在【同一身份】的不同帐号,【没有危险】;但如果出现在【跨身份】的不同帐号,那就【非常危险】。

◇相同的【高信息量】属性


  举例:
  你注册了两个邮箱,用于两个不同的身份。注册过程中需要进行短信验证,可惜你只有一部手机,于是你在这两个邮箱中设置了【相同的手机号】。如此一来,你就留下了一个潜在隐患。
  万一“邮件服务器被入侵”或者“你的2个邮箱帐号被入侵”,入侵者发现这两个邮箱帐号绑定了同一个手机号,自然就明白:这两个帐号隶属同一人。

◇【操作系统】导致的关联性


  当你操作网络帐号,总是需要某种客户端软件(比如:浏览器、手机 app 等)。这些客户端软件会在操作系统中留下帐号相关的某些信息。
  比如说:浏览器会在 cookie 中记录帐号的信息,聊天工具也会在本地存储聊天帐号的用户名(user ID)。
  如果你在同一个操作系统中使用了不同的网络帐号,一旦这个系统遭到恶意软件(木马、流氓软件)的攻击,攻击者就有可能发现这几个帐号信息,于是攻击者就意识到这几个帐号属于同一个自然人。

◇【公网地址】导致的关联性


  如果几个帐号在【公网 IP 地址】上表现出某种相似性,并且次数足够多,那这些帐号就有可能存在关联性。

  举例1:
  假设你在某论坛上注册了3个马甲(不妨称之为 A B C)。为了避免暴露自己的公网 IP,你购买了一个 VPS 作为代理,来访问该论坛。(此时你采用的是【单重代理】)
  在这个场景下,如果论坛的管理员对每个帐号的“访问者 IP”进行分析,就会发现:A B C 这三个论坛帐号【每次页面访问】都是来自同一个公网 IP。如果这个论坛管理员进一步追查,会发现这个 IP 来自某个 VPS 提供商。于是,管理员就开始怀疑——这三个论坛用户隶属同一个自然人。

  举例2:
  (不熟悉 TOR 原理的同学,请略过本例子)
  看完上述例子,有些同学自然会想到【基于 TOR 的多重代理】。这也是本系列经常唠叨的一个招数。
  现在,把上面那个例子稍作修改——你每次都使用 VPS+TOR 的方式操作这三个马甲。但这里有一个细节:你本地只安装了一个 TOR 客户端,也就是说:这三个马甲共用一个 TOR 通道。
  这种情况下,如果你用三个马甲【同时发帖】,论坛的管理员还是会发现——A B C 三个帐号来自同一个自然人。为啥捏?
  首先,TOR 的线路每隔10分钟变化一次,每次变化之后,出口节点就不同了。
  其次,因为这三个马甲共用一个 TOR 通道。不管 TOR 的出口节点怎么变化,在同一个瞬间,这三个马甲使用的出口节点必定是相同的。如果三个马甲同时发帖,这三个帐号在论坛服务器上留下的“访问者 IP”必定是相同的。有经验的管理员就可以看出这三个帐号的关联性。

◇【时间】导致的关联性


  如果两个帐号在【时间】上表现出某种规律,并且持续足够久,那这两个帐号就有可能存在关联性。

  举例:
  假设你在某个系统中安装了两个 IM 客户端(对应两个不同帐号)。并且你把这两个 IM 客户端都设置为:自动运行 且 自动登录。
  于是,每次你开机之后,这两个帐号就会在间隔很短的一个时间段内【同时上线】;每次你关机之后,这两个帐号也会在很短的时间间隔内【同时下线】。
  这种现象只要持续足够多天,基本上就可以断定这两个帐号在同一个操作系统,因此也就可以断定属于同一人。


★几个通用的指导原则


  首先来聊几个【通用的】原则。
  为啥俺要强调【通用】?因为这些原则与具体的技术手段无关。不管将来技术如何发展,这些原则依然能适用。

◇原则1:“虚拟身份”的划分越细越好


  前面说了:每个人都可以有一个自然人身份和 N 个虚拟身份。
  为啥俺认为:身份划分得越细越好?
  其一,这个道理就如同船舶设计中的“水密隔仓”。一旦出了意外,只有少数隔仓进水,整艘船还不至于沉掉。
  其二,身份划分得越细,每个身份包含的信息量也就越少。一旦有人想要对你的【某个身份】进行人肉,对方可分析的信息量也越少。

◇原则2:对于匿名性要求很高的身份,包含的帐号要尽量少


  帐号越多,就越容易出纰漏。一旦出现纰漏,就会威胁到身份的匿名性。

◇原则3:一个“帐号”只能隶属【一个】身份


  换种说法:禁止多个身份共用一个帐号。
  【不同身份】使用同一个网络帐号是非常危险滴!这种做法一旦被有心人发现,别人就知道:这几个身份对应的是【同一个自然人】。

◇原则4:需要匿名的“虚拟身份”,其所属的“帐号”与其它身份的帐号必须【彻底隔离】


  如何做到“彻底隔离”捏?在下面的章节,俺会介绍一些具体技术措施。


★一些具体的技术措施


◇对于匿名性要求很高的身份,其相关帐号的操作,要遵循本系列前面几篇的建议


  在本系列的前面几篇,已经讲了很多隐匿性的措施。
  如果你的某个身份有很高的匿名性要求,其所属帐号的操作,一定要遵循前面几篇教程的建议。比如说:软件的选择、系统的加固、存储的加密、多重代理、虚拟机隔离......

◇每个匿名身份要有一个【专属】的系统


  此处所说的“系统”可以是虚拟的 Guest OS,也可以是一台物理机。(关于 Guest OS 的介绍,可以看另一个系列《扫盲操作系统虚拟机》)
  你把该身份所属的帐号都放在这个系统中。这个系统中【不能】有其它身份的帐号。

◇每个匿名身份有一个专有的 TOR 通道


  如果看过前面提到的“基于公网地址的关联性”,你就明白为啥要搞【专有的 TOR 通道】。
  如果【多个身份】下的帐号共用一个 TOR 通道,【有可能】导致这些(不同身份的)帐号共用同一个【出口节点】。这会有潜在的隐患。
  所以,为了保险起见,每一个身份至少要有一个专属的 TOR 通道。

◇对于匿名性要求很高的身份,其所属帐号【不要】绑定手机号


  在天朝,手机是强制实名制的。如果你在某个网络帐号中绑定了手机号,一旦该帐号出现意外(比如帐号被盗),那么你在帐号中绑定的手机号就会暴露,进而导致你的身份暴露。
  如果你因为某些特殊原因一定要绑定(比如为了短信验证),可以有两种办法:
1、找一个“虚拟手机号码”的服务,可以帮你搞定短信验证
2、去境外搞一个【不记名】的手机卡

◇对于匿名性要求很高的身份,【不要】在手机上操作相关帐号


  “手机操作系统”在功能上远远不如“桌面操作系统”。很多安全防范的措施,桌面系统可以搞定,而手机系统做不到。典型的例子是“操作系统虚拟化”。
  另一个让俺对手机很不爽的地方是——手机系统中有太多不开源的模块。苹果的 iOS 就不必说了。即使是 Google 的 Android 系统,虽然是基于 Linux 内核,但有大量的系统模块是 Google 自己维护的闭源软件。如果你买的是国产手机,手机制造商还会在系统中加入一大堆乱七八糟的软件。这样的系统环境,实在难以让人放心。
  综上所述,高危身份所属的帐号【不要】在手机上操作。


回到本系列的目录
版权声明
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者编程随想和本文原始地址:
https://program-think.blogspot.com/2017/12/howto-cover-your-tracks-10.html