《电子技术应用》
您所在的位置:首页 > 其他 > 业界动态 > SIP协议安全分析与解决方法

SIP协议安全分析与解决方法

2009-01-15
作者:贾 衍1, 徐东升2, 卜 哲

    摘  要: 分析了几种常见的SIP协议的安全威胁,提出了两种可能性也很大的安全威胁,在此基础上从SIP协议消息交互过程出发,提出了几种新的解决思路和方法。 

    关键词: SIP协议; 安全

 

1 SIP协议 

    会话初始协议SIP(Session Initiation Protocol)[1]是由IETF(Internet工程任务组)提出的IP电话信令协议。它是一个应用层的控制协议,可以用来建立、修改、终止多媒体会话。SIP协议工作于通讯协议之下,并不依赖于建立的会话类型。 

    SIP协议是采用UTF-8字符集进行编码的文本协议。SIP消息分为请求和响应两类,分别由起始行、一个或多个头字段、可选的消息体组成。RFC3261中定义了六种请求方法:邀请对方参与会话(INVITE)、确认信息(ACK)、用于取消会话(CANCEL)、查询服务器的能力(OPTIONS)、用于结束会话(BYE)、发送注册请求信息(REGISTER)。同时,RFC3261中还定义了六种应答状态码:临时响应(1XX)、成功响应(2XX)、重定向响应(3XX)、客户机错误(4XX)、服务器错误(5XX)、全局故障(6XX)。 

    SIP系统包含用户代理、重定向服务器、注册服务器和代理服务器。用户代理UA(User Agent)是一个逻辑功能实体,当产生请求消息时作为用户代理客户端(UAC),当接收请求并产生响应时作为用户代理服务器端(UAS)。 

2 SIP协议的安全问题 

    SIP协议具有易用性、灵活性和扩展性强等特点,这使得SIP协议的应用越来越广泛。但由于SIP一般使用文本方式在IP网络上传输,并且SIP使用了代理服务器、重定向服务器等中间设备,使其消息的完整性、保密性、可用性和真实性存在安全隐患。但可以通过研究几种比较常见的、典型的SIP安全威胁的方式来找到必要的解决方法,以保证SIP协议的安全运行。 

2.1 注册劫持 

    这种安全威胁发生在SIP的注册过程中,SIP注册就是用户终端向注册服务器登记终端用户在何处可以被访问。一方面,注册服务器根据发起注册请求的UA所发送的注册消息的From头字段中的信息来判断其身份,同时也判定其是否可以修改已经注册的联系地址。但是,由于From头字段可以被UA任意修改,这就使恶意注册成为可能。另一方面,SIP中允许第三方代表用户来注册联系信息,这也为恶意注册提供了方便。这类威胁存在的根本原因是用户发出的注册请求消息没有进行必要的加密,并且用户也被允许任意修改这些信息,同时没有一类安全机制使SIP实体能够认证请求发送者的身份。 

2.2 服务器伪装 

    攻击者通过伪装服务器而达到攻击的目的。在SIP消息交互过程中,请求消息中的Request-URI域详细说明了该消息发送的目标域。UA通常直接向域中的服务器发出呼叫请求,呼叫请求再由服务器向被呼叫者或者下一跳服务器转发,这就给攻击者伪装成服务器的机会。当UA的请求被截获,泄露会话的关键信息后,就存在攻击者假冒服务器的可能。攻击者还可以假冒注册服务器获取注册信息。为了防止这类服务器伪装攻击,就需要UA对服务器的合法身份进行鉴别。 

2.3 消息篡改 

    SIP UA通过信任的代理来路由呼叫,虽然UA可以鉴别代理服务器是否可信,但是它却不检查请求消息实体是否已被篡改。UA通过SIP消息体来传送媒体会话加密的密钥时,恶意的代理就可以改动消息体,或者作为中间人,或者直接改写会话加密的安全特性。防止这类攻击的手段就是需要保证消息头和消息体的安全,这包括私密性、完整性和认证鉴权。 

2.4 中断会话 

    SIP通过BYE请求结束会话,攻击者能够伪造BYE请求,一旦伪造的BYE请求被接收者收到,会话就会被提前结束。同样,攻击者可以通过发送伪造的re-Invite请求来改变会话。这类安全威胁出现的原因是攻击者通过获取会话的一些初始化信息,从而得到会话的一些参数(如To标记、From标记等)。防止这类安全威胁至少有两种方法:一是对BYE消息发起者的身份进行鉴别;二是保证会话初始化信息的机密性,使攻击者无法获取伪造会话消息的会话参数。 

2.5 拒绝服务与服务放大 

    拒绝服务一般指通过向特定的网络接口发送大量的信息使系统被破坏或暂不可用。拒绝服务攻击的表现是获得授权的实体不能获得对网络资源的正常访问,或推迟实时操作等。多数情况下,SIP系统的重定向服务器、注册服务器、代理服务器位于Internet上,这就为攻击者发起拒绝服务攻击提供了机会。SIP设备除了作为直接被攻击的对象外,还有可能作为DOS攻击的帮凶,起到放大DOS攻击的作用。 

    上述这些情况需要SIP协议运行于一个具有良好的安全体系结构网络,从而尽可能降低这类拒绝服务攻击的安全威胁。 

