[他多次在Black Hat会议上担任讲者,是出生在法国又在十岁回乡的日本人,将编程视为至大乐趣的程序员,喜欢C++和汇编语言但不会强加个人喜好的自由派,碰到困扰会先笑起来的绅士。本文主角,如果让他自己用一个词形容,大概是:正在前进的安全工程师]
一周后他将在美国Black Hat 2015大会上做演讲,一天前他在日本家中测试程序的新功能。而现在他站在位于香港岛湾仔的,香港会展中心的某一层,刚刚结束了自己在一场科技大会上的演讲。
这是他第二次来到香港,上一次来是八年前,那时第一代iPhone才刚出现。本次成行原因是Web Summit——一个起源于都柏林的创业聚会——联系了他,希望他成为他们亚洲首场活动(RISE)中的讲者。虽然这个安全工程师之前只在Black Hat大会和安全研究活动上发表过演说,从来没有听过这一创业圈的聚会,但听说和科技相关,还是迅速同意了。
他决定像往常一样讲讲自己开发的ShinoBot Suite。
什么是ShinoBot Suite?
ShinoBOT Suite是一套包含文件传输和密码截取等行为在内的,用于检测安全产品性能的远程攻击模拟器。用比较浅显的话讲,既是通过模仿病毒来观察防御软件的反应。
这个定义已经是他演讲主题中最容易听懂的部分,在他开始详细介绍Shinobot.exe会采取的具体操作以及它和Shinobot.com间的信息交换时,大部分在场观众,那些更喜欢在融资数目和商业模式上鼓掌的人,都已经陷入了云里雾里的状态。
他自己也注意到了这种情况。大约两小时后,他将在聊天时一边笑着猜想到底有多少人听懂了,一边调出由随行的侄子拍摄的现场照片,向对面的人一一指出观众里前排两三个看起来全部听懂了的人,和后排一两位甚至已经睡着了的先生。
他现在就在舞台边等着那个对面的人,虽然按照之前的约定,那人在他演讲结束前就应该在观众席里等他了。
那人,很抱歉,就是在下我。
[如交战般有趣]
活动开始前几天,我在讲者名单中注意到了Shota Shinogi以及他那个和场内其他演讲相差甚远的技术主题,于是发邮件希望谈谈此类技术话题在网路创业类聚会上的作用。
邮件在东京时间凌晨3点45分发出。3点48分,邮箱里就出现了他的完整回复,之后我们在半小时内确定了具体的时间安排。工作狂,大概是我对他的第一印象。
然而在我迟到了10分钟出现在舞台边时,这位工作狂只是很自然地结束了和观众的对话,笑着和我握了握手,又介绍了一起来的侄子。我们边寒暄边往回走,在人满为患的media village找了两个座位,正式谈了起来。
首先当然是ShinoBOT Suite的更新。
(一) 新版本
他拿来我的本子,在上面画下简易的示范草图。
[由于我们又在背面写了很多字,原来的草图可能看不清楚。左边是笔者做的简略说明图]
ShinoBot的用户,通常都是安全软件业从业人员或互联网公司里维护系统的人。 在之前的版本里,他们需要连接软件和网站(Shinobot.com)进行操作。但这个网址并不被大型安全网站,比如知名安全产品公司McAfee的TrustedSource, 列为可信任的网址,所以时常被拉入黑名单。
[TrustedSource页面上的ShinoBot]
因此,他开发了ShinoProxy作为中介,从软件(ShinoBot.exe)到网站的信息交换将通过这个中介进行,从而避开黑名单的限制。这个新功能也将是他本次在Black Hat 2015上演讲的重点之一。
在那之前,他正如很多攻击类黑客常干的那样,通过加密包含网址的关键字符串(比如"shinobot.com"),以避开安全软件的侦测。加密或者说字符串变换的方式有多种,他在官方网站上说明这点时举了一个例子,是用Ascii代码进行字母变换。
[Shota在网站上提供的加密方式的例子]
当然,未被列出的其他算法应该会比这种编程入门作业程度的加密手段复杂一点。至少复杂到如他所说,不易被小型防御软件破解的程度。
不过如你所见,这类掩藏关键代码的手段只能应付一些基本的, 基于特征来识别病毒的模式识别防御(pattern recognition)。 他的最终目的是让程序在电脑里运作,测试安全软件的行为检测(behavior detection)功能。
不断测试来比较不同的安全软件,并思索应该怎么调整,才是他一开始独自开发这套工具的原因。
(二) 如交战的攻防乐趣
“你有什么爱好?”
Shota想了半天,犹犹豫豫地说:“看F1赛车”。他稍后又解释,自己从来没开过,喜欢看是因为赛场上有竞争,很有乐趣。
竞争的乐趣让他迈入了安全行业。虽然这个行业看上去并不属于会让普通人,甚至普通程序员产生激情的地方。
在我直接提及一些程序员会觉得做安全比较无聊时,他做出了个“一山更比一山高”的手势(用两只手不断往上叠,把彼此压下去):“在这个行业里,你可以不断想一个攻击的方法,然后想怎么防卫它,然后再想那怎么调整攻击,然后再...”。
解释这个以矛攻盾的循环过程让他笑了起来。也正是在循环的某一段里,为了检测市面上各家安全软件在行为检测上的性能,他开发了ShinoBot这个模拟攻击工具。之后不断根据模拟攻击的结果以及用户反馈调整ShinoBot,并再针对调整版研究防御者应该如何优化防守。
他神采飞扬地比比画画,看起来仅从这一项里就已得到莫大的满足。
[似行走般自然]
的确是。我稍后问他除了看F1外,有没有日常生活中的爱好,比如工作结束后做什么,他毫不犹豫地回答:“编程(coding)”。实际上,在收到我邮件的那个凌晨,他也正默默在电脑前调试着ShinoBot。
但是编程不属于工作吗?他大笑起来,说自己总是在编程的,然后停下来,似乎想要想出个更能被常人称为爱好的东西,但没有成功。
我依照程序员的一般癖好提示,玩游戏吗? 他玩,但通常是那个业内人士基本都参与的CTF(Capture The Flag,网络安全人员间进行的技术竞技比赛)。
[CTF起源于知名黑客聚会DEF CON,之后在全球各地都有大大小小的赛事。配图来自DEF CON网站]
其他只有和策略分析有关的电脑游戏,比如文明(全称Sid Meier's Civilization,曾经风靡一时的战略类游戏 )。那么世纪帝国(Age of Empires,和文明类似的战略类游戏)呢? 他也玩。于是我们聊了一会帝国各版本的不同,并伤感于没有新作出现的事实。
既然喜欢策略类游戏,那他或许也喜欢下棋? 这个问题突然又让他笑了起来,他说自己以前喜欢下,但后来很少了,因为: “Coding is much more interesting than Chess”。
(四)少年Shota与纸上程式
如果要问他何时发现了程序的有趣之处,他大概会回答一开始。一开始,既是中学时。
出生在法国的Shota十岁才回日本,以法语为母语的他第一冲击就来自日文在理解上的复杂度(他同时严肃强调汉字——日文中的Kanji——尤其难)。幸好有些东西是共通的,比如数学。
当时中学数学教材上附有一些介绍程序语言的资料,当然,由于不是正式内容,老师并不会在课上教授。然而中学生Shota却被吸引,翻完了整本册子,试着在纸上编程。
听到这里我想起了小学计算机组的老师。他经常以一种缅怀或是遗憾的语气怀念自己当年在纸带上打孔塞入机器来测试程序的日子(跟着怒斥我们太沉迷游戏不珍惜光阴)。于是我问是Shota是否也是如此。
不是。他所谓的纸上程式,真的就是字面意义上的纸。
他在纸上写下代码,然后在脑海里想象是否能运转顺利。 幸好,这种实在悲惨的日子没有持续多久,不停打工的中学生Shota终于存够了钱,在1997年买了部已经有四年寿命的二手电脑。
当时微软已经推出了比较成熟的,面向个人的操作系统Windows 95。 可惜,买完电脑后的钱并不够他买下系统软件,于是只能从MS-DOS开始。 听到这里,我告诉他自己小学刚开始用计算机的时候也是DOS,我们再次互相感叹一番,然后顺势转入了下一个话题。
关于喜好的话题。
(五)似行走的编程
对程序员而言,尤其是那些对command line有偏执的极端正统程序员而言,MS-DOS和Linux之类的系统会好过Windows吗?他马上明白了我的意思,说不会。 因为那类图像系统的出现让操作便捷了很多,也让普通人方便入门。
那么程序语言呢?作为程序员有自己最喜欢或者最常用的语言吗?
在那之前,也就是互相感叹过去的时候,他已经在我的本子上从Q BASIC (那是他最先学会的语言)开始列出了自己一路的过程。
现在,他盯着那列语言想了想,圈出了C++,解释说这算是他最喜欢的语言。 然后又圈出了PHP,因为“开发ShinoBot的时候有用上它”,最后又圈出了“x86 Assembler ” 和 “x64 Assembler” (常用汇编语言)。
我们又进入下一个热门讨论项,喜欢peer review吗? 这一硅谷和中国北京互联网公司常见的风气似乎没有浸染到他所在的公司。Shota认真理解了一番所谓捉对编程的概念后,又笑了起来,并庆幸自己没碰上这种事,因为他更习惯独自敲打代码。
这个非典型的,看起来似乎太温和的程序员又面临了下一个严峻的考验:对你而言,造就一个优秀程序员的是什么(What makes a great coder)?
他第一次出现了窘态,重复了遍问题,感叹说实在太难回答了。然后,似乎是在回答也似乎是在解释为什么回答不了的,开始说明自己对程序员的理解。
“对我而言,我编程就像我走路”。(I code like I walk)
这算是比较新颖的比喻。通常而言,程序员们更常说自己编程就像说话(code like I talk)——滔滔不绝,不需思考,手到擒来,简明易懂等等。
他用手比出一条平稳的线,说,就像走路那样自然,我在想编程的时候——不管那是什么时候——就编程,同时也用我习惯的方法来编程。比如说加注释,一些程序员会加很多注释,一些不喜欢加,我会在我需要加的时候加。
他打开了自己的笔记本电脑,给我看他前几天写的代码。 并指着其中的一部分。“比如我在用汇编语言指令时,会加详细的注释,不然自己以后肯定会忘了这些是什么意思。 但在一些其他的地方很少加,因为自己看得懂”。
我们就这么陷入了加注释的习惯这一话题,直到最后分别,都忘了和他确认,他心中造就好程序员的东西到底是什么。
(六)结尾与生活
他的侄子,二十二岁的在投资公司实习的大学生,以惊人的耐性(大概还有自娱自乐的能力)坐在我们旁边微笑了两个小时,终于在端来新的咖啡后决定离开去听一场喜欢的演讲。
Shota 接过侄子托管的尼康单反相机,开始极有趣味地向我展示它的性能。 比如对焦的准确度,放大远景后的高清画质等等。 他顺便又提起了侄子,他们会在活动结束后用一个下午去澳门玩玩,因为侄子二十二岁,可以进赌场了。
我们讨论了一些非常琐碎的问题,比如到底有没有必要去澳门和去澳门一晚上够不够玩等等。以及一些切实的问题,比如从小在法国长大并会流利法语给他带来了什么,常见的答案应该会和欧洲文化的魅力有关,不过Shota不是个常见的人。 他的回答是基本没什么,因为 “法国信息安全业不发达,法语研究资料不多”。
我们开始往会展门口走,他选择那里作为自己照片的拍摄背景,因为有个大大的RISE标志。标志前有一对参展团队也在拍照。等待时我对着玻璃幕墙边的人影和海景试拍了几张,然后开始问他一些关于这款相机的白平衡和景深的问题。
这些问题似乎给了他某种我很擅长摄影的错觉,所以在最后看到自己的纪念照时,露出了一种非常微妙的困惑表情。
[笔者技术有限,但相机真的是好相机]
我们向彼此客气地解释一番,比如拍到整个标志就会看不清人之类的,然后和平地再次握手告别。
这位安全工程师将把电脑放回住的酒店,然后或者写一会儿程序,或者早早为主办方晚上在中国会举办的晚餐换上衣服。他当时指着邀请函上的正式着装要求大笑了一番,但对于这个生于法国且一直频繁来回的人而言,穿得合适,肯定不会是个问题。
[后面的话:这是篇对一般读者而言技术性太强的访谈。实际上,此文的上一稿更加晦涩难懂。我当时考虑过干脆不发,但Shota对编程的那种“温和派的热爱” 实在充满了魅力,让人想起一些事实。
在选择越来越多,工具越来越复杂,大家习惯用喜欢的工具和语言站队并彼此鄙视时,我们可能都忘了,一开始,我们决定输入第一行代码,拍下第一幅照片,写下第一篇文章,都是因为那样做很有趣。
献给所有仍然在有趣中生活的人,以及各位长期被忽略的安全工程师。]