• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于動態(tài)二進(jìn)制插樁的密鑰安全性檢測

      2017-11-23 01:20:37林昊康緋光焱
      關(guān)鍵詞:加解密密碼學(xué)漏洞

      林昊,康緋,光焱

      ?

      基于動態(tài)二進(jìn)制插樁的密鑰安全性檢測

      林昊,康緋,光焱

      (信息工程大學(xué)數(shù)學(xué)工程與先進(jìn)計(jì)算國家重點(diǎn)實(shí)驗(yàn)室,河南鄭州 450001)

      針對加密軟件中的密鑰安全性問題,提出一種基于動態(tài)二進(jìn)制插樁的密鑰安全性檢測方法。該方法面向CryptoAPI加密應(yīng)用程序,首先通過對CryptoAPI密鑰應(yīng)用模式的分析,指出潛在的密鑰安全性漏洞;然后以動態(tài)二進(jìn)制分析平臺Pin為支撐,動態(tài)記錄程序運(yùn)行期間的加解密過程信息;在此基礎(chǔ)上設(shè)計(jì)關(guān)聯(lián)性漏洞檢測算法,實(shí)現(xiàn)對密鑰安全性的檢測。測試結(jié)果表明,該方法能夠有效檢測出兩大類密鑰安全性漏洞。

      密鑰安全性檢測;動態(tài)二進(jìn)制插樁;Pin平臺;CryptoAPI加密應(yīng)用程序

      1 引言

      越來越多的應(yīng)用程序采用加密手段來保護(hù)數(shù)據(jù)安全,但是由于開發(fā)人員的編程失誤等原因,會導(dǎo)致加解密過程存在安全隱患。密鑰是密碼機(jī)制的核心環(huán)節(jié),然而近年來,由于密鑰的安全性所引發(fā)的各類漏洞和安全事件層出不窮,因此,對加密應(yīng)用程序的密鑰進(jìn)行安全性檢測在提高軟件安全性、保護(hù)隱私數(shù)據(jù)等方面具有重要意義。

      目前,針對加密應(yīng)用程序的密鑰安全性檢測主要通過兩種方法。方法一是綜合利用反匯編、二進(jìn)制分析、軟件動態(tài)調(diào)試等逆向分析手段[1],對加密應(yīng)用程序的加解密過程分別進(jìn)行靜態(tài)語義分析和動態(tài)特征提取,從中發(fā)現(xiàn)潛在的密鑰安全性漏洞,此方法的弊端是需要耗費(fèi)大量人工分析的時(shí)間和精力。方法二是基于安全漏洞檢測技術(shù),由于密鑰安全性漏洞屬于軟件漏洞中密碼學(xué)漏洞的范疇,通過形式化證明、靜態(tài)程序分析、動態(tài)軟件測試[2]等方法進(jìn)行密碼學(xué)安全性驗(yàn)證,可以快速、有效地發(fā)現(xiàn)數(shù)據(jù)加解密過程中的密碼學(xué)缺陷,實(shí)現(xiàn)密鑰安全性的檢測?,F(xiàn)階段國內(nèi)外的研究主要是利用方法二的密碼學(xué)安全性驗(yàn)證的思想,進(jìn)行密碼學(xué)應(yīng)用安全性漏洞的自動化檢測,已有的檢測工具主要有以下兩種類型。

      第一類工具是依靠靜態(tài)程序分析和動態(tài)數(shù)據(jù)跟蹤技術(shù)來實(shí)現(xiàn)安全性檢測,代表性的檢測工具有以下幾種。2013年,針對Android加密應(yīng)用程序,Egele等[3]總結(jié)出6條密碼學(xué)應(yīng)用漏洞的規(guī)則,并實(shí)現(xiàn)了CryptoLint系統(tǒng)[3],該系統(tǒng)利用靜態(tài)程序切片技術(shù)跟蹤密鑰、初始化向量等數(shù)據(jù)流向,并進(jìn)行漏洞規(guī)則的檢測,由于靜態(tài)分析的約束,該系統(tǒng)會存在一定程度的誤報(bào)。2014年,Shao等[4]建立Android應(yīng)用程序的密碼學(xué)誤用模型,并實(shí)現(xiàn)了動靜結(jié)合的分析系統(tǒng)CMA(crypto misuse analyzer)[4],該系統(tǒng)首先對Android應(yīng)用程序做靜態(tài)分析還原控制流圖和密碼函數(shù)調(diào)用圖,以此指導(dǎo)應(yīng)用程序的動態(tài)執(zhí)行,并生成運(yùn)行日志,在此基礎(chǔ)上進(jìn)行密碼學(xué)安全性分析。李勇等[5]則以靜態(tài)程序掃描和動態(tài)跟蹤分析為技術(shù)支撐。實(shí)現(xiàn)了面向iOS應(yīng)用的密碼學(xué)分析系統(tǒng)iCryptoTracer,該系統(tǒng)僅針對密碼學(xué)漏洞中的敏感數(shù)據(jù)泄露一類問題。除此之外,文獻(xiàn)[6~9]也分別從靜態(tài)程序分析和動態(tài)數(shù)據(jù)跟蹤角度進(jìn)行了分析研究。第二類工具則是以漏洞挖掘中的Fuzzing技術(shù)為支撐。例如,POET(padding oracle exploitation tool)系統(tǒng)[10]通過Fuzzing技術(shù)對Web應(yīng)用的Padding Oracle攻擊進(jìn)行自動化檢測;FIAT[11]利用Fault Injection技術(shù)對密碼設(shè)備進(jìn)行安全性檢測;2017年的Black Hat會議上,Aumasson等[12]提出通過Differential Fuzzing技術(shù)來檢測加密應(yīng)用程序的安全性,并實(shí)現(xiàn)了自動化檢測工具CDF(crypto differential fizzing)。

      從上述研究現(xiàn)狀中可知,雖然現(xiàn)階段的密碼學(xué)應(yīng)用安全性漏洞檢測已經(jīng)取得了一定的研究成果,但其針對的目標(biāo)問題相對單一、分散,沒有專門針對密鑰安全性的檢測方案,且目前還沒有完善的針對Windows平臺應(yīng)用程序的密碼學(xué)應(yīng)用安全性檢測技術(shù)。

      本文以Windows平臺的CryptoAPI加密應(yīng)用程序?yàn)檠芯繉ο?,提出一種基于動態(tài)二進(jìn)制插樁的密鑰安全性檢測方法。首先,對CVE信息庫中的密鑰安全性漏洞的成因機(jī)理進(jìn)行分類分析;然后,分析CryptoAPI的3種密鑰應(yīng)用模式及其潛在安全性漏洞;最后,利用動態(tài)二進(jìn)制插樁技術(shù)提取加解密過程信息,以此為基礎(chǔ)設(shè)計(jì)關(guān)聯(lián)性漏洞檢測算法,實(shí)現(xiàn)對密鑰安全性檢測。利用上述方法,檢測出在通信軟件RTX中存在著可預(yù)測的不安全密鑰的漏洞,該漏洞會造成聊天信息的泄露。

      2 密鑰安全性漏洞分類

      密碼學(xué)漏洞是一類特殊的軟件漏洞,通常會造成中間人攻擊、旁路攻擊和暴力破解攻擊等[13]危害,對軟件安全、數(shù)據(jù)保密構(gòu)成威脅,而由于密鑰安全性導(dǎo)致的密碼學(xué)漏洞更是威脅巨大,通常會造成嚴(yán)重的隱私數(shù)據(jù)泄露。本文對NVD(national vulnerability database)中2011年~2016年期間CVE信息庫中的密碼學(xué)漏洞進(jìn)行統(tǒng)計(jì)分析,結(jié)果如圖1所示。

      圖1 2011年~2016年NVD中密碼學(xué)漏洞數(shù)量變化

      為研究密鑰安全性漏洞的成因,本文進(jìn)一步從上述統(tǒng)計(jì)的密碼學(xué)漏洞中提取出與密鑰相關(guān)的127條漏洞記錄,對造成密鑰安全性漏洞的機(jī)理進(jìn)行分析,并依據(jù)其機(jī)理進(jìn)行分類與統(tǒng)計(jì),結(jié)果如下所示。

      1) 密鑰自身為弱密鑰而導(dǎo)致的安全漏洞

      Key-Weak-Insecure密鑰的安全屬性沒有達(dá)到安全需求,包括密鑰長度、密鑰強(qiáng)度等。例如CVE-2012-0655漏洞,蘋果操作系統(tǒng)MacOS的libsecurity庫沒有合理限定X.509證書中的RSA密鑰長度,從而導(dǎo)致密鑰存在安全性缺陷。

      Key-Weak-Randomless密鑰未經(jīng)隨機(jī)數(shù)生成器處理,不具有足夠的隨機(jī)性,如直接取自字符串等方式都會導(dǎo)致此類漏洞。例如CVE-2012- 4366,Belkin無線路由器基于WAN MAC地址的8 bit數(shù)字產(chǎn)生密碼,導(dǎo)致此類漏洞。

      Key-Weak-UnsafeRNG密鑰經(jīng)過隨機(jī)數(shù)生成器的處理,但隨機(jī)數(shù)生成器自身存在安全缺陷。此類漏洞有CVE-2013-4442和CVE-2016-1618等。

      Key-Weak-Predicable密鑰可以被預(yù)測或產(chǎn)生密鑰的隨機(jī)數(shù)種子可預(yù)測,包括無種子、固定種子、順序/時(shí)間種子以及種子復(fù)用等情況。CVE- 2011-0766、CVE-2012-2681和CVE-2013-5180都屬于此類漏洞。

      2) 密鑰應(yīng)用過程不當(dāng)而導(dǎo)致的安全漏洞

      Key-ImproperUse-Reuse不安全復(fù)用了密鑰,包括同一用戶不安全復(fù)用了自身的密鑰以及不同用戶之間復(fù)用了相同的密鑰等情況。例如在CVE-2016-2364漏洞中,Chrome插件HUDweb在不同的安裝用戶之間使用了相同的私鑰,就屬于此類漏洞。

      Key-ImproperUse-Hardcoded密鑰被硬編碼在程序中,造成密鑰可以被直接獲取。CVE-2015-4080漏洞中AES密鑰和CVE-2015-3960漏洞中RSA私鑰都存在此類漏洞。

      Key-ImproperUse-Exposed密鑰的存儲、傳輸?shù)冗^程處理不當(dāng),造成密鑰敏感信息泄露。存儲不當(dāng)導(dǎo)致的安全漏洞如CVE-2014-0199,傳輸不當(dāng)導(dǎo)致的安全漏洞如CVE-2011-2223。

      圖2是不同類型的密鑰安全性漏洞的數(shù)量統(tǒng)計(jì)。從整體上看,應(yīng)用過程的安全漏洞數(shù)量共67個(gè),由弱密鑰導(dǎo)致的漏洞有60個(gè),前者要略高于后者。針對具體的漏洞類型,密鑰敏感信息泄露類型的漏洞所占比重最高,由于密碼機(jī)制的復(fù)雜性,造成密鑰敏感信息泄露的原因多種多樣,例如CVE-2015-3322漏洞是Lenovo ThinkServer RD350等系列服務(wù)器由于采用了弱算法來加密存儲用戶與管理員的BIO密碼而導(dǎo)致密鑰泄露;CVE-2011-2483漏洞是由于未能正確處理8 bit特征從而導(dǎo)致密鑰泄露。此類漏洞的成因復(fù)雜,要實(shí)現(xiàn)對此類漏洞的檢測相對困難。在統(tǒng)計(jì)結(jié)果中,與隨機(jī)數(shù)、隨機(jī)數(shù)種子相關(guān)的3類漏洞Key-Weak- Randomless、Key-Weak-UnsafeRNG、Key-Weak- Predicable共占總漏洞數(shù)的35%,由此可見,隨機(jī)性缺陷是引發(fā)密鑰安全漏洞的一個(gè)重要因素。

      圖2 密鑰安全性漏洞機(jī)理的分類統(tǒng)計(jì)

      3 CryptoAPI密碼機(jī)制分析

      在密碼學(xué)的現(xiàn)實(shí)應(yīng)用中,應(yīng)用程序通過調(diào)用各類密碼算法庫來實(shí)現(xiàn)隱私數(shù)據(jù)的保護(hù)、安全的數(shù)據(jù)通信。CryptoAPI是目前應(yīng)用最為廣泛的密碼庫之一,是微軟針對Win32平臺的應(yīng)用程序,為開發(fā)者提供了豐富的編程接口,包括數(shù)據(jù)加解密、散列計(jì)算、數(shù)字簽名和證書管理等功能,這些功能函數(shù)為應(yīng)用軟件的開發(fā)提供了極大的便利。從勒索軟件WannaCry[14]到通信軟件FeiQ,都采用CryptoAPI來實(shí)現(xiàn)安全的數(shù)據(jù)加解密過程。

      在CryptoAPI的機(jī)制中,真正實(shí)現(xiàn)加解密操作的是獨(dú)立的模塊,全稱為加密服務(wù)提供者(CSP, cryptographic service provider),每個(gè)CSP有自己的密鑰數(shù)據(jù)庫,統(tǒng)一管理加解密過程中的會話密鑰、公私鑰對。本文在對CryptoAPI密鑰機(jī)制分析的基礎(chǔ)上,結(jié)合對大量樣本中CryptoAPI調(diào)用信息的分析,提取出在實(shí)際應(yīng)用軟件中,密鑰的3種主要應(yīng)用模式,圖3為3種模式對應(yīng)的密碼函數(shù)流程。

      圖3 CryptoAPI 3種密鑰應(yīng)用模式

      模式一 通過調(diào)用接口函數(shù)在CSP內(nèi)部產(chǎn)生

      模式一的核心函數(shù)是CryptGenKey,通過傳入CSP句柄和相關(guān)標(biāo)志位參數(shù),在CSP內(nèi)部生成指定算法的密鑰,返回給用戶密鑰句柄。此密鑰句柄是不透明的,即用戶無法通過密鑰句柄直接訪問密鑰的內(nèi)容,只能利用此句柄進(jìn)行加解密操作。密鑰句柄的不透明特性,降低了密鑰泄露的風(fēng)險(xiǎn),在一定程度上提高了CryptoAPI體制的密鑰安全性。

      模式二 通過散列值派生出會話密鑰

      模式二將散列運(yùn)算引入到密鑰的生成過程中,其具體的調(diào)用模式如下:首先CryptCreateHash申請散列算法句柄,然后通過CryptHashData傳入要進(jìn)行散列計(jì)算的散列對象,最后通過CryptDeriveKey從散列運(yùn)算結(jié)果中派生出指定算法的會話密鑰,并返回密鑰句柄。

      模式三 通過接口函數(shù)從外部導(dǎo)入到CSP中

      CryptoAPI提供了CryptImportKey和Crypt- ExportKey 2個(gè)接口函數(shù)完成密鑰的導(dǎo)入導(dǎo)出操作。在對海量樣本的分析中發(fā)現(xiàn),應(yīng)用程序會事先通過模式一或模式二生成密鑰,然后通過CryptExportKey將密鑰以Blob形式導(dǎo)出并保存。在軟件真正執(zhí)行過程中,直接通過CryptImportKey將事先存儲的密鑰Blob導(dǎo)入到CSP中,供應(yīng)用程序使用。

      3種密鑰應(yīng)用模式分別存在不同類型的密鑰安全性漏洞。針對模式一,密鑰在CryptGenKey函數(shù)內(nèi)部生成,開發(fā)者無法自行指定密鑰也無法干預(yù)密鑰的內(nèi)部生成過程,保證了密鑰的安全性。但是,傳入的參數(shù)dwFlags標(biāo)志位必須滿足對應(yīng)密碼算法的安全需求,否則會導(dǎo)致弱密鑰的安全性漏洞,這種類型的漏洞在現(xiàn)實(shí)應(yīng)用中的數(shù)量較少。對此類安全性漏洞進(jìn)行檢測,需要提取應(yīng)用程序動態(tài)執(zhí)行時(shí)CryptGenKey的dwFlags參數(shù),然后對參數(shù)進(jìn)行條件檢查。在模式二中,進(jìn)行散列計(jì)算的散列對象和散列算法將直接影響到密鑰的安全性。與散列相關(guān)的密鑰安全性漏洞出現(xiàn)較多,常見的漏洞有:每次散列計(jì)算的散列對象為固定值導(dǎo)致密鑰可預(yù)測;散列計(jì)算的散列對象為數(shù)字和字母組合的簡單字符串,且散列算法為MD5等已被證實(shí)是不安全的算法時(shí),導(dǎo)致生成弱密鑰。散列函數(shù)應(yīng)用廣泛,除了派生密鑰外,還用于完整性檢驗(yàn)、簽名與驗(yàn)簽等,而單一密碼函數(shù)的參數(shù)檢查無法實(shí)現(xiàn)對此類安全漏洞的檢測,為此下文引入關(guān)聯(lián)性檢測,即對多個(gè)彼此存在關(guān)聯(lián)關(guān)系的密碼函數(shù)及其參數(shù)進(jìn)行聯(lián)合檢查,從而實(shí)現(xiàn)漏洞檢測。在模式三中最大的安全威脅是:一旦密鑰Blob處理不當(dāng),就會造成密鑰泄露。比如直接將會話密鑰的Blob明文硬編碼在應(yīng)用程序中,或者Blob未經(jīng)安全加密處理就進(jìn)行本地存儲或網(wǎng)絡(luò)發(fā)送,都會造成嚴(yán)重的密鑰信息泄露,屬于密鑰應(yīng)用過程不當(dāng)而導(dǎo)致的漏洞。對于這類漏洞的檢測,則需要借助動態(tài)污點(diǎn)分析技術(shù)[15],跟蹤密鑰Blob的數(shù)據(jù)流,包括正向跟蹤C(jī)ryptExportKey導(dǎo)出密鑰Blob的流向和逆向追蹤C(jī)ryptImportKey導(dǎo)入密鑰Blob的來源。

      基于以上分析,CryptoAPI應(yīng)用程序主要存在Key-Weak-Insecure和Key-Weak-Predicable兩類弱密鑰漏洞,本文接下來將圍繞這兩類密鑰安全性漏洞進(jìn)行檢測。檢測的工作包含2個(gè)環(huán)節(jié):1) 設(shè)計(jì)準(zhǔn)確、高效的密鑰安全性檢測規(guī)則和檢測算法;2) 通過本節(jié)的分析形成密碼函數(shù)知識庫,指導(dǎo)加解密過程信息的提取。

      4 密鑰安全性檢測

      4.1 檢測規(guī)則的形式化描述

      密鑰安全性檢測需要對加解密過程信息進(jìn)行規(guī)則檢測,本節(jié)設(shè)計(jì)了能夠?qū)γ艽a函數(shù)、參數(shù)等信息進(jìn)行規(guī)則檢測的形式化描述方法。

      定義1 加解密過程

      加解密過程表示為軟件動態(tài)執(zhí)行的密碼函數(shù)調(diào)用序列1,2,···, f,其中f表示為在第個(gè)時(shí)刻的密碼函數(shù)調(diào)用信息。每個(gè)f定義為三元組{},其中表示密碼函數(shù)調(diào)用點(diǎn)地址,表示調(diào)用的密碼函數(shù)名稱,為參數(shù)集合{P|?},表示密碼函數(shù)調(diào)用的參數(shù)信息。

      定義2 安全性漏洞檢測規(guī)則

      面向加解密過程的安全性漏洞檢測規(guī)則分為原子規(guī)則和復(fù)合規(guī)則。原子規(guī)則定義為三元組{},其中表示密碼函數(shù)名稱,表示觸發(fā)因子,表示關(guān)聯(lián)因子。復(fù)合規(guī)則定義為原子規(guī)則的組合。

      定義3 觸發(fā)因子

      觸發(fā)因子定義為集合{<P,C>|?},其中P表示所要檢測的參數(shù),C表示安全性漏洞觸發(fā)條件。觸發(fā)因子表示對密碼函數(shù)的特定參數(shù)進(jìn)行相應(yīng)的條件檢查,如果符合條件則表示激活觸發(fā)因子,滿足了此條安全性漏洞檢測的原子規(guī)則。

      定義4 關(guān)聯(lián)因子

      對于密碼函數(shù)的分析發(fā)現(xiàn),密碼函數(shù)的調(diào)用呈現(xiàn)關(guān)聯(lián)性特征,即為實(shí)現(xiàn)一個(gè)復(fù)雜的密碼學(xué)功能,需要由多個(gè)彼此關(guān)聯(lián)的密碼函數(shù)協(xié)同完成,而這多個(gè)密碼函數(shù)間通過特定的數(shù)據(jù)對象傳遞信息。圖4所示是一次CryptoAPI的加密操作,這是一種以句柄和句柄指針為媒介彼此關(guān)聯(lián)、傳遞信息的方式。另外一種關(guān)聯(lián)關(guān)系則是不同密碼算法在參數(shù)取值上存在相等關(guān)系。因此,有的安全性漏洞需要多個(gè)彼此關(guān)聯(lián)的原子規(guī)則共同作用才會觸發(fā),對于此類安全性漏洞的檢測,需要進(jìn)行復(fù)合規(guī)則的檢查,而復(fù)合規(guī)則內(nèi)的原子規(guī)則通過特定的關(guān)聯(lián)因子彼此連接。

      圖4 CryptoAPI加密示例

      關(guān)聯(lián)因子定義為三元組{,,},其中表示源關(guān)聯(lián)對象,表示與之相關(guān)聯(lián)規(guī)則的目標(biāo)密碼函數(shù)名稱,表示目標(biāo)密碼函數(shù)的目標(biāo)關(guān)聯(lián)對象。

      通過上述定義,實(shí)現(xiàn)對安全性漏洞檢測規(guī)則的形式化描述,且該檢測規(guī)則具有良好的通用性和擴(kuò)展性,不局限于對CryptoAPI的密鑰安全性漏洞檢測。將形式化的檢測規(guī)則映射到XML規(guī)則描述文件中,分析程序參照規(guī)則文件對加解密過程信息進(jìn)行規(guī)則檢測,下面給出針對每條規(guī)則的安全性漏洞檢測算法。

      算法1 安全性漏洞檢測算法

      輸入:動態(tài)提取的加解密過程信息1,2,···, f,檢測規(guī)則

      輸出:漏洞類型及漏洞點(diǎn)的密碼函數(shù)、參數(shù)信息

      算法開始

      1) 依次從加解密過程信息中讀取一條密碼函數(shù)調(diào)用信息f,根據(jù)檢測規(guī)則進(jìn)行檢查。如果是原子規(guī)則,則執(zhí)行2);如果是復(fù)合規(guī)則,則執(zhí)行3)。

      2) 首先,判斷是否匹配,檢查觸發(fā)因子是否匹配。若兩者均匹配,說明滿足此安全性缺陷檢測的原子規(guī)則,輸出漏洞信息,然后轉(zhuǎn)到1)進(jìn)入下一次檢查。如果不匹配,則直接轉(zhuǎn)到1)進(jìn)行下一次檢查。

      3) 從復(fù)合規(guī)則中依次取出一條原子規(guī)則,進(jìn)行原子規(guī)則的檢查。如果匹配,則執(zhí)行4);否則轉(zhuǎn)到1)進(jìn)入下一次檢查。

      4) 檢查此條原子規(guī)則的關(guān)聯(lián)因子。如果非空,則根據(jù)關(guān)聯(lián)因子從加解密過程信息中搜索與之匹配的關(guān)聯(lián)信息f,如果找到關(guān)聯(lián)信息f,則以f為輸入轉(zhuǎn)到3)進(jìn)行復(fù)合規(guī)則的下一條原子規(guī)則檢查;如果未找到關(guān)聯(lián)記錄,則表明復(fù)合規(guī)則檢查不通過,轉(zhuǎn)到1)進(jìn)入下一次檢查。如果為空,則表明已完成復(fù)合規(guī)則的檢查,輸出漏洞信息,轉(zhuǎn)到1)進(jìn)入下一次檢查。

      算法結(jié)束

      4.2 基于規(guī)則的密鑰安全性檢測

      下面針對要檢測的Key-Weak-Insecure和Key-Weak-Predicable兩類密鑰安全性漏洞,用定義的形式化語言描述其檢測規(guī)則。

      漏洞1 Key-Weak-Insecure

      漏洞1在CryptoAPI的應(yīng)用中有3種具體表現(xiàn)形式。1) 在調(diào)用CryptGenKey函數(shù)生成指定算法密鑰時(shí),dwFlags參數(shù)的高位16 bit指明密鑰的長度信息,如果不能正確通過參數(shù)指定長度信息,便會導(dǎo)致生成弱密鑰。2) 針對于密鑰導(dǎo)入和導(dǎo)出函數(shù)而言,pbData參數(shù)指向密鑰Blob數(shù)據(jù),Blob具有特定的格式規(guī)范,其包含有算法標(biāo)志、密鑰長度、密鑰數(shù)據(jù)等數(shù)據(jù)成員,因此需要檢測Blob是否為弱密鑰。3) 在以散列值派生密鑰的模式中,當(dāng)散列運(yùn)算的對象為數(shù)字和字母組合的簡單字符串且散列算法為MD5等已被證實(shí)是不安全的算法時(shí),其派生的密鑰則被認(rèn)為是不安全的弱密鑰。漏洞1對應(yīng)的檢測規(guī)則如下所示,其中1、2、3為原子規(guī)則,4為復(fù)合規(guī)則。

      漏洞2 Key-Weak-Predicable

      在散列值派生密鑰的過程中,如果密鑰種子參數(shù)為固定種子,則認(rèn)為其派生的密鑰是可預(yù)測的不安全密鑰。此漏洞檢測規(guī)則如下所示。

      5 加解密過程信息的動態(tài)提取

      加解密過程信息的提取是密鑰安全性檢測的基礎(chǔ),本文通過動態(tài)二進(jìn)制插樁技術(shù)提取應(yīng)用程序動態(tài)執(zhí)行時(shí)的加解密過程信息,最終實(shí)現(xiàn)動態(tài)信息提取與離線規(guī)則檢測相結(jié)合的密鑰安全性檢測方法。圖5所示為動態(tài)信息提取的框架,利用動態(tài)二進(jìn)制平臺,監(jiān)控應(yīng)用程序調(diào)用密碼算法庫的過程,按照函數(shù)參數(shù)庫提取動態(tài)執(zhí)行過程中的API名稱、返回值和輸入輸出參數(shù)等信息,并最終形成完整的加解密過程信息。

      動態(tài)二進(jìn)制插樁(DBI,dynamic binary instrumentation)技術(shù)[16]指在不影響程序動態(tài)執(zhí)行結(jié)果的前提下,按照用戶的分析需求,在程序執(zhí)行過程中插入特定分析代碼,實(shí)現(xiàn)對程序動態(tài)執(zhí)行過程的監(jiān)控與分析。目前,應(yīng)用廣泛的動態(tài)二進(jìn)制分析平臺有Pin[17]、DynamoRIO[18]和Valgrind[19]等。其中Intel公司的Pin平臺提供了豐富的編程接口,開發(fā)者可以通過調(diào)用編程接口方便地獲取程序動態(tài)執(zhí)行期間的指令、內(nèi)存和寄存器等信息,實(shí)現(xiàn)細(xì)粒度的動態(tài)監(jiān)控,因此本文選取Pin平臺進(jìn)行動態(tài)分析。

      圖5 動態(tài)監(jiān)控記錄的框架

      Pin提供了指令、基本塊和系統(tǒng)調(diào)用等多個(gè)層次插樁分析,其中,RTN是函數(shù)級的插樁機(jī)制,能夠自動識別API函數(shù);Trace是軌跡層次的插樁機(jī)制,能夠自動識別單一入口、多出口的指令軌跡塊。本文通過RTN插樁和Trace插樁的結(jié)合,實(shí)現(xiàn)對CryptoAPI動態(tài)調(diào)用信息的獲取。

      算法2 加解密過程信息動態(tài)提取算法

      輸入 加密應(yīng)用程序

      輸出 加解密過程信息1,2,···, f

      RTN插樁模塊

      1) 監(jiān)控每一次API調(diào)用,判斷是否滿足兩個(gè)條件:是否是需要分析的密碼函數(shù),是否是來自用戶空間的函數(shù)調(diào)用。若滿足條件則執(zhí)行2),否則不處理。

      2) 更新為當(dāng)前密碼函數(shù)調(diào)用的返回地址。

      3) 依據(jù)函數(shù)參數(shù)庫,獲取當(dāng)前動態(tài)執(zhí)行狀態(tài)的密碼函數(shù)輸入?yún)?shù)信息。

      Trace插樁模塊

      1) 攔截Trace軌跡,判斷當(dāng)前指令的地址空間,如果位于用戶空間,則執(zhí)行步驟2);否則不處理。

      2) 獲取Trace軌跡的入口指令的地址,與當(dāng)前狀態(tài)的匹配。若相等,則說明識別出當(dāng)前動態(tài)執(zhí)行的狀態(tài)是對應(yīng)密碼函數(shù)的返回,此時(shí)清空并轉(zhuǎn)到步驟3);否則不處理。

      3) 依據(jù)函數(shù)參數(shù)庫,獲取當(dāng)前動態(tài)執(zhí)行狀態(tài)的密碼函數(shù)輸出參數(shù)信息、返回值信息。

      6 測試分析

      6.1 功能測試

      為驗(yàn)證基于動態(tài)二進(jìn)制插樁的密鑰安全性檢測方法的正確性和有效性,本文針對Key-Weak- Insecure和Key-Weak-Predicable兩類密鑰安全性漏洞,選取1 000個(gè)包含CryptoAPI調(diào)用信息的樣本進(jìn)行測試分析,測試環(huán)境:Win7 x64操作系統(tǒng),Intel i7處理器,16 GB內(nèi)存,2 T硬盤,Pin 2.14-71313 動態(tài)二進(jìn)制平臺。

      測試結(jié)果中,存在漏洞的樣本比例達(dá)到6%,其中Key-Weak-Insecure類漏洞有5個(gè),Key- Weak-Predicable類漏洞有55個(gè),前者遠(yuǎn)少于后者,這也說明在實(shí)際CryptoAPI應(yīng)用程序中更易發(fā)生由于密鑰種子問題而導(dǎo)致密鑰可預(yù)測的漏洞。對于存在密鑰安全性漏洞的樣本而言,其漏洞造成的實(shí)際危害取決于具體的加解密過程。下面以RTX(騰訊通 2015)為例進(jìn)行詳細(xì)的分析說明。

      RTX是騰訊公司推出的企業(yè)級即時(shí)通信平臺,提供消息發(fā)送、文本傳輸?shù)榷喾N辦公功能。通過RTX提供的服務(wù)器和客戶端軟件,部署搭建測試環(huán)境,然后對客戶端的登錄、消息發(fā)送等過程進(jìn)行檢測分析,結(jié)果如表1所示。

      表1 RTX的檢測結(jié)果

      檢測結(jié)果表明在sqlite3.dll的派生密鑰過程中,傳入的密鑰種子參數(shù)為固定的字符串“RTX!”,從而導(dǎo)致產(chǎn)生可預(yù)測的不安全密鑰,且該密鑰對于不同RTX用戶而言是相同的。為了對檢測結(jié)果進(jìn)行驗(yàn)證,手動對RTX進(jìn)行逆向分析,圖6所示為密鑰派生過程的反編譯代碼片段,代碼顯示通過對“RTX!”字符串進(jìn)行MD5計(jì)算派生出RC4算法密鑰,證實(shí)了檢測結(jié)果的準(zhǔn)確性。

      圖6 反編譯代碼片段

      為了研究此漏洞會帶來的危害,進(jìn)一步對加解密過程及通信機(jī)制進(jìn)行逆向分析,跟蹤不安全密鑰的應(yīng)用過程。通過分析發(fā)現(xiàn),聊天信息的發(fā)送首先調(diào)用Crypt.dll的oi_symmetry_encrypt2函數(shù)進(jìn)行對稱加密,而該函數(shù)是RTX自實(shí)現(xiàn)并封裝的TEA算法,聊天信息的發(fā)送過程并未用到上述不安全密鑰。但是在信息發(fā)送之后,RTX會利用不安全密鑰對聊天信息進(jìn)行RC4加密,并將密文存儲到本地文件。

      根據(jù)不安全密鑰編寫逆向解密過程,對本地的密文文件進(jìn)行解密,圖7所示為一段解密后的明文片段,包括聊天信息和字體信息等內(nèi)容。由于不安全密鑰在不同用戶間是相同的,因此會導(dǎo)致本地加密存儲的聊天信息可以被任何人解密,造成聊天信息泄露,是一種較為嚴(yán)重的隱私泄露。

      6.2 性能對比分析

      將本文方法與現(xiàn)有的典型工具從技術(shù)手段和目標(biāo)漏洞類型2個(gè)角度進(jìn)行對比分析,結(jié)果如表2所示。

      通過表2中的數(shù)據(jù)可以看出,相較于CryptoLint而言,本文所采用的動態(tài)分析方法準(zhǔn)確更高;CMA和iCryptoTracer具有動靜結(jié)合的混合分析優(yōu)勢,但是iCryptoTracer僅針對單一的敏感數(shù)據(jù)泄露問題,CMA檢測的密碼學(xué)誤用相對簡單,不能實(shí)現(xiàn)復(fù)雜問題的深度檢測,而本文對密鑰安全性的檢測顯然更加深入、全面;POET、FIAT和CDF均采用了Fuzzing技術(shù)做支撐,但它們面向的目標(biāo)漏洞類型僅針對特定類別的攻擊或漏洞,而本文的方法能夠覆蓋整個(gè)密鑰安全性漏洞的檢測。另一方面,本文對檢測規(guī)則的形式化描述方法通用性強(qiáng),可以進(jìn)一步應(yīng)用于數(shù)據(jù)加解密過程的其他安全性檢測。

      7 結(jié)束語

      本文首先對CryptoAPI密碼機(jī)制進(jìn)行分析,然后給出了密鑰安全性檢測規(guī)則的形式化描述,最后討論了基于動態(tài)二進(jìn)制插樁的密鑰安全性檢測方法。實(shí)驗(yàn)測試表明,本文的方法對于CryptoAPI應(yīng)用程序具有很好的檢測效果,能夠正確地提取應(yīng)用程序動態(tài)運(yùn)行時(shí)的加解密過程信息,并且在此基礎(chǔ)上能夠準(zhǔn)確地檢測加解密過程中潛在的密鑰安全性漏洞,通過與其他檢測工具之間進(jìn)行對比,體現(xiàn)了本文方法的優(yōu)越性。

      由于動態(tài)分析的限制,當(dāng)動態(tài)執(zhí)行沒有觸發(fā)加解密函數(shù)時(shí),就無法獲取加解密過程信息進(jìn)行安全性檢測。提高動態(tài)分析的路徑覆蓋率,需要以樣本的完整性分析技術(shù)為支撐,能夠?qū)崿F(xiàn)環(huán)境感知、敏感分支點(diǎn)識別判斷,尤其在惡意代碼分析領(lǐng)域,其采用的反檢測、反調(diào)試等技術(shù)手段,使行為分析缺乏完整性,加解密行為無法被激發(fā)。針對樣本的完整性分析是當(dāng)前研究的一大熱點(diǎn)、難點(diǎn)問題。

      圖7 密文文件解密片段

      表2 各種工具從技術(shù)手段和目標(biāo)漏洞類型角度進(jìn)行分析結(jié)果對比

      [1] 段鋼.加密與解密(第三版)[M].北京:電子工業(yè)出版社,2008. DUAN G. Encryption and decryption(Third Edition)[M]. Beijing: Electronic Industry Press,2008.

      [2] 李舟軍, 張俊賢, 廖湘科,等. 軟件安全漏洞檢測技術(shù)[J]. 計(jì)算機(jī)學(xué)報(bào), 2015, 38(4):717-732.

      LI Z J,ZHANG J X,LIAO X K,et al.Software security vulnerability detection technology[J].Chinese Journal of Computers,2015, 38(4): 717-732.

      [3] EGELE M, BRUMLEY D, FRATANTONIO Y, et al. An empirical study of cryptographic misuse in android applications[C]// ACM Sigsac Conference on Computer & Communications Security. 2013:73-84.

      [4] SHAO S, DONG G, GUO T, et al. Modelling analysis and auto-detection of cryptographic misuse in android applications[C]// IEEE International Conference on Dependable, Autonomic and Secure Computing. 2014:75-80.

      [5] LI Y, ZHANG Y, LI J, et al. iCryptoTracer: Dynamic Analysis on Misuse of Cryptography Functions in iOS Applications[C]// International Conference on Network and System Security. 2014: 349-362.

      [6] MA S, LO D, LI T, et al. CDRep: automatic repair of cryptographic misuses in android applications[C]// ACM on Asia Conference on Computer and Communications Security.2016:711-722.

      [7] CHATZIKONSTANTINOU A, NTANTOGIAN C, KAROPOULOS G, et al. Evaluation of cryptography usage in android applications[C]// Eai International Conference on Bio-Inspired Information and Communications Technologies. 2016:83-90.

      [8] ALMEIDA J B, BARBOSA M, FILLI?TRE J C, et al. CAOVerif : an open-source deductive verification platform for cryptographic software implementations[J]. Science of Computer Programming, 2014, 91(91):216-233.

      [9] FAHL S, HARBACH M, MUDERS T, et al. Why eve and mallory love Android: an analysis of android SSL (in)security[C]// ACM Conference on Computer and Communications Security. 2012:50-61.

      [10] RIZZO J, DUONG T. Practical padding oracle attacks[C]// Usenix Conference on Offensive Technologies. 2010:1-8.

      [11] BARENGHI A, BREVEGLIERI L, KOREN I, et al. Fault injection attacks on cryptographic devices: theory, practice, and counter- measures[C]// Proceedings of the IEEE.2012:3056-3076.

      [12] Automated testing of crypto software using differential fuzzing[EB/OL].https://www.blackhat.com/docs/us-17/wednesday/us-17-Aumasson-Automated-Testing-Of-Crypto-Software-Using-Differential-Fuzzing.pdf.

      [13] LAZAR D, CHEN H, WANG X, et al. Why does cryptographic software fail? A case study and open problems[C]// Asia-Pacific Workshop. 2014:1-7.

      [14] 安天針對勒索蠕蟲“魔窟”(WannaCry)的深度分析報(bào)告[EB/OL]. http://www.antiy.com/response/wannacry.html.

      [15] NEWSOME J, SONG D. Dynamic taint analysis for automatic detection, analysis, and signature generation of exploits on commodity software[C]//Conference on NDSS. 2005.

      [16] NETHERCOTE N. Dynamic binary analysis and instrumentation or building tools is easy[D]. Trinity Lane, Cambridge: University of Cambridge. 2004.

      [17] LUK C K, COHN R, MUTH R, et al. Pin: building customized program analysis tools with dynamic instrumentation[J]. ACM Sigplan Notices, 2005, 40(6):190-200.

      [18] BRUENING D L. Efficient, transparent, and comprehensive runtime code manipulation[C]// Massachusetts Institute of Technology.2004.

      [19] NETHERCOTE N, SEWARD J. Valgrind:a framework for heavyweight dynamic binary instrumentation[C]// ACM Sigplan Conference on Programming Language Design & Implementation. 2007:89-100.

      Key security detection based on dynamic binary instrumentation

      LIN Hao, KANG Fei, GUANG Yan

      (State Key Laboratory of Mathematical Engineering and Advanced Computing, PLA Information Engineering University, Zhengzhou 450001,China)

      For the key security problem in the cryptographic software, the method of key security detection based on dynamic binary instrumentation was proposed. Aimed at CryptoAPI cryptographic software, the method firstly pointed out the potential key security vulnerabilities by analyzing the key applying patterns of CryptoAPI. Then it recorded cryptographic data information during the execution of the program dynamically using Pin platform. On this basis, a relevance vulnerability detection algorithm was designed to detect the key security. Test result indicated that it can effectively detect the two kinds of key security vulnerabilities.

      key security detection, dynamic binary instrumentation, Pin platform, CryptoAPI cryptographic software

      TP309

      A

      10.11959/j.issn.2096-109x.2017.00213

      林昊(1992-),男,山東榮成人,信息工程大學(xué)碩士生,主要研究方向?yàn)榫W(wǎng)絡(luò)信息安全。

      康緋(1972-),女,河南周口人,信息工程大學(xué)教授,主要研究方向?yàn)榫W(wǎng)絡(luò)信息安全。

      光焱(1983-),男,安徽樅陽人,博士,信息工程大學(xué)講師,主要研究方向?yàn)槊艽a學(xué)、網(wǎng)絡(luò)信息安全。

      2017-09-14;

      2017-10-23。

      林昊,284149270@qq.com

      猜你喜歡
      加解密密碼學(xué)漏洞
      漏洞
      圖靈獎獲得者、美國國家工程院院士馬丁·愛德華·海爾曼:我們正處于密鑰學(xué)革命前夕
      密碼學(xué)課程教學(xué)中的“破”與“立”
      PDF中隱私數(shù)據(jù)的保護(hù)方法
      三明:“兩票制”堵住加價(jià)漏洞
      漏洞在哪兒
      電子取證中常見數(shù)據(jù)加解密理論與方法研究
      基于FPGA的LFSR異步加解密系統(tǒng)
      矩陣在密碼學(xué)中的應(yīng)用
      高鐵急救應(yīng)補(bǔ)齊三漏洞
      同心县| 海城市| 紫阳县| 湖口县| 明星| 吴旗县| 巴彦县| 赤城县| 随州市| 克拉玛依市| 五河县| 子长县| 互助| 铜山县| 桂阳县| 安岳县| 迁西县| 巫溪县| 武功县| 铜梁县| 金沙县| 留坝县| 广东省| 岑巩县| 德钦县| 苗栗市| 朝阳区| 中超| 铜梁县| 宁都县| 建湖县| 武川县| 垣曲县| 和硕县| 同心县| 许昌市| 辽宁省| 麻阳| 牟定县| 广宗县| 视频|