SIP协议面临的安全攻击
在基于SIP协议的应用中,每个SIP客户端要与其他的客户端建立会话连接。它首先必须向SIP注册服务器进行注册,告诉注册服务器自己当前的具体地址信息,这个过程通过向注册服务器发送Register消息来完成,注册服务器向客户端UA返回200 OK消息,则表示注册成功。
客户端UA则会通过向目标UA发送INVITE消息来与该目标UA建立会话,例如Alice希望与Bob建立会话,那么Alice将向Bob发送INVITE消息,这个消息首先会被发送到Alice对应的转发服务器,该转发服务器将该INVITE消息转发给下一跳的服务器,最后当消息转发到Bob所对应的转发服务器之后,该服务器根据Bob注册的地址信息,将该INVITE消息发送到Bob当前的具体地址。Bob收到该消息之后,如果同意与Alice建立会话,则会返回一个200 OK消息,该消息通过各个转发服务器的传递,最后会发送到Alice,Alice向Bob返回一个ACK消息,从而Alice与Bob之间就建立了一个SIP会话。该会话建立后,通话双方根据会话建立过程中SDP报文协商的媒体传输的相应参数来建立媒体流通话,进行媒体流的传输。
在SIP会话建立的过程中,由于缺乏相应的身份认证机制和加密措施,就使得攻击者能够进行假冒身份、窃听会话内容,修改SIP消息内容等多种安全攻击。
注册劫持攻击
在客户端UA向注册服务器进行注册的过程中,由客户端向注册服务器发送Register消息。在这个消息中,消息头To记录了客户端UA对应的SIP URI,例如sip:Alice@example.com,这个地址是其他UA知道的,籍以向Alice发起请求的URI;消息头Contact中记录了Alice当前的具体地址信息,例如sip:Alice@200.201.202.203。当注册服务器接收到这一注册消息之后,它将这一对地址信息存储在数据库中以备后来查询之用,同时向Alice返回200 OK消息,注册过程结束。
我们可以看到,由于在注册过程中缺少身份验证机制,攻击者可以很容易伪造假的注册消息。例如恶意UA Trudy希望截获发往Alice的会话请求,那么它就可以通过向注册服务器发送一个伪造的注册消息来达到这一目的,这被称为注册挟持。在这个假的注册消息中,它将To消息头的内容填为sip:Alice@example.com,然后将Contact的内容填为自己的具体地址,如sip:Alice@100.101.102.103,如图2所示。当注册服务器将此注册信息加入到数据库中后,那么以后发往Alice的会话建立请求都会发向Trudy。这样就造成了Alice的SIP客户端不可用,Trudy也可以对发往Alice的会话建立请求进行记录与监听,这会损害到会话双方的私密性。在基于SIP的VoIP应用中,Trudy还可以通过设置Voice Mail系统来诱使会话请求者留下语音消息。Trudy也可以将接收到的对Alice的会话请求转发给Alice,这样Trudy就可以完成中间人(Man in The Middle)攻击,在会话双方进行通话的同时对会话双方的信令通信内容与媒体通信内容进行监听与修改。
假冒客户端UA攻击
在注册劫持攻击中,恶意的UA可以达到假冒其他UA的目的,这种假冒UA的攻击是在别人向被攻击UA发起会话建立请求时实现的。攻击者也可以假冒别的UA,以被攻击者的身份主动向其他的UA发起会话建立请求或修改已经存在的会话的属性。
当Alice想与Bob建立SIP会话时,Alice就向Bob发出一个INVITE消息。在这个INVITE请求消息中,From消息头标识了发送此INVITE消息的UA,例如Alice发送的INVITE消息的From消息头中就带有sip:Alice@example.com的信息(From消息头中还带有其他信息如tag等)。但由于这个SIP消息头是由UA来设定填写的,而且在SIP会话建立过程中,各个SIP实体之间没有验证彼此身份的机制,因此恶意的UA就可以通过修改此消息头来达到攻击的目的。例如攻击者Trudy将自己INVITE消息的From消息头sip:Trudy@malicious.com修改为sip:Alice@example.com,并将此INVITE消息通过SIP服务器发送给Bob,由于SIP服务器与Bob都无法验证该From消息头是真是假,它们都会认为是Alice发起了这个SIP会话。从而Trudy就达到了假冒Alice与Bob建立会话的目的。
这种通过假冒某个UA来与其他UA建立会话的攻击可能造成被攻击UA与会话中的其他UA私密信息的泄漏。另外一个严重的后果就是攻击者可以以被攻击者的身份发送假的消息,修改或中断被攻击者与其他UA已经建立的会话。例如当Alice与Bob已经建立了SIP会话,开始进行媒体流的传输,攻击者Trudy此时分别冒充Alice与Bob的身份向Bob与Alice各发送一个BYE消息,如图3所示。Alice与Bob会认为是对方发起了中断对话的请求,从而断开连接,结束会话。这种攻击会使得已经建立的会话意外中断或改变,有时会带来很严重的后果。
假冒服务器攻击
SIP客户端UA与SIP服务器(包括注册服务器,转发服务器与重定向服务器)进行通信时,并没有验证服务器的身份。服务器之间进行相互通信的时候,也缺乏相应的身份验证机制,因此攻击者假冒服务器的攻击也是SIP协议所面临的风险之一。
假冒服务器的攻击与假冒客户端UA不一样,它不是对SIP消息的改动,而是一般通过DNS哄骗攻击,或ARP缓存哄骗等攻击来实现。攻击者通过假冒服务器攻击能够实现对通过它的所有SIP消息的监听,能够随意地修改通过它的SIP消息,它也可以通过丢弃相应的SIP报文来使某些UA不可达,还可以通过发送假的SIP消息来使来中断会话或者修改会话。
假冒服务器的攻击将会导致攻击者对经过它的SIP消息与相应的SIP会话有完全的控制。
消息的完整性与机密性攻击
SIP协议没有设计相应的机制来保证SIP消息的完整性。在SIP消息的传输过程中,攻击者可以截获该SIP消息,并对该消息进行修改,再将修改过的消息发给该SIP消息对应的下一跳SIP实体。SIP消息完整性的攻击可以通过上面所说的注册劫持来实现,也可以通过假冒服务器来实现,这些都是通过对SIP实体进行攻击来实现的。SIP消息的完整性攻击也可以在SIP消息的传输链路上实现,通过在链路上截获传输的SIP消息,对其进行修改之后再发送给下一跳SIP实体。由于SIP服务器在转发SIP报文的过程中需要对SIP报文进行处理(例如修改SIP消息中的Via消息头),那么SIP服务器的误操作也可能造成对SIP消息的完整性攻击。
在SIP会话建立过程中,SIP消息是以明文的形式进行传输的,这就使得攻击者可以很轻易地通过对链路进行监听,截获SIP报文得到SIP报文中的信息。对SIP消息传输路径上的各个SIP实体来说,整个SIP消息的内容都是可见的,所以被攻击的服务器能够获得完整的SIP消息。
SIP消息完整性攻击可能造成会话的不能正常建立,例如攻击者通过修改SIP消息中SDP报文所描述的端口参数信息就能够使得后续的媒体流会话不能正常建立,攻击者也可以通过修改SDP报文使得媒体流消息被发送到攻击者的地址与端口。SIP消息机密性攻击使得攻击者能够掌握被攻击UA的会话情况,如什么时间与谁进行通信,在哪个地址端口进行媒体流会话,这些都会损害到会话双方的私密性,这些信息会被攻击者利用造成进一步的攻击。
SIP协议安全方案介绍
从理论上来说,要保证SIP会话的安全,可以使用各种已有的安全协议。例如通过HTTP协议Authentication机制可以对SIP会话参与者进行身份验证。SIP协议与SMTP协议报文结构相似的特点也使得S/MIME机制可以应用到SIP会话中,来保证SIP消息的机密性与完整性,从传输层与网络层的安全协议(TLS与IPsec)出发,也可以使用TLS协议来对SIP消息进行安全保护,或使用IPsec提供VPN通道来实现安全保护。
在SIP安全解决方案的产品中,各个公司大部分依赖于其硬件设备来对进出的SIP会话通信进行过滤、封装,或在SIP会话参与者之间建立VPN通道,来实现SIP会话参与者之间的安全连接,同时这些硬件设备还集成了应用层网关等功能,来对SIP报文进行分析,实现NAT穿透等功能。Cisco、 Convergence等公司都有这方面的产品。在基于软件的SIP安全方案中,大部分通过对SIP客户端进行加强,通过客户端来安全会话通道,例如Minisip与Zfone。
进一步研究方向
基于SIP协议的VoIP及视频会议等服务得到了越来越广泛的应用,SIP协议的安全问题也越来越受到人们的重视。在已有的方案中,采用硬件设备来对进出的SIP会话进行控制,或者通过硬件设备来建立VPN通道来对SIP会话进行保护的方式可以到达好的安全性能,但是代价较大。基于软件的安全SIP客户端多采用PKI证书体系来实现身份认证与其他安全保护功能,但PKI体系本身难于管理,效率较低等问题难以满足实时SIP应用的要求,因此,我们认为以下几点是SIP安全研究需要进一步解决的问题:
建立有效的身份认证体系,对SIP会话参与者进行身份认证;
寻找轻载的数字签名方案,来对SIP消息进行完整性保护;
建立高效的密钥管理与协商机制,快速的协商会话密钥,对SIP信令流与媒体流进行机密性保护。
本文选自:《中国教育网络》
特别声明:本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。