張曉兵 王 妍 呂遒健 田 亮 孟繁盛
1(奇安信科技集團(tuán)股份有限公司 北京 100012)
2(中國科學(xué)院信息工程研究所 北京 100093)
(zhangxiaobing@qianxin.com)
隨著瀏覽器技術(shù)的快速發(fā)展,幾乎所有辦公類應(yīng)用都采用基于瀏覽器訪問的B/S架構(gòu),據(jù)統(tǒng)計,辦公人員瀏覽器的使用時長已經(jīng)占全天時長的70%以上.
另一方面,信創(chuàng)體系平臺多樣、系統(tǒng)豐富、場景重要,作為互聯(lián)網(wǎng)和企業(yè)業(yè)務(wù)的統(tǒng)一入口,瀏覽器的業(yè)務(wù)兼容性和自身安全性顯得尤為重要.而未來信創(chuàng)體系將面臨著更多層面的網(wǎng)絡(luò)攻擊與安全問題,因此開發(fā)一款安全可信的瀏覽器就成為一個必然.但是現(xiàn)有的瀏覽器開源框架只考慮了自身代碼的安全性,并沒有兼顧實際的業(yè)務(wù)場景,因此具有很大的局限性[1].
本文將試圖從瀏覽器面臨的風(fēng)險出發(fā),推演出瀏覽器應(yīng)有的安全架構(gòu),并探討基于Chrome瀏覽器開源框架開發(fā)一款安全可信的信創(chuàng)瀏覽器的可行性,助力信創(chuàng)生態(tài)健康發(fā)展.
信創(chuàng)體系下的瀏覽器與WIN-TEL體系下的威脅類似,但是又有其獨特性,總體來說會面臨如下安全威脅:
1) 異構(gòu)硬件平臺會導(dǎo)致代碼離散,會引入更多安全漏洞.
隨著Web技術(shù)的發(fā)展,瀏覽器的復(fù)雜性已經(jīng)接近操作系統(tǒng),如果針對不同硬件平臺、操作系統(tǒng)環(huán)境開發(fā)不同的適配版本會帶來代碼離散,引入更多代碼級的漏洞,形成天然的不安全狀態(tài).
2) 面臨身份仿冒風(fēng)險.
由于瀏覽器是企業(yè)業(yè)務(wù)的承載平臺與重要入口,所有訪問都將以終端設(shè)備與瀏覽器為起點,因此一旦出現(xiàn)身份仿冒問題,就會影響業(yè)務(wù)本身的安全性.
3) 面臨網(wǎng)頁攻擊與數(shù)據(jù)泄露風(fēng)險.
從攻防角度看,出于竊取業(yè)務(wù)機(jī)密、盜取業(yè)務(wù)數(shù)據(jù)、攻擊和控制操作系統(tǒng)等目的,黑客往往把瀏覽器作為突破口,使用網(wǎng)頁掛馬、釣魚欺詐等手段攻擊系統(tǒng),并造成數(shù)據(jù)泄露.
4) 國密系統(tǒng)兼容性帶來傳輸安全問題.
越來越多的國家與企業(yè)重要業(yè)務(wù)系統(tǒng)采用國密算法來保護(hù),而通用的瀏覽器使用國外的密碼算法,不兼容國產(chǎn)密碼算法,不支持我國網(wǎng)絡(luò)信任體系,不符合我國關(guān)于密碼的相關(guān)標(biāo)準(zhǔn)規(guī)范,不能對我國的金融、政務(wù)等基礎(chǔ)性應(yīng)用提供必要的安全支撐[1].從而導(dǎo)致數(shù)據(jù)無法安全傳輸,帶來安全隱患.
5) 瀏覽器面臨著更高維度的攻擊問題.
在辦公網(wǎng)絡(luò)環(huán)境下,除了業(yè)務(wù)系統(tǒng)的正常瀏覽,大量的文檔處理、審批流程工作也都通過瀏覽器方式完成,這樣就帶來一些文件級和身份級的更高維度的攻擊問題.
Chrome瀏覽器為了解決之前架構(gòu)帶來的一系列問題,2016年使用面向服務(wù)的架構(gòu)(services oriented architecture, SOA)的思想設(shè)計了新的架構(gòu)[2],如圖1所示:
圖1 Chrome瀏覽器架構(gòu)
圖2 瀏覽器安全可信架構(gòu)
原來的各種模塊會被重構(gòu)成獨立的服務(wù)(service),訪問服務(wù)必須使用定義好的接口,通過IPC進(jìn)行通信,每個服務(wù)都可以在獨立的進(jìn)程中運行,并且可以輕松拆分為不同的進(jìn)程或聚合為一個進(jìn)程.
從圖1可以看出,Chrome瀏覽器本身并沒有更多安全性方面的考慮,因此需要基于信創(chuàng)體系的實際情況,設(shè)計一個瀏覽器的安全可信架構(gòu),如圖2所示.
在整個瀏覽器的安全可信架構(gòu)下,共分為跨平臺層、可信身份層、數(shù)據(jù)安全層、安全集成層與安全傳輸層.
跨平臺層:利用交叉編譯技術(shù),用一套代碼覆蓋信創(chuàng)所有平臺,解決異構(gòu)環(huán)境下代碼離散問題.
可信身份層:利用可信計算技術(shù),保證設(shè)備與瀏覽器自身的可信.
數(shù)據(jù)安全層:利用瀏覽器沙箱技術(shù),進(jìn)行進(jìn)程和數(shù)據(jù)隔離,阻止網(wǎng)頁掛馬攻擊的影響,并保證數(shù)據(jù)本身的安全、采用數(shù)據(jù)隱寫技術(shù)對數(shù)據(jù)進(jìn)行標(biāo)記和追蹤.
安全集成層:利用插件技術(shù)、終端安全、零信任等外部安全機(jī)制,形成協(xié)同安全效應(yīng),保證環(huán)境安全和訪問安全.
安全傳輸層:采用國密算法加密機(jī)制,實現(xiàn)國密的單雙向認(rèn)證和國密網(wǎng)站的動態(tài)探測,讓傳輸更安全.
交叉編譯是在當(dāng)前編譯平臺下,編譯出來的程序能運行在體系結(jié)構(gòu)不同的另一種目標(biāo)平臺上,但編譯平臺本身卻不能運行該程序.
交叉編譯是指通過不同平臺的編譯技術(shù),將一套源代碼同時轉(zhuǎn)換成不同硬件平臺都能正常運行的目標(biāo)程序.
瀏覽器通過運用交叉編譯技術(shù),可以實現(xiàn)采用一套代碼多種編譯的方式解決平臺差異帶來的多版本維護(hù)問題和安全問題.
經(jīng)過交叉編譯后,就可以實現(xiàn)一套代碼同時支持X86,MIPS,ARM等不同CPU架構(gòu)的信創(chuàng)平臺,保證了代碼唯一性,增加了安全性.
可信主要通過度量和驗證的技術(shù)手段實現(xiàn).度量分為靜態(tài)度量和動態(tài)度量2種.靜態(tài)度量通常指在運行環(huán)境初裝或重啟時的度量.度量是逐級的,通常先啟動的軟件對后一級啟動的軟件進(jìn)行度量,度量值驗證成功則標(biāo)志著可信鏈從前一級軟件向后一級的成功傳遞.
以操作系統(tǒng)啟動為例,可信操作系統(tǒng)啟動時基于硬件的可信啟動鏈,對啟動鏈上的UEFI,loader,OS的image進(jìn)行靜態(tài)度量,以判斷系統(tǒng)是否被改動.
動態(tài)度量和驗證是指在系統(tǒng)運行時動態(tài)獲取其運行特征,根據(jù)規(guī)則或模型分析判斷系統(tǒng)是否運行正常.
可信計算一般會涉及3個部分:可信根、可信鏈和可信加密技術(shù).
可信根:在可信計算組的定義中,一般會將其分為可信度量根和可信報告根,可信度量根將用于對整個項目的完整性進(jìn)行判斷或者測量.大部分情況下,可信根由軟件、可信報告模塊、內(nèi)置寄存存儲器和密鑰構(gòu)成.
可信根通常是可信硬件芯片.可信計算通過芯片廠家植入在可信硬件中的算法和密鑰,以及集成的專用微控制器對軟件棧進(jìn)行度量和驗證來確保可信.根據(jù)安全芯片和其上運行的可信軟件基(trusted software stack)分類,業(yè)界目前主流的可信計算標(biāo)準(zhǔn)主要有3種:TPM(trusted platform module),TCM(trusted cryptography module),TPCM(trusted platform control module)[3].
可信鏈:是信任度量模型的實施技術(shù)方案,通過可信鏈把信任關(guān)系從信任根擴(kuò)展到整個計算機(jī)系統(tǒng).在實際使用中,可信根在構(gòu)建可信鏈時,會將信息傳遞給存儲單元,同時報告根將證明整個過程,并將可信狀態(tài)信息返回給整個可信平臺,其中包括平臺配置信息、審計日志、密鑰等.
可信加密技術(shù):最重要的是設(shè)置簽注密鑰,通常情況下,會利用非對稱加密的特性在指定的位數(shù)下,設(shè)置對應(yīng)的公私鑰,從而隨機(jī)產(chǎn)生類似于“門鎖”的裝置,除非擁有“鑰匙”,否則無法對其進(jìn)行解密.
可信計算模塊生成可信私鑰后,要立即將它放入可信存儲區(qū)以免產(chǎn)生泄露風(fēng)險.再存在TPM安全芯片的設(shè)備上,首選使用安全芯片來存儲私鑰,TPM可直接在內(nèi)部生成密鑰并保存.
申請TPM芯片生成自定義TPM用戶和關(guān)聯(lián)的用戶密鑰,并使用用戶口令保護(hù),可以保護(hù)密鑰不被惡意導(dǎo)出和拷貝,并防止本機(jī)其他程序非法使用.
如果設(shè)備上不存在安全芯片時,只能使用軟件級的密鑰保護(hù),使用自定義的白盒加密模塊來實現(xiàn)可信存儲.私鑰落地前先用白盒加密模塊進(jìn)行密鑰白盒化,這里的白盒化使用硬盤序列號作為額外白盒化因子,加密庫可以用ECDSA實現(xiàn)私鑰數(shù)字簽名算法.
由于本地存儲的私鑰是經(jīng)過白盒化處理的,即使將私鑰文件拷走也無法解出明文的私鑰,即使本機(jī)上用可信私鑰進(jìn)行數(shù)字簽名,私鑰明文也不會在內(nèi)存中出現(xiàn),從而防止惡意盜用.
攻擊者將白盒化私鑰和白盒加密庫一起拷貝到其他機(jī)器上,在不知道私鑰的情況下透明調(diào)用加密庫實現(xiàn)加密的場景,由于私鑰白盒化時是用硬盤序列號作為額外因子的,如果這里的硬盤序列號不匹配,則運算結(jié)果一定不合法,后續(xù)服務(wù)端使用公鑰驗證數(shù)字簽名的過程則會失敗.
通過上述軟、硬件結(jié)合的方式實現(xiàn)一個可信的度量空間,從而可以完成設(shè)備可信和瀏覽器自身可信的度量.當(dāng)然除了可信度量外,瀏覽器的進(jìn)程還需要采用進(jìn)程守護(hù)的方式實現(xiàn)自保護(hù),即無法通過第三方的方式來隨意關(guān)閉瀏覽器的進(jìn)程或修改瀏覽器的主程序文件.
沙箱技術(shù)設(shè)計的目的是為了讓不可信代碼運行在一定的環(huán)境中,保證每一條代碼可以做或不能做什么而不受輸入條件的影響.
瀏覽器沙箱利用操作系統(tǒng)提供的安全性來管控?zé)o法對計算機(jī)進(jìn)行持久更改或訪問機(jī)密信息的代碼執(zhí)行.沙箱進(jìn)程邏輯架構(gòu)如圖3所示.
圖3 沙箱進(jìn)程邏輯架構(gòu)
沙箱邏輯結(jié)構(gòu)中包含代理進(jìn)程(broker process)和目標(biāo)進(jìn)程(target process).
在瀏覽器多進(jìn)程架構(gòu)中,代理進(jìn)程就是瀏覽器主進(jìn)程,代理進(jìn)程的職責(zé)是:
1) 為每個目標(biāo)進(jìn)程指定策略;
2) 生成目標(biāo)進(jìn)程;
3) 承載沙箱策略引擎服務(wù);
4) 主機(jī)沙箱攔截管理器;
5) 主機(jī)沙箱IPC服務(wù)到目標(biāo)進(jìn)程;
6) 代表目標(biāo)進(jìn)程執(zhí)行策略允許的操作.
代理進(jìn)程永遠(yuǎn)比它所產(chǎn)生的所有目標(biāo)過程運行更長時間.沙箱進(jìn)程間通信代理是一種低級機(jī)制,用于透明地將某些系統(tǒng)API調(diào)用從目標(biāo)進(jìn)程到代理進(jìn)程.
圖4 瀏覽器零信任體系
攔截管理器的工作是修補系統(tǒng)API調(diào)用,在瀏覽器多進(jìn)程架構(gòu)中,渲染進(jìn)程始終是目標(biāo)進(jìn)程[4].
有了沙箱機(jī)制之后,就可以將不同的網(wǎng)頁放在沙箱里進(jìn)行進(jìn)程隔離,當(dāng)一個頁面發(fā)生問題后,也不會影響另外一個頁面的正常訪問.當(dāng)網(wǎng)頁上出現(xiàn)掛馬時,也能夠只在沙箱中運行,從而不會影響其他頁面的訪問.另外還可以將IE內(nèi)核包裹在沙箱里實現(xiàn)多核訪問,從而能夠兼容早期的一些使用ACTIVEX控件的業(yè)務(wù)應(yīng)用.
同時可以對整個沙箱的行為進(jìn)行監(jiān)控,能夠防止業(yè)務(wù)系統(tǒng)產(chǎn)生數(shù)據(jù)泄露.
另外,信息隱寫是一種基于內(nèi)容的、非密碼機(jī)制的計算機(jī)信息隱藏技術(shù),它將一些標(biāo)志信息嵌入到數(shù)字載體當(dāng)中,包括多媒體、文檔、軟件等,不影響原載體的使用價值,也不容易被探知和再次被修改,但可以被生產(chǎn)方標(biāo)識和辨認(rèn),通過隱藏在載體中的信息,可以達(dá)到確認(rèn)內(nèi)容創(chuàng)建者、購買者、察看者的信息,判斷載體是否被篡改、盜用,是保護(hù)信息安全、實現(xiàn)防偽溯源、版權(quán)保護(hù)的有效方法.
沙箱技術(shù)與隱寫技術(shù)的配合,就能實現(xiàn)瀏覽器深層次的數(shù)據(jù)安全需求.
插件技術(shù)是一種常見的模塊級集成技術(shù),它可以將有獨立功能的模塊從軟件產(chǎn)品中獨立出來,通過內(nèi)部封閉機(jī)制,同另外一個軟件產(chǎn)品進(jìn)行無縫集成,能夠快速增強(qiáng)軟件產(chǎn)品的能力.
通過插件技術(shù)可以輕松建立基于零信任的安全體系,如圖4所示:
瀏覽器集成零信任插件,再結(jié)合零信任網(wǎng)關(guān),就可以構(gòu)建零信任體系.當(dāng)瀏覽器訪問業(yè)務(wù)時,會首先被零信任網(wǎng)關(guān)阻斷,然后去零信任策略控制中心查詢?yōu)g覽器的可信狀態(tài),收到狀態(tài)后,再根據(jù)身份等信息,最終將當(dāng)前的訪問控制策略返回給零信任網(wǎng)關(guān),然后零信任網(wǎng)關(guān)選擇是代理訪問還是阻斷的動作.
惡意程序會通過攻擊瀏覽器實現(xiàn)對業(yè)務(wù)系統(tǒng)的數(shù)據(jù)竊取和破壞行為,將殺毒引擎通過插件的方式集成到瀏覽器內(nèi)部,當(dāng)用戶上傳或下載文件時就可以實時檢測并識別瀏覽器的文件,阻止其中的惡意程序?qū)懭胛募到y(tǒng).
國密算法指的是我國自主研制的SM2,SM3,SM4算法.SM2是橢圓曲線公鑰密碼算法,由國家密碼管理局于2010年12月17日發(fā)布,是用來替換國際上的RSA算法的,與RSA算法相比具有處理速度快、復(fù)雜度高、計算機(jī)性能消耗小等特點.
圖5 傳輸層安全協(xié)議標(biāo)準(zhǔn)
SM3是我國采用的一種密碼散列函數(shù)標(biāo)準(zhǔn),由國家密碼管理局于2010年12月17日發(fā)布,其安全性及效率與國際密碼算法SHA-256相當(dāng).
SM4分組密碼標(biāo)準(zhǔn)由國家密碼管理局于2012年3月21日發(fā)布,相當(dāng)于國際上的DES和AES密碼算法[5].
當(dāng)密碼應(yīng)用于加密傳輸領(lǐng)域中時,我們需要了解傳輸層安全協(xié)議標(biāo)準(zhǔn),如圖5所示.
瀏覽器國密算法支持方案是在傳輸層安全性協(xié)議使用到對稱加密算法、非對稱加密算法和哈希算法的地方,如client_hello.cipher_sui,client_hello.extension分別調(diào)用替換掉原來的SHA256,RSA等國際算法,使用國密算法替代,整體算法使用機(jī)制如圖6所示.
而在瀏覽器國密算法支持方面,最重要的是國密單向、雙向身份認(rèn)證問題.單向認(rèn)證用于1對多提供服務(wù)的場景,實現(xiàn)單向認(rèn)證.雙向認(rèn)證要求服務(wù)器和客戶端雙方都有證書,這樣雙方具體的通信內(nèi)容就是加密過的數(shù)據(jù),如果數(shù)據(jù)被攻擊,第三方所獲得的只是加密數(shù)據(jù),想要了解具體信息就需要解密,因此雙向認(rèn)證的加密強(qiáng)度要高于單項認(rèn)證.
目前Web應(yīng)用都是采用單向認(rèn)證方式,適合大量的用戶,而HTTPS雙向認(rèn)證則更加適合企業(yè)應(yīng)用,在傳輸企業(yè)私密信息時,使用雙向認(rèn)證能保證數(shù)據(jù)更加安全,不容易被第三方攔截或者篡改,避免因為數(shù)據(jù)泄露而帶來嚴(yán)重?fù)p失.
有了單雙向認(rèn)證技術(shù)后,就可以識別并標(biāo)志出HTTPS網(wǎng)站的證書和通信協(xié)議的安全性;維護(hù)最新的受信任證書列表包括可信數(shù)字根證書等;支持國密算法和國密證書體系,自動判斷國密網(wǎng)站,提供從HTTP遷移到HTTPS的業(yè)務(wù)系統(tǒng)解決方案.
圖6 國密算法機(jī)制原理
本文系統(tǒng)地介紹了瀏覽器的發(fā)展背景、瀏覽器面臨的安全威脅以及在信創(chuàng)體系下如何構(gòu)建一個安全可信的瀏覽器架構(gòu),為學(xué)術(shù)界和工業(yè)界提供了一個有針對性的安全可信瀏覽器解決方案.