劉毓彬,葉傳奇,張少博,朱溪洋,秦夢雯,劉曉雨
(河南科技大學軟件學院,洛陽 471003)
互聯(lián)網(wǎng)的快速發(fā)展給人們帶來了巨大的便利,但伴隨著互聯(lián)網(wǎng)行業(yè)發(fā)展而滋生的惡意下載捆綁軟件的問題也已困擾互聯(lián)網(wǎng)用戶十余年[1]。在2022年的315消費者晚會曝光多個P2P類型惡意捆綁軟件下載器網(wǎng)站后,該問題成為了社會關(guān)注的焦點。
對于含有惡意代碼軟件的檢查,傳統(tǒng)的防護方案是使用Sandbox 技術(shù),正如張燦巖[2]所提出的:在含有惡意代碼軟件侵入用戶計算機后,使用API Hook 技術(shù),防護軟件將可能的惡意軟件放入沙箱隔離運行,其方法具有普適性,但也存在系統(tǒng)侵入性過大,資源開銷較大等缺點。本系統(tǒng)旨在將含有惡意代碼的軟件主要攔截在用戶下載操作之前,并對少量逃避攔截的惡意下載捆綁軟件使用特征值匹配、云查殺[3]等技術(shù)實現(xiàn)清除,以達到減輕系統(tǒng)負擔與減小系統(tǒng)侵入性的目的。用戶在應用本系統(tǒng)后有利于減輕信息的認知壓力與電腦的使用壓力。
功能輸入:當前用戶計算機運行中所有瀏覽器的數(shù)據(jù)庫路徑
功能輸出:用戶瀏覽網(wǎng)址信息的數(shù)據(jù)庫最新記錄
Step1:全局監(jiān)聽,等待用戶點擊
Step2:獲取瀏覽器進程
Step3:獲取瀏覽器歷史記錄數(shù)據(jù)庫文件
根據(jù)文件修改日期新舊確定用戶文件存放位置,拼接數(shù)據(jù)庫存放路徑;
以火狐瀏覽器數(shù)據(jù)庫路徑為例:
Step4:讀取歷史記錄數(shù)據(jù)庫數(shù)據(jù)
根據(jù)文件后綴名判斷數(shù)據(jù)庫類型,并建立相應連接
以主流瀏覽器使用的sqlite3數(shù)據(jù)庫為例:
根據(jù)不同瀏覽器選擇不同的查詢語句,獲取到歷史記錄。
Step5:對數(shù)據(jù)庫中歷史記錄判斷新舊
Step6:功能一次執(zhí)行結(jié)束,等待用戶再次點擊激活
Step1:通過URL獲取相應頁面
例:Jsoup.connect(HTMLUrl).get();
Step2:使用正則表達式進行數(shù)據(jù)清洗
去除script的正則表達式匹配語句:
去除style樣式的正則表達式匹配語句:
去除HTML標簽的正則表達式匹配語句:
去除特殊字符的正則表達式匹配語句:
去除轉(zhuǎn)義的正則表達式匹配語句:
將多個空格替換成1個空格:
得到以空格為分隔符的頁面文本數(shù)據(jù)
Step3:使用基于 mmseg 算法的 Jcseg API 進行中文分詞與詞義分類[4]
Step4:將HashMap中的詞語按詞頻排序
根據(jù)HashMap 中值的大小,對HashMap 使用快速排序得到詞頻由高到低的數(shù)組;
Step5:關(guān)鍵詞得分
選取數(shù)組中出現(xiàn)次數(shù)大于(最高次數(shù)+最低次數(shù))/2的詞組作為關(guān)鍵詞進行計分,公式如下:
注:①“詞組詞頻總數(shù)”:HashMap 中所有詞組出現(xiàn)次數(shù)之和;n為常數(shù),是平衡因子,用于防止因詞組詞頻總數(shù)(即頁面文字內(nèi)容總量)過多或過少導致的失衡;②“數(shù)據(jù)庫反饋因子”:查詢數(shù)據(jù)庫,返回數(shù)據(jù)庫中詞組標記的基礎(chǔ)得分,得分區(qū)間為[-1,1]。
Step6:頁面內(nèi)容總得分
哈希值特征碼的構(gòu)造主要由節(jié)的大小加上節(jié)的哈希值組成,程序執(zhí)行時會主動掃描文件的節(jié)頭,判斷是不是PE 文件,如果是,則打開文件,以文件頭的字節(jié)流構(gòu)造特征碼,并與病毒庫中的數(shù)據(jù)進行匹配,如果匹配成功則返回病毒名稱,失敗則返回空。同時,本功能的病毒庫以特征碼的頭一個字符為標準劃分為0~9、A~G 十七個子病毒庫,在病毒掃描時,以特征碼頭一個字符為準跳到對應的子病毒庫中進行數(shù)據(jù)匹配,減少了掃描數(shù)據(jù)的數(shù)量,從而節(jié)約了病毒掃描所需的時間。
MD5 信息摘要算法(MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個128 位(16 字節(jié))的散列值(hash value),用于確保信息傳輸完整一致。理論上,任意兩個文件、字符串不會有相同的MD5 值[5]。因此我們建立了以MD5 為基礎(chǔ)的病毒特征碼數(shù)據(jù)庫,再對用戶電腦全盤掃描使獲取用戶系統(tǒng)文件的MD5 特征碼與病毒特征碼庫比對,進行病毒文件的查殺。工作流程如圖1所示。

圖1 MD5特征值匹配流程
云查殺技術(shù)依賴于云計算技術(shù),是將安全引擎和病毒木馬特征庫放在服務(wù)器端,將主要的計算、查詢等資源開銷較大的操作交由服務(wù)器處理,從而減輕用戶個人計算機的資源占用負擔,并獲取更快的查殺速度、更短的反映時間以及更優(yōu)秀的查殺效果[6]。
功能需求:檢查用戶瀏覽的網(wǎng)站是否安全,阻止用戶瀏覽包含惡意捆綁軟件下載連接的網(wǎng)站。
功能核心:獲取當前用戶瀏覽的網(wǎng)頁信息;數(shù)據(jù)庫信息篩選;網(wǎng)頁文本內(nèi)容分析。
功能實現(xiàn):首先,全局監(jiān)聽用戶點擊,用戶每次點擊后獲取當前運行中的全部進程,篩選出所有瀏覽器進程,根據(jù)運行中的瀏覽器名稱獲取到其本地數(shù)據(jù)庫路徑。將數(shù)據(jù)庫文件拷貝至本系統(tǒng)指定目錄中,以防止瀏覽器的寫與本系統(tǒng)的讀并行執(zhí)行造成的死鎖問題。
然后,瀏覽器數(shù)據(jù)庫記錄新歷史數(shù)據(jù)時具有‘只會將首次訪問的頁面記錄到數(shù)據(jù)庫中,若非首次訪問,數(shù)據(jù)庫則只更新相關(guān)記錄的訪問次數(shù)與最后訪問時間’的特性。本功能利用該特性獲取到當前用戶首次瀏覽的頁面。用戶首次點擊后,程序記錄到用戶上次使用時最后一條歷史記錄的ID 值并將其作為標號,當用戶第二次點擊后,獲取到的當前最新歷史記錄的ID 值與標號之間的差額記錄數(shù)列即為用戶兩次點擊之間首次訪問的頁面,更新標號后循環(huán)往復,從而獲取到用戶的瀏覽信息。
再次,獲取到新歷史記錄后,程序?qū)π掠涗浿饤l進行安全性初篩。程序根據(jù)用戶選擇的安全防護等級執(zhí)行不同的初篩策略:用戶選擇低等級防護時,程序只進行黑名單域名匹配;用戶選擇中等級(默認等級)防護時,首先進行黑名單全域名匹配,若頁面不為黑名單中頁面,則采用了Jaro-Winkler Distance 與LevenshteinDistance 兩種編輯距離[7]進行黑名單域名相似度匹配,同時進行頁面名稱特征詞匹配,將各項匹配結(jié)果分別加權(quán)參與安全性評判,當值達到閾值時,認為該記錄可能含有危險性需要進一步分析;用戶選擇高等級防護時,首先進行黑名單全域名匹配,若頁面不為黑名單中頁面,首先進行白名單特征匹配,特征值匹配結(jié)果為1(匹配結(jié)果范圍為0~1),即白名單有該條記錄時返回頁面安全,否則本歷史記錄與有相同域名的白名單列表逐條相似度匹配獲取到該頁面得到的最高分,并減去黑名單標題特征匹配的加權(quán)值后獲取到最終值,若該值達到安全線值,則判斷該頁面安全,并添加該記錄至白名單中,否則判斷該頁面需要下一步檢測。頁面攔截模塊處理流程如圖2所示。

