《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 業(yè)界動(dòng)態(tài) > SIP協(xié)議安全分析與解決方法

SIP協(xié)議安全分析與解決方法

2009-01-15
作者:賈 衍1, 徐東升2, 卜 哲

??? 摘? 要: 分析了幾種常見(jiàn)的SIP協(xié)議的安全威脅,提出了兩種可能性也很大的安全威脅,在此基礎(chǔ)上從SIP協(xié)議消息交互過(guò)程出發(fā),提出了幾種新的解決思路和方法。?

????關(guān)鍵詞: SIP協(xié)議; 安全

?

1 SIP協(xié)議?

??? 會(huì)話初始協(xié)議SIP(Session Initiation Protocol)[1]是由IETF(Internet工程任務(wù)組)提出的IP電話信令協(xié)議。它是一個(gè)應(yīng)用層的控制協(xié)議,可以用來(lái)建立、修改、終止多媒體會(huì)話。SIP協(xié)議工作于通訊協(xié)議之下,并不依賴于建立的會(huì)話類型。?

??? SIP協(xié)議是采用UTF-8字符集進(jìn)行編碼的文本協(xié)議。SIP消息分為請(qǐng)求和響應(yīng)兩類,分別由起始行、一個(gè)或多個(gè)頭字段、可選的消息體組成。RFC3261中定義了六種請(qǐng)求方法:邀請(qǐng)對(duì)方參與會(huì)話(INVITE)、確認(rèn)信息(ACK)、用于取消會(huì)話(CANCEL)、查詢服務(wù)器的能力(OPTIONS)、用于結(jié)束會(huì)話(BYE)、發(fā)送注冊(cè)請(qǐng)求信息(REGISTER)。同時(shí),RFC3261中還定義了六種應(yīng)答狀態(tài)碼:臨時(shí)響應(yīng)(1XX)、成功響應(yīng)(2XX)、重定向響應(yīng)(3XX)、客戶機(jī)錯(cuò)誤(4XX)、服務(wù)器錯(cuò)誤(5XX)、全局故障(6XX)。?

??? SIP系統(tǒng)包含用戶代理、重定向服務(wù)器、注冊(cè)服務(wù)器和代理服務(wù)器。用戶代理UA(User Agent)是一個(gè)邏輯功能實(shí)體,當(dāng)產(chǎn)生請(qǐng)求消息時(shí)作為用戶代理客戶端(UAC),當(dāng)接收請(qǐng)求并產(chǎn)生響應(yīng)時(shí)作為用戶代理服務(wù)器端(UAS)。?

2 SIP協(xié)議的安全問(wèn)題?

??? SIP協(xié)議具有易用性、靈活性和擴(kuò)展性強(qiáng)等特點(diǎn),這使得SIP協(xié)議的應(yīng)用越來(lái)越廣泛。但由于SIP一般使用文本方式在IP網(wǎng)絡(luò)上傳輸,并且SIP使用了代理服務(wù)器、重定向服務(wù)器等中間設(shè)備,使其消息的完整性、保密性、可用性和真實(shí)性存在安全隱患。但可以通過(guò)研究幾種比較常見(jiàn)的、典型的SIP安全威脅的方式來(lái)找到必要的解決方法,以保證SIP協(xié)議的安全運(yùn)行。?

2.1 注冊(cè)劫持?

??? 這種安全威脅發(fā)生在SIP的注冊(cè)過(guò)程中,SIP注冊(cè)就是用戶終端向注冊(cè)服務(wù)器登記終端用戶在何處可以被訪問(wèn)。一方面,注冊(cè)服務(wù)器根據(jù)發(fā)起注冊(cè)請(qǐng)求的UA所發(fā)送的注冊(cè)消息的From頭字段中的信息來(lái)判斷其身份,同時(shí)也判定其是否可以修改已經(jīng)注冊(cè)的聯(lián)系地址。但是,由于From頭字段可以被UA任意修改,這就使惡意注冊(cè)成為可能。另一方面,SIP中允許第三方代表用戶來(lái)注冊(cè)聯(lián)系信息,這也為惡意注冊(cè)提供了方便。這類威脅存在的根本原因是用戶發(fā)出的注冊(cè)請(qǐng)求消息沒(méi)有進(jìn)行必要的加密,并且用戶也被允許任意修改這些信息,同時(shí)沒(méi)有一類安全機(jī)制使SIP實(shí)體能夠認(rèn)證請(qǐng)求發(fā)送者的身份。?