2.6 客户端伪装(Impersonating a Client) 

    通过获取一个UA发出INVITE请求消息的From头字段的方式,攻击者可以伪装成被攻击的UA主动发起会话建立请求或修改已经存在的会话属性。这种攻击一方面可能造成被攻击的UA与其他UA的会话信息被泄露,例如,攻击者可以假冒UserA与UserB进行会话,攻击者Attacker只需将自己的From头字段内容修改成为UserA的,然后向UserB发起会话请求,SIP服务器将此请求发送给UserB,由于SIP服务器与UserB都无法鉴别请求发送者的身份,所以攻击者Attacker就假冒UserA与UserB进行会话,其流程如图1(a)所示。另一方面这种攻击也可能中断或修改已经建立的会话。例如,UserA与UserB已经建立了SIP会话,这时,攻击者可以分别假冒UserA与UserB向对方发送BYE请求,这时,请求接收方UserB与UserA都会误以为是对方发送的BYE请求,会话即被中断,其流程如图1(b)所示。要防止这类攻击就需要服务器对UA的合法身份进行鉴别。

 

 

2.7 破坏会话建立(Breaking up the Connection)

    当会话请求INVITE被发送以后,可以通过发送CANCEL请求来取消这个会话。攻击者可以通过假冒会话发起方发送CANCEL请求,从而达到破坏会话建立的目的。例如,UserA发给UserB的INVITE请求被攻击者Attacker截获,获得了To、From等内容后,在消息中插入了发给UserB的CANCEL请求,于是,UserA的会话请求被取消,无法与UserB建立会话,其流程如图2所示。 

 

 

3 SIP协议的安全机制 

    通过对以上几种现有的或补充的SIP协议可能受到的安全威胁进行分析,据此就有可能提供必要的安全机制来保证SIP协议的安全运行。目前现有的一些安全机制有:HTTP Digest、S/MIME、TLS和SIPS URIS。 

3.1 HTTP Digest身份认证[2] 

    HTTP Digest身份认证是基于HTTP的challenge/response的机制,即只接受有证书(credential)的请求,对没有证书的请求则通过401/407要求对方重发包含认证信息的请求。但由于目前HTTP Digest认证仅能实现Server(包括Proxy、Registrar和Redirect Server)对本域内的UA的认证,而无法实现UA对Server的认证、Proxy对Proxy的认证和Proxy对域外UA的认证,所以已经出现的不少攻击正是针对这些缺陷来实施的。 

3.2 S/MIME[3] 

    安全多用途互联网邮件扩展协议S/MIME(Secure/Multipurpose Internet Mail Extensions)是一种端到端加密方式,它是单向散列算法和公/私钥相结合的加密体系,采用对称加密和非对称加密结合,用公钥加密会话密钥,会话密钥来加密消息,能够提供保密、鉴别、数字签名等功能。但S/MIME的局限性在于证书的权威性。用户本应该向公开授权机构申请证书,但用户也可以自己签发证书,并且自制证书在会话初始能否通过鉴别是由用户决定的,这就留下了潜在的安全漏洞。 

3.3 TLS保护 

    传输层安全TLS(Transport Layer Security)用于在两个通信应用程序之间提供保密性和数据完整性,是面向连接协议即TCP之上的传输层安全,该协议分为上层的TLS Handshake协议和下层的TLS Record协议。但由于在SIP协议中,传输层的机制是基于点到点的,使用TLS机制发送请求到代理服务器的SIP UA并不能保证请求在整个端到端的路径中都是用TLS机制。另外,TLS不能在UDP上运行,目前大多数SIP都运行在UDP上,对SIP服务器来说,同时维持大量的TLS连接负荷会很重,导致容量不足的问题。此外,TLS在穿越防火墙时也存在一些问题。 

3.4 SIPS  URIS 

    统一资源定位符URI(Uniform Resource Identifier)是网络环境下一种简单和可扩展的标识机制。SIPS URI和SIP URI都是用于标识定位SIP网络中网络资源,URI中包含了足够的信息以满足SIP网络中的资源的互访。除了应用在Request-URI上,SIPS安全机制还可以应用到其他的SIP URI中,包括注册地址和联系地址等。 

4 新的解决思路与方法 

    上述的几种安全机制都是针对整个通信过程中所有完整的SIP消息进行的端到端或点到点的加密或鉴权机制,这些安全机制本身存在着或多或少的不足,例如,因额外的计算所带来的处理负担更容易受到DDOS类的攻击,需要额外的投入来进行鉴权机制的建立等。 

    本文从SIP协议自身出发,着眼于消息交互流程,提出有别于上述几种安全机制的一些思路与方法,即考虑在SIP消息格式或SIP消息交互流程上运行一些完善措施,避免对每个SIP消息进行整体的加密或身份鉴权。这样,既可以减少对鉴权机制和一些加密算法的使用,减轻了设备的负担,又可以提高消息传输速率,在安全与简单有效之间进行一个较为平衡的折中。 

