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