2.2 服務(wù)器偽裝?

??? 攻擊者通過(guò)偽裝服務(wù)器而達(dá)到攻擊的目的。在SIP消息交互過(guò)程中,請(qǐng)求消息中的Request-URI域詳細(xì)說(shuō)明了該消息發(fā)送的目標(biāo)域。UA通常直接向域中的服務(wù)器發(fā)出呼叫請(qǐng)求,呼叫請(qǐng)求再由服務(wù)器向被呼叫者或者下一跳服務(wù)器轉(zhuǎn)發(fā),這就給攻擊者偽裝成服務(wù)器的機(jī)會(huì)。當(dāng)UA的請(qǐng)求被截獲,泄露會(huì)話的關(guān)鍵信息后,就存在攻擊者假冒服務(wù)器的可能。攻擊者還可以假冒注冊(cè)服務(wù)器獲取注冊(cè)信息。為了防止這類服務(wù)器偽裝攻擊,就需要UA對(duì)服務(wù)器的合法身份進(jìn)行鑒別。?

2.3 消息篡改?

??? SIP UA通過(guò)信任的代理來(lái)路由呼叫,雖然UA可以鑒別代理服務(wù)器是否可信,但是它卻不檢查請(qǐng)求消息實(shí)體是否已被篡改。UA通過(guò)SIP消息體來(lái)傳送媒體會(huì)話加密的密鑰時(shí),惡意的代理就可以改動(dòng)消息體,或者作為中間人,或者直接改寫(xiě)會(huì)話加密的安全特性。防止這類攻擊的手段就是需要保證消息頭和消息體的安全,這包括私密性、完整性和認(rèn)證鑒權(quán)。?

2.4 中斷會(huì)話?

??? SIP通過(guò)BYE請(qǐng)求結(jié)束會(huì)話,攻擊者能夠偽造BYE請(qǐng)求,一旦偽造的BYE請(qǐng)求被接收者收到,會(huì)話就會(huì)被提前結(jié)束。同樣,攻擊者可以通過(guò)發(fā)送偽造的re-Invite請(qǐng)求來(lái)改變會(huì)話。這類安全威脅出現(xiàn)的原因是攻擊者通過(guò)獲取會(huì)話的一些初始化信息,從而得到會(huì)話的一些參數(shù)(如To標(biāo)記、From標(biāo)記等)。防止這類安全威脅至少有兩種方法:一是對(duì)BYE消息發(fā)起者的身份進(jìn)行鑒別;二是保證會(huì)話初始化信息的機(jī)密性,使攻擊者無(wú)法獲取偽造會(huì)話消息的會(huì)話參數(shù)。?

2.5 拒絕服務(wù)與服務(wù)放大?

??? 拒絕服務(wù)一般指通過(guò)向特定的網(wǎng)絡(luò)接口發(fā)送大量的信息使系統(tǒng)被破壞或暫不可用。拒絕服務(wù)攻擊的表現(xiàn)是獲得授權(quán)的實(shí)體不能獲得對(duì)網(wǎng)絡(luò)資源的正常訪問(wèn),或推遲實(shí)時(shí)操作等。多數(shù)情況下,SIP系統(tǒng)的重定向服務(wù)器、注冊(cè)服務(wù)器、代理服務(wù)器位于Internet上,這就為攻擊者發(fā)起拒絕服務(wù)攻擊提供了機(jī)會(huì)。SIP設(shè)備除了作為直接被攻擊的對(duì)象外,還有可能作為DOS攻擊的幫兇,起到放大DOS攻擊的作用。?

