[他多次在Black Hat會(huì)議上擔(dān)任講者,是出生在法國(guó)又在十歲回鄉(xiāng)的日本人秸妥,將編程視為至大樂趣的程序員滚停,喜歡C++和匯編語言但不會(huì)強(qiáng)加個(gè)人喜好的自由派,碰到困擾會(huì)先笑起來的紳士粥惧。本文主角键畴,如果讓他自己用一個(gè)詞形容,大概是:正在前進(jìn)的安全工程師]
一周后他將在美國(guó)Black Hat 2015大會(huì)上做演講突雪,一天前他在日本家中測(cè)試程序的新功能起惕。而現(xiàn)在他站在位于香港島灣仔的,香港會(huì)展中心的某一層挂签,剛剛結(jié)束了自己在一場(chǎng)科技大會(huì)上的演講疤祭。
這是他第二次來到香港,上一次來是八年前饵婆,那時(shí)第一代iPhone才剛出現(xiàn)勺馆。本次成行原因是Web Summit——一個(gè)起源于都柏林的創(chuàng)業(yè)聚會(huì)——聯(lián)系了他,希望他成為他們亞洲首場(chǎng)活動(dòng)(RISE)中的講者侨核。雖然這個(gè)安全工程師之前只在Black Hat大會(huì)和安全研究活動(dòng)上發(fā)表過演說草穆,從來沒有聽過這一創(chuàng)業(yè)圈的聚會(huì),但聽說和科技相關(guān)搓译,還是迅速同意了悲柱。
他決定像往常一樣講講自己開發(fā)的ShinoBot Suite。
什么是ShinoBot Suite些己?
ShinoBOT Suite是一套包含文件傳輸和密碼截取等行為在內(nèi)的豌鸡,用于檢測(cè)安全產(chǎn)品性能的遠(yuǎn)程攻擊模擬器嘿般。用比較淺顯的話講,既是通過模仿病毒來觀察防御軟件的反應(yīng)涯冠。
這個(gè)定義已經(jīng)是他演講主題中最容易聽懂的部分炉奴,在他開始詳細(xì)介紹Shinobot.exe會(huì)采取的具體操作以及它和Shinobot.com間的信息交換時(shí),大部分在場(chǎng)觀眾蛇更,那些更喜歡在融資數(shù)目和商業(yè)模式上鼓掌的人瞻赶,都已經(jīng)陷入了云里霧里的狀態(tài)。
他自己也注意到了這種情況派任。大約兩小時(shí)后砸逊,他將在聊天時(shí)一邊笑著猜想到底有多少人聽懂了,一邊調(diào)出由隨行的侄子拍攝的現(xiàn)場(chǎng)照片掌逛,向?qū)γ娴娜艘灰恢赋鲇^眾里前排兩三個(gè)看起來全部聽懂了的人师逸,和后排一兩位甚至已經(jīng)睡著了的先生。
他現(xiàn)在就在舞臺(tái)邊等著那個(gè)對(duì)面的人豆混,雖然按照之前的約定字旭,那人在他演講結(jié)束前就應(yīng)該在觀眾席里等他了。
那人崖叫,很抱歉遗淳,就是在下我。
[如交戰(zhàn)般有趣]
活動(dòng)開始前幾天心傀,我在講者名單中注意到了Shota Shinogi以及他那個(gè)和場(chǎng)內(nèi)其他演講相差甚遠(yuǎn)的技術(shù)主題屈暗,于是發(fā)郵件希望談?wù)劥祟惣夹g(shù)話題在網(wǎng)路創(chuàng)業(yè)類聚會(huì)上的作用。
郵件在東京時(shí)間凌晨3點(diǎn)45分發(fā)出脂男。3點(diǎn)48分养叛,郵箱里就出現(xiàn)了他的完整回復(fù),之后我們?cè)诎胄r(shí)內(nèi)確定了具體的時(shí)間安排宰翅。工作狂弃甥,大概是我對(duì)他的第一印象。
然而在我遲到了10分鐘出現(xiàn)在舞臺(tái)邊時(shí)汁讼,這位工作狂只是很自然地結(jié)束了和觀眾的對(duì)話淆攻,笑著和我握了握手,又介紹了一起來的侄子嘿架。我們邊寒暄邊往回走瓶珊,在人滿為患的media village找了兩個(gè)座位,正式談了起來耸彪。
首先當(dāng)然是ShinoBOT Suite的更新伞芹。
(一) 新版本
他拿來我的本子,在上面畫下簡(jiǎn)易的示范草圖。
[由于我們又在背面寫了很多字唱较,原來的草圖可能看不清楚扎唾。左邊是筆者做的簡(jiǎn)略說明圖]
ShinoBot的用戶,通常都是安全軟件業(yè)從業(yè)人員或互聯(lián)網(wǎng)公司里維護(hù)系統(tǒng)的人南缓。 在之前的版本里稽屏,他們需要連接軟件和網(wǎng)站(Shinobot.com)進(jìn)行操作。但這個(gè)網(wǎng)址并不被大型安全網(wǎng)站西乖,比如知名安全產(chǎn)品公司McAfee的TrustedSource, 列為可信任的網(wǎng)址坛增,所以時(shí)常被拉入黑名單获雕。
[TrustedSource頁面上的ShinoBot]
因此,他開發(fā)了ShinoProxy作為中介收捣,從軟件(ShinoBot.exe)到網(wǎng)站的信息交換將通過這個(gè)中介進(jìn)行届案,從而避開黑名單的限制。這個(gè)新功能也將是他本次在Black Hat 2015上演講的重點(diǎn)之一罢艾。
在那之前楣颠,他正如很多攻擊類黑客常干的那樣,通過加密包含網(wǎng)址的關(guān)鍵字符串(比如"shinobot.com")咐蚯,以避開安全軟件的偵測(cè)童漩。加密或者說字符串變換的方式有多種,他在官方網(wǎng)站上說明這點(diǎn)時(shí)舉了一個(gè)例子春锋,是用Ascii代碼進(jìn)行字母變換矫膨。
[Shota在網(wǎng)站上提供的加密方式的例子]
當(dāng)然,未被列出的其他算法應(yīng)該會(huì)比這種編程入門作業(yè)程度的加密手段復(fù)雜一點(diǎn)期奔。至少?gòu)?fù)雜到如他所說侧馅,不易被小型防御軟件破解的程度。
不過如你所見呐萌,這類掩藏關(guān)鍵代碼的手段只能應(yīng)付一些基本的馁痴, 基于特征來識(shí)別病毒的模式識(shí)別防御(pattern recognition)。 他的最終目的是讓程序在電腦里運(yùn)作肺孤,測(cè)試安全軟件的行為檢測(cè)(behavior detection)功能罗晕。
不斷測(cè)試來比較不同的安全軟件,并思索應(yīng)該怎么調(diào)整赠堵,才是他一開始獨(dú)自開發(fā)這套工具的原因攀例。
(二) 如交戰(zhàn)的攻防樂趣
“你有什么愛好?”
Shota想了半天顾腊,猶猶豫豫地說:“看F1賽車”粤铭。他稍后又解釋,自己從來沒開過杂靶,喜歡看是因?yàn)橘悎?chǎng)上有競(jìng)爭(zhēng)梆惯,很有樂趣酱鸭。
競(jìng)爭(zhēng)的樂趣讓他邁入了安全行業(yè)。雖然這個(gè)行業(yè)看上去并不屬于會(huì)讓普通人垛吗,甚至普通程序員產(chǎn)生激情的地方凹髓。
在我直接提及一些程序員會(huì)覺得做安全比較無聊時(shí),他做出了個(gè)“一山更比一山高”的手勢(shì)(用兩只手不斷往上疊怯屉,把彼此壓下去):“在這個(gè)行業(yè)里蔚舀,你可以不斷想一個(gè)攻擊的方法,然后想怎么防衛(wèi)它锨络,然后再想那怎么調(diào)整攻擊赌躺,然后再...”。
解釋這個(gè)以矛攻盾的循環(huán)過程讓他笑了起來羡儿。也正是在循環(huán)的某一段里礼患,為了檢測(cè)市面上各家安全軟件在行為檢測(cè)上的性能,他開發(fā)了ShinoBot這個(gè)模擬攻擊工具掠归。之后不斷根據(jù)模擬攻擊的結(jié)果以及用戶反饋調(diào)整ShinoBot缅叠,并再針對(duì)調(diào)整版研究防御者應(yīng)該如何優(yōu)化防守。
他神采飛揚(yáng)地比比畫畫虏冻,看起來僅從這一項(xiàng)里就已得到莫大的滿足肤粱。
[似行走般自然]
的確是。我稍后問他除了看F1外厨相,有沒有日常生活中的愛好狼犯,比如工作結(jié)束后做什么,他毫不猶豫地回答:“編程(coding)”领铐。實(shí)際上悯森,在收到我郵件的那個(gè)凌晨,他也正默默在電腦前調(diào)試著ShinoBot绪撵。
但是編程不屬于工作嗎瓢姻?他大笑起來,說自己總是在編程的音诈,然后停下來幻碱,似乎想要想出個(gè)更能被常人稱為愛好的東西,但沒有成功细溅。
我依照程序員的一般癖好提示褥傍,玩游戲嗎? 他玩喇聊,但通常是那個(gè)業(yè)內(nèi)人士基本都參與的CTF(Capture The Flag恍风,網(wǎng)絡(luò)安全人員間進(jìn)行的技術(shù)競(jìng)技比賽)。
[CTF起源于知名黑客聚會(huì)DEF CON,之后在全球各地都有大大小小的賽事朋贬。配圖來自DEF CON網(wǎng)站]
其他只有和策略分析有關(guān)的電腦游戲凯楔,比如文明(全稱Sid Meier's Civilization,曾經(jīng)風(fēng)靡一時(shí)的戰(zhàn)略類游戲 )锦募。那么世紀(jì)帝國(guó)(Age of Empires摆屯,和文明類似的戰(zhàn)略類游戲)呢?? 他也玩糠亩。于是我們聊了一會(huì)帝國(guó)各版本的不同虐骑,并傷感于沒有新作出現(xiàn)的事實(shí)。
既然喜歡策略類游戲赎线,那他或許也喜歡下棋廷没? 這個(gè)問題突然又讓他笑了起來,他說自己以前喜歡下氛驮,但后來很少了,因?yàn)椋?“Coding is much more interesting than Chess”济似。
(四)少年Shota與紙上程式
如果要問他何時(shí)發(fā)現(xiàn)了程序的有趣之處矫废,他大概會(huì)回答一開始。一開始砰蠢,既是中學(xué)時(shí)蓖扑。
出生在法國(guó)的Shota十歲才回日本,以法語為母語的他第一沖擊就來自日文在理解上的復(fù)雜度(他同時(shí)嚴(yán)肅強(qiáng)調(diào)漢字——日文中的Kanji——尤其難)台舱。幸好有些東西是共通的律杠,比如數(shù)學(xué)。
當(dāng)時(shí)中學(xué)數(shù)學(xué)教材上附有一些介紹程序語言的資料竞惋,當(dāng)然柜去,由于不是正式內(nèi)容,老師并不會(huì)在課上教授拆宛。然而中學(xué)生Shota卻被吸引嗓奢,翻完了整本冊(cè)子,試著在紙上編程浑厚。
聽到這里我想起了小學(xué)計(jì)算機(jī)組的老師股耽。他經(jīng)常以一種緬懷或是遺憾的語氣懷念自己當(dāng)年在紙帶上打孔塞入機(jī)器來測(cè)試程序的日子(跟著怒斥我們太沉迷游戲不珍惜光陰)。于是我問是Shota是否也是如此钳幅。
不是物蝙。他所謂的紙上程式,真的就是字面意義上的紙敢艰。
他在紙上寫下代碼诬乞,然后在腦海里想象是否能運(yùn)轉(zhuǎn)順利。 幸好,這種實(shí)在悲慘的日子沒有持續(xù)多久丽惭,不停打工的中學(xué)生Shota終于存夠了錢击奶,在1997年買了部已經(jīng)有四年壽命的二手電腦。
當(dāng)時(shí)微軟已經(jīng)推出了比較成熟的责掏,面向個(gè)人的操作系統(tǒng)Windows 95柜砾。 可惜,買完電腦后的錢并不夠他買下系統(tǒng)軟件换衬,于是只能從MS-DOS開始痰驱。 聽到這里,我告訴他自己小學(xué)剛開始用計(jì)算機(jī)的時(shí)候也是DOS瞳浦,我們?cè)俅位ハ喔袊@一番担映,然后順勢(shì)轉(zhuǎn)入了下一個(gè)話題。
關(guān)于喜好的話題叫潦。
(五)似行走的編程
對(duì)程序員而言蝇完,尤其是那些對(duì)command line有偏執(zhí)的極端正統(tǒng)程序員而言,MS-DOS和Linux之類的系統(tǒng)會(huì)好過Windows嗎矗蕊?他馬上明白了我的意思短蜕,說不會(huì)。 因?yàn)槟穷悎D像系統(tǒng)的出現(xiàn)讓操作便捷了很多傻咖,也讓普通人方便入門朋魔。
那么程序語言呢?作為程序員有自己最喜歡或者最常用的語言嗎卿操?
在那之前警检,也就是互相感嘆過去的時(shí)候,他已經(jīng)在我的本子上從Q BASIC (那是他最先學(xué)會(huì)的語言)開始列出了自己一路的過程害淤。
現(xiàn)在扇雕,他盯著那列語言想了想,圈出了C++窥摄,解釋說這算是他最喜歡的語言洼裤。 然后又圈出了PHP,因?yàn)椤伴_發(fā)ShinoBot的時(shí)候有用上它”溪王,最后又圈出了“x86 Assembler ” 和 “x64 Assembler” (常用匯編語言)腮鞍。
我們又進(jìn)入下一個(gè)熱門討論項(xiàng),喜歡peer review嗎莹菱? 這一硅谷和中國(guó)北京互聯(lián)網(wǎng)公司常見的風(fēng)氣似乎沒有浸染到他所在的公司移国。Shota認(rèn)真理解了一番所謂捉對(duì)編程的概念后,又笑了起來道伟,并慶幸自己沒碰上這種事迹缀,因?yàn)樗?xí)慣獨(dú)自敲打代碼使碾。
這個(gè)非典型的,看起來似乎太溫和的程序員又面臨了下一個(gè)嚴(yán)峻的考驗(yàn):對(duì)你而言祝懂,造就一個(gè)優(yōu)秀程序員的是什么(What makes a great coder)票摇?
他第一次出現(xiàn)了窘態(tài),重復(fù)了遍問題砚蓬,感嘆說實(shí)在太難回答了矢门。然后,似乎是在回答也似乎是在解釋為什么回答不了的灰蛙,開始說明自己對(duì)程序員的理解祟剔。
“對(duì)我而言,我編程就像我走路”摩梧。(I code like I walk)
這算是比較新穎的比喻物延。通常而言,程序員們更常說自己編程就像說話(code like I talk)——滔滔不絕仅父,不需思考叛薯,手到擒來,簡(jiǎn)明易懂等等笙纤。
他用手比出一條平穩(wěn)的線耗溜,說,就像走路那樣自然粪糙,我在想編程的時(shí)候——不管那是什么時(shí)候——就編程强霎,同時(shí)也用我習(xí)慣的方法來編程忿项。比如說加注釋蓉冈,一些程序員會(huì)加很多注釋,一些不喜歡加轩触,我會(huì)在我需要加的時(shí)候加寞酿。
他打開了自己的筆記本電腦,給我看他前幾天寫的代碼脱柱。 并指著其中的一部分伐弹。“比如我在用匯編語言指令時(shí)榨为,會(huì)加詳細(xì)的注釋惨好,不然自己以后肯定會(huì)忘了這些是什么意思。 但在一些其他的地方很少加随闺,因?yàn)樽约嚎吹枚薄?/p>
我們就這么陷入了加注釋的習(xí)慣這一話題日川,直到最后分別,都忘了和他確認(rèn)矩乐,他心中造就好程序員的東西到底是什么龄句。
(六)結(jié)尾與生活
他的侄子回论,二十二歲的在投資公司實(shí)習(xí)的大學(xué)生,以驚人的耐性(大概還有自娛自樂的能力)坐在我們旁邊微笑了兩個(gè)小時(shí)分歇,終于在端來新的咖啡后決定離開去聽一場(chǎng)喜歡的演講傀蓉。
Shota 接過侄子托管的尼康單反相機(jī),開始極有趣味地向我展示它的性能职抡。 比如對(duì)焦的準(zhǔn)確度葬燎,放大遠(yuǎn)景后的高清畫質(zhì)等等。 他順便又提起了侄子繁调,他們會(huì)在活動(dòng)結(jié)束后用一個(gè)下午去澳門玩玩萨蚕,因?yàn)橹蹲佣q,可以進(jìn)賭場(chǎng)了蹄胰。
我們討論了一些非吃酪#瑣碎的問題,比如到底有沒有必要去澳門和去澳門一晚上夠不夠玩等等裕寨。以及一些切實(shí)的問題浩蓉,比如從小在法國(guó)長(zhǎng)大并會(huì)流利法語給他帶來了什么,常見的答案應(yīng)該會(huì)和歐洲文化的魅力有關(guān)宾袜,不過Shota不是個(gè)常見的人捻艳。 他的回答是基本沒什么,因?yàn)?“法國(guó)信息安全業(yè)不發(fā)達(dá)庆猫,法語研究資料不多”认轨。
我們開始往會(huì)展門口走,他選擇那里作為自己照片的拍攝背景月培,因?yàn)橛袀€(gè)大大的RISE標(biāo)志嘁字。標(biāo)志前有一對(duì)參展團(tuán)隊(duì)也在拍照。等待時(shí)我對(duì)著玻璃幕墻邊的人影和海景試拍了幾張杉畜,然后開始問他一些關(guān)于這款相機(jī)的白平衡和景深的問題纪蜒。
這些問題似乎給了他某種我很擅長(zhǎng)攝影的錯(cuò)覺,所以在最后看到自己的紀(jì)念照時(shí)此叠,露出了一種非常微妙的困惑表情纯续。
[筆者技術(shù)有限,但相機(jī)真的是好相機(jī)]
我們向彼此客氣地解釋一番灭袁,比如拍到整個(gè)標(biāo)志就會(huì)看不清人之類的猬错,然后和平地再次握手告別。
這位安全工程師將把電腦放回住的酒店茸歧,然后或者寫一會(huì)兒程序倦炒,或者早早為主辦方晚上在中國(guó)會(huì)舉辦的晚餐換上衣服。他當(dāng)時(shí)指著邀請(qǐng)函上的正式著裝要求大笑了一番举娩,但對(duì)于這個(gè)生于法國(guó)且一直頻繁來回的人而言析校,穿得合適构罗,肯定不會(huì)是個(gè)問題。
[后面的話:這是篇對(duì)一般讀者而言技術(shù)性太強(qiáng)的訪談智玻。實(shí)際上遂唧,此文的上一稿更加晦澀難懂。我當(dāng)時(shí)考慮過干脆不發(fā)吊奢,但Shota對(duì)編程的那種“溫和派的熱愛” 實(shí)在充滿了魅力盖彭,讓人想起一些事實(shí)。
在選擇越來越多页滚,工具越來越復(fù)雜召边,大家習(xí)慣用喜歡的工具和語言站隊(duì)并彼此鄙視時(shí),我們可能都忘了裹驰,一開始隧熙,我們決定輸入第一行代碼,拍下第一幅照片幻林,寫下第一篇文章贞盯,都是因?yàn)槟菢幼龊苡腥ぁ?/i>
獻(xiàn)給所有仍然在有趣中生活的人,以及各位長(zhǎng)期被忽略的安全工程師沪饺。]