王 安, 董永銀, 祝烈煌, 張 宇, 丁瑤玲
1. 北京理工大學(xué) 計(jì)算機(jī)學(xué)院, 北京100081
2. 密碼科學(xué)技術(shù)國家重點(diǎn)實(shí)驗(yàn)室, 北京100878
3. 中國人民解放軍61206 部隊(duì), 北京100042
隨著計(jì)算機(jī)技術(shù)及信息化的不斷發(fā)展, 計(jì)算機(jī)軟件已經(jīng)成為人們生活工作中不可缺少的輔助工具, 成為信息社會(huì)實(shí)現(xiàn)的基礎(chǔ). 近年來, 利用軟件后門竊取重要信息的攻擊事件不斷被爆出, 引發(fā)人們對(duì)軟件安全使用的擔(dān)憂, 現(xiàn)階段軟件后門已成為保障重要基礎(chǔ)設(shè)施信息安全的焦點(diǎn)之一.
所謂軟件后門, 就是在設(shè)計(jì)開發(fā)階段, 程序員在軟件中創(chuàng)建了隱秘的訪問通道或控制指令, 以便在未來能夠便利地繞過軟件固有的訪問控制權(quán)限來訪問軟件或?qū)嵤┛刂菩袨? 其原本目的是在各種實(shí)際應(yīng)用場景下調(diào)試復(fù)雜的應(yīng)用程序時(shí), 可以降低調(diào)試的困難程度. 隨著時(shí)間的推移, 這項(xiàng)技術(shù)發(fā)生了變化, 其目的也變得不是那么的單純. 部分程序員或廠商故意設(shè)置了后門漏洞, 將其作為應(yīng)用程序和系統(tǒng)中安全的突破口, 來上傳一些病毒、木馬、蠕蟲等惡意程序, 或造成隱私信息的泄露.
近年來, 針對(duì)各類軟件的后門攻擊日益增多, 攻擊的廣度和深度也不斷延伸, 造成的損失在不斷擴(kuò)大.2013 年, Chen 等人提出了一種基于漏洞的后門程序, 誘導(dǎo)用戶安裝存在漏洞的軟件, 并利用該漏洞實(shí)施后續(xù)攻擊[1]. 2017 年, Bannier 等人發(fā)現(xiàn)了對(duì)稱加密系統(tǒng)中的數(shù)學(xué)后門, 提出了類似AES 分組密碼的后門算法提案, 并對(duì)該后門的危險(xiǎn)系數(shù)進(jìn)行了評(píng)估[2]. 2013 年, “棱鏡門” 事件[3]曝光了美國政府利用軟件后門對(duì)世界各國實(shí)施大規(guī)模信息監(jiān)控. 2017 年, 攻擊者利用病毒[3]感染了M.E.Doc (一款被烏克蘭公司使用的熱門會(huì)計(jì)軟件) 的更新服務(wù)器, 導(dǎo)致歐洲多個(gè)國家的機(jī)場、銀行ATM 機(jī)及大型企業(yè)和公共設(shè)施大量淪陷. 2017 年, 據(jù)《華盛頓郵報(bào)》報(bào)道,美國計(jì)劃向俄羅斯的基礎(chǔ)設(shè)施中植入數(shù)字炸彈, 一旦美俄關(guān)系惡化將隨時(shí)引爆[4]. 2019 年, 約翰內(nèi)斯堡市受到大量網(wǎng)絡(luò)攻擊, 黑客組織將惡意軟件植入了與該城市有關(guān)的所有電子服務(wù)和計(jì)費(fèi)系統(tǒng)中, 并勒索4 個(gè)比特幣[5]. 據(jù)統(tǒng)計(jì), 美國每年在軟件安全測試上的投入已達(dá)到幾十億美元[6].
為了防止各類攻擊, 重要數(shù)據(jù)系統(tǒng)的管理員往往會(huì)采用密碼軟件來保證數(shù)據(jù)的安全. 此類軟件通常采用密碼技術(shù)來實(shí)現(xiàn)數(shù)據(jù)加密、會(huì)話密鑰協(xié)商、數(shù)據(jù)來源認(rèn)證、消息完整性認(rèn)證等安全功能, 以確保信息在存儲(chǔ)、傳送過程中的安全性. 不幸的是, 密碼軟件也是信息安全廠商開發(fā)出的普通計(jì)算機(jī)軟件, 也需要經(jīng)歷開發(fā)、下載、安裝、使用、維護(hù)的過程, 一旦其生命周期中被植入了后門, 將可以直接入侵進(jìn)入它要保護(hù)的數(shù)據(jù)系統(tǒng), 反而給攻擊者帶來了更大的便利.
對(duì)于惡意目的的軟件后門, 隱蔽性是其最重要的特性. 后門的設(shè)計(jì)者往往處心積慮地使軟件后門代碼難以被發(fā)現(xiàn), 并長期潛伏, 待滿足特定時(shí)機(jī)時(shí)再進(jìn)行激活, 具備這種特性的攻擊被稱為APT (Advanced Persistent Threat)[7]. APT 攻擊是近年來被廣泛關(guān)注的一類新型安全性威脅, 最初由美國空軍提出, 主要利用網(wǎng)絡(luò)、物理、欺騙等途經(jīng)實(shí)現(xiàn)對(duì)特定目標(biāo)的持續(xù)性攻擊. APT 攻擊的最大優(yōu)勢(shì)是能夠?qū)崿F(xiàn)長時(shí)間的潛伏和持續(xù)性攻擊, 因此, APT 已成為最具威脅性的網(wǎng)絡(luò)攻擊之一.
然而, 軟件后門的隱蔽性和其強(qiáng)大的功能之間往往是矛盾的, 這是因?yàn)? 一方面, 復(fù)雜的功能必然帶來冗長的代碼, 且需對(duì)原始軟件進(jìn)行過多修改, 從而導(dǎo)致其代碼特征的變化很容易被發(fā)現(xiàn); 另一方面, 一些具有明顯危害功能的行為特征很容易被殺毒軟件察覺.
本文中, 我們結(jié)合密碼學(xué)、差分故障分析、逆向分析、APT 攻擊等技術(shù), 提出了一種面向分組密碼軟件的APT 后門植入方案, 解決了軟件后門隱蔽性和功能強(qiáng)大之間的矛盾問題. 該APT 后門的主要特點(diǎn)如下:
? 植入代碼的隱蔽性強(qiáng). 該后門主要對(duì)原始軟件做兩處修改, 其一是修改分組密碼運(yùn)算過程中特定輪的少量比特, 用于實(shí)施差分故障分析; 其二是用少量判斷語句和獲得系統(tǒng)狀態(tài)的代碼來實(shí)現(xiàn)激活條件, 這兩處的代碼量通常很小.
? 激活時(shí)的表征不明顯. 首先, 利用APT 長期潛伏的原理, 該后門僅僅在某一條件滿足時(shí)才會(huì)激活,該條件可以設(shè)定為特定時(shí)間、特定文件名等隱蔽條件. 其次, 該后門激活后, 會(huì)執(zhí)行普通的加密功能, 以及帶有比特翻轉(zhuǎn)故障的加密功能, 但無論是正確加密還是錯(cuò)誤加密, 它們都是該軟件的日常工作行為, 因而不易被察覺.
? 植入方式簡單. 利用軟件逆向分析技術(shù), 可在軟件中精準(zhǔn)定位到分組密碼運(yùn)算的某個(gè)特定輪. 后門植入方式很簡單, 僅僅將此處的幾個(gè)比特進(jìn)行“有條件” 翻轉(zhuǎn), 即可使攻擊者獲得有效的正確密文和錯(cuò)誤密文.
? 破壞性強(qiáng). 由于該軟件后門可以直接恢復(fù)分組密碼算法的密鑰, 且觸發(fā)條件少, 生效時(shí)間短, 潛伏時(shí)間長, 不易被防火墻及殺毒軟件查殺, 這些功能均給數(shù)據(jù)系統(tǒng)的機(jī)密性、完整性帶來很大影響.
軟件后門從實(shí)現(xiàn)方式上可分為文件捆綁、插入捆綁、代碼植入三種類型。
(1) 文件捆綁
文件捆綁[8]是一種比較傳統(tǒng)的方法, 就是利用捆綁器軟件, 將單獨(dú)的后門軟件直接附加到正常軟件的后面, 比如迷你小游戲、辦公軟件等, 當(dāng)正常軟件被執(zhí)行的同時(shí), 后門軟件也同時(shí)被執(zhí)行. 這種方式很容易被殺毒軟件查殺.
(2) 插入捆綁
由于每個(gè)應(yīng)用程序內(nèi)部都有一定的閑置空間可以利用, 后門程序可以直接插入正常程序的中間, 從而使正常程序看上去“原封不動(dòng)”. 插入捆綁[8]相比于文件捆綁的方式, 被查殺的可能性很小, 更具有迷惑性和欺騙性.
(3) 代碼植入
軟件的設(shè)計(jì)者在編寫軟件時(shí), 可能直接在軟件內(nèi)創(chuàng)建后門, 以便調(diào)試程序, 或在需要時(shí)發(fā)起攻擊. 在不公開源碼的情況下, 此類后門很難被發(fā)現(xiàn). 另一方面, 非軟件廠商的第三方開發(fā)人員能夠?qū)浖M(jìn)行逆向分析, 并插入?yún)R編形態(tài)的后門代碼, 同樣實(shí)現(xiàn)后門功能.
對(duì)于第(1) 種捆綁方式而言, 在計(jì)算機(jī)安裝有殺毒軟件的條件下, 后門比較容易被發(fā)現(xiàn). 另外, 文件捆綁會(huì)造成原軟件的大小發(fā)生明顯變化, 尤其是后門程序越大, 變化越明顯, 越容易被發(fā)現(xiàn). 方式(2) 隱藏性較強(qiáng), 如果再進(jìn)行加殼處理, 可一定程度上躲過殺毒軟件的查殺, 但是在后門激活時(shí), 其異常行為可能會(huì)被殺毒軟件發(fā)現(xiàn). 方式(3) 的隱蔽性相對(duì)更強(qiáng), 在軟件源碼未公開的情況下, 較難被發(fā)現(xiàn)和查殺.
差分故障分析(Differential Fault Analysis, DFA) 是對(duì)分組密碼實(shí)施故障分析的主流方法, 是由Boneh 等人和Biham 等人于1997 年分別提出的[9,10]. DFA 通過向密碼算法的特定位置注入故障, 用正確的加密結(jié)果和錯(cuò)誤的加密結(jié)果進(jìn)行比對(duì)來計(jì)算出密鑰. Biham 等人針對(duì)DES 算法給出的差分故障攻擊借助了比特翻轉(zhuǎn)故障模型, 通過向DES 第14–16 輪中注入數(shù)十個(gè)有效故障, 即可恢復(fù)DES 算法的密鑰[10]. 隨后, 人們提出了針對(duì)AES 等其它分組算法的DFA 攻擊[11–13].
本文我們以一款DES 軟件為例來設(shè)計(jì)后門方案. 對(duì)于DES 算法的DFA 攻擊, 故障出現(xiàn)在末輪比故障出現(xiàn)在中間輪時(shí), 密鑰恢復(fù)算法能夠更加高效[14]. 由于軟件逆向分析工具已十分成熟, 根據(jù)實(shí)際應(yīng)用場景, 本文選擇在DES 最后一輪輸入的位置植入故障. 因?yàn)樽詈笠惠喌难┍佬?yīng)較弱, 因而可以通過較為簡單的傳播路線, 得到更有規(guī)律的錯(cuò)誤密文, 用以分段來恢復(fù)密鑰.
以“代碼植入” 的方式對(duì)源碼未公開的計(jì)算機(jī)軟件植入后門, 需要首先對(duì)軟件的代碼進(jìn)行反匯編, 通過分析匯編代碼來搞清楚其運(yùn)行過程和各部分功能. 這種將軟件從產(chǎn)品到設(shè)計(jì)的反向過程, 就是逆向分析.與源代碼開放的軟件不同, 用戶無法快速修改已經(jīng)編譯成型的可執(zhí)行文件, 也無法直觀地獲知軟件內(nèi)部的算法, 這就需要借助逆向分析工具, 從二進(jìn)制機(jī)器代碼翻譯過來的匯編代碼入手來分析程序, 分別推斷其數(shù)據(jù)結(jié)構(gòu)、體系結(jié)構(gòu)、程序設(shè)計(jì)信息. 在大多數(shù)情況下, 軟件代碼較長、且程序結(jié)構(gòu)復(fù)雜, 這導(dǎo)致逆向分析的難度通常很高, 因而在實(shí)際中需要尋找盡可能少的修改點(diǎn), 來達(dá)到分析者的目的.
OllyDbg 工具是一款具有可視化界面的用戶模式調(diào)試器, 它結(jié)合了動(dòng)態(tài)調(diào)試和靜態(tài)分析, 具有強(qiáng)大的反匯編引擎, 能自動(dòng)分析函數(shù)過程、循環(huán)語句、字符串等. 本文中, 我們利用OllyDbg 工具對(duì)軟件進(jìn)行動(dòng)態(tài)跟蹤分析, 獲知加密軟件的加密流程, 并準(zhǔn)確尋找到希望注入故障的位置.
本文以一個(gè)具有DES 加密功能的軟件為例開展討論, 為了便于描述, 我們?cè)O(shè)定其為Windows 操作系統(tǒng)下的一個(gè)des.exe 文件, 它以文本文件的格式輸入明文, 并以文本文件的格式輸出密文, 與WinRAR 等軟件類似, 其加解密的密鑰可由用戶輸入的口令來生成.
本文實(shí)施攻擊的場景設(shè)定為: Alice 和Bob 是兩個(gè)合法用戶, 工作中需要對(duì)一些文件進(jìn)行加密傳輸,所使用的軟件為上述des.exe, 二人已通過安全渠道協(xié)商好口令, 該口令用于生成DES 加密使用的會(huì)話密鑰K. 然而, Bob 在不安全的網(wǎng)絡(luò)中下載了由敵手Eve 提供的des.exe 軟件, 該軟件被Eve 植入了后門.Eve 可以通過預(yù)留的后門來獲得一些信息, 從而推導(dǎo)出Alice 和Bob 的會(huì)話密鑰K, 圖1 展示了具體流程:
階段1: 后門植入
(1.1) Eve 下載正常的des.exe 軟件, 用逆向分析技術(shù)為軟件植入后門, 植入方法見3.2 節(jié).
(1.2) Eve 誘導(dǎo)Bob 安裝帶有后門的des.exe 軟件.
階段2: 故障誘導(dǎo)
(2.1) Alice 請(qǐng)求Bob 以加密的方式將文件F 發(fā)送給Alice.
(2.2) Bob 在后門未激活的情況下使用des.exe 軟件和密鑰K 將文件F 加密為C, 并發(fā)送給Alice.
(2.3) Alice 向Bob 返回解密成功的確認(rèn)消息, 但Eve 向Bob 實(shí)施拒絕服務(wù)攻擊, Bob 無法獲知該確認(rèn)消息.
(2.4) Eve 選擇在適合后門激活的時(shí)間段內(nèi)(后門是通過時(shí)間激活的, 見3.2 節(jié)) 假冒Alice 身份, 向Bob 發(fā)送消息, 聲稱文件C 解密失敗, 再次請(qǐng)求Bob 重新加密文件F 并再次發(fā)送.
(2.5) Bob 在后門被激活的時(shí)間段內(nèi)使用des.exe 軟件和密鑰K 再次對(duì)文件F 加密, 得到錯(cuò)誤的密文C′, 并發(fā)送給Alice.
(2.6) Eve 截獲步驟(2.2) 和步驟(2.5) 中的密文C 和C′.
階段3: 密鑰恢復(fù)
(3.1) Eve 利用DFA 恢復(fù)DES 密鑰K, 具體方法見3.3 節(jié).
(3.2) Eve 用密鑰K 從加密文件C 中恢復(fù)出文件F, 并恢復(fù)出從前Alice 和Bob 之間多次加密傳輸過的各個(gè)文件中的信息.
(3.3) Eve 繼續(xù)監(jiān)聽Alice 和Bob 之間的加密信道, 從而獲取更多信息.
在獲得正式版的des.exe 軟件后, 敵手Eve 可對(duì)該軟件進(jìn)行逆向分析, 在代碼中找到其中DES 加密的第16 輪的位置, 并將其改為下列條件分支:
(1) 在后門未激活時(shí), 執(zhí)行正常的第16 輪加密.
圖1 實(shí)現(xiàn)流程Figure 1 Implementation process
(2) 在后門被激活時(shí), 將第16 輪的32 比特輸入值R15的第2/6/10/14/18/22/26/30 比特進(jìn)行翻轉(zhuǎn),并繼續(xù)執(zhí)行后續(xù)的第16 輪加密.
后門激活的條件可設(shè)定為經(jīng)常發(fā)生、不易被發(fā)現(xiàn)、且易于受到Eve 控制的事件, 例如軟件運(yùn)行時(shí)的系統(tǒng)時(shí)間在20 點(diǎn)05 分到20 點(diǎn)15 分之間. 當(dāng)Eve 選擇在20 點(diǎn)05 分執(zhí)行步驟(2.4), 響應(yīng)速度較快的Bob 將以很大概率在10 分鐘內(nèi)將文件F 加密為C′, 從而讓Eve 的計(jì)劃得逞.
當(dāng)Eve 獲得由相同明文和密鑰生成的正確密文文件C 和錯(cuò)誤密文文件C′后, 可通過差分故障分析計(jì)算出第16 輪輪密鑰K16可能的值. 其原理如下:
DES 算法加密得到的密文文件一般由多個(gè)分組構(gòu)成, 對(duì)于正確密文C 和錯(cuò)誤密文C′中的第一段64比特分組, 設(shè)出錯(cuò)位置發(fā)生在第16 輪輸入位置R15的某1 個(gè)比特, 一方面, 該比特會(huì)直接影響到L16的1 個(gè)比特, 另一方面, 會(huì)影響到第16 輪的1 個(gè)S 盒(實(shí)際中可能會(huì)影響到1 到2 個(gè)S 盒, 為了簡便描述,我們只討論影響到1 個(gè)S 盒的情況, 影響2 個(gè)S 盒的情況與之類似), 進(jìn)而影響到R16的4 個(gè)比特, 如圖2(左) 所示. 對(duì)于第16 輪異或輸入值中與該S 盒對(duì)應(yīng)的6 比特v (設(shè)兩次加密時(shí)分別為v1和v2)、以及第16 輪該S 盒的輸出值y (設(shè)兩次加密時(shí)分別為y1和y2), 攻擊者可以通過兩次加密密文中的L16和R16推導(dǎo)出v1和v2, 以及y1和y2的差分?y, 如圖2(右) 所示.
此時(shí), 攻擊者可對(duì)圖中的6 比特密鑰k 進(jìn)行猜測, 遍歷0 到63. 對(duì)于每個(gè)密鑰猜測, 用已知的v1和v2輸入到異或和S 盒中, 看其輸出值的差分是否等于?y. 若相等, 則表明當(dāng)前密鑰猜測可能正確; 若不相等, 則表明當(dāng)前密鑰猜測必然不正確. 通過這種篩選, 可排除掉大部分錯(cuò)誤的候選密鑰.
隨后, 對(duì)密文的另一段分組也進(jìn)行上述分析, 可進(jìn)一步縮小候選密鑰的范圍. 重復(fù)這一過程多次, 即可最大化縮小k 的可選范圍, 縮小計(jì)算量. 其它7 個(gè)S 盒對(duì)應(yīng)的6×7 比特密鑰也可用相同方法恢復(fù), 從而恢復(fù)出DES 算法第16 輪的48 比特輪密鑰的可能值. 最后, 再通過8 比特的窮搜, 即可獲得DES 算法的56 比特原始密鑰.
如果Alice 和Bob 之間的所有數(shù)據(jù)通信均帶有消息來源認(rèn)證, 則階段2 中的步驟(2.4) 將無法實(shí)現(xiàn).此時(shí), 我們可將階段2 的協(xié)議改為:
(2.1) Alice 請(qǐng)求Bob 以加密的方式將文件F 發(fā)送給Alice.
(2.2) Bob 在后門未激活的情況下使用des.exe 軟件和密鑰K 將文件F 加密為C, 并發(fā)送給Alice.
(2.3) Eve 使用拒絕服務(wù)攻擊手段, 使Alice 無法收到加密文件C.
(2.4) Alice 再次向Bob 請(qǐng)求文件F. 但Eve 使用拒絕服務(wù)攻擊手段, 攔截到該請(qǐng)求, 暫時(shí)不發(fā)送給Bob, 隨后選擇適合后門激活的時(shí)間段內(nèi)將其發(fā)送給Bob.
(2.5) Bob 在后門被激活的時(shí)間段內(nèi)使用des.exe 軟件和密鑰K 再次對(duì)文件F 加密, 得到錯(cuò)誤的密文C′, 并發(fā)送給Alice.
(2.6) Eve 截獲步驟(2.2) 和步驟(2.5) 中的密文C 和C′.
該協(xié)議中, Eve 借助兩次拒絕服務(wù)攻擊, 在安全信道下仍然獲得了用于恢復(fù)密鑰的密文C 和C′, 故而上述APT 后門攻擊仍然成立.
為了獲知加密軟件des.exe 中與DES 算法相關(guān)的執(zhí)行流程, 并定位加密算法最后一輪的輸入位置, 我們利用軟件逆向工具OllyDbg 對(duì)該軟件進(jìn)行分析. 在沒有源代碼的情況下, 我們動(dòng)態(tài)跟蹤代碼的執(zhí)行, 查看寄存器和棧的內(nèi)容, 可以得到程序執(zhí)行中間結(jié)果的一些反饋. 當(dāng)des.exe 軟件導(dǎo)入逆向工具OllyDbg后, 程序運(yùn)行指針直接停在了程序的入口點(diǎn). 如圖3 所示.
在導(dǎo)入待分析軟件后, 我們對(duì)其進(jìn)行動(dòng)態(tài)與靜態(tài)相結(jié)合的分析. 首先查看某些具有特定語義的字符串是否出現(xiàn)在軟件中用. 我們利用OllyDbg 字符串查找功能, 獲取了軟件在編寫過程中所使用的所有字符串, 發(fā)現(xiàn)了一些變量定義的信息, 如plaint、skey、in、kval、out、key 等字樣, 如圖4 所示, 我們猜測它們代表的是明文、源密鑰、輪輸入、輪密鑰、輪輸出等含義.
隨后, 我們對(duì)程序的運(yùn)行流程做了全面的瀏覽, 按快捷鍵F8 一步一步執(zhí)行, 尋找相關(guān)信息. 在運(yùn)行的過程中, 我們發(fā)現(xiàn)了main() 函數(shù)和des() 函數(shù)的位置. 如圖5 和圖6 所示.
找到des() 函數(shù)的地址, 就相當(dāng)于找到了算法的起始位置. 進(jìn)入該函數(shù)后, 繼續(xù)單步執(zhí)行, 可以發(fā)現(xiàn)在該函數(shù)下存在多個(gè)CMP 指令, 該指令很可能會(huì)用于判定當(dāng)前執(zhí)行的輪數(shù)是否已經(jīng)達(dá)到16 輪. 最后, 我們鎖定了一條有關(guān)16 的CMP 指令, 即cmp dword ptr [ebp-50], 10. 由此大致確定, 這條指令之前或之后的一小段程序可能是DES 的輪函數(shù). 我們跟蹤這段程序, 當(dāng)循環(huán)的數(shù)值為14 時(shí), DES 算法運(yùn)算到達(dá)了第15 輪. 在該輪計(jì)算結(jié)束的位置, 就是我們要注入故障的位置.
圖4 軟件使用的字符串信息Figure 4 String information used by software
圖5 main() 函數(shù)位置Figure 5 Location of main() function
圖6 des() 函數(shù)位置Figure 6 Location of des() function
OllyDbg 工具中顯示的代碼均為匯編代碼, 因而在植入代碼時(shí), 我們也必須使用匯編語言才能滿足要求. 我們的目標(biāo)是實(shí)現(xiàn)在DES 加密算法的第16 輪輸入R15處按照某個(gè)激發(fā)條件發(fā)生若干比特的錯(cuò)誤.在添加代碼時(shí), 由于此處的空間有限, 我們無法在原有位置上直接添加后門激活條件和產(chǎn)生比特翻轉(zhuǎn)的代碼.
解決這個(gè)問題的方法是, 我們?cè)诔绦蚝竺娴目瞻滋幵黾雍箝T代碼. 具體方法是: 首先在原有位置添加一個(gè)跳轉(zhuǎn)指令, 跳轉(zhuǎn)到程序后部的一段NOP 代碼的位置, 隨后在此NOP 位置添加若干后門代碼, 最后再跳轉(zhuǎn)回原位置. 修改之后, 對(duì)該程序進(jìn)行保存, 就成功實(shí)現(xiàn)了后門代碼的植入.
最后, 我們運(yùn)行該軟件, 輸入一個(gè)已知的密鑰, 并用一個(gè)已知的明文文件進(jìn)行驗(yàn)證, 在后門未激活時(shí)運(yùn)行加密得到密文文件C、并在后門激活時(shí)運(yùn)行加密得到密文文件C′, 通過對(duì)比C 和C′的兩個(gè)L16之間有那些比特不同, 來驗(yàn)證后門注入的實(shí)際效果.
通過以上技術(shù)操作, 我們成功獲得了同一個(gè)明文文件F 的兩個(gè)不同密文文件. 隨后我們編寫了DES算法差分故障分析的密鑰恢復(fù)程序, 以恢復(fù)第16 輪子密鑰K16和源密鑰K. 在實(shí)驗(yàn)中, 我們實(shí)際使用的密鑰K 為0x7C 6C 6C 7C 7C 6C 6C 7C, 第16 輪輪密鑰K16為0xF1 BE 26 D9 DF 78, 第一個(gè)S 盒對(duì)應(yīng)的6 比特密鑰值為111100. 我們嘗試對(duì)該S 盒對(duì)應(yīng)的6 比特密鑰進(jìn)行恢復(fù), 過程如下:
(1) 單明文減少單S 盒密鑰空間
首先, 我們采用第一個(gè)分組的明文進(jìn)行了一次分析實(shí)驗(yàn), 相關(guān)信息為:
明文: 0x28 D4 D3 A6 A4 74 2A D7
正確密文: 0x85 8E 27 2B 7D 93 0D C7錯(cuò)誤密文: 0x84 DF DC 3B 2D C6 F6 D7
用DES 算法的原理,我們利用密文計(jì)算出圖2 中v1的值為二進(jìn)制 010100,v2的值為二進(jìn)制 011100,?y 的值為二進(jìn)制 1001, 進(jìn)而采用差分故障分析得到第16 輪的第一個(gè)S 盒對(duì)應(yīng)的密鑰候選值為{0x12,0x1A, 0x31, 0x34, 0x39, 0x3C} , 當(dāng)前這組密文對(duì)可將第16 輪的候選密鑰值從64 個(gè)直接縮減到6 個(gè).
(2) 多明文縮減單S 盒密鑰空間到最優(yōu)
隨后, 我們又采用了一個(gè)明文的分組來做第二次分析實(shí)驗(yàn), 相關(guān)信息如下:
明文: 0x99 22 BC DC BB 3F 2E 78
正確密文: 0x07 99 4D 91 F9 DB 5F BF
錯(cuò)誤密文: 0x43 D8 B3 C4 ED CB A5 AA
在第二次分析實(shí)驗(yàn)中, 第16 輪的第一個(gè)S 盒對(duì)應(yīng)的候選密鑰值為{0x34, 0x3C}, 與第一次實(shí)驗(yàn)結(jié)果取交集, 第16 輪的候選密鑰值再次縮減, 從6 個(gè)減少到2 個(gè). 根據(jù)差分分析的原理, 候選密鑰減少到2 個(gè)已經(jīng)達(dá)到最優(yōu)解.
(3) 多明文縮減全部S 盒密鑰空間到最優(yōu)
采用同樣的方法,我們共使用了0x28D4D3A6A4742AD7,0x9922BCDCBB3F2E78,0x474B0436427 92BD6, 0x2339F0280D319332, 0x032C6844C789D02C 共五組明文信息, 分別將8 個(gè)S 盒對(duì)應(yīng)的6 比特候選密鑰縮減到了2 個(gè). 8 個(gè)S 盒對(duì)應(yīng)的可能密鑰分別為: {0x34, 0x3C}, {0x13, 0x18}, {0x30, 0x38},{0x26, 0x2E}, {0x36, 0x3E}, {0x15, 0x1D}, {0x35, 0x3D}, {0x30, 0x38}.
(4) 恢復(fù)源密鑰
目前, 恢復(fù)第16 輪輪密鑰值K16的搜索空間已縮減到28, 由于從K16搜索源密鑰K 的空間為28,因而我們最終通過216次搜索, 恢復(fù)了DES 算法的源密鑰0x7C 6C 6C 7C 7C 6C 6C 7C, 大約耗時(shí)1 秒鐘.
我們將本文設(shè)計(jì)的APT 后門與現(xiàn)有技術(shù)進(jìn)行對(duì)比, 如表1 所示. 與捆綁式后門、傳統(tǒng)植入式后門相比較, 本文提出的APT 后門不會(huì)留下捆綁痕跡, 篡改的代碼長度短, 隱蔽性強(qiáng), 激活表征不明顯, 執(zhí)行時(shí)間短, 因而具有更強(qiáng)的威脅性.
軟件后門在實(shí)踐中是否可行, 主要取決于它是否能夠繞過后門檢測工具的查殺. 目前學(xué)術(shù)界對(duì)這種“繞過” 技術(shù)的專業(yè)研究較少, 現(xiàn)有軟件后門普遍采用兩種思路來繞過檢測工具, 其一是采用APT 手段提前獲取權(quán)限, 其二是通過一些隱蔽手段來確保不會(huì)被檢測工具發(fā)現(xiàn).
表1 后門方案對(duì)比Table 1 Comparison among backdoor schemes
隨著網(wǎng)絡(luò)武器的發(fā)展, APT 已演變?yōu)橐活惙啦粍俜赖墓羰侄? 后門在與APT 相結(jié)合后, 通常會(huì)在一段時(shí)間內(nèi)運(yùn)行一個(gè)簡單的惡意程序, 在確保自己不會(huì)被發(fā)現(xiàn)后, 長期蟄伏, 并選擇合適的時(shí)機(jī)進(jìn)行強(qiáng)力攻擊. 2019 年10 月, 黑客組織APT41 對(duì)廣泛使用的TeamViewer 辦公軟件的后臺(tái)服務(wù)器實(shí)施了網(wǎng)絡(luò)攻擊, 直接導(dǎo)致大量用戶電腦上安裝的TeamViewer 軟件帶有惡意后門, 黑客們能利用該后門來訪問和控制安裝了TeamViewer 的客戶端[15]. 有證據(jù)顯示TeamViewer 后臺(tái)服務(wù)器早在很久之前就被黑客攻陷, 黑客正是利用這種“持續(xù)性” 威脅, 潛移默化地對(duì)用戶隱私進(jìn)行侵犯. 該案例足以說明APT 攻擊不僅僅發(fā)生在國家關(guān)鍵基礎(chǔ)設(shè)施中, 同時(shí)也發(fā)生在我們身邊.
一些傳統(tǒng)的隱蔽手段也能以一定概率繞過檢測工具, 具體效果需要看后門固有代碼的隱蔽性、以及運(yùn)行過程中的隱蔽性. 例如本文提出的后門方案之所以能夠繞過一些檢測措施, 主要是因?yàn)槠渲踩氪a短、植入方式簡單, 其代碼具有較好的隱蔽性. 同時(shí), 該后門在激活時(shí)的表征不夠明顯, 不會(huì)產(chǎn)生額外的網(wǎng)絡(luò)數(shù)據(jù)包或其它敏感數(shù)據(jù)流, 所以它可以繞過一些基于數(shù)據(jù)流量變化分析的實(shí)時(shí)檢測工具.
本文提出的APT 后門方案正是結(jié)合了上述APT 手段和隱蔽性的特點(diǎn), 因而可以繞過檢測工具的查殺. 需要說明的是, 本文研究APT 后門、分析其可行性, 當(dāng)然不是為了蓄意對(duì)計(jì)算機(jī)系統(tǒng)進(jìn)行破壞, 而是希望學(xué)術(shù)界、產(chǎn)業(yè)界、普通用戶都能夠足夠重視APT 后門, 提高防護(hù)意識(shí), 加強(qiáng)防護(hù)技術(shù)的研究.
軟件后門已被人們研究多年, 學(xué)術(shù)界已提出了許多防范措施. 然而, 本文提出的APT 后門具有很強(qiáng)的隱蔽性, 很可能繞過殺毒軟件的監(jiān)控, 其防范對(duì)策可以從下列幾點(diǎn)進(jìn)行考慮:
(1) 安全軟件廠商應(yīng)進(jìn)行嚴(yán)格的版本控制, 其官網(wǎng)應(yīng)提供所有版本的Hash 校驗(yàn)值.
(2) 用戶在下載軟件后, 應(yīng)從可靠渠道獲得其Hash 校驗(yàn)值, 并對(duì)軟件完整性進(jìn)行驗(yàn)證.
(3) 用戶仍然有必要安裝殺毒軟件和防火墻, 并及時(shí)進(jìn)行版本升級(jí). 一方面, 它可以有效規(guī)避軟件中的一些惡意行為的發(fā)生; 另一方面, 也可以杜絕一些靠第三方病毒下載的后門軟件.
(4)在必要時(shí), 信息安全測評(píng)機(jī)構(gòu)和關(guān)鍵基礎(chǔ)設(shè)施的信息安全員應(yīng)針對(duì)特定軟件(如進(jìn)口操作系統(tǒng)、進(jìn)口應(yīng)用軟件等) 進(jìn)行深入地安全檢測.
(5) 檢測人員可結(jié)合靜態(tài)檢測[16,17]、動(dòng)態(tài)檢測[16,17]、數(shù)據(jù)挖掘[18]等先進(jìn)的智能化檢測技術(shù), 與APT 后門進(jìn)行對(duì)抗.
(6) 用戶需具備高度警惕的信息安全意識(shí), 不從不可靠的網(wǎng)站下載軟件, 也不相信來路不明的軟件.
(7) 關(guān)鍵基礎(chǔ)設(shè)施的信息系統(tǒng)管理員或其主管部門應(yīng)制定信息安全規(guī)章制度, 強(qiáng)制要求計(jì)算機(jī)操作員或用戶按照規(guī)章制度來進(jìn)行操作.
單獨(dú)實(shí)現(xiàn)上述防范措施, 未必能夠百分之百抵抗APT 后門的攻擊, 實(shí)際中通常需要多種方式相結(jié)合,以達(dá)到最理想的防范效果. 例如用戶安裝軟件時(shí)一般不愿意做Hash 校驗(yàn), 但主管部門可以制定規(guī)章制度,強(qiáng)制要求廠商必須提供Hash 校驗(yàn)值, 并要求用戶安裝軟件時(shí)必須進(jìn)行Hash 校驗(yàn).
本文基于分組密碼算法的差分故障分析原理, 設(shè)計(jì)了一個(gè)具有很高隱蔽性的軟件后門, 可在軟件使用過程中隱蔽地激活, 并協(xié)助敵手恢復(fù)軟件使用者的會(huì)話密鑰, 我們將其稱為APT 后門. 我們借助逆向工具OllyDbg 對(duì)DES 加密軟件進(jìn)行了逆向分析實(shí)驗(yàn), 在軟件中仿真實(shí)現(xiàn)了該后門, 并借助后門輸出的故障密文, 成功恢復(fù)了DES 算法的密鑰. 最后, 我們探討了APT 后門的防范對(duì)策. 在實(shí)際應(yīng)用中, DES 算法的加密軟件已經(jīng)無法滿足某些方面的要求, 加大其它算法的研究力度已刻不容緩. 因此, 下一步我們將考慮更多密碼算法的后門植入與檢測, 比如3DES、AES、SM4 等. 同時(shí), 實(shí)際中的軟件通常由多種不同的編譯器生成, 并可能采用不同加殼工具進(jìn)行加殼, 這也會(huì)給APT 后門的植入和檢測帶來新的挑戰(zhàn). 后續(xù)我們會(huì)嘗試將本文的方法應(yīng)用到實(shí)際的第三方軟件中, 繼續(xù)探討該后門在不同算法、不同實(shí)現(xiàn)場景下是否有效, 并提供相應(yīng)的防范措施.
信息安全的攻和防總是相輔相成、共同發(fā)展的, 隨著信息安全檢測技術(shù)的飛速發(fā)展, 后門隱藏[19]技術(shù)也在不斷提高, 單一的檢測方法可能無法保障軟件的安全性, 需要將多領(lǐng)域、多行業(yè)、多維度、多角度的分析方法進(jìn)行整合, 這是一個(gè)值得長期研究的領(lǐng)域.