譚 覓, 王文勝
(中國電子科技集團公司第三十研究所,四川 成都 610041)
會話初始協議(SIP)是IETF規定的一種基于IP的應用層信令控制協議,采用文本編碼,結構簡單,使用靈活且擴展性強。然而SIP應用于完全開放的Internet環境,其協議本身也沒有明確規定的安全機制,所以 SIP的安全性并不能得到保證[1]。目前大多數SIP應用中,數據包以明文傳輸,可能遭到攻擊者的惡意修改,遭受注冊劫持、消息篡改和非法監聽等各種形式的攻擊,其原因在于沒有一種可靠的機制來保證SIP應用的身份認證和消息的機密性。
文獻[2]提出了一種應用層的安全策略,改變了SIP頭部Call-ID的生成方法,需要對現有協議棧進行修改,且對SIP消息采用非對稱加密,影響了加解密速率。文獻[3]提出了一種SIP輕量級雙向認證機制,采用AES對稱加密算法,提高了加解密速率。但是該方法對HTTP摘要認證中的digest-challenge字段進行了修改,需要對現有設備進行改進,增加了實現的難度。文獻[4-5]提出了采用S/MIME的機制實現對SIP消息體的加密,實現了端到端的安全保護,然而此方法對SIP消息頭并沒有提供任何安全措施。
鑒于以上方案在SIP用戶認證和信令機密性等方面存在的不足,提出了一種改進的SIP信令安全機制。該機制實現了用戶注冊階段的雙向認證,且對于后續的SIP信令消息采取對稱加密。在建立會話之前的用戶認證階段,客戶端和注冊服務器之間首先建立TLS連接。用戶注冊完成后,對于會話建立時的信令,客戶端與服務器之間仍然采用之前的TLS通道,服務器之間則通過IPSec提供保護。因此,信令的所有交互流程的機密性都得到了保證,且對于信令消息都使用的是對稱加密算法,使得SIP信令加解密速率和安全性都得到了提高。
用戶注冊階段首先要解決的就是身份認證。目前大部分SIP應用采用HTTP摘要認證對SIP用戶進行驗證。然而,使用HTTP摘要認證的客戶端不能認證服務器并且對消息完整性的保護也不夠充分[3]。為了實現客戶端對服務器的認證,必須考慮使用雙向認證的機制。
1.1.1 客戶端對服務器的認證
為了驗證服務器的合法性,本方法考慮在用戶注冊開始前,首先建立TLS通道,通過通道建立階段客戶端對服務器證書進行驗證來完成客戶端對服務器的認證,具體步驟如下:
1)客戶端獲取CA認證中心的根證書,服務器端下載自己的證書。
2)客戶端發起 TLS連接建立請求,申請對服務器進行身份驗證。
3)服務器將證書發送到客戶端,客戶端利用CA的根證書對服務器證書進行驗證。
4)若身份驗證通過,則根據 TLS握手協議的流程繼續進行會話密鑰協商。
從上述流程可以看出,SIP客戶端借助TLS協商中對于服務器證書的驗證,完成了針對服務器的身份認證,從而完成了雙向認證的第一步。
1.1.2 服務器對客戶端的認證
在驗證了服務器的合法身份之后, TLS通道此時已經建立,此后服務器與客戶端之間交互的信令都將受到TLS通道的保護。下面將完成服務器對客戶端的身份認證。
該認證方法與目前大多數SIP服務器對客戶端采取的認證方法一致,即通過共享密鑰[6],使用挑戰響應(Challenge-Response)機制完成對用戶的身份認證,具體步驟如下:
1)客戶端發送 REGISTER消息到服務器,請求進行用戶注冊。
2)服務器返回401 Unauthorized消息,指明用于驗證的nonce,realm和摘要算法。
3)客戶端將自己的username,與服務器共享的password,以及從收到的 401消息中的 nonce和realm,根據其指定的算法計算出一個摘要認證消息返回給服務器。
4)服務器收到客戶端返回的響應消息,在數據庫中查找共享密鑰,然后檢查返回的response值是否正確,如果正確,則認定為合法用戶,并將其注冊到該服務器上。
通過以上兩個步驟,在沒有改變SIP現有格式和信令交互流程的情況下,完成了雙向認證,即提高了安全性,又沒有增加過多的開銷,在服務器對客戶端的認證階段,信令交互在TLS通道中完成的,所以攻擊者不能通過截取SIP頭部字段進行離線猜測強行破解密碼。
在完成SIP用戶的注冊之后,需要對會話兩端的IP地址、端口、媒體編碼格式和碼率等參數進行協商,以建立RTP媒體流[7]。目前的SIP應用中,大多數情況下沒有采取有效的安全機制對信令進行保護,使得客戶端可能受到服務器重定向攻擊和INVITE請求偽造攻擊等安全威脅,其根本原因是SIP信令的機密性無法保證。為了解決這一問題,本方法考慮對建立會話的信令進行加密,由于SIP代理服務器需要對應用層數據進行解析,不能采取端到端的加密方式,所以其過程又分為客戶端到服務器的加密以及服務器之間的加密兩個階段。
1.2.1 客戶端到服務器
客戶端和服務器之間的信令交互,利用用戶注冊階段建立的TLS通道進行加密保護。這樣既避免了再次協商加密通道造成的時間和資源的浪費,又保證了信令交互的機密性。
1.2.2 服務器到服務器
由于服務器之間的信令交互沒有采用任何安全機制,所以必須對其進行加密保護,考慮使用IPSec。相對于遍布Internet的SIP終端,代理服務器數量比較少、分布比較集中[8],且大多數情況下由運營商進行統一管理,所以考慮采用預共享密鑰實現代理服務器之間的身份認證,預共享密鑰事先在各代理服務器上進行手動配置,密鑰協商采用IKE協議,其第一階段采用主模式預共享密鑰發起身份認證,加密方式使用ESP的傳輸模式,Hash函數為Sha1,加密算法采用3des的對稱加密方式。
為了驗證上述方法的可行性,在 Linux環境下搭建仿真環境。客戶端和服務器均運行在 CPU為2.4 GHz,512 M內存,操作系統為Ubuntu10.10的PC平臺上。客戶端運行Sipp模擬UAC發起注冊、建立會話和 UAS響應會話的功能,服務器運行Opensips模擬SIP注冊服務器、代理服務器,使用Openvpn協商建立TLS通道,使用IPSec-Tools實現IPSec加密。
配置Opensips對用戶進行HTTP摘要認證,啟動Openvpn建立客戶端與服務器之間的TLS通道,在客戶端使用Sipp發起注冊,使用Tcpdump抓包進行分析,記錄完成整個注冊流程所需時間,與沒有建立TLS通道的情況進行比較。仿真場景如圖1所示。