??? 上述這些情況需要SIP協(xié)議運(yùn)行于一個(gè)具有良好的安全體系結(jié)構(gòu)網(wǎng)絡(luò),從而盡可能降低這類拒絕服務(wù)攻擊的安全威脅。?

2.6 客戶端偽裝(Impersonating a Client)?

??? 通過(guò)獲取一個(gè)UA發(fā)出INVITE請(qǐng)求消息的From頭字段的方式,攻擊者可以偽裝成被攻擊的UA主動(dòng)發(fā)起會(huì)話建立請(qǐng)求或修改已經(jīng)存在的會(huì)話屬性。這種攻擊一方面可能造成被攻擊的UA與其他UA的會(huì)話信息被泄露,例如,攻擊者可以假冒UserA與UserB進(jìn)行會(huì)話,攻擊者Attacker只需將自己的From頭字段內(nèi)容修改成為UserA的,然后向UserB發(fā)起會(huì)話請(qǐng)求,SIP服務(wù)器將此請(qǐng)求發(fā)送給UserB,由于SIP服務(wù)器與UserB都無(wú)法鑒別請(qǐng)求發(fā)送者的身份,所以攻擊者Attacker就假冒UserA與UserB進(jìn)行會(huì)話,其流程如圖1(a)所示。另一方面這種攻擊也可能中斷或修改已經(jīng)建立的會(huì)話。例如,UserA與UserB已經(jīng)建立了SIP會(huì)話,這時(shí),攻擊者可以分別假冒UserA與UserB向?qū)Ψ桨l(fā)送BYE請(qǐng)求,這時(shí),請(qǐng)求接收方UserB與UserA都會(huì)誤以為是對(duì)方發(fā)送的BYE請(qǐng)求,會(huì)話即被中斷,其流程如圖1(b)所示。要防止這類攻擊就需要服務(wù)器對(duì)UA的合法身份進(jìn)行鑒別。

?

?

2.7 破壞會(huì)話建立(Breaking up the Connection)

??? 當(dāng)會(huì)話請(qǐng)求INVITE被發(fā)送以后,可以通過(guò)發(fā)送CANCEL請(qǐng)求來(lái)取消這個(gè)會(huì)話。攻擊者可以通過(guò)假冒會(huì)話發(fā)起方發(fā)送CANCEL請(qǐng)求,從而達(dá)到破壞會(huì)話建立的目的。例如,UserA發(fā)給UserB的INVITE請(qǐng)求被攻擊者Attacker截獲,獲得了To、From等內(nèi)容后,在消息中插入了發(fā)給UserB的CANCEL請(qǐng)求,于是,UserA的會(huì)話請(qǐng)求被取消,無(wú)法與UserB建立會(huì)話,其流程如圖2所示。?

?

?

3 SIP協(xié)議的安全機(jī)制?

??? 通過(guò)對(duì)以上幾種現(xiàn)有的或補(bǔ)充的SIP協(xié)議可能受到的安全威脅進(jìn)行分析,據(jù)此就有可能提供必要的安全機(jī)制來(lái)保證SIP協(xié)議的安全運(yùn)行。目前現(xiàn)有的一些安全機(jī)制有:HTTP Digest、S/MIME、TLS和SIPS URIS。?

3.1 HTTP Digest身份認(rèn)證[2]?

??? HTTP Digest身份認(rèn)證是基于HTTP的challenge/response的機(jī)制,即只接受有證書(shū)(credential)的請(qǐng)求,對(duì)沒(méi)有證書(shū)的請(qǐng)求則通過(guò)401/407要求對(duì)方重發(fā)包含認(rèn)證信息的請(qǐng)求。但由于目前HTTP Digest認(rèn)證僅能實(shí)現(xiàn)Server(包括Proxy、Registrar和Redirect Server)對(duì)本域內(nèi)的UA的認(rèn)證,而無(wú)法實(shí)現(xiàn)UA對(duì)Server的認(rèn)證、Proxy對(duì)Proxy的認(rèn)證和Proxy對(duì)域外UA的認(rèn)證,所以已經(jīng)出現(xiàn)的不少攻擊正是針對(duì)這些缺陷來(lái)實(shí)施的。?