4.1 加入一次握手的确认信息 

    通过研究上述几种安全威胁,分析其具体攻击过程,可以发现SIP协议最容易受到攻击的一种情况就是:没有一次握手的确认信息。在这种情况下,可以加入身份认证,有针对性地防范安全威胁。 

    方法是:当服务器端或者客户端UserB接收到具有特殊意义的SIP消息时,根据原始请求发送者UserA的Contact地址,向其发送一次握手的确认信息,该确认信息采用身份认证的方式,通过发送ACK消息来向原始请求发送者UserA询问其是否发了消息,该ACK消息带有随机数nonce、作用域realm。当原始请求发送者UserA接收到消息时,若之前具有特殊意义的消息是其发送的,则回复带有由用户名username、共享密钥password、随机数nonce和作用域realm几项经过组合并利用MD5算法生成后的结果的200 OK状态码,接收端UserB对收到的结果进行认证。若UserA之前没有发送具有特殊意义的消息,则根据其是客户端还是服务器端,回复不同的错误状态码(4XX/5XX)。超时不回复的,也视为错误处理。具体实现流程如图3所示。 

 

 

    此方法比较适用于防范下面几种常见的攻击: 

    (1) 注册劫持攻击:注册劫持攻击的特点是攻击者冒充注册用户向注册服务器发送注册注销请求。当注册服务器接收到Contact:*,Expires:0的消息或From头字段值和To头字段值不相同的消息时,需要加入一次握手的确认信息,来确认消息发送者的身份。 

    (2) 中断会话和破坏会话建立攻击:这两种攻击方式的特点是客户端或服务器端收到BYE、CANCEL或re-Invite请求。当UA收到以上三种消息请求时,需要加入一次握手的确认信息。 

    (3) 服务器端伪装和客户端伪装攻击:可以采用通过在客户端或服务器端建立一个列表来保存上一次通信的(From, Contact)对的方法,当接收到新的请求时,查询(From, Contact)对,如果不相符,则加入一次握手的确认信息,这种方法一定程度上也可以减少对请求发送者的身份认证。但也可以设置一个老化时间参数,在一定时间内刷新(From, Contact)对。 

4.2 在服务器端和客户端各增加一个Contact地址列表 

    这种方法的思路是:在通信双方之间建立一个可信域,对可信域范围外的可疑请求一律进行身份认证。 

    由于SIP消息中的Contact头字段给出下一次SIP服务器或目的UA与自身的联系地址,通常攻击者通过把自身地址改为Contact地址的方式,使得将发往被攻击者的一切消息转为发给攻击者,从而实施了攻击。因此,可以在客户端和服务器端都增加一个Contact地址列表,如果请求发送方UserA的Contact地址在其列表之内的,则接收方UserB无需对其进行身份认证;如果是在地址列表之外的请求,UserB需对UserA用身份鉴权机制进行验证,确认其可信后,将该地址加入自己的Contact地址列表。否则,不接收请求。具体实现流程如图4所示。 

 

 

4.3 给SIP消息头域增加一个头字段 

    这种方法是对SIP协议消息中重要的关键字段进行加密,将加密后的数据存放在SIP消息头域新增加的一个头字段Au中。其示意图如图5所示。相对于SIP安全机制的端到端加密或点到点加密的方法,部分加密的优点在于在降低了身份鉴权和加密机制的复杂程度的同时,有效地保证了SIP协议的安全。 

 

 

    一个具体的实现方式是在消息交换过程中,消息发送方UserA发送第N个消息时,选取共享密钥表中第N个密钥,对关键字段进行“不可逆”加密[4],将计算结果作为Au头字段发送给接收方UserB,接收方对利用第N个密钥对Au字段数据进行解密,并对结果进行如下判断:解密后的关键字段是否与接收消息中对应的关键字段一致,若不一致则判断其受到了安全威胁,若相同则对接收的消息进行处理。这种方法需要双方在交换消息前,实现共享的密钥表,密钥表的复杂度可根据需要具体选择。 

    这种方法尽管同样应用了加密算法和身份鉴权机制,但加密方式相对比较简单,在降低计算负担的同时也能保证SIP协议的安全运行。本文中所列出的几种常见安全威胁都可以采用这种方法进行有效防范。 

    SIP凭借其简单、易于扩展、便于实现等优点越来越得到业界的青睐。随着越来越多支持SIP的客户端软件和智能多媒体终端的出现,SIP用户不断增加, SIP的安全问题也将受到更多的关注。SIP的安全对策研究将不断深化,安全机制将不断完善,它将会进一步为广大用户提供更加多样、安全的服务。 

参考文献 

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

[2] 王宇飞,范明钰,王光卫.一种基于HTTP摘要认证的SIP安全机制.重庆邮电学报(自然科学版),2005,(17):749. 

[3] 王原丽,严剑.基于S/MIME 的SIP 安全机制.信息安全与通信保密,2005,(5):40. 

[4] 王朔中, 张新鹏, 张开文. 数字密写和密写分析[M].北京:清华大学出版社,2005.

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。