引言兼序
前面的嘻話里我介紹了軟件開發工程項目中通用一些的“錦囊妙計”,目的是幫助團隊更好地協作。
在軟件安全和商業運作方面更要用計。由于是跟人斗,軍事上的計謀更有用武之地。我們這里還是輕松點,舉一些民間喜聞樂見的例子,比如“三十六計”,啟發一下大家的思路。至于孫子兵法,鬼谷子和孟德新書,留待以后再深入探討吧。
在開講我們老祖宗的三十六計之前,先說下西方歷史上有名的“特洛伊木馬”。當年希臘人圍城十年無法攻克特洛伊城邦,最后想出一條妙計,把甲士若干藏于十丈高的木馬腹中,讓敵人以為是撤退以后留下的戰利品,拖入城中。乘夜黑風高,敵人慶功大意之時,士兵以繩索魚貫而下,攻其不備,一舉打開了勝利之門。
在惡意軟件中,也有這么一類“病毒”,以無辜的形態捆綁在其它功能的華麗外表下被用戶復制或者下載到計算機里。然后乘其不備發作,盜取有價值的信息,或者破壞操作系統令其癱瘓。雖然千年來大家早就明白了這個計謀,可還是屢屢上當,究其原因,還是源于這類“欺騙性”的外表和受害者獲取戰利品的貪婪,讓人防不勝防。
現在就回過頭來說說這個三十六計中的第一計,金蟬脫殼。
金蟬脫殼的典故
參見百科詞條。“原文為:「存其形,完其勢;友不疑,敵不動。巽而止蠱。」(保持原來的形態,完整原來的陣勢,(使)友軍和敵人既不懷疑又不輕舉妄動,隱蔽轉移主力,必須要先迷惑敵人。)
同友軍聯合對敵作戰的時候,要冷靜地觀察陣地形勢。如果存在另一股敵人,需要分兵迎擊時,必須表面保持原來陣容的空架子。金蟬脫殼并不是一走了事,而是分身戰術。因此,當我方的大軍主力轉移后,依然要使原來的陣地旌旗招展,鑼鼓喧天,要十分逼真的保持原來的陣容。只有這樣才可以使敵人不敢輕舉妄動。友軍也對我不生疑心。”
在三國演義里,諸葛亮用了很多次金蟬脫殼,保證了大軍全身以退。
軟件行業中什么時候用此計合適呢?我在軟件安全和商業運作領域給兩個例子。
軟件安全里的金蟬脫殼
成功的黑客入侵,全身而退的案例是很多的,多到你可能都不知道的程度。因為我們聽到的故事通常都是收尾不干凈,留下把柄,才被暴露出來。
這里所謂“金蟬脫殼”,就是在完成盜取用戶資產等惡意行為的過程中,貌似正在進行正常的操作,在不知不覺中,就完成撤退,把中間的結果清除干凈,不落痕跡。
計算機法證學(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的開源軟件怎樣進行專利保護?