Tcpdump抓包記錄如圖2所示,通過抓包記錄可以看出,采用加密機制之后,交互的SIP注冊信令均為Openvpn建立的TLS通道中傳輸的密文,所以保證了其機密性。

圖2 未加密和采用TLS通道的注冊信令交互流程
通過實驗數據可知,未建立TLS時,注冊需要0.005 4 s,采用TLS加密之后,完成一次注冊所需的時間為0.009 9 s,比沒有采用TLS增加了83%,但仍然在可以接受的范圍。
首先如 2.1節所述,在兩臺服務器上注冊兩個不同的用戶,并在服務器之間使用IPSec-Tools實現IPSec的ESP傳輸模式,在兩個客戶端分別運行Sipp為UAC和UAS模式,由UAC發起INVITE請求,UAS回應200OK以模擬一次會話的建立。客戶端與服務器間為之前建立的TLS通道,服務器間為IPSec加密。仿真場景如圖3所示。


Tcpdump抓包記錄如圖4所示,終端與服務器之間均為TLS通道中的加密數據包,服務器之間均為ESP數據包,保證了會話建立階段信令的機密性,可以使其免受安全威脅。
通過實驗數據可知,未采用安全機制的會話建立時間為0.008 5 s,采用上述安全機制后會話建立時間為0.023 1 s,雖然增幅較大,但其絕對值仍然較小,對用戶影響不大,證明該機制可行。
采用本文提出的針對SIP信令的安全機制,在用戶注冊階段,完成SIP客戶端與服務器之間的雙向認證,且保證了注冊信令的機密性,比現有機制更加安全,可以防止服務器偽裝和注冊劫持等攻擊行為。在會話建立階段,通過TLS通道和IPSec的ESP傳輸模式的共同使用,實現了會話建立流程的全程加密,且加解密過程對SIP協議解析透明。總而言之,采用本文提出的方法,保證了SIP用戶注冊和會話建立階段的安全,且沒有對現有的SIP格式和網絡架構進行任何改變,并采用對稱加密算法,造成的開銷在可以接受的范圍之內,所以該方法可行。在仿真實驗時發現,用于TLS通道協商的時間遠遠大于TLS和IPSec用于數據加解密所需的時間,所以可以結合SIP的特點進行進一步研究,以縮短通道協商的時間。
[1] ARKKO J, TORVINEN V, CAMARILLO G. Security Mechanism Agreement for the Session Initiation Protocol (SIP)[S].[s.l.]: IETF,2003.
[2] 隆昭華,李明哲.基于應用層的 SIP安全機制設計[J].計算機工程與設計, 2010,31(15):3350-3353.
[3] 崔濤,高強,何寶宏.SIP協議的輕量級雙向認證技術研究[J].電子技術應用,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協議安全機制研究[J]. 廣東通信技術, 2004,24(04):5-8.
[6] 李婧,李雪,胡浩.基于 SIP的安全認證機制的研究與改進[J].計算機工程,2009,35(02):162-164.
[7] ROSENBERG J, SCHULZRINNE H, CAMARILLO G. SIP:Session Initiation Protocol[S].[s.l.]:IETF,2002.
[8] 儲泰山,潘雪增.SIP安全模型研究及實現[J].計算機應用與軟件,2004,12(21):101-103.
[9] 王嘯,周淵平. VoIP系統中 NAT穿越技術的研究與實現[J].通信技術,2010,43(10):105-107.
[10] 陳偉,鮑慧.IMS網絡拓撲隱藏及其加密算法的研究[J].通信技術,2008,41(03):85-87.
[11] 衛亞兵,蘇宏,郝平軟交換系統中的 SIP信令安全[J].信息安全與通信保密,2005(10):76-79.