3.2 S/MIME[3]?

??? 安全多用途互聯(lián)網(wǎng)郵件擴(kuò)展協(xié)議S/MIME(Secure/Multipurpose Internet Mail Extensions)是一種端到端加密方式,它是單向散列算法和公/私鑰相結(jié)合的加密體系,采用對(duì)稱加密和非對(duì)稱加密結(jié)合,用公鑰加密會(huì)話密鑰,會(huì)話密鑰來(lái)加密消息,能夠提供保密、鑒別、數(shù)字簽名等功能。但S/MIME的局限性在于證書(shū)的權(quán)威性。用戶本應(yīng)該向公開(kāi)授權(quán)機(jī)構(gòu)申請(qǐng)證書(shū),但用戶也可以自己簽發(fā)證書(shū),并且自制證書(shū)在會(huì)話初始能否通過(guò)鑒別是由用戶決定的,這就留下了潛在的安全漏洞。?

3.3 TLS保護(hù)?

??? 傳輸層安全TLS(Transport Layer Security)用于在兩個(gè)通信應(yīng)用程序之間提供保密性和數(shù)據(jù)完整性,是面向連接協(xié)議即TCP之上的傳輸層安全,該協(xié)議分為上層的TLS Handshake協(xié)議和下層的TLS Record協(xié)議。但由于在SIP協(xié)議中,傳輸層的機(jī)制是基于點(diǎn)到點(diǎn)的,使用TLS機(jī)制發(fā)送請(qǐng)求到代理服務(wù)器的SIP UA并不能保證請(qǐng)求在整個(gè)端到端的路徑中都是用TLS機(jī)制。另外,TLS不能在UDP上運(yùn)行,目前大多數(shù)SIP都運(yùn)行在UDP上,對(duì)SIP服務(wù)器來(lái)說(shuō),同時(shí)維持大量的TLS連接負(fù)荷會(huì)很重,導(dǎo)致容量不足的問(wèn)題。此外,TLS在穿越防火墻時(shí)也存在一些問(wèn)題。?

3.4 SIPS? URIS?

??? 統(tǒng)一資源定位符URI(Uniform Resource Identifier)是網(wǎng)絡(luò)環(huán)境下一種簡(jiǎn)單和可擴(kuò)展的標(biāo)識(shí)機(jī)制。SIPS URI和SIP URI都是用于標(biāo)識(shí)定位SIP網(wǎng)絡(luò)中網(wǎng)絡(luò)資源,URI中包含了足夠的信息以滿足SIP網(wǎng)絡(luò)中的資源的互訪。除了應(yīng)用在Request-URI上,SIPS安全機(jī)制還可以應(yīng)用到其他的SIP URI中,包括注冊(cè)地址和聯(lián)系地址等。?

4 新的解決思路與方法?

??? 上述的幾種安全機(jī)制都是針對(duì)整個(gè)通信過(guò)程中所有完整的SIP消息進(jìn)行的端到端或點(diǎn)到點(diǎn)的加密或鑒權(quán)機(jī)制,這些安全機(jī)制本身存在著或多或少的不足,例如,因額外的計(jì)算所帶來(lái)的處理負(fù)擔(dān)更容易受到DDOS類的攻擊,需要額外的投入來(lái)進(jìn)行鑒權(quán)機(jī)制的建立等。?

??? 本文從SIP協(xié)議自身出發(fā),著眼于消息交互流程,提出有別于上述幾種安全機(jī)制的一些思路與方法,即考慮在SIP消息格式或SIP消息交互流程上運(yùn)行一些完善措施,避免對(duì)每個(gè)SIP消息進(jìn)行整體的加密或身份鑒權(quán)。這樣,既可以減少對(duì)鑒權(quán)機(jī)制和一些加密算法的使用,減輕了設(shè)備的負(fù)擔(dān),又可以提高消息傳輸速率,在安全與簡(jiǎn)單有效之間進(jìn)行一個(gè)較為平衡的折中。?

4.1 加入一次握手的確認(rèn)信息?

