王國峰,雷 琦,唐 云,代明臣
(1.中電科第三十研究所;2.中國電子科學(xué)研究院;3.中電科網(wǎng)絡(luò)空間安全研究院有限公司,北京 100041;4.日照市軍隊離退休干部休養(yǎng)所,山東 日照 276800)
在云計算與大數(shù)據(jù)時代,大量服務(wù)器都部署在云端[1-3],需要操作人員遠程對服務(wù)器執(zhí)行運維操作,保障其正常運行。然而,操作人員可能會利用自身權(quán)限竊取隱私數(shù)據(jù),損害用戶數(shù)據(jù)的完整性、保密性與可用性[4-6]。在操作人員具備偷窺與泄露用戶隱私數(shù)據(jù)條件的情況下,如何保障服務(wù)器遠程運維管控的安全性變得尤為重要,這也是近年來工業(yè)界與學(xué)術(shù)界共同研究的熱點問題[7-13]。
本文研究訪問代理執(zhí)行的服務(wù)器運維管控技術(shù)方案,所有服務(wù)器操作行為均需經(jīng)過訪問代理審計與管控,符合權(quán)限認證后才能單點登錄到對應(yīng)服務(wù)器,從而做到統(tǒng)一管控,避免訪問認證上的混亂。操作人員經(jīng)過訪問代理認證后,對服務(wù)器的所有操作都會被審計與管控,并基于操作角色的分級機制對越權(quán)操作和危險操作進行阻斷與預(yù)警。實驗結(jié)果表明,該方案可有效管控和審計服務(wù)器遠程運維操作,具有很高的效率和安全性,且不需要安裝額外的客戶端軟件。
國內(nèi)外媒體報道過大量由內(nèi)部人員導(dǎo)致的數(shù)據(jù)泄露事件。美國聯(lián)邦調(diào)查局(FBI)和計算機安全協(xié)會(CSI)在2008 年發(fā)布的《計算機犯罪和安全調(diào)查報告》中指出,由內(nèi)部安全事件帶來的損失高于外部安全事件[14]。許多大型網(wǎng)站,如CSDN、LinkedIn 等出現(xiàn)過用戶數(shù)據(jù)泄漏事件[15]。對比傳統(tǒng)模式下內(nèi)部威脅的防御技術(shù)[16-18],云計算和大數(shù)據(jù)模式的引入帶來很多新的安全問題與挑戰(zhàn)[19-20],需要給出切實有效的解決方案。在針對內(nèi)部人員遠程管控運維服務(wù)器方面,Dusi 等[21]嘗試使用機器學(xué)習(xí)的方式分析與監(jiān)控遠程服務(wù)器運行了何種類型的服務(wù)和應(yīng)用;Emmert 等[22]監(jiān)視在遠程服務(wù)器中使用的微軟辦公軟件,如Word、Ex?cel、PowerPoint。國內(nèi)主要使用操作回放技術(shù)審計服務(wù)器遠程運維操作,即用戶在遠程服務(wù)器上執(zhí)行的任何操作都會像屏幕錄制一樣被記錄下來,以供事后分析。Huang等[23]針對遠程服務(wù)器運維管控,設(shè)計了基于訪問代理的安全審計系統(tǒng),能對主流桌面協(xié)議進行審計,如VNC、RDP、X-Window;Tan 等[24]設(shè)計實現(xiàn)了基于訪問代理的單點登錄與安全審計系統(tǒng),以應(yīng)對服務(wù)器遠程運維安全問題。上述研究主要集中在桌面服務(wù)器系統(tǒng)遠程操作的審計機制方面,沒有探討怎樣對運維操作進行實時攔截,即如何對越權(quán)和危險操作進行阻斷與預(yù)警。
在操作人員權(quán)限管控方面,SSC 自服務(wù)體系架構(gòu)[25]通過設(shè)計用戶管理域和系統(tǒng)管理域保護用戶隱私數(shù)據(jù),以避免被內(nèi)部人員竊取。然而,該方法依賴特定的物理芯片,且需要修改服務(wù)器配置,不具有很好的通用性。本文以Linux 服務(wù)器為例,研究如何基于訪問代理對服務(wù)器的遠程運維操作進行實時持續(xù)地審計,并對越權(quán)和危險操作進行有效阻斷與預(yù)警。
本文擬實現(xiàn)一個非侵入式訪問代理,其支持B/S 方式訪問。訪問該代理的客戶端僅需要一個支持HTML5 的瀏覽器,無需安裝其他軟件。被訪問的服務(wù)器也不需要安裝額外程序,僅需要安裝遠程連接必須的SSH 服務(wù)端程序(大多數(shù)Linux 操作系統(tǒng)已默認安裝該程序),就可以通過訪問代理連接該服務(wù)器。該訪問代理的系統(tǒng)架構(gòu)如圖1 所示,由連接模塊、傳輸轉(zhuǎn)化模塊、顯示模塊與審計模塊構(gòu)成。其中,顯示模塊通過瀏覽器將服務(wù)器桌面呈現(xiàn)給用戶,傳輸轉(zhuǎn)化模塊與顯示模塊之間使用HTTP 協(xié)議進行通信,連接模塊與傳輸轉(zhuǎn)化模塊之間使用TCP 協(xié)議進行通信,服務(wù)器與連接模塊之間通過SSH 協(xié)議進行通信,審計模塊與傳輸轉(zhuǎn)化模塊之間主要通過共享存儲的方式進行通信。
(1)連接模塊是訪問代理網(wǎng)關(guān)的重要組成部分,以守護進程的方式一直運行,監(jiān)聽來自傳輸轉(zhuǎn)化模塊的TCP Socket 連接,主要負責(zé)以下功能:①該模塊實現(xiàn)了SSH 客戶端的功能,其接收來自傳輸轉(zhuǎn)化模塊的連接命令后,會根據(jù)連接命令中指定的地址向SSH 服務(wù)器發(fā)起SSH 連接,負責(zé)與SSH 服務(wù)器進行通信;②該模塊需要將SSH 服務(wù)器的輸出通過TCP Socket 發(fā)送給傳輸轉(zhuǎn)化模塊,并接收來自該模塊的指令,將其轉(zhuǎn)化為SSH 輸入事件,發(fā)送給SSH 服務(wù)器。
(2)傳輸轉(zhuǎn)化模塊是連接模塊與顯示模塊的中間樞紐,是訪問代理網(wǎng)關(guān)的核心部分,主要負責(zé)以下功能:①該模塊負責(zé)與連接模塊進行TCPSocket 通信,接收連接模塊從服務(wù)器傳回的SSH 輸出,經(jīng)過協(xié)議轉(zhuǎn)換成顯示模塊可以處理的指令,即傳輸轉(zhuǎn)化模塊收到SSH 服務(wù)器的輸出后,需要將其轉(zhuǎn)化為與顯示模塊約定的協(xié)議指令,然后通過HTTP 的方式發(fā)送給顯示模塊。同時,該模塊需要將顯示模塊傳來的用戶輸入的指令,如鍵盤鼠標(biāo)指令,轉(zhuǎn)化為SSH輸入指令發(fā)送給連接模塊;②該模塊需要對來自連接模塊的SSH 輸出與來自顯示模塊的用戶指令進行持久化存儲,供審計模塊使用。
(3)顯示模塊通過瀏覽器與用戶進行實時交互,主要負責(zé)以下功能:①該模塊對傳輸轉(zhuǎn)化模塊發(fā)來的協(xié)議指令進行解析,并在用戶瀏覽器上執(zhí)行,通過瀏覽器渲染,將遠程服務(wù)器桌面圖像實時顯示給用戶;②該模塊對用戶的鍵盤/鼠標(biāo)事件進行監(jiān)聽,一旦觸發(fā)鍵盤或鼠標(biāo)事件,就會將事件信息發(fā)送給傳輸轉(zhuǎn)化模塊進行處理。
(4)審計模塊主要對傳輸轉(zhuǎn)化模塊保存的協(xié)議指令數(shù)據(jù)進行處理與分析,同時基于服務(wù)器使用人員操作的分級機制對危險和越權(quán)操作進行預(yù)警與阻斷。
Fig.1 System architecture of access agent圖1 訪問代理系統(tǒng)架構(gòu)
用戶運維服務(wù)器時會事先在權(quán)限數(shù)據(jù)庫存儲與用戶對應(yīng)的合法命令集,當(dāng)用戶經(jīng)過訪問代理審核登錄服務(wù)器后,訪問代理會記錄用戶登錄了該服務(wù)器,并可以為審計模塊使用。傳輸轉(zhuǎn)化模塊在接收到用戶的可顯示鍵盤事件時,會將鍵盤事件所對應(yīng)的字母值存儲到與審計模塊共享的緩存中。當(dāng)傳輸轉(zhuǎn)化模塊接收到顯示模塊發(fā)往服務(wù)器的“Enter”特殊鍵盤事件時,會調(diào)用審計模塊對將要執(zhí)行的命令進行權(quán)限判斷。審計模塊讀取傳輸轉(zhuǎn)化模塊存儲到緩存中的用戶命令,并與權(quán)限數(shù)據(jù)庫進行比對,若符合該用戶命令集規(guī)則則放行,不符合則阻斷。
審計模塊實時記錄操作人員對服務(wù)器的使用行為,并基于權(quán)限分級機制對危險與越權(quán)操作進行審計和管控。該模塊會阻斷此類行為并產(chǎn)生告警事件,具體流程如下:
(1)根據(jù)操作人員等級不同,訪問代理會預(yù)先為其設(shè)定權(quán)限,即操作人員可執(zhí)行的正常操作、敏感操作和危險操作,分為正常、告警、禁止3 個級別,操作人員的權(quán)限劃分與對應(yīng)命令集保存在數(shù)據(jù)庫中。
(2)操作人員發(fā)出命令時,訪問代理的審計模塊解析操作命令,并識別數(shù)據(jù)庫中的會話標(biāo)志值,從而得知操作人員信息。審計模塊根據(jù)操作命令查詢數(shù)據(jù)庫,找到對應(yīng)的操作危險等級并進行相應(yīng)處理,然后將完整的行為記錄在操作人員日志數(shù)據(jù)庫中。
上述審計與管控方案僅對用戶手敲輸入的命令有效,若用戶將命令嵌入到可執(zhí)行腳本中,以上方案就會失去效果。針對特權(quán)用戶執(zhí)行腳本審計與管控,設(shè)計以下方案:
(1)在服務(wù)器開機自啟動目錄下放置可執(zhí)行腳本,每個用戶登入服務(wù)器時都會訪問此腳本。
(2)編輯可執(zhí)行腳本,使用戶使用受限模式,不加載系統(tǒng)默認的profile 文件,而是加載自定義的profile 文件。
(3)編輯自定義的profile 文件,內(nèi)容為“PATH=${HOME}/bin;export PATH”。
(4)加入想讓該用戶使用的命令,如ifconfig,內(nèi)容為“mkdir$HOME/bin;ln-s/sbin/ifconfig $HOME/bin/”,其中“/sbin/ifconfig”為系統(tǒng)實際可執(zhí)行的ifconfig 命令。
使用以上方案,當(dāng)用戶登陸該服務(wù)器時,除了被允許的可執(zhí)行命令可用外,不能使用其他命令。此外,為防止特權(quán)用戶修改可執(zhí)行文件,可在系統(tǒng)啟動中使用文件屬性設(shè)置命令對可執(zhí)行腳本加鎖,防止文件被修改或刪除。移動并重命名文件屬性設(shè)置命令,以隱藏該命令,使特權(quán)用戶登錄后無法使用該命令再次修改文件屬性。
在保證訪問代理正常運行的前提下,對其進行壓力性能測試,測試指標(biāo)包括用戶通過代理遠程運維服務(wù)器資源的最大并發(fā)數(shù)等。用戶通過代理登錄服務(wù)器(如Linux、Windows 虛擬機),訪問代理可支持的最大用戶并發(fā)數(shù),具體可通過代理所在主機的內(nèi)存使用率、CPU 使用率、響應(yīng)時間與吞吐量等性能參數(shù)判斷得出。
代理和測試服務(wù)器被部署在同一可連通網(wǎng)絡(luò)內(nèi),使用性能測試工具JMeter[26]模擬用戶訪問服務(wù)器資源。在代理可正常運行的前提下,通過逐步增加資源的并發(fā)訪問數(shù),并記錄訪問代理所在主機性能參數(shù)(CPU、內(nèi)存占用率等)的變化情況對資源訪問最大并發(fā)數(shù)進行測試。
仿真實驗中代理所處的虛擬機配置為CPU 2.5GHz 雙核,內(nèi)存4G。測試結(jié)果表明,隨著用戶遠程訪問服務(wù)器資源并發(fā)數(shù)的增加,代理所在主機的內(nèi)存消耗和CPU 利用率不斷提升,網(wǎng)絡(luò)吞吐率明顯下降,系統(tǒng)響應(yīng)時間也隨之增加。在訪問代理處接受一個對Linux 服務(wù)器字符型協(xié)議的連接訪問平均消耗約10MB 內(nèi)存,代理可支持Linux 協(xié)議遠程連接的最大并發(fā)數(shù)約為235。
在針對一般運維命令審計與管控的有效性實驗中,分別選取敏感指令和非敏感指令,測試訪問代理能否阻斷敏感指令,放行非敏感指令。以ifconfig 命令為例,實驗結(jié)果如圖2、圖3 所示。當(dāng)將ifconfig 設(shè)置為敏感指令時,訪問代理自動阻斷,在用戶界面顯示阻斷信息,并將用戶信息和命令記錄到審計日志中;當(dāng)將ifconfig 設(shè)置為非敏感指令時,訪問代理則放行命令,同時將用戶信息和操作命令記錄到日志中。
Fig.3 Execution result of non-sensitive instruction圖3 非敏感指令執(zhí)行結(jié)果
在針對特權(quán)用戶腳本命令審計與管控的有效性實驗中,分別選取含有敏感指令和非敏感指令的shell 腳本,測試訪問代理能否阻斷敏感指令,并放行非敏感指令。實驗結(jié)果如圖4、圖5 所示,當(dāng)服務(wù)器設(shè)置ifconfig 為敏感指令時,訪問代理雖然執(zhí)行含有敏感指令的腳本,但后臺云服務(wù)器會阻斷敏感指令的執(zhí)行;當(dāng)服務(wù)器設(shè)置ifconfig 為非敏感指令時,訪問代理則放行命令,同時云服務(wù)器也執(zhí)行非敏感指令。
Fig.4 Execute scripts containing sensitive commands圖4 執(zhí)行含有敏感指令的腳本
針對云服務(wù)器遠程運維管控問題,本文提出一種訪問代理執(zhí)行的服務(wù)器遠程運維管控技術(shù)方案,并設(shè)計了原型系統(tǒng),對其性能和有效性進行了測試。實驗結(jié)果表明,該方案通過訪問代理對所有服務(wù)器遠程運維操作進行審計與管控,且不改變用戶的使用習(xí)慣和服務(wù)器配置。但是,該方案對角色權(quán)限的細粒度分級管控機制沒有作詳細闡述,還需進一步研究。
Fig.5 Execute scripts containing non-sensitive commands圖5 執(zhí)行含有非敏感指令的腳本