圖2 頁面攔截功能模塊處理流程
最后,對于標記為需進一步檢測的記錄將進行更加細致的檢測。為每一條記錄開啟一個新的線程,使用Jsoup 通過URL 獲取HTML 全部內(nèi)容,若Jsoup 獲取網(wǎng)頁內(nèi)容失敗,則使用本功能自編寫的程序獲取網(wǎng)頁內(nèi)容。使用正則表達式將頁面中文本提取。使用Web 頁面文本內(nèi)容關(guān)鍵詞分析技術(shù)得到頁面內(nèi)容得分并加權(quán);使用Jsoup 獲取所有頁面中的超鏈接標簽并逐個判別其鏈接是否安全,得到頁面鏈接安全性得分并加權(quán);獲取網(wǎng)頁ICP 備案號,通過工業(yè)和信息化部政務(wù)服務(wù)平臺的ICP/IP 地址/域名信息備案管理系統(tǒng)(https://beian.miit.gov.cn)獲取到頁面?zhèn)浒感畔ⅲ玫巾撁婧戏ㄐ缘梅植⒓訖?quán)。最終通過綜合得分判別該頁面是否安全。若該頁面安全則將其添加到系統(tǒng)白名單中,不安全則通知用戶并關(guān)閉頁面。
功能需求:監(jiān)控用戶下載的文件并進行病毒查殺;自定義病毒掃描。
功能核心:監(jiān)控文件的下載;常見格式壓縮包的解壓縮;病毒掃描。
功能實現(xiàn):首先,文件系統(tǒng)中的文件夾均會被WatchService(基于本機操作系統(tǒng)實現(xiàn)監(jiān)控)監(jiān)控,在監(jiān)控過程中,程序獲取到新建文件的絕對路徑,并根據(jù)新建文件的絕對路徑進行病毒掃描。
需要說明的是,計算機系統(tǒng)生成新文件的途徑除了用戶下載,還可能為用戶復制本地文件產(chǎn)生的備份文件,程序運行產(chǎn)生的緩存文件,等等,如果對所有新生成的文件都進行掃描,無疑加大了程序的負擔。而本功能根據(jù)“在文件下載過程中系統(tǒng)會產(chǎn)生一個臨時文件用于存放下載文件片段而在文件下載合并完成后臨時文件被刪除”的特性增加判斷,從而獲取到用戶下載的文件。本功能僅對用戶下載的文件進行病毒檢測,提高了系統(tǒng)運行效率。下載監(jiān)控功能模塊處理流程如圖3所示。

圖3 下載監(jiān)控功能模塊處理流程
其次,在各種文件格式中,因為壓縮包內(nèi)部可以包含多個文件且殺毒程序無法直接檢查未解壓壓縮包中的文件,所以壓縮包格式的文件可能導致病毒文件特征值匹配的失敗。針對壓縮包格式的文件掃描問題,本功能先將壓縮文件解壓到指定的臨時文件夾下,再對該文件夾下的所有文件進行病毒掃描,如果出現(xiàn)病毒就給予用戶相應的提示信息。無論是否有病毒,系統(tǒng)在掃描完成之后都即刻清空該臨時文件夾。然而,壓縮文件的格式有多種,不同的壓縮格式使用不同的編碼方式,考慮到系統(tǒng)開發(fā)時效性與程序適用性,本功能只針對RAR、ZIP、7Z三種最常見壓縮格式的未加密壓縮文件進行解壓與病毒掃描。
功能需求:檢測用戶計算機磁盤文件。用戶上傳文件進行檢測并出具檢測結(jié)果。
功能核心:掃描磁盤文件;利用特征值匹配檢測文件;使用云查殺技術(shù)對用戶提交的文件進行檢查并返饋分析報告。
功能實現(xiàn):功能運行后,用戶電腦磁盤中的文件均會被FileScanService(基于本機系統(tǒng)實現(xiàn)掃描模塊)掃描并計算出文件的MD5值,每個文件都與本系統(tǒng)的病毒庫進行MD5 特征值匹配[5]。用戶還可以自定義區(qū)域進行病毒掃描。如果文件的MD5 值匹配中病毒樣本記錄,系統(tǒng)將會提醒用戶并建議用戶對此文件進行刪除或者對該軟件進行卸載。但此種方法不能有效檢測出混合病毒,因為病毒文件混入了其他文件后,其對應的MD5 特征值也將改變;其次,此種方法對變形病毒的檢測能力也較弱。
本系統(tǒng)得到了合作公司(北京云海協(xié)同科技有限公司)旗下VirScan 網(wǎng)站的使用授權(quán)與技術(shù)支持。對于上述問題,系統(tǒng)將沒有檢測出病毒的文件上傳至VirScan 服務(wù)器進行云查殺并給予檢測反饋[6]。
用戶還可以單獨調(diào)用云查殺功能。當用戶將文件上傳給系統(tǒng)后(文件大小不得超過50 Mb),系統(tǒng)調(diào)用相關(guān)API 將用戶上傳的文件提交給VirScan,VirScan 將該文件置于一個虛擬環(huán)境,使用47 款掃描引擎進行病毒掃描并逐個反饋結(jié)果。系統(tǒng)對反饋結(jié)果進行分析,得到最終的文件檢測報告。下面以“virus.exe”為例,云查殺部分結(jié)果見表1所示。

表1 云查殺部分結(jié)果展示
本系統(tǒng)相比于主流的計算機防護殺毒軟件具有體積更小的特點,在十余種主流統(tǒng)計樣本中,本系統(tǒng)大小約為樣本平均大小的48.4%。系統(tǒng)與部分主流計算機防護殺毒軟件大小對比如圖4所示。

圖4 系統(tǒng)與部分主流計算機防護殺毒軟件大小對比
另外在預防惡意捆綁軟件下載至用戶電腦功能上,相比于主流的計算機防護殺毒軟件的平均防護水平,本系統(tǒng)的頁面檢測準確性指標與系統(tǒng)資源占用指標分別提升6%與13%。各項實現(xiàn)結(jié)果得分如圖5所示。

圖5 “預防惡意捆綁軟件下載”功能中本系統(tǒng)得分與主流防護軟件各項平均得分對比
系統(tǒng)在檢測和清除惡意軟件和病毒的軟件程序仍有不足,如病毒庫樣本量過小,對于病毒變種的應對方法單一,掃描時間過長等問題。可借鑒張燦巖[2]、何國賢[3]等人使用的沙盒檢測技術(shù)來改進上述問題。
本文使用SSM 開發(fā)框架[8]依據(jù)成熟的MVC設(shè)計模式[9],實現(xiàn)了對惡意捆綁軟件進行有效的攔截和清除的系統(tǒng)。本系統(tǒng)旨在將含有惡意代碼的軟件主要攔截在用戶下載操作之前,并對少量逃避攔截的惡意下載捆綁軟件使用特征值匹配、云查殺等技術(shù)實現(xiàn)清除,具有較小的系統(tǒng)開銷,較快的運行速度等特點。用戶應用本系統(tǒng)后可以保護其不受惡意軟件的侵害,減輕了用戶使用電腦時的認知負擔,操作壓力等。