引言兼序
前面的嘻话里我介绍了软件开发工程项目中通用一些的“锦囊妙计”,目的是帮助团队更好地协作。
在软件安全和商业运作方面更要用计。由于是跟人斗,军事上的计谋更有用武之地。我们这里还是轻松点,举一些民间喜闻乐见的例子,比如“三十六计”,启发一下大家的思路。至于孙子兵法,鬼谷子和孟德新书,留待以后再深入探讨吧。
在开讲我们老祖宗的三十六计之前,先说下西方历史上有名的“特洛伊木马”。当年希腊人围城十年无法攻克特洛伊城邦,最后想出一条妙计,把甲士若干藏于十丈高的木马腹中,让敌人以为是撤退以后留下的战利品,拖入城中。乘夜黑风高,敌人庆功大意之时,士兵以绳索鱼贯而下,攻其不备,一举打开了胜利之门。
在恶意软件中,也有这么一类“病毒”,以无辜的形态捆绑在其它功能的华丽外表下被用户复制或者下载到计算机里。然后乘其不备发作,盗取有价值的信息,或者破坏操作系统令其瘫痪。虽然千年来大家早就明白了这个计谋,可还是屡屡上当,究其原因,还是源于这类“欺骗性”的外表和受害者获取战利品的贪婪,让人防不胜防。
现在就回过头来说说这个三十六计中的第一计,金蝉脱壳。
金蝉脱壳的典故
参见百科词条。“原文为:「存其形,完其势;友不疑,敌不动。巽而止蛊。」(保持原来的形态,完整原来的阵势,(使)友军和敌人既不怀疑又不轻举妄动,隐蔽转移主力,必须要先迷惑敌人。)
同友军联合对敌作战的时候,要冷静地观察阵地形势。如果存在另一股敌人,需要分兵迎击时,必须表面保持原来阵容的空架子。金蝉脱壳并不是一走了事,而是分身战术。因此,当我方的大军主力转移后,依然要使原来的阵地旌旗招展,锣鼓喧天,要十分逼真的保持原来的阵容。只有这样才可以使敌人不敢轻举妄动。友军也对我不生疑心。”
在三国演义里,诸葛亮用了很多次金蝉脱壳,保证了大军全身以退。
软件行业中什么时候用此计合适呢?我在软件安全和商业运作领域给两个例子。
软件安全里的金蝉脱壳
成功的黑客入侵,全身而退的案例是很多的,多到你可能都不知道的程度。因为我们听到的故事通常都是收尾不干净,留下把柄,才被暴露出来。
这里所谓“金蝉脱壳”,就是在完成盗取用户资产等恶意行为的过程中,貌似正在进行正常的操作,在不知不觉中,就完成撤退,把中间的结果清除干净,不落痕迹。
计算机法证学(Yu et al, 2017)告诉我们,软件操作时常输出文件,文件系统在磁盘上记录这些变更的同时,顾及效率,往往只更新文件区块分配表,而不一定彻底把数据清除。这样的例子很多,比如浏览器记下的Cookie文件,浏览历史,USB设备接入历史,甚或云计算服务器的内存映像等等。如果有心,还是可能用适当的工具把过往的变更,恢复出来,露出原形。在术语里这叫做持久性(persistence),是金蝉脱壳过程的天敌。
我们在需求工程年会上有篇论文(Pasquale et al., 2013),提出了预防性地获取呈堂证据的需求,有兴趣的读者可以参考一下。
论文提出的观点是,防止(或者能够)金蝉脱壳,关键是获取(或者销毁)证据,最好要在不知不觉中,事先规划,充分准备,才能最后达到目的。
商业运作里的金蝉脱壳
商业运作领域固然合作共赢是主流,也充满了尔虞我诈。相信在商场上的三十六计大家已经有所了解。这里就讲个软件商业领域的实例,增加些感性认识。
话说当年微软(Microsoft)和开源软件之间势同水火,欧盟希望裁定微软垄断。具体到开源代码,还是开放标准各执一词。
欧盟认为,微软故意不把产品的内部设计提供给公众,使得其他从业人员无法公平竞争。
但是,在开源领域有那么一些奇葩的项目,比如Samba,通过黑客们的不懈努力,掌握了微软文件服务和网络协议的技术堆栈,从而保证了Windows和Linux在文件系统卷和网络打印共享之间的兼容。
对于微软的律师来说,这个项目的存在是把双刃剑,既说明了微软产品需要额外的工作才能同其他系统兼容,又说明了微软的技术标准足够开放,能够让外部项目建立这种兼容性。
在双方律师唇枪舌箭交锋之后,微软的反垄断官司并没有赔偿多少钱,可以说基本不了了之,全身以退了。
这个例子带来的一项启示是,只要你的软件公司能制定一个开放的标准(哪怕仅仅是事实上的标准),打开一道口子,允许外界扩展你的产品,那么从法律上讲,别人就不能告你垄断市场,金蝉脱壳了。
当然,自此以后,微软的产品标准文档和白皮书就汗牛充栋了。
两条实用招数
如何才能识破金蝉脱壳计呢?要领在于“明察秋毫”。比如,司马懿能从蜀军埋锅造饭的细节看到其相持还是撤军的策略,而不是靠清点外在的旌旗数量。
如何才能防范金蝉脱壳计呢?未雨绸缪(Proactive),提前做好充分准备(Pasquale et al.,2013)。“若要人不知,除非己莫为”。只要恶意软件和商业利益在搞怪,金蝉脱壳就大行其道。要知道“螳螂扑蝉,黄雀在后”的道理,随时要做好全身而退的准备。喜迎财神的同时减少失控的风险,是不是更难了?
仅以此说,抛砖引玉。
参考文献
Pasquale, Liliana; Yu, Yijun; Salehie, Mazeiar; Cavallaro, Luca; Tun, Thein Than and Nuseibeh, Bashar (2013). Requirements-driven adaptive digital forensics. In: 21st IEEE Requirements Engineering Conference, 15-19 July, 2013, Rio de Janeiro, Brazil.
Yijun Yu, Blaine Price, Andrew Smith. Digital Forensics, Security and Information Forensics pathway. The Open University Postgraduate Course. 2017.
参见嘻话
让普通人像搭“乐高”积木那样开发物联网软件
开放系统的哲学思考之二:开源软件和开放标准
Facebook的开源软件怎样进行专利保护?