编程随想|如何隐藏你的踪迹,避免跨省追捕[9]:从【时间角度】谈谈社会工程学的防范

★引子

距离前一篇博文有14天了。距离上一次评论区留言(本月20日)也有9天了。这些天俺在干啥捏?主要是重构评论区的代码,顺便优化一下性能。仔细的读者应该能感觉到界面上的一些小变化。后面俺会单独写一篇博文,聊聊近期对评论区的改造。
几天不出现,又有人在评论区散布谣言(说俺被捕了)。估计造谣的家伙也就是之前搞大规模刷屏的职业五毛【团队】。
职业五毛的造谣正好给了俺灵感——今天来聊一下:俺为啥要时不时地静默一段时间?——这其实是防范社会工程学风险的重要措施。

★关于本系列的说明

话说本系列已经中断2年零2月——对俺的懒惰(一贯挖坑不填),再次表示严重抱歉 :(
除了俺的懒惰,还有一个原因是:(对于防跨省)技术方面已经聊得差不多了。所以要继续写的话,俺就要开始聊【非技术】的话题——所谓的【非技术】也就是指【社会工程学】层面。
关于“社会工程学的防范”,这是一个很大的话题,而且相关的注意事项非常零散,俺一次性想不了那么全。所以捏,就分成几篇来写,每篇聊其中一个角度。今天这篇是头一篇,以【时间角度】作为切入点来进行探讨。

对【社会工程学】相关的概念不太熟悉的同学,建议先看俺写的另一个系列《扫盲社会工程学》,然后再来看本文以及本系列后续博文。

★名词解释

首先来介绍几个相关术语。

◇在线时间

这是本文重点要聊的核心概念。
从字面意义而言就是:在线活动留下的时间印迹。
如果要更严密地说:“在线时间”是时间轴上若干个线段的并集。每个线段表示一次在线活动。

◇网络身份

在讨论“在线时间”这个概念的时候,一定要牢记:【“在线时间”是相对于“网络身份”而言的】。
啥意思捏?稍微解释一下:
每个人都可以有多个网络身份,不同的网络身份,其在线时间可以是不同滴。

◇【显式】在线时间 VS 【隐式】在线时间

顾名思义,【显式】就是指活动痕迹比较明显的;【隐式】则反之。
为了解释这两者的差别,以俺博客来举例。
当俺发出一篇博文,或者在评论区回复读者留言,这些活动都是很明显的,属于“【显式】在线时间”。
有时候,俺会去修改博客的界面代码(比如近期俺就在频繁修改“反刷屏代码”)。如果俺对代码的修改【没有】引起界面功能的变化,这种修改通常不会被读者感觉到。那么这种情况就算是“【隐式】在线时间”。
那么,【隐式】在线时间能否被刺探出来捏?接下来会聊到这个话题。

◇静默期

没有网络活动的那些时间段,称之为“静默期”。
“静默期”相当于时间轴上那些线段之间的间隙。

★“在线时间”会暴露哪些信息?

即使不参照其它因素,仅仅观察某个网络身份的“在线时间”,就已经可以收集到对应自然人的信息。如果这个网络身份的活动非常频繁并且维持足够长的时间,收集到的信息就会很丰富,足以刻画出其背后那个自然人的详细特征。
下面举几个例子:

举例1:时区
这个是最容易想到的。如果某人上线很频繁或者在线活动的时间很长,那么就可以观察出此人的作息规律(人总是要睡觉的);通过作息规律就可以猜测出大致的时区范围(±2)。
比如说:早在前几年,某些有心的读者就通过俺回复评论的时间规律,判定俺在“东8区”。

举例2:省份
前几年,新疆经历了长时间的封网(物理断网),时间跨度是:2009年7月~2010年5月。假设某个网友在 Twitter 上频繁发推。然后在2009年7月突然停止发推并持续至少10个月,那么有【很大概率】——这个帐号背后的自然人位于新疆。
(请注意:俺说的是“很大概率”而不是“一定”,因为还存在其它小概率的情况)

这方面的例子还有很多,大伙儿自己琢磨。

★“网络身份”与“真实身份”的时间关联性/相关度

前一个章节提及的“暴露信息量”,都还【不算严重】——因为暴露出来的信息量比较小。
现在俺要来聊一下比较严重的情况。

◇一个反面案例

为了形象一些,拿俺本人来【虚拟】一个反面案例。
假设俺很勤快(实际上俺很懒),【每天】都在博客上回复读者留言,并坚持了很多年(实际上俺连续回复评论很少超过3天)。
由于博客的读者很多,俺身边的同事或朋友,也有人是读者。当然,一开始这些身边的同事或朋友,并不知道编程随想原来就是某某人。
现在,假设出现了突发的意外——俺因为出车祸住院一周。于是就【没法】再如往常一样【每天】回复读者评论。
由于这个规律已经持续了 N 年,一旦出现中断就会给读者留下很深刻的印象。
那么,俺身边的这几个读者就会发现一个很严重的巧合:编程随想以往很有规律的活动突然中断一周,而身边的某某人正好也在【同一时间段】住院。
这种严重的巧合,足以导致身份暴露。

(通过上述这个虚构的案例,你应该明白:两种身份的关联性意味着什么)

◇这个案例的本质

上述案例之所以导致身份暴露,本质上可以归纳为如下几点:
1. 网络身份需要靠真实身份操作(这句是屁话)
2. 网络活动的规律性太强(规律性越强,一旦“打破规律”给人的印象就越深刻)
3. 意外事件导致网络身份和真实身份出现【同样的】“时间空档”(术语叫“高度相关性”)

★多个“网络身份”之间的时间相关性

如果同一个“自然人”操作多个“网络身份”,这些网络身份之间也会存在与上述案例类似的时间相关性。
(具体的原理及例子差不多,俺就省点力,不浪费口水了)

★如何降低上述这2种相关性?

像上述这样的反面案例,该如何防范捏?下面说说俺能想到的几点(俺想的不一定全,欢迎大伙儿补充)。

◇多人操作

这是最容易想到的一招。
如果有多个自然人操作同一个网络帐号,即使某个自然人出现意外,其他人依然可以继续操作该帐号。于是对应的网络身份就【不会】因为意外事故而出现静默期。

◇自动机制

“多人操作”的本质就是:几个人互相作为备胎。
另一个有点类似的招数是:用某种【自动机制】来作为备胎——在无法进行人工操作的时候,依靠自动机制进行操作。
比如某些博客平台或 SNS 平台提供“自动发文”的机制。另外还有第三方的一些服务(比如 IFTTT)可以同时支持多种网络平台。

◇人为静默

最后,隆重推出俺本人使用的招数——人为制造【随机】“静默期”。
这个招数的好处在于:
1. 【随机】出现的“静默期”会让网络身份的活动显得【没有规律】
2. 如果之前经常出现静默期,一旦真实身份因为意外而无法上线,这时候导致的静默期就【不会太显眼】

◇小结:上述几招的缺陷及对比

“多人操作”的【缺点】
1. 信任度的问题(像俺这种高危人士,没办法找到可信的人共同操作帐号)
2. 风格的问题(比如几个人写同一个博客,风格多半不一致——读者会抗议)

“自动机制”的【缺点】
1. 自动机制能做的事情很有限(事先写好博文自动发是可以滴,回复读者评论就没办法“事先写好”)
2. 自动机制很容易被侦测/被识别(自动机制毕竟是“死”的,很难模拟活人)

“人为静默”的【缺点】
1. 会降低网络身份的效率(大概就这一个缺点,这个缺点俺可以接受)

综上所述,在这3种防范措施中,俺选了最后一种。

★对“【隐式】在线时间”的探测

说完身份相关性的风险,再来说说“侦测”的话题。
前面提到说:“【隐式】在线时间”的活动痕迹不那么明显。那么,是否有办法刺探出来捏?下面就来介绍几种探测的手段(只是举例,未必全),然后再介绍防范的措施。
所有的刺探手段,都可以归纳为两大类,分别是:【主动型】和【被动型】。

◇被动探测

所谓的“被动探测”,就是【被动】地收集目标对象的网络活动痕迹(尤其是那些比较隐蔽的痕迹)。

举例1:
就拿前面的例子(俺修改博客代码)来说事儿。
如果某个有心人想要了解俺何时在修改博客代码,他/她完全可以写一个“页面抓取脚本”,循环抓取俺博客的页面;然后从抓取的页面中提取出其中的 JS 代码;最后再对比 JS 代码的【变化】(技术行话叫 diff)。一旦发现变化,就可以知道:俺在刚才的那个循环周期修改过博客代码。

举例2:
如果六扇门(公安、国安)想要收集某个目标对象的在线活动信息,并且目标对象使用的是【墙内的】网络服务。那么六扇门只需要找到对应的服务提供商,就可以从服务器上获得非常详细的帐号活动日志。
说到这里,补充一下:
通过【代理】的方式使用网络服务,可以隐藏自己真实的公网 IP,但是【无法】隐藏自己的网络活动时间。一旦使用【墙内】的网络服务,朝廷方面可以很容易地拿到任意帐号在服务器上的活动日志,从而获得该帐号的“在线时间信息”。

◇主动探测

所谓的“主动探测”,就是【主动】发起一些行为,然后看目标对象是否会产生反应。

举例1:
如果目标对象有一个公开的邮箱,执行主动探测的家伙就可以往这个邮箱地址发试探性的 email,然后看看该邮件是否有【回信】,从而了解对象是否在线。
(注:这招是社会工程学的基本伎俩)

顺便说一个稍微高级点的邮件技巧——【不依赖回信】也能玩探测的把戏。
在发送的邮件中使用 HTML 格式;邮件正文中包含一个肉眼不易看见的小图片(大小为:1×1像素);该图片位于邮件发送者自己控制的服务器上。
邮件接收者只要打开/查看这封信,就会导致图片被加载,那么在图片所在的服务器上就会留下一个访问记录。于是探测者就收集到了目标对象的在线时间了。
(注:这招是垃圾邮件发送者惯用的招数,通过这招,投放广告的商家就可以了解垃圾邮件有多大比例被受众打开/查看)

举例2:
再次拿俺博客来说事儿。
最近这几天,俺忙着改代码,没有去评论区回复读者留言,然后就看到好几条造谣的留言,用各种法子忽悠说俺被捕了。
职业五毛这么干,最容易想到的一个目的就是:制造恐慌气氛;但还有一个不太明显的目的,就是【激将法】——通过各种造谣,看看俺是否会跳出来反驳,从而了解俺是否在线。

★对上述侦测手段的防范

◇选择【靠谱的】服务提供商

俺要第 N 次唠叨:
高风险人士不要用【墙内的】服务。即使是【墙外的】,也要谨慎选择。不要用历史上有污点的公司提供的网络服务。

◇使用【非即时】的沟通方式

即时性的沟通方式(比如:文字聊天、语音聊天)暴露的在线时间实在太多了。改为【非即时】的沟通方式可以大大降低在线活动的时间跨度。
比如俺以“编程随想”这个身份活动的时候,从来不用 IM。俺更倾向于用博客评论区或者邮件进行沟通(尤其是前者)。

◇小心留意【私密的】沟通方式

前面俺提到了“基于 Email 的 主动探测”。除了 Email,还有 IM 以及 SNS 的私信,也都可以用来进行主动探测。
“Email、IM、私信”这几种沟通方式的共性就是【私密性】——其沟通内容是不公开的。
表面上看,私密性的沟通好像更安全;其实不然——这恰恰是个盲区。当网民在公开的场合(比如:BBS/论坛、评论区)发言反而会比较小心,而在私密的沟通时,更容易麻痹大意。

说到这个话题,顺便分享俺的经验:
在上个月(5月)的博文《庆贺本博荣获【更高级别朝廷认证】——谈谈近期的“帐号入侵、刷屏、钓鱼”》中提到说:

最近两三年,俺一直以【博客评论区】作为主要的沟通方式,邮件用得越来越少。今后还是会保持这个风格。

当时分析了【技术】层面的理由,今天来说说【非技术】方面的理由:
由于博客评论区是公开的,而且还提供 RSS 输出。所以俺只需要用 RSS 阅读器订阅相应的 feed,就可以看到博客评论区【所有的留言】。这整个过程都【不需要登录 Google 帐号】。
换句话说:俺可以在彻底静默的情况下,了解读者与俺的沟通情况。

◇保持平常心

前面俺提到了:基于“激将法”的主动探测。
要防范激将法,最彻底最根本的措施是:【调整好心态,保持平常心】。很多年轻人血气方刚,一激就跳出来了,说白了就是心态的问题。

既然说到心态,顺便聊聊性格的重要性。
在安全界(包括国内和国外)有很多技术高手,其中某些人的技术水平比俺要好得多,但是却阴沟翻船了,为啥捏?
俺观察下来,大部分情况都是因为性格和心理问题——要么太粗心、要么太冲动、要么太虚荣、要么太轻信……——这其中的任何一种心理缺陷,都足以抵消掉【所有的】技术防范措施。

2017年6月29日, 6:47 下午