一种基于SIP安全认证机制的研究

时间:2022-09-05 01:15:09

一种基于SIP安全认证机制的研究

摘要:目前,会话初始协议(SIP)大部分认证机制只提供了服务器到客户端的认证,HTTP摘要认证便是其中的一种。分析了这种机制容易遭受服务器伪装攻击和密码窃取攻击的缺陷,提出了一种弥补这些缺陷的安全认证机制。试验表明该算法具备较高的效率。

关键词:会话初始协议;认证;HTTP摘要;安全

中图分类号:TP393.08

文献标识码:A

0引言

会话初始协议(Session Initial Protocol,SIP)是由IETF(The Internet Engineering Task Force)提出并主持研究的一种基于应用层的多媒体会话控制协议。SIP是实现新一代多媒体通信和软交换的关键技术,用来创建、修改和终止一个或多个多媒体会话[1,2]。目前,SIP不仅被用于网络电话和软交换中,P3rdGeneration Partnership Project)及3GPP2(3rdGeneration Partnership Project 2)等组织也已经确定SIP为未来多媒体子系统的核心呼叫控制协议。

SIP采用文本形式表示消息的词法和语法,因此容易被攻击者模仿、篡改,从而被非法利用。IETF在最初设计VoIP体系及其信令协议SIP时,把重点放在了提供信令的动态的、强大的业务的可能性和简单性方面,很少注意安全特征,没有为SIP指定专门的安全协议[3]。不少文献针对SIP的这一安全性问题提出了自己的解决方案。文献[3]分析了有状态无状态服务器在承载层分别为TCP、UDP、TLS及有无HTTP摘要认证情况下的各种处理性能。文献[4]定义了在SIP用户和下一跳实体之间协商安全策略的一种机制。文献[5]提出了一种基于SIP的媒体通信安全框架结构,它能保证跳到跳间的信令安全及端到端的媒体通信安全,但结构特别复杂。文献[6]提出在注册服务器和服务器实现为一体时,如何减少认证流程以提高性能的策略。文献[7]提出了双向HTTP摘要认证和密钥协商机制,虽有效避免了服务器伪装攻击,但认证流程过于繁杂。这些文献或者没有涉及用户服务器双向认证的问题,或者提出的机制过于复杂。

本文分析了HTTP摘要认证方式的流程及存在的缺陷,并参考文献[8]中描述的3G/UMTS认证和密钥同意机制的原理,结合HTTP摘要认证,提出了一种既能实现服务器和客户端之间的双向认证,又能比较有效地避免密码猜测攻击的安全高效的认证策略。

1SIP协议

SIP运用一种分布式的控制模式,采用Client/Server结构的消息机制,将对语音通信的控制信息封装到消息的头域中,通过消息的传递来实现[4]。SIP的体系结构由五种网络实体构成:用户(User Agent, UA)、服务器(Proxy Server)、注册服务器(Register Server)、重定向服务器(Redirect Server)和位置服务器(Location Server)。

用户是客户端终端系统的应用程序,它代表要加入呼叫的用户。用户包含两个部分:用户客户端(UAC) 用来初始化一个呼叫,发起SIP请求,并作为该用户的呼叫;用户服务器(UAS)用来接收请求,代表用户发出响应,并作为被叫用户。

服务器在主叫UA和被叫UA之间转发请求和回复。服务器分为有状态和无状态两种。其区别在于有状态能记住它接收到的入请求,以及回送的响应和它转送的出请求;无状态一旦转送请求或回复后就忘记所有的信息。无状态服务器效率高于有状态服务器,成为SIP结构的骨干。

注册服务器接受客户机的注册请求,并将注册地址写入位置服务器。当用户客户端地址改变了,它用来发送一个注册请求到注册服务器来更新在位置服务器中的记录的位置信息。

重定向服务器接受SIP请求,将请求的地址映射为一个或多个联系地址,然后通知呼叫方,呼叫方直接与这些地址进行联系。

位置服务器用来维护和保存用户的当前位置信息,同时为服务器、重定向服务器、注册服务器查询或注册用户当前地址提供服务。

