軟件加密與解密的前言

2022-06-18 09:43發(fā)布

1條回答

隱蔽軟件(surreptitious software)是近十年來計算機安全研究領(lǐng)域新興的一個分支。在隱蔽軟件的研究過程中不僅需要借鑒計算機安全方面的技術(shù),還會用到計算科學(xué)其他領(lǐng)域的大量技術(shù),如密碼學(xué)、隱寫術(shù)、數(shù)字水印、軟件量度(software metric)、逆向工程以及編譯器優(yōu)化等。我們使用這些技術(shù)來滿足在計算機程序中安全存儲秘密信息的需求,盡管這些需求的表現(xiàn)形式千差萬別、各不相同。本書中“秘密”一詞的意思比較廣,書中所介紹技術(shù)(代碼混淆、軟件水印和指紋、防篡改技術(shù)以及軟件“胎記”等)的使用目的是防止他人剽竊軟件中的智力成果。比如,軟件中使用指紋技術(shù)可以用來跟蹤軟件是否被盜版,代碼混淆技術(shù)能夠加大攻擊者逆向分析軟件的難度,而防篡改技術(shù)則可以使別人很難制作軟件的破解版,等等。
好了,現(xiàn)在我們來講講為什么需要閱讀本書,誰使用隱蔽軟件以及本書將會涵蓋哪些內(nèi)容。
為什么閱讀本書
與傳統(tǒng)的安全研究不同,隱蔽軟件不關(guān)心如何使計算機免于計算機病毒入侵,它關(guān)心的是計算機病毒的作者是如何防止他人分析病毒的!同樣,我們也不關(guān)心軟件到底有沒有安全漏洞,我們關(guān)心的是如何隱蔽地在程序中加入一些只有在程序被篡改時才會執(zhí)行的代碼。密碼學(xué)研究領(lǐng)域中,被加密數(shù)據(jù)的安全性依賴于加密密鑰的隱秘性,而我們現(xiàn)在研究的恰恰是如何隱藏密鑰。軟件工程中有大量的軟件量度技術(shù),以確保程序結(jié)構(gòu)良好,本書中將使用同樣的技術(shù)使程序復(fù)雜難讀。本書中描述的很多技術(shù)都是基于編譯器優(yōu)化技術(shù)研究開發(fā)的算法的,但是編譯優(yōu)化的目的是使編譯器生成個頭盡量小、運行速度盡量快的程序,而使用本書中介紹的一些技術(shù)卻會使生成的程序個頭又大,執(zhí)行起來又慢。最后,傳統(tǒng)的數(shù)字水印和隱寫術(shù)是想辦法把要隱藏的信息藏到圖像、音頻、視頻甚至純文本文件中,而隱蔽軟件則是把需要隱藏的信息藏到計算機代碼中。
那么,為什么要閱讀本書呢?為什么要了解一種不能防止計算機被病毒或者蠕蟲攻擊的安全技術(shù)?為什么要學(xué)習(xí)一種只會讓代碼體積變大而執(zhí)行速度變慢的編譯優(yōu)化技術(shù)?為什么要把精力花在一種違反了密碼學(xué)基本前提(即密鑰是不可能被攻擊者獲得的)的密碼學(xué)分支上呢?
回答是,傳統(tǒng)的計算機安全和密碼學(xué)研究成果有時并不能解決實際工作中遇到的且亟待解決的安全問題。比如,在本書中將展示如何使用軟件水印技術(shù)防止軟件盜版。軟件水印是在程序中嵌入的唯一標(biāo)識(類似信用卡的卡號或者版權(quán)聲明),通過這個標(biāo)識,程序的某個副本就和你(程序的作者)或者客戶聯(lián)系在了一起。要是你發(fā)現(xiàn)市場上在賣自己軟件的盜版光盤,就可以通過在盜版軟件中提取的水印追查制作這個盜版軟件的母版 當(dāng)初是哪個家伙從你這里買走的。當(dāng)給合作商提供新開發(fā)的游戲的測試版時,你也可以在測試版中加上數(shù)字水印。要是你感覺有人泄露了你的代碼,就能(從眾多的合作商中)找出肇事者,并把他送上法庭。
又比如,在程序的新版本中加上了某個新的算法,你當(dāng)然不希望競爭對手也得到這個算法,并把它加到他們的軟件中。這時,你就可以去混淆程序,使之盡可能變得復(fù)雜難懂,使競爭對手逆向分析軟件時效率很低。而如果確實懷疑某人剽竊了你的代碼,本書也會教你如何使用軟件“胎記”證實你的懷疑。
再比如,你的程序中包含有某段不能為人所知的代碼,并且你想確保沒有這段代碼程序就不能正常運行。例如,你肯定不希望黑客修改程序中的軟件使用許可驗證代碼,或者可用于解密數(shù)字版權(quán)管理系統(tǒng)中mp3文件的密鑰。第7章將討論多種防篡改技術(shù),確保受到篡改的程序停止正常運行。
聽說你把密鑰放在可執(zhí)行文件里了?這主意實在太糟糕了!以往的經(jīng)驗告訴我們,任何類似“不公開,即安全” 的做法最終都將以失敗告終,而且不管在程序中怎樣隱藏密鑰,最終它都逃不出一個足夠頑強的逆向分析人員的手心。當(dāng)然,必須承認(rèn)你的做法也還是對的。本書中介紹的所有技巧都不能保證軟件能永遠(yuǎn)免于黑客的毒手。不必保證某個東西永遠(yuǎn)處于保密的狀態(tài),也不必保證程序永遠(yuǎn)處于不可能被篡改的狀態(tài),更不需要保證代碼永遠(yuǎn)不會被剽竊。除非這個研究領(lǐng)域有什么重大的突破,否則能指望的只是延緩對方的攻擊。我們的目標(biāo)就是把攻擊者的攻擊速度減緩到足夠低,使他感到攻擊你的軟件十分痛苦或要付出過高的代價,從而放棄攻擊。也可能攻擊者很有耐心地花了很長時間攻破了你的防御,但這時你已經(jīng)從這個軟件中賺夠了錢,或者已經(jīng)用上了更新版本的代碼(這時他得到的東西也就一錢不值了)。
比方說,你是一個付費頻道的運營商,用戶通過機頂盒來觀看你提供的電視節(jié)目。每個機頂盒都是帶有標(biāo)簽的——在代碼的某個位置上存放了分配給每個用戶的唯一標(biāo)識(ID),這樣你就可以根據(jù)用戶的繳費情況決定是允許還是拒絕某個特定用戶觀看頻道里的節(jié)目??墒乾F(xiàn)在有一個黑客團(tuán)伙找到并且反匯編了這段代碼,發(fā)現(xiàn)了計算用戶ID的算法,并且在網(wǎng)上以低廉的價格把修改用戶ID的方法賣給了網(wǎng)民。這時你該怎么辦呢?你也許想到了使用防篡改的智能卡,不過這玩意兒并不像看上去那么難破解,這將在第11章中講解?;蛘吣憧赡芟氲揭煜a,使之更難以被分析?;蛘吣阋部梢允褂梅来鄹募夹g(shù)使程序一被修改就自動停止運行。更有可能,你會混合使用上述各種技巧來保護(hù)代碼。但是盡管使用了所有技術(shù),你還必須要知道并且必須接受,你的代碼仍然可能被破解,秘密仍會泄露(在這個案例里就是機頂盒里的用戶ID仍然會被篡改)這一事實。怎么會這樣呢?這只是因為“不公開,既安全”這個想法在根本上就存在漏洞。不過既然本書中介紹的所有技術(shù)都不能給你一個“完美并且長期的安全保證”,那么為什么還要使用這些技術(shù),為什么還要買這樣一本書呢?答案很簡單,代碼能頂住黑客攻擊的時間越長,訂閱頻道的客戶就越多,同時升級機頂盒的周期也就越長,這樣你賺到的錢和省下的錢也就越多。
就這么簡單。
誰使用隱蔽軟件
很多知名的公司都對隱蔽軟件有濃厚的興趣。事實上很難真正掌握有關(guān)技術(shù)在實踐中具體被使用的程度(因為大多數(shù)公司在如何保護(hù)自己的代碼一事上絕對是守口如瓶的),但是我們還是可以根據(jù)他們專利的申請和擁有情況把他們對隱蔽軟件的感興趣程度猜個八九不離十。微軟公司擁有多個關(guān)于軟件水印[104,354]、代碼混淆[62,62,69,69,70,70,180,378]和軟件“胎記”[364]技術(shù)的專利。Intertrust公司擁有大量與數(shù)字版權(quán)管理技術(shù)相關(guān)的組合式專利,包括代碼混淆和代碼防篡改專利。2004年,在微軟與Intertrust之間的馬拉松式官司落下了帷幕之后,微軟向Intertrust支付了高達(dá)4.4億美元的專利使用費,才獲得了后者所有的專利使用許可。同年,微軟也開始與PreEmptive Solution公司開展商業(yè)合作[250],從而把PreEmptive Solution開發(fā)的identifier obfuscator(PreEmptive solution公司在該工具中擁有專利[351])加到了Visual Studio的工具集里。而普渡大學(xué)科研成果的副產(chǎn)品Arxan,因其獨創(chuàng)的防篡改算法專利[24,305]而成功地開辦了一家公司。蘋果公司擁有一個代碼混淆方面的專利,估計是用于保護(hù)其iTune軟件的。Convera,一家從英特爾公司獨立出來的企業(yè),則著力研究應(yīng)用于數(shù)字版權(quán)管理的代碼防篡改技術(shù)[27,268-270]。從加拿大北方電信公司中分離出來的Cloakware公司也是這個領(lǐng)域里最成功的企業(yè)之一。該公司擁有他們稱為“白盒加密”的專利[67,68,182],即把加密算法和密鑰藏到程序代碼中。2007年12月,Cloakware公司被一家主營付費電視業(yè)務(wù)的荷蘭公司Irdeto以7250萬美元的價格收購。即使是相對的后來者Sun Microsystem也已經(jīng)提交了一些代碼混淆領(lǐng)域的專利申請。
Skype的VoIP客戶端也使用了類似Arxan[24]、英特爾[27]及本書中將要提到的[89]代碼混淆和防篡改技術(shù)進(jìn)行了防逆向工程加固。對于Skype公司來說,保護(hù)其客戶端的完整性無疑是極其重要的,因為一旦有人成功逆向分析了其客戶端軟件,解析出Skype所使用的網(wǎng)絡(luò)協(xié)議,黑客們就能寫出廉價的能與Skype軟件進(jìn)行正常通信的程序(這樣的話,人們就沒有必要一定用Skype)。所以保持網(wǎng)絡(luò)協(xié)議不公開則有助于Skype擁有一個龐大的用戶群,這大概也是2005年易貝公司以26億美元收購Skype的原因吧。實際上,使用隱蔽軟件技術(shù)還使Skype公司贏得了足夠多的時間,進(jìn)而成為了VoIP技術(shù)的領(lǐng)軍企業(yè)。即使這時Skype的協(xié)議被分析出來了(這一點黑客們確實也做到了,詳見7.2.4節(jié)),黑客們也拿不出一個能夠撼動Skype市場地位的類似軟件了。
學(xué)術(shù)研究者從多種角度對隱蔽軟件技術(shù)進(jìn)行了研究。一些擁有編譯器和程序語言研究背景的研究者,比如我們,會很自然地加入這一領(lǐng)域的研究,因為涉及代碼轉(zhuǎn)換的絕大多數(shù)算法都會涉及靜態(tài)分析的問題,而這一問題則是編譯優(yōu)化技術(shù)的研究者再熟悉不過的了。盡管以前,密碼學(xué)研究者大多不屑于研究“不公開,即安全”的問題,但最近一些密碼學(xué)研究人員已經(jīng)開始把密碼學(xué)的相關(guān)技術(shù)應(yīng)用于軟件水印以及發(fā)現(xiàn)代碼混淆技術(shù)的局限性上了。來自多媒體水印、計算機安全和軟件工程方面的研究人員也已經(jīng)發(fā)表了很多關(guān)于隱蔽軟件的文章。遺憾的是,由于沒有專門的刊物、學(xué)術(shù)會議(供研究人員相互之間進(jìn)行交流),這一領(lǐng)域的研究進(jìn)展被大大延緩了。事實上,為了使這些研究成果能被傳統(tǒng)的學(xué)術(shù)會議和期刊接受,研究人員在不停地努力著,現(xiàn)在仍在努力。目前已經(jīng)發(fā)表過隱蔽軟件研究成果的學(xué)術(shù)會議有POPL(Principles of Programming Languages,程序設(shè)計原理)上的ACM專題研討會、信息隱藏研討會、IEEE的軟件工程研討會、高級密碼學(xué)會議(CRYPTO)、ISC(Information Security Conference,信息安全大會)以及其他一些關(guān)于數(shù)字版權(quán)管理的學(xué)術(shù)會議。隨著隱蔽軟件這一領(lǐng)域的研究越來越成為學(xué)術(shù)研究的主流,我們有望擁有專門針對于隱蔽軟件的期刊、專題討論會甚至是研討會,只是可惜目前為止這一切都還沒有實現(xiàn)。
軍方也在隱蔽軟件上花了很多精力(和納稅人的錢)。比如,Cousot公司擁有的軟件水印算法[95]專利就歸屬于世界上第九大國防工程承包商法國Thales集團(tuán)。下面是一段引自最新的(2006)美軍招標(biāo)文件[303]中有關(guān)AT(anti-tamper)技術(shù) 研究的文字。
現(xiàn)在,所有的美軍項目執(zhí)行部門(PEO)和項目管理方(PM)在設(shè)計和實現(xiàn)有關(guān)系統(tǒng)時,必須在系統(tǒng)中使用軍隊和國防部制定的AT策略。嵌入式軟件現(xiàn)代武器系統(tǒng)的核心,是被保護(hù)的最重要技術(shù)之一。AT技術(shù)能夠有效地保證這些技術(shù)不被他國(人)逆向工程分析利用。僅僅由標(biāo)準(zhǔn)編譯器編譯生成而不加AT技術(shù)防護(hù)的代碼是很容易被逆向分析的。在分析軟件時,逆向工程分析人員會綜合使用諸如調(diào)試器、反編譯器、反匯編器等很多工具,也會使用各種靜態(tài)和動態(tài)分析技巧。而使用AT技術(shù)的目的就是使逆向工程變得更為困難,進(jìn)而防止美國在技術(shù)領(lǐng)域的優(yōu)勢被他國竊取。今后還有必要向部隊的PEO和PM提供更有用、更有效并且多樣化的AT工具集……研發(fā)AT技術(shù)的目的在于提供一個能夠抗逆向工程分析的高強度殼 ,從而最大限度地遲滯敵方對被保護(hù)軟件的攻擊。這樣美國就有機會維持其在高科技領(lǐng)域的優(yōu)勢或者減緩其武器技術(shù)泄密的速度。最終,美軍就能繼續(xù)保持其技術(shù)優(yōu)勢,進(jìn)而保證其軍備的絕對優(yōu)勢。
這份招標(biāo)文件來自于美軍導(dǎo)彈和空間程序(設(shè)計部門),專注于實時嵌入式系統(tǒng)的保護(hù)。我們有理由相信產(chǎn)生這份招標(biāo)文件的原因是,美軍擔(dān)心射向敵方的導(dǎo)彈由于種種原因落地后未能爆炸,使敵方有機會接觸到嵌入在導(dǎo)彈中負(fù)責(zé)引導(dǎo)導(dǎo)彈飛臨目標(biāo)上空的控制軟件。
下面是另一段引自美國國防部[115]的文字。
進(jìn)行主動式軟件保護(hù) (SPI)是國防部的職責(zé)之一,它必須開發(fā)和部署相關(guān)的保護(hù)技術(shù),以保證含有國防武器系統(tǒng)關(guān)鍵信息的計算機程序的安全。SPI提供的是一種全新的安全防護(hù)方法,它并不(像傳統(tǒng)的安全技術(shù)那樣)保護(hù)計算機或者網(wǎng)絡(luò)的安全,而只是加強計算機程序自身的安全。這種新方法能顯著提升國防部的信息安全情況。SPI的適用范圍很廣,從臺式機到超級計算機上面所有的程序都能使用SPI技術(shù)予以保護(hù)。它是(軟件保護(hù)技術(shù)中)完整的一層,是“縱深防御”的一個范例。SPI技術(shù)是對網(wǎng)絡(luò)防火墻、物理安全等傳統(tǒng)安全技術(shù)的一個補充,但是其實現(xiàn)并不依賴于這些傳統(tǒng)的安全設(shè)備?,F(xiàn)在SPI技術(shù)被部署在選定的HPC中心和150多家國防部機關(guān)以及其他由商業(yè)公司參與建設(shè)和維護(hù)的軍事基地。廣泛地部署SPI技術(shù)將會有效地增強美國和美國國防部對關(guān)鍵應(yīng)用技術(shù)的保護(hù)。
. 上面這段話說明了什么?它說明美國國防部不僅關(guān)心導(dǎo)彈會不會掉到敵方領(lǐng)土上去,還關(guān)心在自己的安全系數(shù)和性能都很高的計算機中心運行的軟件的安全。事實上,竊密和反竊密是防間諜機關(guān)和情報部門之間永恒的主題。比方說,一架戰(zhàn)斗機上的某個程序需要更新一下,這時我們很可能就是用一臺筆記本電腦連接到這架戰(zhàn)斗機上進(jìn)行更新操作。但是萬一這臺筆記本電腦不慎遺失了,或者干脆就被其他國家政府使用某種方法控制了,就像電影里常演的那樣,這時會有什么情況發(fā)生呢?對方會馬上把相關(guān)的代碼拿去做逆向工程分析,并把分析的結(jié)果用于改進(jìn)其戰(zhàn)斗機中所使用的軟件。更有甚者,對方會悄悄地在你的軟件中加上一個特洛伊木馬,并讓飛機在特定的時間里從天上掉下來。如果我們不能絕對保證上述這一幕100%不可能發(fā)生的話,隱蔽軟件至少可以作為安全防御的最后一道防線(至少還能做到事后的責(zé)任追究)。例如,飛機中的軟件可以用有權(quán)訪問相關(guān)軟件的人的ID做一個指紋簽名。要是哪天,在其他國家的戰(zhàn)斗機上發(fā)現(xiàn)了這些代碼,就可以立即對這些代碼進(jìn)行逆向分析,并進(jìn)一步推算出誰是泄密事件的元兇。
什么?我聽見你說,為什么我要對政府之間和商業(yè)巨頭之間如何保護(hù)它們各自的秘密感興趣呢?如果黑客破解了這些軟件,他們也不過是通過自己的勞動換取一些微薄的利益而已啊。話雖如此,但是這些保護(hù)技術(shù)給你 帶來的好處最終還是大于它給商業(yè)巨頭帶來的好處。理由是,對你來說,法律形式的保護(hù)措施(如專利、商標(biāo)和版權(quán))只有當(dāng)你擁有足夠的財力,能在法庭上把對方告倒的時候才會管用。換而言之,即使你認(rèn)為某家大公司通過破解你的代碼,剽竊了一個極有“錢途”的主意,你也無力通過那種馬拉松式的官司在法庭上告倒微軟,除非你有足夠的經(jīng)濟實力能在這種財力的比拼中熬出頭 。而在本書中討論的保護(hù)技術(shù)(比如代碼混淆和防篡改技術(shù))則既廉價又好用,中小型企業(yè)和商業(yè)巨頭均可使用。而且如果這時你去告這家大公司的話,也可以用水印或者軟件“胎記”等技術(shù),在法庭上當(dāng)場拿出代碼被剽竊的真憑實據(jù)來。
最后不得不簡單地提一下另一類極其擅長使用隱蔽軟件的人——壞蛋們。病毒的作者已經(jīng)能非常成功地利用代碼混淆的技術(shù)偽裝病毒的代碼,使之逃避殺毒軟件的檢測了。值得一提的是,人們使用這些技術(shù)(如保護(hù)DVD、游戲和有線電視)時經(jīng)常被黑客破解,而黑客使用這些技術(shù)(如構(gòu)建惡意軟件)時,人們卻很難抗擊。
本書內(nèi)容
隱蔽軟件研究的目的是發(fā)明能夠盡可能遲滯對手(逆向工程分析)進(jìn)度,同時又盡可能地減少因為使用該技術(shù),而在程序執(zhí)行時增加的計算開銷的算法。同時也需要發(fā)明一種評估技術(shù),使我們可以說“在程序中使用了算法A之后,相對于原先的程序,黑客攻破新程序需要多花T個單位的時間,而新程序增加的性能開銷是0”,或者最低限度我們也應(yīng)該可以說“相對于算法B,使用算法A保護(hù)的代碼更難被攻破”。特別要強調(diào)一下,隱蔽軟件研究尚處于嬰兒期,雖然我們在書中會把相關(guān)的保護(hù)算法和評估算法全都介紹給大家,但是這門藝術(shù)的現(xiàn)狀卻還并不理想(到時候你可不能太失望啊)。
在本書中,我們試圖把當(dāng)前所有有關(guān)隱蔽軟件的研究成果組織起來系統(tǒng)化地介紹給讀者。我們力爭每章內(nèi)容涵蓋一種技術(shù),并描述這一技術(shù)的應(yīng)用領(lǐng)域以及目前可用的算法。第1章將給出隱蔽軟件這個領(lǐng)域的一些基本概念;第2章用對抗性演示的模式介紹黑客逆向分析軟件時常用的工具和技巧,然后針對這些工具和技巧介紹如何防范黑客的攻擊;第3章詳細(xì)講述黑客和軟件保護(hù)方用于分析計算機程序的技術(shù);第4章、第5章和第6章分別介紹與代碼混淆有關(guān)的算法;第7章介紹與防篡改技術(shù)相關(guān)的算法;第8章和第9章分別介紹與水印相關(guān)的算法;第10章介紹與軟件“胎記”相關(guān)的算法;第11章講述基于硬件設(shè)備的軟件保護(hù)技術(shù)。
如果你是位企業(yè)管理人員,只是對隱蔽軟件的研究現(xiàn)狀和這些技術(shù)怎么應(yīng)用到你的項目中感興趣,那么只要閱讀第1章和第2章就夠了。如果你是位擁有編譯器設(shè)計背景的研究人員,那么建議直接跳到第3章開始閱讀。但是之后的章節(jié)還是最好順序閱讀。這是因為……呃,還是舉個例子吧,介紹水印技術(shù)的章節(jié)中會用到在代碼混淆章節(jié)中介紹的知識。當(dāng)然在本書撰寫過程中,我們還是盡量使各章內(nèi)容都能獨立成章的,所以(如果你擁有一些背景知識)偶爾跳過那么一兩章也未嘗不可。如果你是一位工程師,想要使用有關(guān)技術(shù)加固你的軟件,那么強烈建議你仔仔細(xì)細(xì)地閱讀第3章的所有內(nèi)容,如果有條件的話,還應(yīng)該再搞幾本編譯原理方面的教材惡補一下“程序靜態(tài)分析”的知識。然后你就可以隨意跳到感興趣的章節(jié)去閱讀了。如果你是名大學(xué)生,把本書作為一門課程的教材來閱讀,那么就應(yīng)該一頁一頁地完整閱讀本書,期末別忘了做好復(fù)習(xí)。
希望本書能夠做到兩件事情。首先,希望能向你,親愛的讀者,證明代碼混淆、軟件水印、軟件“胎記”和防篡改等技術(shù)里有大量妙不可言的想法,值得你花點時間去學(xué)習(xí),而且這些技術(shù)也可以用來保護(hù)軟件。其次,希望本書能把本領(lǐng)域內(nèi)當(dāng)前所有有用的信息匯集在一起,從而為隱蔽軟件的深入研究提供一個良好的起點。
Christian Collberg和Jasvir Nagra
2009年2月2日(土撥鼠日)
P.S.實際上寫作這本書還有第三個目的。要是在閱讀本書時,你突然靈光閃現(xiàn),冒出一個絕妙的主意,進(jìn)而激發(fā)了你投身于隱蔽軟件研究的雄心壯志,那么,親愛的讀者,我這第三個目的就算是達(dá)到了。請把你的新算法告訴我們,我們將把它加到本書的下一版里!

一周熱門 更多>