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