??? 通過(guò)研究上述幾種安全威脅,分析其具體攻擊過(guò)程,可以發(fā)現(xiàn)SIP協(xié)議最容易受到攻擊的一種情況就是:沒(méi)有一次握手的確認(rèn)信息。在這種情況下,可以加入身份認(rèn)證,有針對(duì)性地防范安全威脅。?

??? 方法是:當(dāng)服務(wù)器端或者客戶端UserB接收到具有特殊意義的SIP消息時(shí),根據(jù)原始請(qǐng)求發(fā)送者UserA的Contact地址,向其發(fā)送一次握手的確認(rèn)信息,該確認(rèn)信息采用身份認(rèn)證的方式,通過(guò)發(fā)送ACK消息來(lái)向原始請(qǐng)求發(fā)送者UserA詢問(wèn)其是否發(fā)了消息,該ACK消息帶有隨機(jī)數(shù)nonce、作用域realm。當(dāng)原始請(qǐng)求發(fā)送者UserA接收到消息時(shí),若之前具有特殊意義的消息是其發(fā)送的,則回復(fù)帶有由用戶名username、共享密鑰password、隨機(jī)數(shù)nonce和作用域realm幾項(xiàng)經(jīng)過(guò)組合并利用MD5算法生成后的結(jié)果的200 OK狀態(tài)碼,接收端UserB對(duì)收到的結(jié)果進(jìn)行認(rèn)證。若UserA之前沒(méi)有發(fā)送具有特殊意義的消息,則根據(jù)其是客戶端還是服務(wù)器端,回復(fù)不同的錯(cuò)誤狀態(tài)碼(4XX/5XX)。超時(shí)不回復(fù)的,也視為錯(cuò)誤處理。具體實(shí)現(xiàn)流程如圖3所示。?

?

?

??? 此方法比較適用于防范下面幾種常見(jiàn)的攻擊:?

??? (1) 注冊(cè)劫持攻擊:注冊(cè)劫持攻擊的特點(diǎn)是攻擊者冒充注冊(cè)用戶向注冊(cè)服務(wù)器發(fā)送注冊(cè)注銷請(qǐng)求。當(dāng)注冊(cè)服務(wù)器接收到Contact:*,Expires:0的消息或From頭字段值和To頭字段值不相同的消息時(shí),需要加入一次握手的確認(rèn)信息,來(lái)確認(rèn)消息發(fā)送者的身份。?

??? (2) 中斷會(huì)話和破壞會(huì)話建立攻擊:這兩種攻擊方式的特點(diǎn)是客戶端或服務(wù)器端收到BYE、CANCEL或re-Invite請(qǐng)求。當(dāng)UA收到以上三種消息請(qǐng)求時(shí),需要加入一次握手的確認(rèn)信息。?

??? (3) 服務(wù)器端偽裝和客戶端偽裝攻擊:可以采用通過(guò)在客戶端或服務(wù)器端建立一個(gè)列表來(lái)保存上一次通信的(From, Contact)對(duì)的方法,當(dāng)接收到新的請(qǐng)求時(shí),查詢(From, Contact)對(duì),如果不相符,則加入一次握手的確認(rèn)信息,這種方法一定程度上也可以減少對(duì)請(qǐng)求發(fā)送者的身份認(rèn)證。但也可以設(shè)置一個(gè)老化時(shí)間參數(shù),在一定時(shí)間內(nèi)刷新(From, Contact)對(duì)。?

4.2 在服務(wù)器端和客戶端各增加一個(gè)Contact地址列表?

??? 這種方法的思路是:在通信雙方之間建立一個(gè)可信域,對(duì)可信域范圍外的可疑請(qǐng)求一律進(jìn)行身份認(rèn)證。?

