一種基于Linux的程序安全加載方法及系統(tǒng)的制作方法【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及安全
技術(shù)領(lǐng)域:
,特別涉及一種基于Linux的程序安全加載方法及系統(tǒng)。【
背景技術(shù):
】[0002]隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,已有越來越多的人開始推廣和使用Linux系統(tǒng),其安全性也受到越來越多的挑戰(zhàn)。Linux是一套免費(fèi)使用和自由傳播的類Unix操作系統(tǒng),是一個(gè)基于P0SIX和UNIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng)。它能運(yùn)行主要的UNIX工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。它支持32位和64位硬件。Linux繼承了Unix以網(wǎng)絡(luò)為核心的設(shè)計(jì)思想,是一個(gè)性能穩(wěn)定的多用戶網(wǎng)絡(luò)操作系統(tǒng)。[0003]在程序運(yùn)行的過程中,病毒以及惡意程序可能會通過篡改程序,來實(shí)現(xiàn)入侵,從而給系統(tǒng)安全帶來威脅?!?br/>發(fā)明內(nèi)容】[0004]有鑒于此,本發(fā)明提供一種基于Linux的程序安全加載方法及系統(tǒng),以對程序進(jìn)行校驗(yàn),保證系統(tǒng)安全性。[0005]第一方面,本發(fā)明提供了一種基于Linux的程序安全加載方法,預(yù)先計(jì)算每一個(gè)程序的哈希值,并將該哈希值添加到相應(yīng)程序中;包括:[0006]加載待執(zhí)行的目標(biāo)程序;[0007]計(jì)算所述目標(biāo)程序當(dāng)前的哈希值;[0008]比較所述當(dāng)前的哈希值與所述目標(biāo)程序中包含的哈希值是否相同,若相同,則對所述目標(biāo)程序的完整性校驗(yàn)通過;若不相同,則對所述目標(biāo)程序的完整性校驗(yàn)不通過。[0009]優(yōu)選地,在所述計(jì)算所述目標(biāo)程序當(dāng)前的哈希值之前,進(jìn)一步包括:[0010]獲取執(zhí)行所述加載帶執(zhí)行的目標(biāo)程序操作的父進(jìn)程,判斷該父進(jìn)程是否包括安全標(biāo)識,在該父進(jìn)程包括安全標(biāo)識時(shí),則對所述目標(biāo)程序的可信度驗(yàn)證通過,并執(zhí)行所述計(jì)算所述目標(biāo)程序當(dāng)前的哈希值。[0011]優(yōu)選地,[0012]所述目標(biāo)程序包括:應(yīng)用程序;[0013]在計(jì)算所述目標(biāo)程序當(dāng)前的哈希值之前,進(jìn)一步包括:在啟動sys_execve時(shí),執(zhí)行所述計(jì)算所述目標(biāo)程序當(dāng)前的哈希值。[0014]優(yōu)選地,[0015]所述目標(biāo)程序包括:內(nèi)核程序;[0016]在計(jì)算所述目標(biāo)程序當(dāng)前的哈希值之前,進(jìn)一步包括:在啟動load_module時(shí),執(zhí)行所述計(jì)算所述目標(biāo)程序當(dāng)前的哈希值。[0017]優(yōu)選地,[0018]所述計(jì)算每一個(gè)程序的哈希值,包括:計(jì)算每一個(gè)程序的內(nèi)容、權(quán)限和該程序所依賴的數(shù)據(jù)庫中的至少一項(xiàng)的哈希值。[0019]第二方案,本發(fā)明提供了一種基于Linux的程序安全加載系統(tǒng),包括:[0020]第一計(jì)算單元,用于計(jì)算每一個(gè)程序的哈希值,并將該哈希值添加到相應(yīng)程序中;[0021]加載單元,用于加載待執(zhí)行的目標(biāo)程序;[0022]第二計(jì)算單元,用于計(jì)算所述目標(biāo)程序當(dāng)前的哈希值;[0023]確定單元,用于比較所述當(dāng)前的哈希值與所述目標(biāo)程序中包含的哈希值是否相同,若相同,則對所述目標(biāo)程序的完整性校驗(yàn)通過;若不相同,則對所述目標(biāo)程序的完整性校驗(yàn)不通過。[0024]優(yōu)選地,進(jìn)一步包括:[0025]處理單元,用于獲取執(zhí)行所述加載帶執(zhí)行的目標(biāo)程序操作的父進(jìn)程,判斷該父進(jìn)程是否包括安全標(biāo)識,在該父進(jìn)程包括安全標(biāo)識時(shí),則對所述目標(biāo)程序的可信度驗(yàn)證通過,并觸發(fā)所述第二計(jì)算單元執(zhí)行所述計(jì)算所述目標(biāo)程序當(dāng)前的哈希值。[0026]優(yōu)選地,[0027]在所述目標(biāo)程序包括應(yīng)用程序時(shí),進(jìn)一步包括:第一檢驗(yàn)單元,用于在檢驗(yàn)到sys_execve啟動時(shí),觸發(fā)所述第二計(jì)算單元執(zhí)行所述計(jì)算所述目標(biāo)程序當(dāng)前的哈希值。[0028]優(yōu)選地,[0029]在所述目標(biāo)程序包括內(nèi)核程序時(shí),進(jìn)一步包括:第二檢驗(yàn)單元,用于在檢驗(yàn)到load_module啟動時(shí),觸發(fā)所述第二計(jì)算單元執(zhí)行所述計(jì)算所述目標(biāo)程序當(dāng)前的哈希值。[0030]優(yōu)選地,所述第一計(jì)算單元,用于計(jì)算每一個(gè)程序的內(nèi)容、權(quán)限和該程序所依賴的數(shù)據(jù)庫中的至少一項(xiàng)的哈希值。[0031]本發(fā)明實(shí)施例提供了一種基于Linux的程序安全加載方法及系統(tǒng),通過計(jì)算程序的哈希值,并將該特征值添加到相應(yīng)程序中,在程序運(yùn)行時(shí)對程序的該哈希值進(jìn)行校驗(yàn),只有校驗(yàn)通過的程序才允許其運(yùn)行,從而可以保證系統(tǒng)的安全性。【附圖說明】[0032]圖1是本發(fā)明實(shí)施例提供的方法流程圖;[0033]圖2是本發(fā)明另一實(shí)施例提供的方法流程圖;[0034]圖3是本發(fā)明實(shí)施例提供的系統(tǒng)硬件架構(gòu)圖;[0035]圖4是本發(fā)明實(shí)施例提供的系統(tǒng)結(jié)構(gòu)示意圖;[0036]圖5是本發(fā)明另一實(shí)施例提供的系統(tǒng)結(jié)構(gòu)示意圖。【具體實(shí)施方式】[0037]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述。顯然,所描述的實(shí)施例僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。[0038]如圖1所示,本發(fā)明實(shí)施例提供了一種基于Linux的程序安全加載方法,該方法可以包括以下步驟:[0039]步驟101:預(yù)先計(jì)算每一個(gè)程序的哈希值,并將該哈希值添加到相應(yīng)程序中。[0040]步驟102:加載待執(zhí)行的目標(biāo)程序。[0041]步驟103:計(jì)算所述目標(biāo)程序當(dāng)前的哈希值。[0042]步驟104:比較所述當(dāng)前的哈希值與所述目標(biāo)程序中包含的哈希值是否相同,若相同,執(zhí)行步驟105;若不相同,執(zhí)行步驟106。[0043]步驟105:對所述目標(biāo)程序的完整性校驗(yàn)通過。[0044]步驟106:對所述目標(biāo)程序的完整性校驗(yàn)不通過。[0045]根據(jù)本實(shí)施例提供的方案,通過計(jì)算程序的哈希值,并將該特征值添加到相應(yīng)程序中,在程序運(yùn)行時(shí)對程序的該哈希值進(jìn)行校驗(yàn),只有校驗(yàn)通過的程序才允許其運(yùn)行,從而可以保證系統(tǒng)的安全性。[0046]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖及具體實(shí)施例對本發(fā)明作進(jìn)一步地詳細(xì)描述。[0047]如圖2所示,本發(fā)明實(shí)施例提供了一種基于Linux的程序安全加載方法,該方法可以包括以下步驟:[0048]步驟201:預(yù)先計(jì)算每一個(gè)程序的哈希值。[0049]由于黑客或惡意程序可以篡改網(wǎng)絡(luò)設(shè)備中的運(yùn)行程序來竊取用戶的賬號、密碼等隱私信息,進(jìn)而對系統(tǒng)安全產(chǎn)生威脅,所以,在本實(shí)施例中,每當(dāng)啟動該程序時(shí),需要對該程序的完整性進(jìn)行驗(yàn)證,從而確定該程序是否被篡改過。[0050]在本實(shí)施例中,該哈希值可以通過哈希運(yùn)算得到。其中,哈希運(yùn)算的算法可以為安全哈希算法(SecureHashAlgorithm,SHA)、SHA2算法、中國國家密碼管理局發(fā)布的中國商用密碼雜湊算法標(biāo)準(zhǔn)SM3密碼雜湊算法(SM3CryptographicHashAlgorithm)等等,本實(shí)施例對此不做具體限定。[0051]為了保證運(yùn)行程序在各方面都未被篡改,在計(jì)算程序的哈希值時(shí),可以計(jì)算程序的內(nèi)容、權(quán)限和該程序所依賴的數(shù)據(jù)庫中的至少一項(xiàng)的哈希值,以及在后續(xù)過程中對計(jì)算的每一項(xiàng)的哈希值均進(jìn)行完整性校驗(yàn),從而可以更全面的對運(yùn)行程序的完整性進(jìn)行校驗(yàn)。[0052]例如,在計(jì)算程序的哈希值時(shí),對程序的內(nèi)容、權(quán)限和該程序所依賴的數(shù)據(jù)庫均計(jì)算了哈希值。[0053]其中,哈希值是一段數(shù)據(jù)唯一且極其緊湊的數(shù)值表示形式。[0054]步驟202:將該哈希值添加到相應(yīng)程序中。[0055]在Linux系統(tǒng)中,運(yùn)行程序的格式主要包括:ELF(ExecutableandLinkableFormat)、Ext2、Ext3、ReiserFS、XFS和JFS等。[0056]在本實(shí)施例中,可以將步驟201中計(jì)算得到的哈希值添加到相應(yīng)程序?qū)?yīng)的文件中,例如,將計(jì)算得到的哈希值添加到ELF文件中。[0057]為了便于后續(xù)過程中對添加到ELF文件中的哈希值進(jìn)行讀取,可以將該哈希值添加到ELF文件頭中。[0058]步驟203:獲取目標(biāo)程序的加載指令,根據(jù)該加載指令加載該目標(biāo)程序,并獲取執(zhí)行該加載目標(biāo)程序的父進(jìn)程。[0059]在本實(shí)施例中,目標(biāo)程序可以是應(yīng)用程序,也可以是內(nèi)核程序。[0060]為了進(jìn)一步保證系統(tǒng)的安全性,可以對目標(biāo)程序的可信度進(jìn)行校驗(yàn)。由于所有需要運(yùn)行的程序啟動加載時(shí)父進(jìn)程必須是可信,根據(jù)可信的傳導(dǎo)性,只有父進(jìn)程可信,子進(jìn)程才有可信的前提,即所有的運(yùn)行的程序的在運(yùn)行的時(shí)候都要可信認(rèn)證。因此,本實(shí)施例中,而對目標(biāo)程序可信度的校驗(yàn),可以通過對其父進(jìn)程的可信度校驗(yàn)來確定目標(biāo)程序的可信度。[0061]其中,對于子程序的父進(jìn)程,是加載該子程序的進(jìn)程。[0062]步驟204:判斷該父進(jìn)程是否包括安全標(biāo)識,若包括,執(zhí)行步驟205,否則,執(zhí)行步驟209。[0063]在本實(shí)施例中,可以通過父進(jìn)程是否包括安全標(biāo)識對父進(jìn)程的可信度進(jìn)行校驗(yàn)。[0064]步驟205:對所述目標(biāo)程序的可信度驗(yàn)證通過,并執(zhí)行步驟206。[0065]步驟206:計(jì)算目標(biāo)程序當(dāng)前的哈希值。[0066]在本實(shí)施例中,可以根據(jù)步驟201中對程當(dāng)前第1頁1 2