当前,SIP安全变得越来越重要。SIP和IP电话标准化的过程中的一个热点问题就是如何加强安全支持以满足业务需要[4]。当客户机请求得到SIP服务时,它需要首先得到服务器的认证。基于以上的原因,RFC2543提出了HTTP Digest和HTTP Basic两种认证方式。由于Basic这种认证方式在消息明文中直接传送密码,因此密码很容易在传送过程中被窃取,存在很大的安全隐患,在RFC3261中这种方式被废除。

在HTTP Digest认证方式中,服务器采用一种基于挑战响应的方式来验证用户的身份。这种方式虽然不在消息中明文传送密码,但也存在很大的安全隐患。例如,客户端不能验证服务器的身份,如果攻击者伪装成服务器就能获得用户的一些敏感信息。除此之外,这种方式还容易遭受离线密码猜测的攻击。

2HTTP Digest认证[5]

2.1认证流程

认证开始前,客户端和服务器预先共享一个密码。服务器用这个密码用来验证客户端的身份。认证流程如图2。

Step1客户端服务器:

客户端发送一个请求到服务器。

Step2服务器客户端:

服务器要验证客户端身份的合法性,向客户端回送一个包含nonce和realm的摘要盘问消息,即challenge.nonce是服务器产生的一个包含时间戳信息的随机数串,realm通常指服务器所负责管辖的域的域名。

Step3客户端服务器:

客户端根据收到的nonce、realm及自己的用户名和共享密码通过一个单向哈希函数F计算response值。response=F(nonce,username,realm, password)。通常F被用来产生一个摘要认证信息,多数情况下用的是MD5算法。然后客户端将response值发送给服务器。

Step4

通过用户名,服务器在数据库中提取出密码,然后检验nonce是否正确。如果正确,服务器计算F(nonce,username,realm, password),然后将结果跟收到的response比较,如果匹配,服务器就认为客户端是一个合法的用户。

2.2认证存在的缺陷

1) 离线密码猜测攻击

在步骤2和步骤3中,攻击者通过截获消息,很容易获得nonce,username,realm及response的值,接着攻击者猜测密码password′,并计算F(nonce,username,realm, password′),将结果值与response值进行比较,如果匹配,则password′便是正确的密码。

2) 服务器伪装攻击

如果用户不验证服务器的身份是否合法,当它收到服务器发来的challenge消息时,就会回复一个response。这样一个攻击者可以伪装成服务器的身份向用户发送challenge来获得response,收到response值后,它就可以离线猜测用户的正确密码了。具体步骤如下:

Step1客户端攻击者:

客户端发送一个请求到服务器,中途被攻击者截获。

Step2攻击者客户端:

攻击者产生一个包含nonce′和客户端所属域realm的挑战信息,并发送给客户端。

Step3客户端攻击者:

客户端用F(nonce′,username, password,realm)计算出response值,并将其发送给攻击者。

Step4攻击者收到客户端的回复后,它就获得了nonce′,username,realm和response的值,然后就可以离线猜测密码,直到猜出用户真正的密码。

3一个安全的认证策略

3.1认证流程

由于以上认证方式存在着容易遭受离线密码猜测攻击和服务器伪装攻击的缺陷,我们提出了一种安全的认证机制,这种方式可以实现客户端和服务器的相互认证并有效弥补了离线密码猜测攻击的缺陷。认证流程如图3(图中表示异或,•表示数串连接符号)。

认证开始前,服务器端和客户端预先共享一个密码pw和一个比较大的认证序号SEQ(SEQ以递增的顺序进行),认证流程如下:

Step1客户端服务器:

客户端发送一个请求到服务器。

Step2服务器客户端:

服务器计算两个参数AK和AM的值:AK=F(username, pw),AM=F(SEQ, pw),AC为AKSEQ与AM连接后的结果,这种连接方式为服务器和客户端预先设定好的一种方式,比如说AC中从密码长度位开始的一部分为AM,其余字段为AKSEQ。F仍然是前面所提到的单向哈希函数,然后服务器向客户端发送挑战信息,其中包括username,realm,AC三个参数的值。

Step3客户端服务器:

