張曉兵 王 妍 呂遒健 田 亮 孟繁盛
1(奇安信科技集團股份有限公司 北京 100012)
2(中國科學院信息工程研究所 北京 100093)
(zhangxiaobing@qianxin.com)
隨著瀏覽器技術的快速發展,幾乎所有辦公類應用都采用基于瀏覽器訪問的B/S架構,據統計,辦公人員瀏覽器的使用時長已經占全天時長的70%以上.
另一方面,信創體系平臺多樣、系統豐富、場景重要,作為互聯網和企業業務的統一入口,瀏覽器的業務兼容性和自身安全性顯得尤為重要.而未來信創體系將面臨著更多層面的網絡攻擊與安全問題,因此開發一款安全可信的瀏覽器就成為一個必然.但是現有的瀏覽器開源框架只考慮了自身代碼的安全性,并沒有兼顧實際的業務場景,因此具有很大的局限性[1].
本文將試圖從瀏覽器面臨的風險出發,推演出瀏覽器應有的安全架構,并探討基于Chrome瀏覽器開源框架開發一款安全可信的信創瀏覽器的可行性,助力信創生態健康發展.
信創體系下的瀏覽器與WIN-TEL體系下的威脅類似,但是又有其獨特性,總體來說會面臨如下安全威脅:
1) 異構硬件平臺會導致代碼離散,會引入更多安全漏洞.
隨著Web技術的發展,瀏覽器的復雜性已經接近操作系統,如果針對不同硬件平臺、操作系統環境開發不同的適配版本會帶來代碼離散,引入更多代碼級的漏洞,形成天然的不安全狀態.
2) 面臨身份仿冒風險.
由于瀏覽器是企業業務的承載平臺與重要入口,所有訪問都將以終端設備與瀏覽器為起點,因此一旦出現身份仿冒問題,就會影響業務本身的安全性.
3) 面臨網頁攻擊與數據泄露風險.
從攻防角度看,出于竊取業務機密、盜取業務數據、攻擊和控制操作系統等目的,黑客往往把瀏覽器作為突破口,使用網頁掛馬、釣魚欺詐等手段攻擊系統,并造成數據泄露.
4) 國密系統兼容性帶來傳輸安全問題.
越來越多的國家與企業重要業務系統采用國密算法來保護,而通用的瀏覽器使用國外的密碼算法,不兼容國產密碼算法,不支持我國網絡信任體系,不符合我國關于密碼的相關標準規范,不能對我國的金融、政務等基礎性應用提供必要的安全支撐[1].從而導致數據無法安全傳輸,帶來安全隱患.
5) 瀏覽器面臨著更高維度的攻擊問題.
在辦公網絡環境下,除了業務系統的正常瀏覽,大量的文檔處理、審批流程工作也都通過瀏覽器方式完成,這樣就帶來一些文件級和身份級的更高維度的攻擊問題.
Chrome瀏覽器為了解決之前架構帶來的一系列問題,2016年使用面向服務的架構(services oriented architecture, SOA)的思想設計了新的架構[2],如圖1所示:

圖1 Chrome瀏覽器架構

