劉乃琦 范明鈺 王一芙
1(電子科技大學計算機科學與工程(網絡空間安全)學院 四川 成都 611731) 2(成都市八中高中 四川 成都 610000)
隨著互聯網應用的快速發展,經網絡交易和傳播的軟件越來越多。與實體商品不同的是軟件容易被復制、修改和傳播。
現有與軟件保護相關的技術[1-4]包括軟件水印、加密、防篡改、軟件多樣化、反逆向技術、虛擬機、基于網絡/基于硬件的保護等,在一定程度上解決軟件保護需求的同時也帶來眾多新問題,諸如保護的技術手段越來越復雜,其復雜和龐大程度甚至超過軟件本身。
對軟件的保護大致可分為三個層次:反調試(Anti-Debug)、抗分析(Anti-Analysis)、防爆破(Anti-Brute Force Cracking)。
(1) Anti-Debug。該層次采取自我保護策略,針對的是使用調試工具直接獲取軟件使用權的攻擊。其保護思路是為軟件的運行過程引入非常規機制,如利用加殼技術,限制使用調試工具對軟件分析。Anti-Debug技術能夠大大減少潛在的攻擊者,因為調試工具最初的設計目標是診斷和改正程序中潛在的錯誤,大多不具備專門防備Anti-Debug的功能,需要攻擊者有更強的技術能力。Anti-Debug是軟件保護的第一道防線,而其技術也已基本實現標準化,加殼工具越來越普遍了。
(2) Anti-Analysis。該層次軟件保護的目的是向合法用戶提供完整功能,所以必須區分合法與非法用戶,通常采用注冊碼(registration code,RC)驗證的方式實現。RC算法需要具備一定的Anti-Analysis能力,才能有效限制攻擊者的分析,阻止注冊機或者破解補丁的出現。
(3) Anti-Brute Force Cracking。若Anti-Analysis能力足夠強,往往會導致攻擊者放棄對RC的攻擊,轉而修改可執行文件,強行改變軟件的執行流程,如讓軟件不注冊也能正常運行。所以還需部署第三道防線防止軟件執行流程改變。
事實上Anti-Brute Force Cracking能力與Anti-Analysis的架構直接相關,所以總的來說,Anti-Analysis能力還是最重要的。本文針對RC的Anti-Analysis能力進行研究。
RC是一種常用的軟件保護方式,一般包含兩個部分[1-12]:用戶端和軟件作者端。其基本技術手段是軟件作者端使用注冊用戶信息,計算生成RC。用戶端是面向所有潛在用戶的,因此其本身必須可以校驗該RC是否有效,并且能夠防止別人逆向算出校驗算法;能夠防止別人用暴力破解方法直接修改軟件執行代碼,繞過注冊。
在各種軟件保護的方式中,RC方式實用性強,應用面寬。由于其廣泛應用,其針對性的改進研究也越來越豐富。文獻[1]回顧了軟件保護技術的發展歷程,分析了軟件保護過程的誤區,指出驗證的過程,就是驗證特定信息和授權碼之間的數學映射關系,如果數學映射關系不正確,可由此判斷軟件未被合法授權使用。這個映射關系是由軟件開發者設定,所以不同軟件生成授權碼的算法可能完全不同。這個映射關系越復雜,授權碼越不容易被破解。文獻[2]提出一種基于靜態水印和軟件指令集的軟件特征值提取方法,將軟件版權所有者信息和軟件反編譯得出的有效軟件指令集合進行Hash計算,作為軟件特征值,并設計了應用方案。文獻[3]認為軟件RC的用途為限制安裝、限制使用功能、限制使用時間、限制升級更新、限制使用體驗,同時認為,現行的《計算機軟件保護條例》無法對計算機軟件RC提供充分的法律保護依據,應當對相應的法律條款進行完善。文獻[4]研究了嵌入式軟件保護技術,分為軟件加密、軟件水印、軟件防篡改等技術,其中軟件加密技術分軟加密和硬加密兩種方式,軟加密主要采用RC和許可證等方法,由RC和許可證生成唯一的產品序列號,用戶只有正確輸入產品序列號,軟件才能正常操作運行。文獻[5]針對傳統的軟件保護措施在面對代碼分析和調試工具時的不足,在RC保護的基礎上,使用RSA算法對RC進行加/解密,結合安全的RC驗證、硬件信息驗證等方法,解決傳統RC保護的安全性問題。文獻[6]針對保護軟件版權中存在的問題,提出基于機器特征生成RC的保護方法。文獻[7]對不同方式的軟件保護方法進行比較,提出基于互聯網的軟件保護方案,指出其保護的安全性取決于特征向量的選擇,特征向量包括四個分量,分別是硬盤ID、系統時間、共有注冊信息、RSA公鑰。文獻[8]針對中小型工程計算軟件的保護要求,從控制軟件的下載權限開始,在用戶下載軟件的同時利用DES對稱加密算法加密網卡MAC地址形成唯一的RC,最后在軟件用戶端加上注冊模塊并通過對注冊表的讀寫操作實現將軟件綁定在下載軟件的計算機上使用的目標。文獻[9]采用“一機一碼”,運用RSA算法對RC進行加密,并以數據庫的形式進行密鑰管理。文獻[10]采用提取計算機指紋信息并添加附加碼作為特征信息,運用MD5算法進行摘要處理。文獻[11]提出一種利用DSA算法生成和驗證軟件RC的方法,RC的計算和驗證分別使用秘密密鑰和公開密鑰。文獻錯誤:引用源未找到提出軟件有限使用和注冊算法的改進方法。
上述研究認為:RC授權驗證算法需要加強[1];關注軟件特征碼的生成和防篡改[2,6,10];從法律保護的角度對RC保護的法律依據提出建議[3];研究嵌入式軟件的保護方式[4];采用非對稱算法保護RC、防止代碼分析[5];提出互聯網條件下的軟件保護方案[7];提出針對中小型工程的軟件保護方案[8];采用集中式方式管理加密RC[9];對RC的生成和驗證進行保護[11];研究優先使用軟件的RC改進[12]。
而在RC保護方法中,對用戶端與軟件作者端存在交互信息被截獲的風險,以及其相應的防截獲欺騙能力缺乏相應的研究。本文針對兩種常見的截獲欺騙攻擊模型,提出一種抗截獲欺騙攻擊的軟件保護方式Anti-ISA RCSP,通過使用加密技術,提高現有RC軟件保護的有效性。
RC也稱序列號,其保護過程是,首先為用戶提供軟件試用期,在試用期內對軟件的使用時間或功能進行限制;試用期結束后,用戶必須進行注冊和驗證方能繼續使用軟件。注冊過程(圖1)需要提供用戶的獨有信息(如用戶名、電子郵件地址、機器特征碼等,以下稱用戶碼),并支付一定的費用。

