為什么傳統(tǒng)的安全措施不適合SOA
原創(chuàng)【51CTO.com獨(dú)家翻譯】許多企業(yè)正在開(kāi)始投向SOA的懷抱,使之作為一個(gè)增加應(yīng)用軟件靈活性以及整合更易于管理,更低開(kāi)發(fā)成本,更統(tǒng)一的技術(shù)體系的方案。SOA的吸引力在于:它把公司的IT基礎(chǔ)設(shè)施分解成服務(wù),每一個(gè)服務(wù)實(shí)現(xiàn)了一個(gè)可供用戶(hù)或者服務(wù)消費(fèi)的商業(yè)過(guò)程。
舉個(gè)例子,某個(gè)服務(wù)可能會(huì)暴露添加一個(gè)新雇員到雇員工資名單和福利系統(tǒng)中的功能。為了使服務(wù)在多種環(huán)境中可用,也為了降低成本和增加處理的一致性,每一個(gè)服務(wù)都提供一個(gè)契約(contract)來(lái)描述它如何被使用及包含的功能。
但是,SOA方法和今天企業(yè)使用的傳統(tǒng)安全方法截然不同。SOA服務(wù)的“混合和匹配”(mix-and-match)的性質(zhì),以及它使用消息作為SOA的復(fù)合應(yīng)用程序的協(xié)調(diào)機(jī)制,使得企業(yè)無(wú)法建立明確邊界和安全屏障。非常特別的一點(diǎn)是,SOA的靈活性反而也增加安全風(fēng)險(xiǎn)。
服務(wù)契約(Service contract)會(huì)暴露你的寶藏
讓我們來(lái)考察一下典型的服務(wù)是怎樣在典型的SOA基礎(chǔ)設(shè)施上執(zhí)行的:用戶(hù)和服務(wù)的通信依賴(lài)于彼此間通過(guò)ESB(企業(yè)服務(wù)總線(xiàn))傳遞的消息。ESB作為企業(yè)的消息管道,需要理解可用的服務(wù),它們的語(yǔ)義和怎樣在點(diǎn)和點(diǎn)之間獲取一個(gè)應(yīng)用程序的消息。每一個(gè)在ESB上的服務(wù)必須使用ESB的標(biāo)準(zhǔn)消息傳遞協(xié)議(通常是SOAP)來(lái)尋址。
為了使服務(wù)易于使用,每一個(gè)服務(wù)必須有一個(gè)方法來(lái)描述自身以及服務(wù)是怎樣被使用的。這個(gè)描述被稱(chēng)為服務(wù)契約(Service contract),并通常通過(guò)WSDL(網(wǎng)絡(luò)服務(wù)描述語(yǔ)言)來(lái)描述。很少有像SOA這樣嚴(yán)格執(zhí)行交互契約的開(kāi)發(fā)方法。為了簡(jiǎn)化收集和發(fā)現(xiàn)新的契約,在許多SOA構(gòu)架中,每一個(gè)服務(wù)提供給客戶(hù)詢(xún)問(wèn)和找回契約的方法。這個(gè)找回契約的方法常常是標(biāo)準(zhǔn)化的,不是由應(yīng)用程序框架供應(yīng)商操作,就是由SOA從業(yè)者自己操作。
標(biāo)準(zhǔn)化的契約和契約找回方法使SOA系統(tǒng)更加容易被攻擊者發(fā)現(xiàn),因此這些都是SOA潛藏著的新的安全風(fēng)險(xiǎn)。
雖然這種免費(fèi)提供的契約非常有助于開(kāi)發(fā)商為整個(gè)企業(yè)構(gòu)建新的服務(wù)和重用現(xiàn)有的服務(wù),但不幸的是,有利于開(kāi)發(fā)商的元素同樣也有利于想要了解企業(yè)及其服務(wù)的攻擊者。攻擊者可以收集這些契約,并利用它們輕易地創(chuàng)建一個(gè)企業(yè)內(nèi)部的“藏寶圖”。為了確定高價(jià)值目標(biāo),攻擊者可以使用這種“地圖”,并審查那些認(rèn)證薄弱的、或者負(fù)責(zé)高價(jià)值服務(wù)(如安全管理)的契約。
SOA從業(yè)者可以通過(guò)在認(rèn)證或離線(xiàn)分配時(shí)禁用匿名發(fā)布服務(wù)契約來(lái)禁止攻擊者建立這樣一張地圖。雖然這是一個(gè)很實(shí)在的安全決定,但它并不適用于所有服務(wù)和所有企業(yè)。這是因?yàn)橄拗破跫s的分配會(huì)使得合法用戶(hù)更難發(fā)現(xiàn)服務(wù),還使得開(kāi)發(fā)工具無(wú)縫引入契約變得更加不可能。
消息層安全反而有助于攻擊者找到入侵的途徑
具有諷刺意味的是,消息層安全的使用和另一個(gè)SOA的漏洞相關(guān)。消息層安全使開(kāi)發(fā)人員能夠挑選出消息中需要簽署或加密的部分。為了支持尋址和ESB上的路由,郵件的目的地信息往往被排除在該郵件的加密部分。選擇性加密/簽名的方式不同于其他點(diǎn)到點(diǎn)或傳輸層安全協(xié)議,諸如保護(hù)整個(gè)連接的SSL。
由于有了消息層安全,攻擊者通過(guò)被動(dòng)地監(jiān)控網(wǎng)絡(luò)可以獲取在發(fā)送者和接受者之間傳遞的關(guān)于應(yīng)用層消息的深入信息。有選擇地應(yīng)用安全增加了復(fù)雜性,開(kāi)發(fā)人員或管理員對(duì)特定消息實(shí)施關(guān)鍵安全保護(hù)失敗的可能性也會(huì)增加。——51CTO王文文:駭客可以用Sniffer工具監(jiān)控網(wǎng)絡(luò),但加密的數(shù)據(jù)會(huì)對(duì)他們?cè)斐梢恍┞闊?/P>
在某些環(huán)境下,服務(wù)信息的暴露可能不會(huì)存在高風(fēng)險(xiǎn),但也不能掉以輕心。攻擊者獲得的信息越多,攻擊就越有具有針對(duì)性。在SOA以前,通過(guò)使用廣泛的協(xié)議來(lái)實(shí)現(xiàn)分離的系統(tǒng)還具有一定的模糊性,在這樣一個(gè)環(huán)境中攻擊者很難發(fā)現(xiàn)和理解所有的系統(tǒng),然而SOA卻消除了這一障礙,反而大大提高了攻擊者執(zhí)行探測(cè)的能力。
中介信息的使用增加了潛在的攻擊目標(biāo)數(shù)
SOA改變單一軟件為自我包含的軟件的情況,可以根據(jù)需要精心配制相應(yīng)的組件,這使系統(tǒng)變得更加動(dòng)態(tài)。為了協(xié)調(diào)這些組件,SOA推薦當(dāng)消息在ESB上傳送時(shí)使用消息路由器和服務(wù)注冊(cè)。為了消息路由器能夠操作消息,要么讓部分的消息不能加密,要么郵件路由器必須能夠解密關(guān)鍵信息。這種方法意味著你不能在服務(wù)提供商和服務(wù)客戶(hù)之間使用傳輸層安全協(xié)議。同時(shí)它還意味著,黑客可以利用這些管理信息和協(xié)調(diào)中介機(jī)構(gòu)來(lái)對(duì)終端發(fā)起攻擊?!?1CTO王文文:對(duì)安全有過(guò)研究的朋友應(yīng)該知道Man-in-the-middle Attacks中間人攻擊吧?
乍一看,你可能認(rèn)為在“以明碼傳遞路由信息”和“在SSL一類(lèi)的協(xié)議報(bào)文中以明碼表示IP和TCP頭”并沒(méi)有多大的不同。但這實(shí)際上卻很不相同:作為中介的SSL在保證整個(gè)信息已簽名和加密的條件下,只提供關(guān)于消息流內(nèi)容很少的信息,并且不允許中介進(jìn)行“轉(zhuǎn)發(fā)信息”以外的操作。但是作為中介的SOA通常更進(jìn)一步,而且往往在簽名還未失效的情況下就對(duì)信息本身進(jìn)行了修改。在攻擊者試圖改變SOA環(huán)境時(shí),這種操縱窗口給攻擊者提供了一個(gè)可用的工具。
的確,在消息安全上,WS-Security可以提供類(lèi)似SSL的保障,但WS-Security標(biāo)準(zhǔn)的靈活性和復(fù)雜性卻增加了“消息中的敏感信息不能被恰當(dāng)加密和完整保護(hù)”的風(fēng)險(xiǎn)。
同樣,服務(wù)注冊(cè)表是有風(fēng)險(xiǎn)的中介機(jī)構(gòu),SOA方法依賴(lài)它來(lái)工作的。它們類(lèi)似于DNS提供服務(wù)的方式,當(dāng)一個(gè)服務(wù)消費(fèi)者希望找到適當(dāng)?shù)姆?wù)供應(yīng)商,消費(fèi)者從服務(wù)注冊(cè)表找到該服務(wù)提供者的當(dāng)前地址。在許多部署方式中,服務(wù)注冊(cè)表可以由管理員或由提供者動(dòng)態(tài)地更新。這為SOA可以更容易的重新配置,因?yàn)榉?wù)的地址會(huì)隨著服務(wù)地址而相應(yīng)的改變。
但是,正是配置控制功能使服務(wù)注冊(cè)表成為了對(duì)攻擊者來(lái)說(shuō)有吸引力的目標(biāo)。例如,黑客可以操縱注冊(cè)表返回地址,讓其指向被黑客攻擊的服務(wù)主機(jī)的地址。如果攻擊者鎖定了正確的服務(wù)(如安全服務(wù)),攻擊者可以給嘗試使用安全服務(wù)的客戶(hù)偽造客戶(hù)響應(yīng)。在一個(gè)客戶(hù)端的部署中,已證明能夠劫持安全服務(wù),并完全批準(zhǔn)所有的訪(fǎng)問(wèn)請(qǐng)求。
部署一個(gè)安全、動(dòng)態(tài)的SOA,開(kāi)發(fā)者和架構(gòu)者必須考慮系統(tǒng)的哪些部分需要?jiǎng)討B(tài)處理、哪些部分需要保持靜態(tài)。使的重配置生效的 SOA的配置元素 必須再次審查,從而使得攻擊者無(wú)法全面了解系統(tǒng)的信息。
在ESB內(nèi)部和ESB直接的通訊為攻擊者提供了新的切入點(diǎn)
任何重大SOA部署的中心都是一個(gè)能夠處理消息路由、并提供所需基本服務(wù)的ESB。通常情況下,企業(yè)會(huì)使用數(shù)個(gè)通過(guò)網(wǎng)橋連接的ESB。
不管你有一個(gè)還是多個(gè)ESB,只要是使用了ESB就無(wú)法安裝傳統(tǒng)的“軟”防火墻,這使ESB成為一個(gè)攻擊目標(biāo)——特別當(dāng)它是關(guān)鍵服務(wù)(如記錄和認(rèn)證)的主機(jī)時(shí)?!败洝狈阑饓κ钱?dāng)連接方?jīng)]有使用相同的協(xié)議時(shí)對(duì)通信所采取人為限制。因此,即使攻擊者登錄了某個(gè)系統(tǒng),協(xié)議的不兼容將限制其攻擊范圍。例如,攻占了Web服務(wù)器的攻擊者可能無(wú)法到達(dá)大型主機(jī),因?yàn)榇笮椭鳈C(jī)使用令牌網(wǎng)協(xié)議,而在TCP / IP網(wǎng)上的Web服務(wù)器并沒(méi)有把二者連接起來(lái)。
ESB的目的是為了消除通信障礙,這意味著如果部署了SOA攻擊者可以很容易的從Web服務(wù)器到達(dá)大型主機(jī)。同樣,SOA再次有利于攻擊。
ESB高連通性使得內(nèi)部、外部和ESB服務(wù)的部署更加需要一個(gè)堅(jiān)實(shí)的應(yīng)用程序安全措施。在把那些防護(hù)脆弱的傳統(tǒng)大型機(jī)連接到ESB上時(shí),需要審查其安全屬性,從而確保該系統(tǒng)能夠在充滿(mǎn)威脅的環(huán)境中運(yùn)行。你需要站在攻擊者的角度,考查在你的SOA中所實(shí)現(xiàn)的全新通訊環(huán)境,并對(duì)攻擊可能從一個(gè)被攻克的服務(wù)器中蔓延開(kāi)來(lái)的距離進(jìn)行建模,然后再制定出一個(gè)緩解方案,從而控制和制止攻擊的蔓延。
部署類(lèi)似于SOA這樣靈活的系統(tǒng)是一種真正的安全挑戰(zhàn),但如果你從一開(kāi)始就采取正確的步驟,保證系統(tǒng)的安全性也不是一件不可能的事情。
【51CTO.COM 獨(dú)家翻譯,轉(zhuǎn)載請(qǐng)注明出處及作者!】
【編輯推薦】