譚 覓, 王文勝
(中國電子科技集團公司第三十研究所,四川 成都 610041)
會話初始協(xié)議(SIP)是IETF規(guī)定的一種基于IP的應(yīng)用層信令控制協(xié)議,采用文本編碼,結(jié)構(gòu)簡單,使用靈活且擴展性強。然而SIP應(yīng)用于完全開放的Internet環(huán)境,其協(xié)議本身也沒有明確規(guī)定的安全機制,所以 SIP的安全性并不能得到保證[1]。目前大多數(shù)SIP應(yīng)用中,數(shù)據(jù)包以明文傳輸,可能遭到攻擊者的惡意修改,遭受注冊劫持、消息篡改和非法監(jiān)聽等各種形式的攻擊,其原因在于沒有一種可靠的機制來保證SIP應(yīng)用的身份認(rèn)證和消息的機密性。
文獻(xiàn)[2]提出了一種應(yīng)用層的安全策略,改變了SIP頭部Call-ID的生成方法,需要對現(xiàn)有協(xié)議棧進行修改,且對SIP消息采用非對稱加密,影響了加解密速率。文獻(xiàn)[3]提出了一種SIP輕量級雙向認(rèn)證機制,采用AES對稱加密算法,提高了加解密速率。但是該方法對HTTP摘要認(rèn)證中的digest-challenge字段進行了修改,需要對現(xiàn)有設(shè)備進行改進,增加了實現(xiàn)的難度。文獻(xiàn)[4-5]提出了采用S/MIME的機制實現(xiàn)對SIP消息體的加密,實現(xiàn)了端到端的安全保護,然而此方法對SIP消息頭并沒有提供任何安全措施。
鑒于以上方案在SIP用戶認(rèn)證和信令機密性等方面存在的不足,提出了一種改進的SIP信令安全機制。該機制實現(xiàn)了用戶注冊階段的雙向認(rèn)證,且對于后續(xù)的SIP信令消息采取對稱加密。在建立會話之前的用戶認(rèn)證階段,客戶端和注冊服務(wù)器之間首先建立TLS連接。用戶注冊完成后,對于會話建立時的信令,客戶端與服務(wù)器之間仍然采用之前的TLS通道,服務(wù)器之間則通過IPSec提供保護。因此,信令的所有交互流程的機密性都得到了保證,且對于信令消息都使用的是對稱加密算法,使得SIP信令加解密速率和安全性都得到了提高。
用戶注冊階段首先要解決的就是身份認(rèn)證。目前大部分SIP應(yīng)用采用HTTP摘要認(rèn)證對SIP用戶進行驗證。然而,使用HTTP摘要認(rèn)證的客戶端不能認(rèn)證服務(wù)器并且對消息完整性的保護也不夠充分[3]。為了實現(xiàn)客戶端對服務(wù)器的認(rèn)證,必須考慮使用雙向認(rèn)證的機制。
1.1.1 客戶端對服務(wù)器的認(rèn)證
為了驗證服務(wù)器的合法性,本方法考慮在用戶注冊開始前,首先建立TLS通道,通過通道建立階段客戶端對服務(wù)器證書進行驗證來完成客戶端對服務(wù)器的認(rèn)證,具體步驟如下:
1)客戶端獲取CA認(rèn)證中心的根證書,服務(wù)器端下載自己的證書。
2)客戶端發(fā)起 TLS連接建立請求,申請對服務(wù)器進行身份驗證。
3)服務(wù)器將證書發(fā)送到客戶端,客戶端利用CA的根證書對服務(wù)器證書進行驗證。
4)若身份驗證通過,則根據(jù) TLS握手協(xié)議的流程繼續(xù)進行會話密鑰協(xié)商。
從上述流程可以看出,SIP客戶端借助TLS協(xié)商中對于服務(wù)器證書的驗證,完成了針對服務(wù)器的身份認(rèn)證,從而完成了雙向認(rèn)證的第一步。
1.1.2 服務(wù)器對客戶端的認(rèn)證
在驗證了服務(wù)器的合法身份之后, TLS通道此時已經(jīng)建立,此后服務(wù)器與客戶端之間交互的信令都將受到TLS通道的保護。下面將完成服務(wù)器對客戶端的身份認(rèn)證。
該認(rèn)證方法與目前大多數(shù)SIP服務(wù)器對客戶端采取的認(rèn)證方法一致,即通過共享密鑰[6],使用挑戰(zhàn)響應(yīng)(Challenge-Response)機制完成對用戶的身份認(rèn)證,具體步驟如下:
1)客戶端發(fā)送 REGISTER消息到服務(wù)器,請求進行用戶注冊。
2)服務(wù)器返回401 Unauthorized消息,指明用于驗證的nonce,realm和摘要算法。
3)客戶端將自己的username,與服務(wù)器共享的password,以及從收到的 401消息中的 nonce和realm,根據(jù)其指定的算法計算出一個摘要認(rèn)證消息返回給服務(wù)器。
4)服務(wù)器收到客戶端返回的響應(yīng)消息,在數(shù)據(jù)庫中查找共享密鑰,然后檢查返回的response值是否正確,如果正確,則認(rèn)定為合法用戶,并將其注冊到該服務(wù)器上。
通過以上兩個步驟,在沒有改變SIP現(xiàn)有格式和信令交互流程的情況下,完成了雙向認(rèn)證,即提高了安全性,又沒有增加過多的開銷,在服務(wù)器對客戶端的認(rèn)證階段,信令交互在TLS通道中完成的,所以攻擊者不能通過截取SIP頭部字段進行離線猜測強行破解密碼。
在完成SIP用戶的注冊之后,需要對會話兩端的IP地址、端口、媒體編碼格式和碼率等參數(shù)進行協(xié)商,以建立RTP媒體流[7]。目前的SIP應(yīng)用中,大多數(shù)情況下沒有采取有效的安全機制對信令進行保護,使得客戶端可能受到服務(wù)器重定向攻擊和INVITE請求偽造攻擊等安全威脅,其根本原因是SIP信令的機密性無法保證。為了解決這一問題,本方法考慮對建立會話的信令進行加密,由于SIP代理服務(wù)器需要對應(yīng)用層數(shù)據(jù)進行解析,不能采取端到端的加密方式,所以其過程又分為客戶端到服務(wù)器的加密以及服務(wù)器之間的加密兩個階段。
1.2.1 客戶端到服務(wù)器
客戶端和服務(wù)器之間的信令交互,利用用戶注冊階段建立的TLS通道進行加密保護。這樣既避免了再次協(xié)商加密通道造成的時間和資源的浪費,又保證了信令交互的機密性。
1.2.2 服務(wù)器到服務(wù)器
由于服務(wù)器之間的信令交互沒有采用任何安全機制,所以必須對其進行加密保護,考慮使用IPSec。相對于遍布Internet的SIP終端,代理服務(wù)器數(shù)量比較少、分布比較集中[8],且大多數(shù)情況下由運營商進行統(tǒng)一管理,所以考慮采用預(yù)共享密鑰實現(xiàn)代理服務(wù)器之間的身份認(rèn)證,預(yù)共享密鑰事先在各代理服務(wù)器上進行手動配置,密鑰協(xié)商采用IKE協(xié)議,其第一階段采用主模式預(yù)共享密鑰發(fā)起身份認(rèn)證,加密方式使用ESP的傳輸模式,Hash函數(shù)為Sha1,加密算法采用3des的對稱加密方式。
為了驗證上述方法的可行性,在 Linux環(huán)境下搭建仿真環(huán)境。客戶端和服務(wù)器均運行在 CPU為2.4 GHz,512 M內(nèi)存,操作系統(tǒng)為Ubuntu10.10的PC平臺上。客戶端運行Sipp模擬UAC發(fā)起注冊、建立會話和 UAS響應(yīng)會話的功能,服務(wù)器運行Opensips模擬SIP注冊服務(wù)器、代理服務(wù)器,使用Openvpn協(xié)商建立TLS通道,使用IPSec-Tools實現(xiàn)IPSec加密。
配置Opensips對用戶進行HTTP摘要認(rèn)證,啟動Openvpn建立客戶端與服務(wù)器之間的TLS通道,在客戶端使用Sipp發(fā)起注冊,使用Tcpdump抓包進行分析,記錄完成整個注冊流程所需時間,與沒有建立TLS通道的情況進行比較。仿真場景如圖1所示。
Tcpdump抓包記錄如圖2所示,通過抓包記錄可以看出,采用加密機制之后,交互的SIP注冊信令均為Openvpn建立的TLS通道中傳輸?shù)拿芪?,所以保證了其機密性。
圖2 未加密和采用TLS通道的注冊信令交互流程
通過實驗數(shù)據(jù)可知,未建立TLS時,注冊需要0.005 4 s,采用TLS加密之后,完成一次注冊所需的時間為0.009 9 s,比沒有采用TLS增加了83%,但仍然在可以接受的范圍。
首先如 2.1節(jié)所述,在兩臺服務(wù)器上注冊兩個不同的用戶,并在服務(wù)器之間使用IPSec-Tools實現(xiàn)IPSec的ESP傳輸模式,在兩個客戶端分別運行Sipp為UAC和UAS模式,由UAC發(fā)起INVITE請求,UAS回應(yīng)200OK以模擬一次會話的建立??蛻舳伺c服務(wù)器間為之前建立的TLS通道,服務(wù)器間為IPSec加密。仿真場景如圖3所示。
Tcpdump抓包記錄如圖4所示,終端與服務(wù)器之間均為TLS通道中的加密數(shù)據(jù)包,服務(wù)器之間均為ESP數(shù)據(jù)包,保證了會話建立階段信令的機密性,可以使其免受安全威脅。
通過實驗數(shù)據(jù)可知,未采用安全機制的會話建立時間為0.008 5 s,采用上述安全機制后會話建立時間為0.023 1 s,雖然增幅較大,但其絕對值仍然較小,對用戶影響不大,證明該機制可行。
采用本文提出的針對SIP信令的安全機制,在用戶注冊階段,完成SIP客戶端與服務(wù)器之間的雙向認(rèn)證,且保證了注冊信令的機密性,比現(xiàn)有機制更加安全,可以防止服務(wù)器偽裝和注冊劫持等攻擊行為。在會話建立階段,通過TLS通道和IPSec的ESP傳輸模式的共同使用,實現(xiàn)了會話建立流程的全程加密,且加解密過程對SIP協(xié)議解析透明??偠灾?,采用本文提出的方法,保證了SIP用戶注冊和會話建立階段的安全,且沒有對現(xiàn)有的SIP格式和網(wǎng)絡(luò)架構(gòu)進行任何改變,并采用對稱加密算法,造成的開銷在可以接受的范圍之內(nèi),所以該方法可行。在仿真實驗時發(fā)現(xiàn),用于TLS通道協(xié)商的時間遠(yuǎn)遠(yuǎn)大于TLS和IPSec用于數(shù)據(jù)加解密所需的時間,所以可以結(jié)合SIP的特點進行進一步研究,以縮短通道協(xié)商的時間。
[1] ARKKO J, TORVINEN V, CAMARILLO G. Security Mechanism Agreement for the Session Initiation Protocol (SIP)[S].[s.l.]: IETF,2003.
[2] 隆昭華,李明哲.基于應(yīng)用層的 SIP安全機制設(shè)計[J].計算機工程與設(shè)計, 2010,31(15):3350-3353.
[3] 崔濤,高強,何寶宏.SIP協(xié)議的輕量級雙向認(rèn)證技術(shù)研究[J].電子技術(shù)應(yīng)用,2008(09):125-128.
[4] Kumiko Ono, Shinya Tachimoto. SIP Signaling Security for End-to-end Communication[C].USA:IEEE Conference Publications,2003:1042-1046.
[5] 婁穎. SIP協(xié)議安全機制研究[J]. 廣東通信技術(shù), 2004,24(04):5-8.
[6] 李婧,李雪,胡浩.基于 SIP的安全認(rèn)證機制的研究與改進[J].計算機工程,2009,35(02):162-164.
[7] ROSENBERG J, SCHULZRINNE H, CAMARILLO G. SIP:Session Initiation Protocol[S].[s.l.]:IETF,2002.
[8] 儲泰山,潘雪增.SIP安全模型研究及實現(xiàn)[J].計算機應(yīng)用與軟件,2004,12(21):101-103.
[9] 王嘯,周淵平. VoIP系統(tǒng)中 NAT穿越技術(shù)的研究與實現(xiàn)[J].通信技術(shù),2010,43(10):105-107.
[10] 陳偉,鮑慧.IMS網(wǎng)絡(luò)拓?fù)潆[藏及其加密算法的研究[J].通信技術(shù),2008,41(03):85-87.
[11] 衛(wèi)亞兵,蘇宏,郝平軟交換系統(tǒng)中的 SIP信令安全[J].信息安全與通信保密,2005(10):76-79.