圖1 軟件注冊驗證過程原理
圖1中:
(1) 用戶準備使用軟件,向軟件作者繳納費用,提交用戶碼U,申請注冊。
(2) 軟件作者使用注冊算法f,計算RC:R=f(U),回復給用戶。
(3) 用戶獲得(U,R),注冊成功。
(4) 用戶運行軟件時,向軟件作者提交(U,R)。
(5) 軟件作者使用驗證算法F(U,R),判定用戶的合法性,把判斷結果返回用戶。
(6) 用戶收到通過驗證信息,則軟件繼續運行;否則不能繼續運行。
因此,軟件驗證序列號的合法性過程是驗證用戶碼和序列號之間的換算關系是否正確的過程。
注冊驗證模型可抽象為三元組描述:Ω={U,f,F},其中:U是用戶獨有信息,或稱用戶碼;f是注冊算法集;F是驗證算法集。
目前實用的RC保護方法,注冊算法和驗證算法都是不公開的,也就是說,這種保護模型的安全性依賴于對RC和驗證碼(Verification code,VC)的保護。
該模型有多種實現方式。按照是否通過網絡、是否使用硬件(如USB Key)、是否在運行過程中進行隨機驗證等,可以有不同的注冊驗證類型。
本文沿用已有假定,注冊算法和驗證算法均不公開,在不改變原有注冊算法和驗證算法的條件下,引入加密技術抵抗截獲欺騙攻擊。
考慮在注冊算法和驗證算法都是不公開的條件下,該注冊模型在截獲攻擊下的安全性。
攻擊模型I:攻擊者了解注冊驗證過程,能夠截獲步驟1、步驟2的信息,獲得(U,R)對應。因此,攻擊者向軟件作者提交合法的(U,R)對應,可獲得合法性驗證,使得軟件保護的技術手段失效,參見圖2。

