檢測針對軟件應(yīng)用的利用
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及用于在能夠檢測和擊敗針對軟件應(yīng)用的利用(exploit)的裝置上執(zhí)行軟件應(yīng)用的方法和設(shè)備以及布置為執(zhí)行該方法的裝置和系統(tǒng)。
【背景技術(shù)】
[0002]當(dāng)試圖保護計算裝置上的軟件應(yīng)用免受篡改時,安全可能僅實際上等于最弱攻擊路徑。通常能夠使用許多不同技術(shù)和路徑攻擊軟件應(yīng)用,當(dāng)最初設(shè)計和編寫該軟件時可能未想到其中的一些技術(shù)和路徑。攻擊者將會傾向于采用最容易的攻擊路徑,并且經(jīng)常將會發(fā)明新的路徑而非攻擊受到很好保護的路徑。
[0003]通常,軟件應(yīng)用的某個內(nèi)核能夠在這種程度上被很好地保護:攻擊者不愿意或不能攻擊它,或者針對其的攻擊將會花費足夠長的時間。然而,在這個內(nèi)核之外,可能存在使軟件應(yīng)用容易受攻擊的相對比較簡單的攻擊路徑。軟件應(yīng)用的設(shè)計者和提供商可能知道這些攻擊路徑,但可能難以充分保護這些攻擊路徑。
[0004]考慮例如這樣的情況:軟件應(yīng)用必須使用它把安全關(guān)鍵數(shù)據(jù)發(fā)送到的依賴庫。在現(xiàn)有技術(shù)中,可使用防篡改檢測(諸如,完整性證實(IV))實現(xiàn)軟件應(yīng)用和它使用的庫的完整性,在防篡改檢測中,利用產(chǎn)生加密安全簽名的簽名工具對軟件應(yīng)用和依賴庫進行簽名。在啟動或執(zhí)行(傳統(tǒng)IV檢查)期間的某個時間,或者恰好在每個關(guān)鍵過程調(diào)用(能夠被稱為安全調(diào)用)之前,在磁盤(或其它永久存儲裝置)上或在存儲器中或者在兩者中證實代碼段的簽名。如果簽名被正確地證實,則軟件應(yīng)用確認它的代碼未被篡改并且按照原樣繼續(xù)執(zhí)行。如果簽名未被證實,則軟件應(yīng)用具有如下指示:代碼段已被修改并且執(zhí)行將會因此可能失敗或采用與最初設(shè)計和預(yù)期的執(zhí)行路徑不同的執(zhí)行路徑,并且軟件應(yīng)用能夠因此采取預(yù)防措施(諸如,阻止執(zhí)行)。這些檢查(尤其是如果很好地隱藏并且集成到軟件應(yīng)用產(chǎn)品中)使得攻擊者非常難以改變軟件應(yīng)用的計算機程序代碼。
[0005]傳統(tǒng)防篡改檢查和安全調(diào)用需要:在軟件應(yīng)用被部署到計算裝置之前,軟件應(yīng)用的依賴庫的二進制數(shù)可用于簽名。如果開發(fā)者無法使用該庫或者獲得該庫是不實際的,則不能計算簽名并且該技術(shù)失敗。例如,如果由無數(shù)不同方分別提供并且部署庫并且在每一方以不同方式自由實現(xiàn)并且更新庫的情況下(諸如針對手持式裝置制造商的許多庫的情況那樣),則能夠發(fā)生這種情況。然后,經(jīng)常難以或無法與所有方通信并且獲得它們的庫的拷貝,并且經(jīng)常無法在部署庫之前及時獲得對庫的更新。因此,即使能夠很好地保護軟件應(yīng)用自身免受篡改,但如果沒有防篡改技術(shù)能夠被用在依賴庫上,則黑客也能夠簡單地利用他們自己的庫替代這些庫并且間接地攻擊軟件以便例如抽取關(guān)鍵數(shù)據(jù)。
[0006]本發(fā)明解決相關(guān)現(xiàn)有技術(shù)的問題和限制。
【發(fā)明內(nèi)容】
[0007]本發(fā)明提供一種防篡改方案,其中軟件應(yīng)用檢查已知利用的存在,并且特別適用于對計算機裝置的大用戶群實現(xiàn)軟件應(yīng)用的情況。通常,從某個外部中心源在每個計算機裝置上頻繁地更新已知利用的簽名。在每個計算機裝置上,檢測過程被集成到軟件應(yīng)用的受到很好保護的區(qū)域(通常在這里被稱為安全內(nèi)核)中。以這種方式,能夠快速地停止已知利用,因此阻止這些利用影響用戶群的顯著百分比,而非嘗試停止所有攻擊。單獨地,本發(fā)明不必停止開發(fā)新的利用(雖然簽名內(nèi)、結(jié)合簽名或除了簽名之外的高級啟發(fā)法可以能夠檢測正被開發(fā)的利用),而是阻止這種利用以普遍方式有效地分布。
[0008]通過在軟件應(yīng)用內(nèi)包括安全內(nèi)核并且在安全內(nèi)核內(nèi)提供系統(tǒng)證實功能,本發(fā)明提供裝置上軟件應(yīng)用的執(zhí)行。系統(tǒng)證實功能被用于參照可由外部服務(wù)器提供的利用簽名數(shù)據(jù)來掃描針對應(yīng)用的利用,例如試圖恢復(fù)可在應(yīng)用執(zhí)行時在應(yīng)用內(nèi)找到的密鑰的本地利用。
[0009]特別地,本發(fā)明提供一種在裝置上執(zhí)行軟件應(yīng)用的方法,該方法包括下述步驟:提供具有安全內(nèi)核的軟件應(yīng)用;在該裝置處從位于該裝置外部的源接收利用簽名數(shù)據(jù);以及執(zhí)行安全內(nèi)核內(nèi)的系統(tǒng)證實功能,系統(tǒng)證實功能被布置為使用利用簽名數(shù)據(jù)檢測針對軟件應(yīng)用的利用。
[0010]該裝置可以是移動計算裝置,諸如移動電話、平板計算機或類似裝置。
[0011]利用簽名數(shù)據(jù)和/或系統(tǒng)證實功能可被配置為使得僅對于針對軟件應(yīng)用的本地利用執(zhí)行掃描,其中該裝置的其它合法用戶從事針對軟件應(yīng)用的各方面的利用,諸如試圖恢復(fù)加密數(shù)據(jù)(諸如,密鑰)。結(jié)合利用簽名數(shù)據(jù),系統(tǒng)證實功能還可被布置為僅掃描針對該軟件應(yīng)用的利用,并且不掃描針對其它軟件應(yīng)用的利用。
[0012]軟件應(yīng)用可被布置為使得使用利用繞過系統(tǒng)證實功能會引起軟件應(yīng)用的用戶功能的限制,例如阻止應(yīng)用執(zhí)行它的主用戶功能(例如,如果軟件應(yīng)用是媒體播放器,則阻止內(nèi)容(諸如,視頻和/或音頻內(nèi)容)的回放)。
[0013]通常,軟件應(yīng)用可被布置為對一個或多個庫函數(shù)執(zhí)行過程調(diào)用,所述一個或多個庫函數(shù)被安裝在該裝置上但位于軟件應(yīng)用自身的外部。軟件應(yīng)用可隨后被布置為:在完成對外部庫函數(shù)的過程調(diào)用之前執(zhí)行對利用的掃描,并且被布置為:如果通過該掃描而檢測到針對軟件應(yīng)用的利用,例如,如果檢測到它的已修改或交換庫的利用,檢測到窺探過程調(diào)用的利用,則阻止所述過程調(diào)用的完成。
[0014]系統(tǒng)證實功能可被布置為在解密軟件應(yīng)用所需的選擇的數(shù)據(jù)之前執(zhí)行對于針對軟件應(yīng)用的利用的掃描,并且被布置為如果通過該掃描而檢測到針對軟件應(yīng)用的利用,則阻止所述解密的完成。這種數(shù)據(jù)能夠包括軟件應(yīng)用的執(zhí)行所需的程序代碼。
[0015]例如,可通常在該裝置處通過由服務(wù)器啟動的推送機制或由該裝置啟動的牽拉機制例如從服務(wù)器接收利用簽名數(shù)據(jù)作為至少一個利用簽名文件,并且這可定期地發(fā)生并且需要根據(jù)預(yù)定約束實現(xiàn)這一點。利用簽名數(shù)據(jù)可被加密在接收的利用簽名文件內(nèi),并且系統(tǒng)證實功能可隨后被布置為在使用之前或在使用期間解密利用簽名數(shù)據(jù)以執(zhí)行對利用的掃描。
[0016]利用簽名文件還可包括時間戳或其它時間數(shù)據(jù),例如證明文件的創(chuàng)建或遞送到該裝置的時間。軟件應(yīng)用或特別是系統(tǒng)證實功能可隨后被布置為根據(jù)時間戳確定是否使用利用簽名文件內(nèi)所包含的利用簽名數(shù)據(jù)。例如,如果時間戳太舊,則該文件可被拒絕。為了阻止篡改這個過程,安全時鐘可被用于該裝置中以確定時間戳是否滿足特定準(zhǔn)則。
[0017]利用簽名文件還可包括數(shù)字簽名,并且系統(tǒng)證實功能可隨后被布置為:如果軟件應(yīng)用或系統(tǒng)證實功能證實該數(shù)字簽名失敗,則不使用接收的利用簽名文件。
[0018]例如,通過提供用于執(zhí)行特定算法的完整代碼,或者通過提供用于完成對將要被執(zhí)行的算法的定義的部分代碼和/或數(shù)據(jù),利用簽名數(shù)據(jù)還可為系統(tǒng)證實功能提供用于掃描所述利用的一個或多個算法。
[0019]本發(fā)明還可提供一種執(zhí)行安裝在計算機裝置上的至少一個軟件應(yīng)用的方法,包括:在該裝置處從位于該裝置外部的源接收利用簽名數(shù)據(jù);并且在計算機裝置上執(zhí)行系統(tǒng)證實功能以掃描針對所述至少一個軟件應(yīng)用中的至少一個軟件應(yīng)用的利用。以這種方式,單個系統(tǒng)證實功能能夠被用于掃描針對多個軟件應(yīng)用的利用。能夠根據(jù)以上已經(jīng)討論的各種方法方面執(zhí)行這種布置。在這種布置中,系統(tǒng)證實功能可在所有軟件應(yīng)用之外(例如,在裝置上的安全環(huán)境內(nèi))執(zhí)行,將掃描針對該軟件應(yīng)用的利用,或者系統(tǒng)證實功能能夠例如在一個應(yīng)用的安全內(nèi)核內(nèi)執(zhí)行,但掃描針對該軟件應(yīng)用和/或其它應(yīng)用的利用。
[0020]本發(fā)明還提供與以上方法對應(yīng)的設(shè)備,例如一種計算機裝置,包括:
軟件應(yīng)用,被提供有安全內(nèi)核;和
系統(tǒng)證實功能,被布置為在軟件應(yīng)用的安全內(nèi)核內(nèi)執(zhí)行以掃描針對軟件應(yīng)用的利用,所述計算機裝置被布置為從位于裝置外部的源接收利用簽名數(shù)據(jù),系統(tǒng)證實功能被布置為使用利用簽名數(shù)據(jù)掃描所述利用。
[0021]本發(fā)明還提供一種與描述的方法和設(shè)備對應(yīng)的軟件應(yīng)用,例如該軟件應(yīng)用包括安全內(nèi)核和被布置為在如上所述的安全內(nèi)核內(nèi)執(zhí)行的系統(tǒng)證實功能,并且本發(fā)明還提供對應(yīng)的計算機可讀介質(zhì),例如攜帶計算機程序代碼的計算機可讀介質(zhì),該計算機程序代碼被布置為在計算機裝置上實施這種軟件應(yīng)用。
【附圖說明】
[0022]現(xiàn)在將參照附圖僅作為例子描述本發(fā)明的實施例,其中:
圖1圖示系統(tǒng)證實模塊在軟件應(yīng)用的安全內(nèi)核內(nèi)進行操作以掃描利用的計算機裝置和用于將利用簽名數(shù)據(jù)遞送給該裝置的機制;
圖2圖示為了操作圖1的布置而執(zhí)行的步驟;
圖3示出利用簽名數(shù)據(jù)可被產(chǎn)生并且使得對于裝置可用的方式;
圖4圖示利用簽名文件的各方面;
圖5示出系統(tǒng)證實模塊被實現(xiàn)為掃描針對裝置中的多個軟件應(yīng)用的利用的布置;和圖6和7圖示可使用軟件技術(shù)實現(xiàn)安全內(nèi)核的方式。
【具體實施方式】
[0023]現(xiàn)在參照圖1,計算機裝置10被布置為執(zhí)行軟件應(yīng)用20。計算機裝置可以是例如傳統(tǒng)個人計算機、平板計算機、移動電話或其它移動裝置等。通常對這種計算機裝置的大用戶群實現(xiàn)本發(fā)明。軟件應(yīng)用20可通常被存儲在硬盤驅(qū)動器、固態(tài)盤上或存儲在某種其它形式的永久存儲器中以便加載到計算機裝置10的隨機存取存儲器中從而準(zhǔn)備用于執(zhí)行。
[0024]已知攻擊者試圖攻擊軟件應(yīng)用。這可涉及例如:對對應(yīng)可執(zhí)行文件進行反向工程和/或修改可執(zhí)行文件以便訪問攻擊者可能通常無法獲得的特征/功能和/或信息。例如,攻擊者可能沒有針對訪問應(yīng)用的某個功能付費(例如,如果攻擊者未獲得針對該功能的合適許可)-用于執(zhí)行該功能的指令可存在于攻擊者已訪問的軟件應(yīng)用的可執(zhí)行文件中,但攻擊者未被提供對這些指令的訪問,或者執(zhí)行這些指令的授權(quán),在這種情況下,攻擊者可執(zhí)行攻擊以試圖避開位于合適位置的保護機制(例如,授權(quán)或許可檢查)以便能夠通過執(zhí)行這些指令來訪問該