◆文勇軍 黃 浩 樊志良 唐立軍
(長沙理工大學(xué) 物理與電子科學(xué)學(xué)院 湖南 410014)
分布式日志系統(tǒng)REST安全接口設(shè)計(jì)
◆文勇軍 黃 浩 樊志良 唐立軍
(長沙理工大學(xué) 物理與電子科學(xué)學(xué)院 湖南 410014)
針對分布式日志系統(tǒng)中REST接口易于破解問題,本文對客戶端做身份認(rèn)證、防止數(shù)據(jù)篡改與重放攻擊、對請求資源的鑒權(quán)三個(gè)方面進(jìn)行設(shè)計(jì),并結(jié)合EEID生成應(yīng)用標(biāo)識碼技術(shù),研究并實(shí)現(xiàn)了一種教育電子身份號的REST的安全接口認(rèn)證方法。通過測試,該方法能防止日志服務(wù)傳輸過程中的數(shù)據(jù)篡改、重放攻擊,提供了一定的鑒權(quán)和加密手段來驗(yàn)證客戶端請求的合法性。
分布式日志系統(tǒng);REST;EEID
在復(fù)雜的多系統(tǒng)應(yīng)用中,日志系統(tǒng)的建立對于日志的分析、查詢有重要作用,多應(yīng)用系統(tǒng)組成平臺中,一般采用分布式日志系統(tǒng)用于日志的存儲、分析與查詢[1]。采用易于識別和理解的REST日志服務(wù)接口是分布式日志系統(tǒng)建立的關(guān)鍵[2],基于REST的日志服務(wù)能提供統(tǒng)一接口和資源定位,簡化日志服務(wù)接口的設(shè)計(jì)和實(shí)現(xiàn),降低日志服務(wù)接口的復(fù)雜性[3]。但是REST本身缺少安全特性,存在著接口易被破解的危險(xiǎn),如果破壞者通過日志服務(wù)資源地址進(jìn)行猜解,獲取了操作某一日志資源的接口并對該日志服務(wù)接口進(jìn)行攻擊,那么很容易造成日志系統(tǒng)數(shù)據(jù)的破壞[4]。本文針對REST中易于破解的危險(xiǎn)性問題,根據(jù)復(fù)雜的多系統(tǒng)應(yīng)用平臺在分布式日志系統(tǒng)中需求,探索日志服務(wù)的安全接口方法,設(shè)計(jì)一種基于REST接口安全認(rèn)證方法。
一個(gè)安全的REST日志服務(wù)接口是需要對請求賬戶的認(rèn)證與授權(quán)的鑒定,同時(shí)避免日志服務(wù)接口被大規(guī)模非法調(diào)用,出現(xiàn)系統(tǒng)資源的消耗,影響系統(tǒng)的正常訪問,甚至導(dǎo)致系統(tǒng)癱瘓、數(shù)據(jù)泄露、偽造(篡改)數(shù)據(jù)、制造垃圾數(shù)據(jù)等嚴(yán)重后果。
1.1 安全接口模型
客戶端為第三方應(yīng)用系統(tǒng),請求對分布式日志系統(tǒng)增刪查服務(wù)。服務(wù)端為安全接口認(rèn)證服務(wù)端,第三方應(yīng)用系統(tǒng)在調(diào)用分布式日志REST服務(wù)接口之前,需要根據(jù)簽名機(jī)制為其HTTP請求計(jì)算一個(gè)簽名(sign),并使用簽名機(jī)制后的URL請求分布式日志REST服務(wù)接口。REST日志接口服務(wù)器在接收到請求時(shí)會獲取請求賬戶、請求時(shí)間戳、請求的URI,然后根據(jù)請求賬戶去數(shù)據(jù)庫查找對應(yīng)的密鑰,然后REST日志接口服務(wù)端根據(jù)簽名機(jī)制為請求的參數(shù)重新計(jì)算簽名,并判斷其簽名值是否與第三方應(yīng)用傳遞過來的簽名值參數(shù)值一致,以此判定客戶端HTTP請求是否被第三者偽造或篡改。安全接口模型如圖1所示。
圖1 安全接口模型圖
1.2 安全接口認(rèn)證方法
安全接口認(rèn)證方法是服務(wù)端對客戶端做認(rèn)證授權(quán),包含請求簽名值的生成、防止接口重放攻擊、認(rèn)證方法三個(gè)部分。
1.2.1 請求簽名值的生成
教育電子身份號(Education Electronic Identity,EEID)已廣泛應(yīng)用于網(wǎng)絡(luò)實(shí)名制管理[5]。采用教育電子身份證號作為第三方應(yīng)用標(biāo)識(請求賬戶),但是僅僅依靠教育電子身份證號(EEID)作為第三方應(yīng)用標(biāo)識做身份認(rèn)證的憑證還是存在一定的安全隱患,所以采用MD5(信息-摘要算法5)算法根據(jù)EEID生成一個(gè)安全密鑰(secret Key)。將EEID與安全密鑰作為服務(wù)端對客戶端做身份認(rèn)證。
分布式日志系統(tǒng)提供日志服務(wù)的過程中,身份憑證是連接客戶端與服務(wù)端之間的紐帶,客戶端通過攜帶身份憑證、時(shí)間戳、簽名值訪問分布式日志系統(tǒng)資源,為防止身份憑證篡改而防范攻擊,憑證傳遞、時(shí)間戳、簽名值傳遞的安全性至關(guān)重要。所以為了身份憑證傳遞的安全性,為每一次請求計(jì)算一個(gè)簽名值,簽名值作為傳遞過程中是否數(shù)據(jù)的篡改的校驗(yàn)。
請求簽名值的生成方法為:將請求賬戶(app key)、請求賬戶相對應(yīng)的密鑰、請求的時(shí)間戳(timestrap)、請求的UR(Irest_uri)采用一定的規(guī)則組成一個(gè)字符串,對該字符串采用HMAC-SHA1加密算法得到一個(gè) hash值的二進(jìn)制數(shù)組,然后將該二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為十六進(jìn)制的字符串,該字符串為此次請求的簽名值。
1.2.2 防止接口重放攻擊
重放攻擊也成為新鮮性攻擊,即攻擊者通過重放消息或消息片段達(dá)到對主體進(jìn)行欺騙的攻擊行為,在一個(gè)開放的空間中,攻擊者利用竊聽到消息進(jìn)行重放,從而到達(dá)破壞消耗系統(tǒng)資源的目的[6-7]。
基于REST日志接口服務(wù)端校驗(yàn)時(shí)間戳用來防止重放攻擊,首先服務(wù)端獲取客戶端傳遞過來的時(shí)間戳和生成服務(wù)端的時(shí)間戳,比較客戶端傳入的時(shí)間戳與服務(wù)端生成的時(shí)間戳是否在指定超時(shí)范圍內(nèi),通過校驗(yàn)后再校驗(yàn)客戶端簽名值在服務(wù)端是否使用,保證簽名值在服務(wù)端只能使用一次。只有通過以上校驗(yàn)過程,日志資源提供服務(wù)器才會響應(yīng)請求資源。
1.2.3 認(rèn)證方法
安全接口認(rèn)證方法是服務(wù)器校驗(yàn)客戶端是否正常請求的過程??蛻舳嗽谡{(diào)用分布式日志REST服務(wù)接口時(shí)攜帶簽名值,基于REST日志接口服務(wù)端校驗(yàn)時(shí),獲取請求參數(shù)和數(shù)據(jù)庫中請求賬戶對應(yīng)的密鑰,重新計(jì)算簽名,并判定服務(wù)端計(jì)算的簽名值與客戶端傳遞過來的簽名值參數(shù)值是否一致,以此對傳輸過來的身份憑證是否有效性進(jìn)行驗(yàn)證。
分布式日志系統(tǒng)REST安全接口認(rèn)證方法實(shí)現(xiàn)分為客戶端與服務(wù)端的實(shí)現(xiàn)??蛻舳藶榉植际饺罩鞠到y(tǒng)接口調(diào)用方,即日志的生產(chǎn)者方。服務(wù)端為分布式日志系統(tǒng)接口提供方,即日志的儲存和分析平臺方。
2.1 請求賬戶申請
在客戶端與服務(wù)端實(shí)現(xiàn)前,需要進(jìn)行請求賬戶申請。請求賬戶申請首先在賬戶管理平臺上申請請求賬戶,管理員對請求賬戶申請進(jìn)行審核與資源授權(quán),賬戶管理平臺自動根據(jù)EEID生成應(yīng)用標(biāo)識碼作為請求賬戶和安全密鑰。請求賬戶申請流程圖如圖2所示。
圖2 請求賬戶申請流程圖
請求賬戶是根據(jù)教育電子身份證號(EEID)生成第三方應(yīng)用標(biāo)識碼作為請求賬戶,而EEID生成第三方應(yīng)用標(biāo)識碼可以保證請求賬戶的唯一性。
密鑰生成采用MD5(信息-摘要算法5)生成做為密鑰的基礎(chǔ)算法,從申請賬戶計(jì)算MD5值做為密鑰較容易,同時(shí)任意長度申請賬戶計(jì)算出密鑰的值長度是固定的,同時(shí)申請賬戶的數(shù)據(jù)任意改動,得到密鑰的值有很大區(qū)別,有很大的抗修改性。簡單的MD5生成做為密鑰是不安全的,在MD5散列的過程中,加入足夠長的salt(即干擾字符串)生成MD5,而加干擾字符串后的MD5生成出密鑰是無法看到MD5具體的處理過程,即實(shí)現(xiàn)了申請賬戶對應(yīng)唯一的密鑰,同時(shí)根據(jù)申請賬戶是不能偽造出密鑰的。
2.2 客戶端實(shí)現(xiàn)
客戶端根據(jù)簽名機(jī)制算法計(jì)算簽名值,并使用簽名機(jī)制后的URL請求資源。初始時(shí),在請求賬戶管理平臺上得到請求賬戶和請求賬戶相對應(yīng)的密鑰;然后將請求賬戶、請求賬戶相對應(yīng)的密鑰、請求的時(shí)間戳、請求的URI通過簽名機(jī)制算法得到簽名機(jī)制后的URL;最后通過HTTP方法請求簽名機(jī)制后的URL??蛻舳藢?shí)現(xiàn)流程圖如圖3所示。
圖3 客戶端實(shí)現(xiàn)流程圖
2.3 服務(wù)端實(shí)現(xiàn)
基于分布式日志系統(tǒng)中REST的安全接口設(shè)計(jì)中服務(wù)端考慮所有的客戶端HTTP請求,都需要經(jīng)過身份認(rèn)證后才能進(jìn)入后端業(yè)務(wù)邏輯,固采用MVC攔截器注入的方式,這樣業(yè)務(wù)邏輯和身份認(rèn)證邏輯可以解耦。在攔截器中preHandle預(yù)處理回調(diào)方法中,實(shí)現(xiàn)服務(wù)端身份認(rèn)證邏輯。
服務(wù)端身份認(rèn)證得到客戶端HTTP的請求中獲取請求賬戶、時(shí)間戳、簽名值和請求的URI,進(jìn)行傳入?yún)?shù)的校驗(yàn)、時(shí)間戳的檢驗(yàn)、重放攻擊的防止、請求賬戶狀態(tài)的校驗(yàn)、簽名的校驗(yàn)、請求資源的鑒權(quán)等一系列身份認(rèn)證通過后,然后進(jìn)入請求對應(yīng)的資源并返回。服務(wù)端實(shí)現(xiàn)流程圖如圖4所示。
圖4 服務(wù)端實(shí)現(xiàn)流程圖圖
目前國內(nèi)外有效可行的Web服務(wù)安全性測試技術(shù)研究甚少,更加缺少對于Web服務(wù)安全性全面系統(tǒng)性的測試方法[8-10]。本文采用httpclient和apache-jmeter-2.12作為模擬應(yīng)用系統(tǒng)端對分布式日志系統(tǒng)REST安全接口進(jìn)行性能測試,并對比分布式日志系統(tǒng)不采取安全接口與采取分布式日志系統(tǒng)設(shè)計(jì)REST安全接口的安全性與性能。性能測試中以不采取計(jì)安全接口中系統(tǒng)能承受最大并發(fā)線程數(shù)800,間隔時(shí)間1秒,循環(huán)次數(shù)為10,與基礎(chǔ)測試環(huán)境進(jìn)行性能對比,測試結(jié)果見表1。
本文研究了基于教育電子身份號的 REST接口安全認(rèn)證方法,設(shè)計(jì)了分布式日志系統(tǒng)中日志服務(wù)安全接口,并對該安全接口進(jìn)行測試。測試結(jié)果表明,該安全接口既能夠有效地對請求做身份認(rèn)證,又能實(shí)現(xiàn)請求過程中數(shù)據(jù)的防止篡改、防止重放攻擊和能夠?qū)φ埱筚Y源進(jìn)行鑒別的功能,對于復(fù)雜的多系統(tǒng)中接口的安全設(shè)計(jì)有一定的推廣作用。
表1 測試結(jié)果
[1]楊華輝.分布式日志系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京郵電大學(xué),2015.
[2]張婷,彭敦陸,鄒萌萍.基于REST的WiFi智能插座家居系統(tǒng)[J].計(jì)算機(jī)工程,2016.
[3]程飛,沈波.REST的安全性分析與策略研究[J].鐵路計(jì)算機(jī)應(yīng)用,2013.
[4]王亞玲,王勝,李曉珍等.基于面向資源架構(gòu)的Web資源服務(wù)安全交互模型設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2015.
[5]文勇軍,李程,王鍵,樊志良等.基于教育電子身份號的關(guān)聯(lián)認(rèn)證[J].計(jì)算機(jī)科學(xué)與應(yīng)用,2016.
[6]甄玉磊.網(wǎng)絡(luò)控制系統(tǒng)中重放攻擊的檢測與對策[D].北京交通大學(xué),2016.
[7]孫嵐,吳英杰,羅釗等.路網(wǎng)環(huán)境下防止重放攻擊的位置隱私保護(hù)算法[J].華中科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2013.
[8]Lee S, Jo J Y, Kim Y. Method for secure RESTful web service[C]Ieee/acis, International Conference on Computer and Information Science,2015.
[9]劉懷蘭,侯昕,王佳.改進(jìn)的基于USBKey的動態(tài)身份認(rèn)證方案[J]. 華中科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2010.
[10]陳錦富,李青,毛澄映等.基于安全規(guī)則變異的 Web Services安全性測試方法[J].計(jì)算機(jī)學(xué)報(bào),2013.
本文項(xiàng)目基金:國家科技支撐計(jì)劃課題(2014BAH28F04)
網(wǎng)絡(luò)安全技術(shù)與應(yīng)用2017年4期