圖2 攻擊模型I
圖2中:
(1) 用戶準備使用軟件,向軟件作者繳納費用,提交用戶碼U,申請注冊;同時攻擊者截獲U。
(2) 軟件作者使用注冊算法f,計算RC:R=f(U),回復給用戶;同時攻擊者截獲R。
(3) 用戶獲得(U,R),注冊成功;同時攻擊者獲得(U,R)。
(4) 攻擊者運行軟件時,向軟件、作者提交(U,R)。
(5) 軟件作者使用驗證算法F(U,R),判定其合法性,返回判斷結果。
(6) 攻擊者收到通過驗證信息,則軟件繼續運行;否則不能繼續運行。
在該攻擊模型下,攻擊者通過截獲注冊過程的U、R信息,破解軟件的RC保護方法,獲得軟件的使用控制權。
攻擊模型II:攻擊者了解注冊驗證過程,能夠攔截步驟(4)軟件作者驗證用戶合法性之后的結果數據,因此,攻擊者通過對結果數據以及相應的軟件是否可以正常運行的關聯,可以獲得結果數據是否通過了合法性驗證的含義,并使用通過合法性驗證的數據欺騙軟件,使得軟件保護的技術手段失效,參見圖3。

圖3 攻擊模型II
在該攻擊模型下,攻擊者截獲并使用合法性驗證后的結果數據,破解軟件的RC保護方法,獲得軟件的使用控制權。
圖3中:
(1) 用戶準備使用軟件,向軟件作者繳納費用,提交用戶碼U,申請注冊。
(2) 軟件作者使用注冊算法f,計算RC:R=f(U),回復給用戶。
(3) 用戶獲得(U,R),注冊成功。
(4) 用戶運行軟件時,向軟件作者提交(U,R)。
(5) 軟件作者使用驗證算法F(U,R),判定用戶的合法性,把判斷結果返回用戶;同時攻擊者截獲判斷結果。
(6) 用戶收到通過驗證信息,則軟件繼續運行;否則不能繼續運行。
(7) 攻擊者向軟件作者提交任意的(U,R)。
(8) 軟件作者使用驗證算法F(U,R),判定其合法性,返回判斷結果。
(9) 攻擊者收到并修改驗證信息,軟件繼續運行。
通過上述分析,本文認為,這種RC軟件保護方式,容易受到攔截欺騙攻擊,并且與注冊算法和驗證算法本身的安全性沒有直接關系。為此提出改進方案來應對上述攔截欺騙攻擊模型。
經上述分析可知,為了防止通過直接截獲U、R對應,繞過RC保護(攻擊模型I),和直接截獲驗證結果進行修改(攻擊模型II),在用戶與軟件作者之間傳遞的U、R和驗證結果信息需要進行保護,為攻擊者設置障礙阻止其分析成功。
Anti-ISA RCSP算法(圖4):沿用注冊算法和驗證算法保持不公開的條件。假設軟件作者與用戶之間的初始密鑰是K,相應的加解密算法分別是EK和DK,算法過程如下:
(1) 用戶向軟件作者繳納費用后,軟件作者獲得用戶碼U,為用戶建立相應的加解密算法(E,D)和初始密鑰K。
(2) 軟件作者與用戶通過協商得到本次通信的對稱密鑰K1。
(3) 軟件作者使用U,計算RC:R=f(U),使用本次通信密鑰K1,加密R,得到EK1(R);記錄(U,R);將EK1(R)發給用戶。
(4) 用戶收到EK1(R),使用本次通信密鑰K1解密得到R,即R=DK1(EK1(R)),用戶存儲(U,R)。
(5) 用戶運行軟件,與軟件作者通過協商得到本次通信的對稱密鑰K2。
(6) 用戶利用K2加密(U,R),發給軟件作者,即EK2(U,R)。
(7) 軟件作者收到EK2(U,R),利用K2解密得到(U,R),即:(U,R)=DK2(EK2(U,R));軟件作者使用驗證算法計算F(U,R),將驗證結果,用K2加密返回用戶,即:EK2(F(U,R))。
(8) 軟件作者收到EK2(U,R),使用本次通信密鑰K2解密得到(U,R),即:(U,R)=DK2(EK2(U,R)),使用驗證算法F(U,R),判定用戶的合法性,用K2加密判斷結果EK2(F(U,R))返回用戶。
(9) 用戶收到EK2(F(U,R)),使用本次密鑰K2解密得到F(U,R),即F(U,R)=DK2(EK2(F(U,R))):若驗證結果為通過,則軟件繼續運行;否則軟件不能繼續運行。
因此,在改進的RC保護機制下,軟件作者驗證序列號的合法性過程是通過使用加解密技術、保護公開傳遞的信息被攻擊者截獲后無法使用來達到抗截獲攻擊的目的。
改進的注冊驗證模型可抽象為Ω={U,f,F,K,E,D},其中:U、f、F分別是原有的用戶碼、注冊算法、驗證算法集;K是密鑰集,E是加密算法集,D是解密算法集。算法流程參見圖4。

