??? 摘? 要: 提出一種會(huì)話過程中的輕量級(jí)雙向認(rèn)證機(jī)制,它基于HTTP摘要認(rèn)證機(jī)制,可以實(shí)現(xiàn)逐跳認(rèn)證,完成端到端的認(rèn)證,抵抗身份欺騙和拒絕服務(wù)等類型的攻擊,從而在系統(tǒng)開銷小的情況下提供了較好的安全保護(hù)。?
??? 關(guān)鍵詞: SIP; 身份欺騙; HTTP摘要認(rèn)證; 密鑰協(xié)商; 安全機(jī)制
?
??? 會(huì)話發(fā)起協(xié)議SIP(Session Initiation Protocol)[1]是位于應(yīng)用層的信令協(xié)議,它可以發(fā)起、管理和結(jié)束分組網(wǎng)絡(luò)中的語音或視頻會(huì)話。SIP具有簡單、開放和可擴(kuò)展等特點(diǎn),被廣泛用于IP多媒體服務(wù)、蜂窩系統(tǒng)與Internet融合等應(yīng)用領(lǐng)域,已成為下一代電信網(wǎng)絡(luò)的主要信令協(xié)議之一。?
??? SIP基于文本的特性會(huì)帶來許多安全隱患,而且其并沒有自己獨(dú)有的安全機(jī)制,只是推薦采用了現(xiàn)有的標(biāo)準(zhǔn)安全協(xié)議。推薦的傳輸層安全協(xié)議/數(shù)據(jù)報(bào)傳輸層安全協(xié)議(TLS/DTLS)[2-3]和HTTP摘要認(rèn)證[4]只提供單向認(rèn)證,無法很好地抵御外界攻擊。?
??? 針對(duì)這種情況,本文提出了一種SIP輕量級(jí)雙向認(rèn)證機(jī)制,這種機(jī)制基于共享密鑰和改進(jìn)的HTTP摘要認(rèn)證,提供了信息完整性校驗(yàn)。該安全機(jī)制有效地利用了SIP已有的結(jié)構(gòu),只采用一次握手,并避免使用公鑰系統(tǒng),降低了系統(tǒng)開銷,是種輕量級(jí)的機(jī)制。它可以抵抗身份欺騙、拒絕服務(wù)攻擊等多種威脅[5-6]。?
1 安全現(xiàn)狀及分析?
??? 目前,認(rèn)證是保證SIP通信安全性的常用手段之一。常用的單向認(rèn)證卻會(huì)導(dǎo)致較為嚴(yán)重的安全隱患,易受到中間人攻擊MITM(Man-In-The-Middle)類型的安全威脅。攻擊者通過將SIP注冊(cè)消息中的“過期值”改為零偽造出“取消注冊(cè)”的消息[8],便可以立刻清除之前的注冊(cè)信息,使被攻擊用戶A被服務(wù)器B移除并接收不到來自服務(wù)器B的所有后續(xù)消息,因?yàn)闆]有收到任何通知,用戶A認(rèn)為他與服務(wù)器B仍然是連接著的。攻擊者隨后向服務(wù)器B偽造REGISTER注冊(cè)消息。把服務(wù)器B發(fā)往用戶A的消息都轉(zhuǎn)向了攻擊者,同時(shí)攻擊者冒充服務(wù)器B和用戶A通信。所以,攻擊者會(huì)在服務(wù)器和用戶都不知情的情況下進(jìn)行會(huì)話劫持。此外,MITM還能引發(fā)多種攻擊:對(duì)用戶A和服務(wù)器B進(jìn)行竊聽能夠較容易地獲得機(jī)密信息,例如私人數(shù)據(jù)和口令等;用戶A可能會(huì)被攻擊者利用,對(duì)服務(wù)器B或其他目標(biāo)進(jìn)行拒絕服務(wù)攻擊。?
??? 當(dāng)前用于身份驗(yàn)證的方法包括HTTP摘要和TLS/DTLS。HTTP摘要是一種簡單的認(rèn)證機(jī)制,它采用雜湊式(hash)加密方法傳送通信雙方共享的口令,以避免其用明文傳輸;TLS/DTLS基于公鑰技術(shù),為兩個(gè)通信實(shí)體之間提供數(shù)據(jù)的保密性和完整性。這兩種認(rèn)證方式都采用單項(xiàng)認(rèn)證:使用HTTP摘要的客戶端不能認(rèn)證服務(wù)器并且對(duì)消息完整性的保護(hù)也不夠充分,比較容易遭受攻擊;TLS/DTLS在實(shí)際應(yīng)用中只是客戶端認(rèn)證服務(wù)器,但服務(wù)器不認(rèn)證客戶端。另外,TLS/DTLS對(duì)服務(wù)質(zhì)量(QoS)也會(huì)有所影響。使用加密操作的安全協(xié)議都將引入處理延時(shí),而SIP會(huì)話應(yīng)該在可以接受的QoS級(jí)別內(nèi)運(yùn)用安全機(jī)制。TLS/DTLS采用了公鑰技術(shù),這項(xiàng)技術(shù)需要的計(jì)算開銷遠(yuǎn)大于密鑰技術(shù)和消息摘要技術(shù),從而顯著增加了SIP代理服務(wù)器的負(fù)擔(dān),這不僅影響了QoS,而且容易受到拒絕服務(wù)攻擊[9]。除此之外,TLS/DTLS使用了逐跳的安全認(rèn)證,使得兩個(gè)用戶間的通信路徑上有一個(gè)環(huán)節(jié)缺少TLS/DTLS的保護(hù)時(shí),整條路徑都變得不安全。?
??? 為克服上述缺陷,提出了一種輕量級(jí)雙向認(rèn)證機(jī)制,它通過加入共享密鑰改善了HTTP摘要。?
2 輕量級(jí)雙向認(rèn)證機(jī)制?
2.1 認(rèn)證機(jī)制實(shí)現(xiàn)?
??? 這種認(rèn)證方法的性能損失較小,其輕量級(jí)的特點(diǎn)體現(xiàn)在以下兩點(diǎn):?
??? (1)僅需要一個(gè)挑戰(zhàn)—請(qǐng)求過程,握手次數(shù)較少。由于當(dāng)今的處理器變得越來越強(qiáng)大,傳輸數(shù)據(jù)需要的時(shí)間已經(jīng)逐漸成為認(rèn)證開銷的主要部分,所以減少消息交互時(shí)的握手次數(shù)可以減少開銷,增強(qiáng)性能。?
??? (2)沒有采用計(jì)算復(fù)雜的公鑰算法。之所以不采用公鑰算法是因?yàn)楸M管它可以提供更高的安全性,但是計(jì)算開銷較大,會(huì)對(duì)SIP會(huì)話的QoS有所影響??紤]到密鑰算法和消息摘要算法在性能上的差別并不大(都是以字節(jié)為單位),使用了共享密鑰并采用了AES加密算法,其快速和安全性可以平衡SIP通信中QoS和安全性的要求。?
??? 如果缺少信息完整性保證,認(rèn)證機(jī)制也可能受到攻擊。這個(gè)輕量級(jí)認(rèn)證機(jī)制用共享密鑰提供了SIP消息部分頭域的完整性保護(hù),這些頭域包括Contact、To和From等。選擇性的加密而不是加密整個(gè)消息體可以避免分組過大而導(dǎo)致的分片,而分片在SIP實(shí)時(shí)通信中需要盡量避開[10]。?
??? 這種輕量級(jí)雙向認(rèn)證機(jī)制的實(shí)現(xiàn)過程為:下游節(jié)點(diǎn)在對(duì)上游節(jié)點(diǎn)的挑戰(zhàn)中加入被共享密鑰加密的信息。當(dāng)下游節(jié)點(diǎn)的身份通過解密被驗(yàn)證后,上游節(jié)點(diǎn)將返回一個(gè)請(qǐng)求,其中攜帶著針對(duì)下游節(jié)點(diǎn)挑戰(zhàn)的認(rèn)證,這個(gè)請(qǐng)求同樣也被加密處理。當(dāng)來自于上游節(jié)點(diǎn)的加密信息被下游節(jié)點(diǎn)解密驗(yàn)證后,身份信任會(huì)在兩個(gè)節(jié)點(diǎn)間建立起來。?
2.1.1? WWW-Authenticate頭域?
??? 為實(shí)現(xiàn)輕量級(jí)的雙向認(rèn)證機(jī)制,對(duì)HTTP摘要里某些頭域的參數(shù)值進(jìn)行了修改。其中對(duì)WWW-Authenticate響應(yīng)的修改如下:?
??? digest-challenge = 1#(realm/[domain]/req-auth-digest/[opaque]/[state]/[algorithm]/[qop-options]/[auth-param] )?
??? req-auth-digest='req-auth-digest''='req-auth-digest-value?
??? req-auth-digest-value = <'> HEX <'>?
??? algorithm = 'algorithm' '=' ('AES'/token)?
??? 如果終端是服務(wù)器,domain值必須被包括,而不像原標(biāo)準(zhǔn)那樣只是可選項(xiàng)。如果缺少了domain值,當(dāng)一個(gè)用戶在多個(gè)服務(wù)器上配置了相同的密鑰,則不同的服務(wù)器可能產(chǎn)生相同的挑戰(zhàn),從而使用戶對(duì)于不同的服務(wù)器產(chǎn)生了相同的應(yīng)答。監(jiān)聽者可能會(huì)偽裝成用戶將其發(fā)送的加密應(yīng)答發(fā)往不同的服務(wù)器并獲得認(rèn)證。加入domain值可以識(shí)別服務(wù)器的身份,從而克服了上述問題。?
??? 此雙向認(rèn)證機(jī)制加入了字符串req-auth-digest,處在其中的nonce和req-digest-string一起被共享密鑰加密。在安全機(jī)制中,不同的nonce類型擁有不同的特點(diǎn)。大隨機(jī)數(shù)被認(rèn)為是最好的nonce類型,但需要較高的成本;時(shí)戳類型要求極好的時(shí)鐘同步和精確度;序列號(hào)類型相對(duì)簡單,但易于被預(yù)測(cè)。因此,當(dāng)nonce值在明文中傳送時(shí),謹(jǐn)慎地選擇nonce類型很有必要。本文提出的認(rèn)證機(jī)制可以避免因選擇nonce類型而出現(xiàn)的問題,它在挑戰(zhàn)和請(qǐng)求中都對(duì)nonce進(jìn)行了加密,這樣即使是可被預(yù)測(cè)到的nonce值也能夠使用,用戶代理可以自行選擇合適的nonce類型。字符串req-digest-string涉及到SIP消息頭域的一個(gè)子集,其中包含了狀態(tài)碼、From、To、Contact、Cseq 和Call-ID。這個(gè)字符串采用16進(jìn)制數(shù)編碼,其定義如下:?
??? req-degist-string = <'> ??????? ':' address-specification-in-To? ??????? ':' address-specification-in-Contact? ??????? ':' cseq-value? ??????? ':' called-value ><'>? ??? 在隨后給出的計(jì)算方法中,使用共享密鑰通過“secret”對(duì)數(shù)據(jù)內(nèi)容“data” 加密。? ??? 得到的字符串可表示成Ek(secret, data),對(duì)數(shù)據(jù)內(nèi)容“data”采用校驗(yàn)和算法產(chǎn)生的字符串由H(data)表示,unq(X)則表示引號(hào)內(nèi)的字符串。如果是服務(wù)器,必須要求含有H(A1)值。字符串a(chǎn)lgorithm說明了加密所采用的算法,默認(rèn)為“AES”。? ??? req-auth-digest-value =<'> 2.1.2? Authorization頭域? ??? Authorization頭域修改如下:? ??? credentials= 'Digest' digest-response? ??? digest-response=1#( username/realm/digest-uri/resp-author-digest/[ algorithm ]/[cnonce]/[opaque]/[message-qop]/[nonce-count]/[auth-param])? ??? resp-author-digest='resp-author-digest''='requestdigest-value? ??? request-digest-value = <'> < Ek’(H(B1), nonce-value?':' unq (resp-degist-string)?[':' nc-value]?[':'unq (cnonce-value)]?[':' unq (qop-value)]?':' H (B2)) > <'>? ??? B1=unq (realm-value) [':' unq (domain-value)]? ??? B2=Method ':' digest-uri-value? ??? 字符串resp-degist-string和WWW-Authenticate中的req-degist-string基本一致,只是少了狀態(tài)碼部分。K’表示一個(gè)新的密鑰,這個(gè)密鑰是按照協(xié)商好的算法由共享密鑰計(jì)算得到的,如K-1等,其中K代表了初始共享密鑰。? 2.2? 雙向認(rèn)證過程? ??? 圖1顯示了一個(gè)基于雙向認(rèn)證機(jī)制的SIP會(huì)話建立過程。假設(shè)用戶A和用戶B間的共享密鑰在所示SIP會(huì)話發(fā)生之前已經(jīng)配置完成(接下來將討論共享密鑰生成方法)。為了簡化說明,設(shè)定SIP代理服務(wù)器、SIP注冊(cè)服務(wù)器和位置服務(wù)器均在同一個(gè)主機(jī)上。? ? ? ??? 用戶A發(fā)起一個(gè)基于明文的INVITE請(qǐng)求,一旦接收到這個(gè)消息,用戶B則認(rèn)為需要對(duì)用戶A進(jìn)行身份驗(yàn)證,繼而返回一個(gè)特殊的SIP錯(cuò)誤消息作為挑戰(zhàn),要求用戶A提供身份證明。錯(cuò)誤消息401 Unauthorized即用戶B發(fā)出的挑戰(zhàn),它包含了加密后的nonce和req-auth-digest,消息內(nèi)容如下所示:? ??? SIP/2.0 401 Unauthorized? ??? WWW-Authenticate: Digest? ??? realm='test@host.com',? ??????? req-auth-digest='B9248DC13E14A784604D8F70C8283? ??????? CCA330D0FB19E548E01DEBBDBB31623A1F0FE7F1B? ??? ????? 9D5EC6536B722281FF4B4F7B6FBB9E37C8E1D7167FA? ??? ??? 65FE88242B0575927486CBABB7206A896FD3FD3E1C6? ??????? BBCE'? ??? 用戶A收到錯(cuò)誤消息后,用共享密鑰對(duì)req-auth-digest進(jìn)行解密,然后通過對(duì)nonce值和數(shù)據(jù)完整性的校驗(yàn)來驗(yàn)證用戶B的身份。如果校驗(yàn)正確,用戶A會(huì)通過已經(jīng)協(xié)商好的算法使用初始共享密鑰生成新的密鑰,并對(duì)接收到的nonce值和自己所發(fā)消息的部分頭域加密,重新產(chǎn)生序列。消息內(nèi)容如下所示:? ??? INVITE sip:UserB@131.160.1.112 SIP/2.0? ??? Authorization: Digest username='UserA',? ??????? realm='test@host.com',? ??????? uri='/dir/index.html',? ??????? resp-author-digest='DCB38CB9E982F7D2F767DE? ??????? CF3683ECE0CF77A951D6F78C3FC77352B6629375? ??? ???? ?? E5B8AC4A0E8A6F7AFF1FE8F775C3F73D9F626B9? ??????? BE6850EFD98D4792C01A1E60C05A66CE39FC7F6? ??????? E1B027A79CE83FE8795C'? ??? 若解密后的nonce值與保存的nonce值不匹配或者解密后的頭域與消息里的頭域不相符,用戶B將不會(huì)做出回應(yīng)并開始處理失敗的認(rèn)證;反之,用戶B將返回200 OK。? ??? 上述端到端的認(rèn)證要求代理服務(wù)器在整個(gè)過程中始終處于透明狀態(tài),即它們必須原封不動(dòng)地傳遞WWW-Authenticate和Authorization頭域。如果代理服務(wù)器在向服務(wù)器或其他實(shí)體傳遞用戶請(qǐng)求之前需要認(rèn)證用戶,可以用Proxy-Authenticate和Proxy-Authorization頭域,它們與WWW-Authenticate 和 Authorization頭域極其類似,被用于逐跳的安全保護(hù)。? 2.3 共享密鑰協(xié)商? ??? 這種雙向認(rèn)證機(jī)制需要會(huì)話雙方進(jìn)行共享密鑰協(xié)商。完美前向保密性要求共享密鑰應(yīng)定期更新,所以共享密鑰必須在首次使用或密鑰更換時(shí)被安全地協(xié)商,建議使用Diffie-Hellman算法實(shí)現(xiàn)協(xié)商過程。為了抵抗MITM攻擊,算法中p和q的數(shù)值可以通過帶外信道傳送或PKI發(fā)布,然后指數(shù)密鑰即可在不安全地信道里傳送。為了傳送指數(shù)密鑰,提出了一個(gè)新的SIP頭域——K-Exchange,它用于聲明在INVITE請(qǐng)求和200 OK響應(yīng)中包含了一個(gè)指數(shù)密鑰。擴(kuò)展后的消息交換如圖2所示。 ? ? ??? 通信雙方擁有共享密鑰之后,將會(huì)有足夠的信息生成共享會(huì)話密鑰,它能夠保護(hù)隨后媒體數(shù)據(jù)的完整性和機(jī)密性。例如,Ek(nonce)可以作為實(shí)時(shí)傳輸協(xié)議RTP(Real-time Transport Protocol)的共享會(huì)話密鑰。? ??? 本文提出了一種SIP輕量級(jí)雙向認(rèn)證機(jī)制,它采用通過Diffie-Hellman算法協(xié)商的共享密鑰,在不增加握手次數(shù)的情況下實(shí)現(xiàn)了雙向認(rèn)證,減少了會(huì)話開銷。此外,修改共享密鑰得到的共享會(huì)話密鑰能夠用來保護(hù)隨后的媒體數(shù)據(jù)。這種機(jī)制可以對(duì)諸如身份欺騙、拒絕服務(wù)等攻擊提供較好的抵抗。? ??? 目前對(duì)這種機(jī)制的性能優(yōu)化程度還沒有做定量的測(cè)試與分析,因此設(shè)計(jì)SIP通信系統(tǒng)模型并在其基礎(chǔ)上進(jìn)行不同認(rèn)證機(jī)制的開銷比較將成為今后的工作方向。 參考文獻(xiàn)? [1] ROSENBERG J, SCHULZRINNE H, CAMARILLO G. SIP:Session initiation protocol,Internet RFC 3261, 2002, 6.? [2] CHOI C Eun C, CHO H Kee, JAE S. Evaluation of??security protocols for the session initiation Protocol, Computer Communications and Networks, 2007. ICCCN 2007.Proceedings of 16th International Conference,2007.? [3] SALSANO S. VELTRI L, PAPALILO D. SIP security issues: the SIP authentication procedure and its?processing load, Network, IEEE, 2002,16(6):38-44.? [4] LEACH P, LUOTONEN A,STEWART L. HTTP?Authentication:Basic and Digest Access Authentication, RFC 2617, 1999,6.? [5] GENEIATAKIS D,KAMBOURAKIS G,DAGIUKLAS?T,et al.?? A framework for detecting malformed?messages in SIP networks, the Proceedings of 14th?IEEE Workshop on Local and Metropolitan Area?Networks (LANMAN), 2005.? [6] EL S S, URIEN P. SIP security attacks and?solutions: A state-of-the-art review, Information?and Communication Technologies,2006.ICTTA’06.2nd, 2006,2:3187-3191.? [7] 俞志春,方濱興,張兆心.SIP協(xié)議的安全性研究,計(jì)算機(jī)應(yīng)用,2006,26(9):2124-2126.? [8] Bremler-Barr, A. Halachmi-Bekel, R. KANGA-SHARJU?J.Unregister attacks in SIP. Secure Network Protocols,2006. 2nd IEEE Workshop, 2006.? [9] KONG L, BALASUBRAMANIYAN V B, AHAMAD M. A?lightweight scheme for securely and reliably locating SIP?users. VoIP Management and Security, 2006,9-17.? [10] Leitold, MEDVE F, KOVACS A, Levente. SIP security?problems in NGM Services,Next Generation Mobile Applications, Services and Technologies, 2007. NGMAST '07.The 2007 International Conference, 2007.