圖2 瀏覽器安全可信架構
原來的各種模塊會被重構成獨立的服務(service),訪問服務必須使用定義好的接口,通過IPC進行通信,每個服務都可以在獨立的進程中運行,并且可以輕松拆分為不同的進程或聚合為一個進程.
從圖1可以看出,Chrome瀏覽器本身并沒有更多安全性方面的考慮,因此需要基于信創體系的實際情況,設計一個瀏覽器的安全可信架構,如圖2所示.
在整個瀏覽器的安全可信架構下,共分為跨平臺層、可信身份層、數據安全層、安全集成層與安全傳輸層.
跨平臺層:利用交叉編譯技術,用一套代碼覆蓋信創所有平臺,解決異構環境下代碼離散問題.
可信身份層:利用可信計算技術,保證設備與瀏覽器自身的可信.
數據安全層:利用瀏覽器沙箱技術,進行進程和數據隔離,阻止網頁掛馬攻擊的影響,并保證數據本身的安全、采用數據隱寫技術對數據進行標記和追蹤.
安全集成層:利用插件技術、終端安全、零信任等外部安全機制,形成協同安全效應,保證環境安全和訪問安全.
安全傳輸層:采用國密算法加密機制,實現國密的單雙向認證和國密網站的動態探測,讓傳輸更安全.
交叉編譯是在當前編譯平臺下,編譯出來的程序能運行在體系結構不同的另一種目標平臺上,但編譯平臺本身卻不能運行該程序.
交叉編譯是指通過不同平臺的編譯技術,將一套源代碼同時轉換成不同硬件平臺都能正常運行的目標程序.
瀏覽器通過運用交叉編譯技術,可以實現采用一套代碼多種編譯的方式解決平臺差異帶來的多版本維護問題和安全問題.
經過交叉編譯后,就可以實現一套代碼同時支持X86,MIPS,ARM等不同CPU架構的信創平臺,保證了代碼唯一性,增加了安全性.
可信主要通過度量和驗證的技術手段實現.度量分為靜態度量和動態度量2種.靜態度量通常指在運行環境初裝或重啟時的度量.度量是逐級的,通常先啟動的軟件對后一級啟動的軟件進行度量,度量值驗證成功則標志著可信鏈從前一級軟件向后一級的成功傳遞.
以操作系統啟動為例,可信操作系統啟動時基于硬件的可信啟動鏈,對啟動鏈上的UEFI,loader,OS的image進行靜態度量,以判斷系統是否被改動.
動態度量和驗證是指在系統運行時動態獲取其運行特征,根據規則或模型分析判斷系統是否運行正常.
可信計算一般會涉及3個部分:可信根、可信鏈和可信加密技術.
可信根:在可信計算組的定義中,一般會將其分為可信度量根和可信報告根,可信度量根將用于對整個項目的完整性進行判斷或者測量.大部分情況下,可信根由軟件、可信報告模塊、內置寄存存儲器和密鑰構成.
可信根通常是可信硬件芯片.可信計算通過芯片廠家植入在可信硬件中的算法和密鑰,以及集成的專用微控制器對軟件棧進行度量和驗證來確保可信.根據安全芯片和其上運行的可信軟件基(trusted software stack)分類,業界目前主流的可信計算標準主要有3種:TPM(trusted platform module),TCM(trusted cryptography module),TPCM(trusted platform control module)[3].
可信鏈:是信任度量模型的實施技術方案,通過可信鏈把信任關系從信任根擴展到整個計算機系統.在實際使用中,可信根在構建可信鏈時,會將信息傳遞給存儲單元,同時報告根將證明整個過程,并將可信狀態信息返回給整個可信平臺,其中包括平臺配置信息、審計日志、密鑰等.
可信加密技術:最重要的是設置簽注密鑰,通常情況下,會利用非對稱加密的特性在指定的位數下,設置對應的公私鑰,從而隨機產生類似于“門鎖”的裝置,除非擁有“鑰匙”,否則無法對其進行解密.
可信計算模塊生成可信私鑰后,要立即將它放入可信存儲區以免產生泄露風險.再存在TPM安全芯片的設備上,首選使用安全芯片來存儲私鑰,TPM可直接在內部生成密鑰并保存.
申請TPM芯片生成自定義TPM用戶和關聯的用戶密鑰,并使用用戶口令保護,可以保護密鑰不被惡意導出和拷貝,并防止本機其他程序非法使用.
如果設備上不存在安全芯片時,只能使用軟件級的密鑰保護,使用自定義的白盒加密模塊來實現可信存儲.私鑰落地前先用白盒加密模塊進行密鑰白盒化,這里的白盒化使用硬盤序列號作為額外白盒化因子,加密庫可以用ECDSA實現私鑰數字簽名算法.
由于本地存儲的私鑰是經過白盒化處理的,即使將私鑰文件拷走也無法解出明文的私鑰,即使本機上用可信私鑰進行數字簽名,私鑰明文也不會在內存中出現,從而防止惡意盜用.
攻擊者將白盒化私鑰和白盒加密庫一起拷貝到其他機器上,在不知道私鑰的情況下透明調用加密庫實現加密的場景,由于私鑰白盒化時是用硬盤序列號作為額外因子的,如果這里的硬盤序列號不匹配,則運算結果一定不合法,后續服務端使用公鑰驗證數字簽名的過程則會失敗.
通過上述軟、硬件結合的方式實現一個可信的度量空間,從而可以完成設備可信和瀏覽器自身可信的度量.當然除了可信度量外,瀏覽器的進程還需要采用進程守護的方式實現自保護,即無法通過第三方的方式來隨意關閉瀏覽器的進程或修改瀏覽器的主程序文件.
沙箱技術設計的目的是為了讓不可信代碼運行在一定的環境中,保證每一條代碼可以做或不能做什么而不受輸入條件的影響.
瀏覽器沙箱利用操作系統提供的安全性來管控無法對計算機進行持久更改或訪問機密信息的代碼執行.沙箱進程邏輯架構如圖3所示.

圖3 沙箱進程邏輯架構
沙箱邏輯結構中包含代理進程(broker process)和目標進程(target process).
在瀏覽器多進程架構中,代理進程就是瀏覽器主進程,代理進程的職責是:
1) 為每個目標進程指定策略;
2) 生成目標進程;
3) 承載沙箱策略引擎服務;
4) 主機沙箱攔截管理器;
5) 主機沙箱IPC服務到目標進程;
6) 代表目標進程執行策略允許的操作.
代理進程永遠比它所產生的所有目標過程運行更長時間.沙箱進程間通信代理是一種低級機制,用于透明地將某些系統API調用從目標進程到代理進程.