圖4 改進的RC保護機制流程
在攻擊模型I條件下,攻擊者能夠截獲U、密鑰協商過程的數據、EK1(R),如圖5所示。

圖5 攻擊模型I下改進的RC保護算法安全性分析
圖5中,步驟1-步驟5是正常的流程。攻擊模型I下攻擊者在步驟2獲得密鑰協商過程信息,在步驟3獲得EK1(R),這樣在步驟6時攻擊者就擁有(U,EK1(R))攻擊者將(U,EK1(R))發給軟件作者,但軟件作者缺乏與攻擊者協商的解密密鑰,不能利用收到的信息解密出(U,R),因此不能通過驗證,攻擊者不能運行軟件;另一方面,如果密鑰協商過程不安全,攻擊者就能夠破解出K1;而如果加密算法E不夠安全,攻擊者就能夠破解加密算法E。顯然,只要攻擊者無法破解出K1或者是加密算法E,就不能解密出R。類似的,攻擊者也沒有能力破解出K2得到(U,R),因此也不能進入后續使用K2加密(U,R)的步驟。
因此,在攻擊模型I下該保護機制的安全性可歸約為密鑰協商過程和加密算法E的安全性。
在攻擊模型II條件下,攻擊者能夠截獲加密后的驗證結果F(U,R),即EK2(F(U,R)),參見圖6。