客户端计算AK′=F(username, pw),并与收到的AKSEQ进行异或计算,得出SEQ′=AK′AKSEQ,验证SEQ′的正确性。如果收到的SEQ′≠SEQ,说明服务器方产生的挑战信息不是最新的,停止以下步骤的进行。如果SEQ′=SEQ,则继续验证服务器的身份,计算AM′=F(SEQ, pw),比较AM′与收到的AM是否相等,如果不相等说明服务器身份不合法,拒绝向服务器发送response信息;否则认为服务器是可信任的,计算K=F(pwSEQ),response=F(username,realm,K),接着向服务器发送Response消息,包含username,realm和response的值。

Step4服务器计算F(username,realm,K)的值,并与收到的response进行比较,如果匹配,则服务器器验证了客户端的身份。

3.2安全性分析讨论

1) 重放攻击

由于SEQ是不断更新的,当服务器进行重放攻击时,客户端能够根据SEQ的值判断出服务器方发来的挑战信息是旧值,并予以拒绝。用AKSEQ传送有效避免了SEQ的值在网络中被窃取的可能。因此重放攻击在本算法中行不通。

2) 服务器伪装攻击

在步骤3中,通过验证SEQ的正确性以及AM的正确性,两次验证了服务器的身份。显然,攻击者服务器无法伪装成服务器来欺骗用户。

3) 离线猜测密码攻击

如果response值被截获,攻击者猜测密码pw′和SEQ′,并计算K′=F(pw′SEQ′),response′=F(username,realm,K′)以匹配response的值。这就要求K′=K,如果两个未知参数pw和SEQ的数值均比较复杂的话,所得解的个数将非常巨大。因此这种方式非常有效地避免了密码猜测的攻击。

4试验结果分析

为验证本算法的效率,我们在Linux下编写了一个试验模拟系统。本系统由两部分构成:注册客户端和注册服务器。函数F使用MD5。注册服务器集成了认证服务和位置服务的功能。注册流程仍然与标准的注册流程一样(注册与认证一块进行):

Step1客户端向注册服务器发出一个注册请求。

Step2注册服务器检验请求信息中无认证信息,向客户端发出挑战信息。

Step3客户端验证注册服务器身份合法后,向注册服务器返回Response信息。

Step4注册服务器验证了用户身份合法后,将注册地址写入位置服务器,并向客户端返回200 OK信息。

注册客户端为多线程程序,运行在硬件配置为奔腾 Ⅳ3GHz,392M内存,操作系统为Linux RedHat 9的PC机上。服务器端运行在硬件配置相同,操作系统为Linux Fedora 2的PC机上。客户端和服务器之间通过100M快速以太网相连。SIP承载层使用UDP协议,服务器为有状态服务器。

在本试验中,客户端的每个线程串行产生一系列注册过程(比如80个)。当前一个注册流程完成时,新的注册立即开始,而各个线程之间是并行的。我们通过测量客户端的一个线程在1Bs内完成的注册流程数(即单线程吞吐量)计算服务器的总吞吐量。若总线程数为N,则每个线程的吞吐量为服务器总吞吐量的1/N,д庋服务器总吞吐量便可计算出来。表3显示了注册服务器在不同线程下的处理性能。图中的吞吐量表示服务器在1Bs内所能处理的认证流程的个数。用同样的方法,在同样的配置环境下,我们测量了在HTTP摘要认证策略下的服务器处理性能。

我们将这两种策略下服务器总吞吐量对比转化为百分比,并规定HTTP摘要认证策略下为100%。对比关系如表4。

表4中的数据表明,我们提出的这种安全策略在效率上基本上可以达到HTTP摘要认证策略的80%。如果将两者中的最大吞吐量进行对比,对比关系为0.784,也非常接近80%。因此本算法不失为一个高效的算法。

5结语

SIP以其简单、扩展性强的优点,越来越受到人们的青睐。但SIP面临的安全威胁及SIP的安全现状却令人堪忧。本文分析了传统SIP认证机制的流程,指出了这种机制容易遭受服务器伪装攻击和离线密码猜测攻击的缺陷,并针对这种缺陷提出了一套安全的认证机制。最后在linux上实现了本算法。理论分析和试验表明本算法是一个高效和安全的改进算法。

上一篇:UPnP家庭网关配置管理的设计 下一篇:对等网络的网络弹性分析