??? 由于SIP消息中的Contact頭字段給出下一次SIP服務(wù)器或目的UA與自身的聯(lián)系地址,通常攻擊者通過(guò)把自身地址改為Contact地址的方式,使得將發(fā)往被攻擊者的一切消息轉(zhuǎn)為發(fā)給攻擊者,從而實(shí)施了攻擊。因此,可以在客戶端和服務(wù)器端都增加一個(gè)Contact地址列表,如果請(qǐng)求發(fā)送方UserA的Contact地址在其列表之內(nèi)的,則接收方UserB無(wú)需對(duì)其進(jìn)行身份認(rèn)證;如果是在地址列表之外的請(qǐng)求,UserB需對(duì)UserA用身份鑒權(quán)機(jī)制進(jìn)行驗(yàn)證,確認(rèn)其可信后,將該地址加入自己的Contact地址列表。否則,不接收請(qǐng)求。具體實(shí)現(xiàn)流程如圖4所示。?

?

?

4.3 給SIP消息頭域增加一個(gè)頭字段?

??? 這種方法是對(duì)SIP協(xié)議消息中重要的關(guān)鍵字段進(jìn)行加密,將加密后的數(shù)據(jù)存放在SIP消息頭域新增加的一個(gè)頭字段Au中。其示意圖如圖5所示。相對(duì)于SIP安全機(jī)制的端到端加密或點(diǎn)到點(diǎn)加密的方法,部分加密的優(yōu)點(diǎn)在于在降低了身份鑒權(quán)和加密機(jī)制的復(fù)雜程度的同時(shí),有效地保證了SIP協(xié)議的安全。?

?

?

??? 一個(gè)具體的實(shí)現(xiàn)方式是在消息交換過(guò)程中,消息發(fā)送方UserA發(fā)送第N個(gè)消息時(shí),選取共享密鑰表中第N個(gè)密鑰,對(duì)關(guān)鍵字段進(jìn)行“不可逆”加密[4],將計(jì)算結(jié)果作為Au頭字段發(fā)送給接收方UserB,接收方對(duì)利用第N個(gè)密鑰對(duì)Au字段數(shù)據(jù)進(jìn)行解密,并對(duì)結(jié)果進(jìn)行如下判斷:解密后的關(guān)鍵字段是否與接收消息中對(duì)應(yīng)的關(guān)鍵字段一致,若不一致則判斷其受到了安全威脅,若相同則對(duì)接收的消息進(jìn)行處理。這種方法需要雙方在交換消息前,實(shí)現(xiàn)共享的密鑰表,密鑰表的復(fù)雜度可根據(jù)需要具體選擇。?

??? 這種方法盡管同樣應(yīng)用了加密算法和身份鑒權(quán)機(jī)制,但加密方式相對(duì)比較簡(jiǎn)單,在降低計(jì)算負(fù)擔(dān)的同時(shí)也能保證SIP協(xié)議的安全運(yùn)行。本文中所列出的幾種常見(jiàn)安全威脅都可以采用這種方法進(jìn)行有效防范。?

??? SIP憑借其簡(jiǎn)單、易于擴(kuò)展、便于實(shí)現(xiàn)等優(yōu)點(diǎn)越來(lái)越得到業(yè)界的青睞。隨著越來(lái)越多支持SIP的客戶端軟件和智能多媒體終端的出現(xiàn),SIP用戶不斷增加, SIP的安全問(wèn)題也將受到更多的關(guān)注。SIP的安全對(duì)策研究將不斷深化,安全機(jī)制將不斷完善,它將會(huì)進(jìn)一步為廣大用戶提供更加多樣、安全的服務(wù)。?

參考文獻(xiàn)?

[1] ROSENBERG J, SCHULZRINNE H. SIP:Session Initiation?Protocol. RFC3261,2002.?

[2]?王宇飛,范明鈺,王光衛(wèi).一種基于HTTP摘要認(rèn)證的SIP安全機(jī)制.重慶郵電學(xué)報(bào)(自然科學(xué)版),2005,(17):749.?

[3]?王原麗,嚴(yán)劍.基于S/MIME 的SIP 安全機(jī)制.信息安全與通信保密,2005,(5):40.?

[4]?王朔中, 張新鵬, 張開(kāi)文. 數(shù)字密寫(xiě)和密寫(xiě)分析[M].北京:清華大學(xué)出版社,2005.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。