圖4 瀏覽器零信任體系
攔截管理器的工作是修補系統API調用,在瀏覽器多進程架構中,渲染進程始終是目標進程[4].
有了沙箱機制之后,就可以將不同的網頁放在沙箱里進行進程隔離,當一個頁面發生問題后,也不會影響另外一個頁面的正常訪問.當網頁上出現掛馬時,也能夠只在沙箱中運行,從而不會影響其他頁面的訪問.另外還可以將IE內核包裹在沙箱里實現多核訪問,從而能夠兼容早期的一些使用ACTIVEX控件的業務應用.
同時可以對整個沙箱的行為進行監控,能夠防止業務系統產生數據泄露.
另外,信息隱寫是一種基于內容的、非密碼機制的計算機信息隱藏技術,它將一些標志信息嵌入到數字載體當中,包括多媒體、文檔、軟件等,不影響原載體的使用價值,也不容易被探知和再次被修改,但可以被生產方標識和辨認,通過隱藏在載體中的信息,可以達到確認內容創建者、購買者、察看者的信息,判斷載體是否被篡改、盜用,是保護信息安全、實現防偽溯源、版權保護的有效方法.
沙箱技術與隱寫技術的配合,就能實現瀏覽器深層次的數據安全需求.
插件技術是一種常見的模塊級集成技術,它可以將有獨立功能的模塊從軟件產品中獨立出來,通過內部封閉機制,同另外一個軟件產品進行無縫集成,能夠快速增強軟件產品的能力.
通過插件技術可以輕松建立基于零信任的安全體系,如圖4所示:
瀏覽器集成零信任插件,再結合零信任網關,就可以構建零信任體系.當瀏覽器訪問業務時,會首先被零信任網關阻斷,然后去零信任策略控制中心查詢瀏覽器的可信狀態,收到狀態后,再根據身份等信息,最終將當前的訪問控制策略返回給零信任網關,然后零信任網關選擇是代理訪問還是阻斷的動作.
惡意程序會通過攻擊瀏覽器實現對業務系統的數據竊取和破壞行為,將殺毒引擎通過插件的方式集成到瀏覽器內部,當用戶上傳或下載文件時就可以實時檢測并識別瀏覽器的文件,阻止其中的惡意程序寫入文件系統.
國密算法指的是我國自主研制的SM2,SM3,SM4算法.SM2是橢圓曲線公鑰密碼算法,由國家密碼管理局于2010年12月17日發布,是用來替換國際上的RSA算法的,與RSA算法相比具有處理速度快、復雜度高、計算機性能消耗小等特點.

圖5 傳輸層安全協議標準
SM3是我國采用的一種密碼散列函數標準,由國家密碼管理局于2010年12月17日發布,其安全性及效率與國際密碼算法SHA-256相當.
SM4分組密碼標準由國家密碼管理局于2012年3月21日發布,相當于國際上的DES和AES密碼算法[5].
當密碼應用于加密傳輸領域中時,我們需要了解傳輸層安全協議標準,如圖5所示.
瀏覽器國密算法支持方案是在傳輸層安全性協議使用到對稱加密算法、非對稱加密算法和哈希算法的地方,如client_hello.cipher_sui,client_hello.extension分別調用替換掉原來的SHA256,RSA等國際算法,使用國密算法替代,整體算法使用機制如圖6所示.
而在瀏覽器國密算法支持方面,最重要的是國密單向、雙向身份認證問題.單向認證用于1對多提供服務的場景,實現單向認證.雙向認證要求服務器和客戶端雙方都有證書,這樣雙方具體的通信內容就是加密過的數據,如果數據被攻擊,第三方所獲得的只是加密數據,想要了解具體信息就需要解密,因此雙向認證的加密強度要高于單項認證.
目前Web應用都是采用單向認證方式,適合大量的用戶,而HTTPS雙向認證則更加適合企業應用,在傳輸企業私密信息時,使用雙向認證能保證數據更加安全,不容易被第三方攔截或者篡改,避免因為數據泄露而帶來嚴重損失.
有了單雙向認證技術后,就可以識別并標志出HTTPS網站的證書和通信協議的安全性;維護最新的受信任證書列表包括可信數字根證書等;支持國密算法和國密證書體系,自動判斷國密網站,提供從HTTP遷移到HTTPS的業務系統解決方案.

圖6 國密算法機制原理
本文系統地介紹了瀏覽器的發展背景、瀏覽器面臨的安全威脅以及在信創體系下如何構建一個安全可信的瀏覽器架構,為學術界和工業界提供了一個有針對性的安全可信瀏覽器解決方案.