圖6 攻擊模型II下改進的RC保護算法安全性分析
圖6中,步驟1-步驟8是正常的流程。攻擊模型II下,攻擊者在步驟5可獲得密鑰協商過程信息,在步驟7可獲得EK2(F(U,R)),在步驟10獲得不通過的加密信息,修改為EK2(F(U,R))后由用戶端執行,而攻擊者的用戶端因為沒有參與步驟1-步驟8,不能解密出F(U,R),因此軟件不能執行。另一方面,如果密鑰協商過程不安全,攻擊者就能夠破解出K2;如果加密算法E不夠安全,攻擊者就可以破解加密算法E。顯然,只要攻擊者無法破解出K2或者是加密算法E,就不能解密出F(U,R),因此也不能進入后續修改合法性判斷結果的步驟。
因此在攻擊模型II下該保護機制的安全性可歸約為密鑰協商過程和加密算法E的安全性。
綜上,兩種截獲欺騙攻擊模型下,本文所提出的改進的RC軟件保護機制的抗截獲欺騙攻擊的能力,均可歸約為密鑰協商過程和加密算法E的安全性。
一般有多種目的的密鑰協商:防破解解密密鑰(機密性要求)、防篡改、防偽造、防假冒、防抵賴、群密鑰協商等[13-16]。本文的密鑰協商,是為建立安全的會話密鑰而進行的兩用戶會話密鑰協商。根據本文上述分析,在攻擊模型I下,需要密鑰協商過程滿足保護解密密鑰K1的機密性要求;在攻擊模型II下,需要密鑰協商過程滿足保護解密密鑰K2的機密性要求。因此總的來看,密鑰協商過程需要保護解密密鑰的機密性。而這也是對密鑰協商過程的基本要求。
根據上述分析,本文的加密算法E,在攻擊模型I下,需要滿足不能破解出R(U,R)的機密性要求;在攻擊模型II下,需要滿足不能破解出F(U,R)的機密性要求。因此總的來看,加密算法E需要保護明文的安全。而這也是對加密算法的基本要求。
現有多種方式采用了加密技術來保證RC安全,采用非對稱算法保護RC[5]、采用集中式方式管理加密RC[9]、對RC的生成和驗證進行保護[11]、對優先使用軟件的RC改進[12]。與上述保護方式相比,本文針對兩種常見的截獲欺騙攻擊模型,在不改變RC算法和驗證算法的前提下,通過使用密鑰協商和加密技術,提高現有RC軟件保護的有效性。因此,研究的針對性不同,本文針對兩種特定攻擊模型;前提條件不同,本文的研究不改變RC算法和驗證算法;算法流程不同,本文引入兩次密鑰協商和加密以確保RC的安全;加密保護的信息不同,本文分別使用密鑰K1加密R,使用K2加密(U,R)。
復雜性有多種定義方式,本文考慮對改進前后的RC算法進行對比,由于運算有多種實現難以具體化,這里只考慮抽象層面的對比,將相對復雜性分解為信息交互次數、運算時空需求兩個部分,參見表1。

表1 相對復雜性分析
信息交互次數分析:現有的RC機制中,信息交互次數為4;改進后的RC機制中,信息交互次數增加到8次,其中密鑰協商過程因為需要用戶和軟件作者相互傳遞協商信息,按兩次計算。
運算時空需求分析:現有的RC機制中,計算僅出現在軟件作者端,主要計算量是計算RC和計算VC兩部分;改進后的RC機制中,運算擴展到用戶端。在用戶端主要運算是運行密鑰協商算法兩次、加密算法一次、解密算法兩次;在軟件作者端的主要運算是運行密鑰協商算法兩次、計算RC和計算VC各一次、加密算法兩次、解密算法一次。
本文通過抽象兩種常見的截獲欺騙攻擊模型,使用加密技術,建立一種抗截獲欺騙攻擊的軟件保護機制,分析表明在增加信息交互和時空需求代價下,本文提出的機制可以解決現有RC軟件保護手段的難題,其安全強度與密鑰協商過程和加密算法的安全性相當。
本文研究沒有涉及到針對兩種攻擊模型的高級持續攻擊(ATP),以及實現過程中的非理想化情況,因此,針對具體情況,還需要考慮更多的問題,將在后續研究中進一步完善。