基于Map-Reduce模型的畸形SIP消息检测方法
双锴, 夏千林    
北京邮电大学 网络与交换技术国家重点实验室, 北京 100876
摘要

提出一种支持检测规则动态更新的畸形会话发起协议(SIP)消息检测模型, 采用正向规则和反向规则结合的方式, 以有效应对未知类型的畸形攻击.采用Map-Reduce模型实现检测规则, 检测过程分为常规检测和特殊检测, 常规检测阶段检测消息的基本格式, 特殊检测阶段将SIP消息分割后并行检测语法规则.实验结果表明, 提出的检测模型能准确高效地检测出SIP消息中的畸形特征.

关键词: 畸形会话发起协议消息     检测模型     Map-Reduce模型    
中图分类号:TN919.85 文献标志码:A 文章编号:1007-5321(2014)06-0011-06 DOI:10.13190/j.jbupt.2014.06.003
Detection of Malformed SIP Messages Based on Map-Reduce Model
SHUANG Kai, XIA Qian-lin    
State Key Laboratory of Networking and Switching Technology, Beijing University of Posts and Telecommunications, Beijing 100876, China
Abstract

This paper proposed a session initiation protocol(SIP) message inspection model combining the forward and backward rules inspection. With the capability of updating rules dynamically, this model can detect unknown type of malformed attack efficiently. Based on Map-Reduce model, the inspection procedure is divided into two phases: routine inspection and special inspection. In routine inspection, the basic format of SIP message is detected. In special inspection, the consistency with the grammar rules is verified in parallel after the segmentation of the SIP message. Experimental results show that the proposed inspection model can detect malformed features in the SIP message efficiently and accurately.

Key words: malformed session initiation protocol message     inspection model     Map-Reduce model    

畸形SIP消息攻击易于发起并可对网络及相关实体造成巨大的危害,针对畸形SIP消息攻击检测的研究有着重要的现实意义.然而,电信网有着极高的服务质量(QoS, quality of service)要求,针对畸形SIP消息攻击的检测模型必须能在准确检测出畸形SIP消息的同时,尽可能降低畸形检测所引入的时间开销.

近年来,众多学者对畸形SIP消息的检测技术进行了深入研究. Niccolin[1]首次提出基于Snort的入侵检测与防御框架,使用基于知识的入侵检测模型来检测SIP畸形消息. Bouzida等[2]从畸形SIP攻击以及SIP本身出发,抽取SIP特征,采用决策树技术利用提取的特征检测攻击. Geneiatakis[3]提取出SIP消息的畸形特征,提出一个基于规则匹配的SIP畸形消息检测与预防的框架,但统一不能处理新类型的SIP畸形消息攻击. Rieck[4]提出自学习系统检测畸形SIP消息,能有效应对未知的畸形消息攻击,通过训练数据集构建畸形消息检测模型.李鸿彬[5]提出一种能自主学习积累检测规则的方案,通过自主学习算法不断积累新规则,但是自主学习机制存在滞后性,不能快速有效地产生新规则,无法应对新型畸形消息攻击或已知攻击的变体.

综上可见,已有的畸形消息检测方案根据已知类型的畸形特征构建检测模型,通过规则匹配等手段实现畸形消息检测,但无法应对未知类型的畸形消息攻击.基于自主学习算法的检测模型能通过自主学习算法提升应对未知类型畸形攻击的能力,但是误判率较高.这些检测模型都无法满足电信网在准确性、可靠性以及实时性方面的要求.

笔者面向电信网的QoS要求,提出一种支持检测规则动态更新的畸形SIP消息检测模型,通过动态更新检测插件,提升检测模型应对未知类型畸形攻击的能力.检测模型还引入了Map-Reduce的设计思路,对单条SIP消息实施并行规则检测,以保证检测模型的检测效率.在此基础上,实现了原型系统,验证了检测模型的有效性.

1 畸形SIP消息检测原理

畸形SIP消息是指不符合RFC 3261规定的语法语义规范的SIP消息,在语法层面和事务层面上对网络中单个实体的SIP协议栈施加压力,造成攻击,进而威胁到整个网络的安全.

畸形SIP消息检测方法分为正向检测和反向检测2种.正向检测从协议规范本身出发,以扩展的巴科斯范式(ABNF, augmented Backus-Naur form)为基础,根据协议的语法语义规则进行检测,具有很高的完备性和全面性.反向检测根据已知畸形SIP消息中的畸形特征,进行有针对性的检测,能快速高效地检测出SIP消息中潜在的畸形特征.

如果仅采用正向检测,用完整的规则去检测畸形SIP消息,则无法快速检测出畸形消息中的畸形特征,反而造成网络资源的浪费,甚至影响网络的QoS; 如果仅采用反向检测,根据已知的畸形特征去建立检测规则,则无法保证检测模型的完备性,检测模型的漏判率较高.因此,笔者将正向检测与反向检测相结合,既保证检测的完备性和全面性,又能实现畸形消息的高效检测.

1.1 基于ABNF的检测

RFC3261以ABNF的形式定义了近300条基本语法规则,任何不符合ABNF的消息都是畸形消息.同时,SIP消息又非常灵活,一些协议规范定义的规则在ABNF中并没有明确体现出来,因而在按照ABNF定义的语法规则进行检测时,需要充分考虑到SIP消息的灵活性.

1) 大小写不敏感. SIP规定,SIP消息对大小写不敏感,但是SIP消息中也存在大小写敏感的部分.例如,SIP消息中所有请求方法名必须是大写,SIP-URI的Host部分以及一些显示名也是大小写敏感的.

2) 头域简写. SIP规定,头域名称存在简写形式. ABNF中定义了各个头域的简写形式,如头域Call-ID的简写形式为i,Content-Type的简写形式为c.

3) 头域多行. SIP规定,头域可以为多行,多行的头域除第1行之外,后续每行的第1个字符必须是空白符. SIP还规定,头域名称和冒号之间可以有无限多的空格,但是头域名称和冒号必须在同一行.

4) 自定义参数. SIP规定,可以自定义参数进行扩展. ABNF定义了自定义参数的语法规则,但这并不能检测自定义参数的有效性.

因此,正向检测需要以ABNF语法规则为基础,结合SIP的灵活性,才能对SIP消息进行全面完备的检测.

1.2 基于畸形特征的检测

基于畸形特征的检测属于反向检测,即根据畸形特征制定反向的检测规则,对SIP消息进行有针对性的畸形检测.畸形特征分为语法上的畸形和语义上的畸形2种. RFC4475将SIP信令中的畸形特征分为19种语法上的畸形和13种语义上的畸形.

语法上畸形的消息会在消息解析阶段对消息解析器造成威胁,通常表现为长度溢出或者数值溢出.例如,畸形特征“Content-Length大于消息体实际长度”,该畸形会在SIP消息的语法解析阶段引发字符串访问越界错误.还有一些特殊的语法畸形特征无法通过基于ABNF的语法检查检测出来,如畸形特征“Request-URI中嵌入了转义的头字段”,该畸形是符合ABNF定义的语法规则的,但是这种嵌入是不被允许的.

语义上畸形的消息会在消息处理阶段对协议栈造成威胁,阻碍协议栈的正常处理,影响SIP消息的交互流程.例如,畸形特征“必选头字段非法出现多次”,部分必选头字段如Call-ID、To、From、Max-Forwards和CSeq语义上只允许出现一次,但在语法上头字段可以在一条SIP消息中出现多次,多个Max-Forwards字段可能会导致畸形SIP消息在网络中不断被转发,进而浪费网络资源.

因此,语法上的畸形消息和语义上的畸形消息从不同层面上严重威胁着网络中的相关实体,反向检测必须充分覆盖这2种畸形特征.

2 畸形SIP消息检测模型

图 1所示,检测模型由通信模块、检测模块、检测插件和检测结果统计模块4个逻辑部分组成.通信模块用于接收待检测的SIP消息和反馈SIP消息检测的结果; 检测模块对待检测SIP消息进行基本的格式检查,然后将待检测消息分发给各个检测插件; 每个检测插件负责1条或1组检测规则,检测插件一旦检测出畸形特征会立刻向统计模块上报检测结果; 检测结果统计模块会对所有插件的结果进行汇总,并反馈给通信模块.

图 1 畸形SIP消息检测模型

检测模型采用正向规则和反向规则结合的方式,同时检测插件支持动态更新,通过添加更新检测插件来提升应对未知类型畸形攻击的能力.

2.1 正向规则和反向规则共同检测

正向检测以ABNF语法规则为基础,并结合SIP的灵活性对畸形消息进行检测.反向规则是根据对各类畸形消息特征的归纳,编写针对畸形特征的检测规则.相比正向规则,反向规则检测特定畸形特征的畸形消息会更加高效.

由于SIP消息由平文本构成,正向规则检测通常采用基于状态机的字符串匹配技术实现.正则表达式是一种通用高效的字符串匹配技术,能用形式化的语言对语法检测规则进行描述,并以模式匹配的方式对SIP消息进行检测.例如,RFC3261中对IPv4地址的定义为

IPv4address=1*3DIGIT ". " 1*3DIGIT ". " 1*3DIGIT ". " 1*3DIGIT

按照该范式可以编写出对应的正则表达式:

IPv4_REGEX =′^\\d{1, 3}(\\. \\d{1, 3}){3}$′

该正则表达式能匹配出所有合法的IPv4地址,可用于检测SIP消息中的IP字段是否符合语法定义.正则表达式能检测出SIP消息是否符合语法规范,但是并不能完成所有正向规则的检测,不能精确检测数值的范围,也不能检测上下文相关内容的一致性.例如,256. 387. 694. 579符合IPv4地址的正则表达式,但不是一个合法的IPv4地址; 再如,Content-Type必须和Body的实际类型一致,Content-Length必须和Body的实际大小一致,正则表达式并不能检测出上下文间的不一致.因此,在用正则表达式正向检测消息的同时,需要补充针对畸形特征的反向规则检测,反向规则能覆盖到正向规则无法覆盖到的畸形特征.

此外,反向规则还能提升检测模型本身的安全性.例如,Overflow类型的畸形消息会导致检测模型的缓冲区溢出,进而引发检测系统宕机.针对Overflow畸形的反向规则能预先检测SIP消息的长度,若消息长度超出限制,则判定该消息为畸形消息.在正向规则和反向规则并行同时检测时,反向规则通常能更快更有效地检测出畸形消息.

2.2 编译型语言配合脚本语言实现检测插件动态更新

随着畸形消息特征库的更新,检测插件需要添加检测规则、修补插件漏洞.采用编译型语言配合脚本语言,能实现检测插件的动态更新.脚本语言编写简单、易学易用,还具有以下优点.

1) 类型灵活.脚本语言一般是动态类型,可以不声明变量类型而直接使用,也可以在运行期间改变类型.

2) 动态运行.脚本语言是一种解释型语言,不需要预先编译成二进制代码或者字节码,可以在运行期间变更代码.

3) 通用性好.多数高级语言都支持脚本语言的调用,脚本语言编写的代码可以在不同语言实现的系统中使用.

综上所述,采用编译型语言编写系统主体框架,保证系统的性能;采用脚本语言编写检测插件,随时发布更新,而系统本身不需重新部署,即可以不间断地提供服务.检测插件用脚本语言编写,则与系统主体实现相互独立,用脚本语言编写的检测插件可以应用于其他的安全系统中.

表 1所示,与其他的动态更新技术相比,编译型语言配合脚本语言的方案,实现方式更加简单,插件的通用性更好,效率也比较好.

表 1 编译型语言配合脚本语言与其他动态更新技术对比
3 采用Map-Reduce提高检测性能

图 2所示,本模型采用Map-Reduce的思路将整个检测过程分为常规检测和特殊检测2个阶段.常规检测阶段检测消息的3个方面,分别是消息长度、是否包含NULL空字符及SIP消息基本格式. Overflow类型的畸形消息对检测系统的影响较大,检测消息长度用于尽早剔除Overflow类型畸形SIP消息. NULL空字符在SIP当中是非法字符,会影响正常的字符串操作,也需要预先检测剔除. SIP消息分为请求行/状态行、消息头、消息体3个部分,常规检测阶段将检查消息是否具备这3个基本部分以及请求行/状态行的正确性.相比特殊检测,常规检测相对简单,开销小.因此,常规检测阶段是串行的,并且先于特殊检测阶段进行.

图 2 基于Map-Reduce的畸形SIP消息检测模型

特殊检测阶段将SIP消息分割后进行并行检测,保证高吞吐量的检测效率.特殊检测阶段分为Map和Reduce 2个子阶段进行. Map子阶段会将SIP消息分割后分发给各个并行检测插件,并发运行的检测插件仅检测各自所负责的语法规则,并不关心消息的其他部分.插件并发运行之后就会进入Reduce子阶段,任意检测插件检测出畸形特征之后,立即返回错误代码,特殊检测阶段则会立即结束.

特殊检测阶段主要涉及SIP通用字段检测、SIP特殊字段检测、会话描述协议(SDP, session description protocol)字段检测、一致性检测和通用畸形特征检测. SIP通用字段检测即检测所有SIP消息都必须包含的头部字段,一方面检查消息是否包含了该通用头部字段; 另一方面检查该通用头部字段是否正确. SIP特殊字段检测是要检测特定SIP消息类型的特定字段,如Register消息中的Authorization字段,但是特殊字段并非必选字段,要根据字段的具体情况进行处理. SIP通用字段检测、SIP特殊字段检测、SDP检测、一致性检测均属于正向规则检测.通用畸形特征检测是反向规则检测,根据畸形消息特征库检测畸形消息,适用于所有类型的SIP消息.

整体来说,常规检测阶段负责检测SIP消息的基本格式,对待检测消息进行初步过滤.特殊检测阶段采用了Map-Reduce的设计思路,所有的检测插件会对SIP消息进行并行检测,在Map-Reduce的机制下,基于反向规则的检测插件能快速检测出畸形SIP消息中的畸形特征,实现畸形SIP消息的快速检测.因此,基于Map-Reduce的检测模型能在有效应对未知类型的畸形攻击的同时,实现畸形SIP消息的快速检测.

4 实验验证

为验证提出的检测模型的正确性,实现了原型系统,采用Java语言开发系统框架,采用脚本语言Jython的2.5.2版本开发检测插件.

4.1 实验样本

为测试原型系统的检测性能,实现了一个SIP消息生成工具用于生成正常SIP消息样本和畸形SIP消息样本.美国政府的国家脆弱性数据库公布了真实的协议脆弱性数据[6],其中与SIP脆弱性相关的条目有120条,触发原因已知的76条中有39条描述了畸形特征出现的SIP字段. 表 2给出了畸形特征在各个SIP字段的分布情况,其中未知字段的畸形元素在可选和必选字段中的分布均服从均匀分布.根据表 2中的畸形特征分布生成畸形SIP消息.

表 2 SIP消息畸形特征分布

与畸形SIP消息相比,正常SIP消息的生成相对简单.将正确的SIP消息模板进行组合拼装,并对其中的重要字段进行随机值填充,生成正常的SIP消息.

4.2 实验结果

本实验生成5 000条正常Register消息和5 000条畸形Register消息作为样本.实验环境为Intel(R) Core(TM)2 Duo CPU 3.00 GHz处理器,4 GB内存,100 Mbit/s网卡.实验的主要目的是验证检测模型的有效性及检测正常和畸形SIP消息的性能开销是否符合预期.

实验结果表明,原型系统对5 000条正常Register消息和5 000条畸形Register消息做出了正确的检测判断.如表 3所示,正常SIP消息的平均检测时间为2 730.351 μs,畸形SIP消息的平均检测时间为1 868.444 μs,检测时间基本满足规范要求.畸形SIP消息的检测时间整体上少于正常SIP消息的检测时间,说明针对畸形特征的反向检测机制能快速检测出畸形SIP消息,在Map-Reduce机制下,针对畸形特征的检测插件在Reduce阶段能快速返回检测结果,因此畸形SIP消息的检测时间整体上大幅减少.

表 3 原型系统检测性能

SIP消息检测时间分布如图 3所示,横坐标表示检测时间,纵坐标表示需要检测时间内完成的检测样本频率.可见,正常SIP消息检测时间样本数据的标准差相对较小,样本数据分布比较集中,主要分布在2.362~4 ms之间,少量正常SIP消息的检测时间超出4 ms,这说明检测模型对正常SIP消息的检测性能比较稳定,不会出现因消息内容上的差异导致检测性能过差的情况.异常SIP消息检测时间样本数据的标准差相对较大,畸形SIP消息检测时间的样本数据分布比较分散,主要分布在0.551~3.9 ms之间,少量畸形SIP消息的检测时间超出3.9 ms,其原因是针对不同畸形特征的检测方法不同,不同的畸形特征检测插件的检测性能也不同.但从整体来看,多数畸形SIP消息的检测时间明显少于正常SIP消息的检测时间.因此,所提出的检测模型能准确高效地检测出畸形SIP消息中的畸形特征.

图 3 原型系统SIP消息检测时间分布对比

出于迭代开发、快速验证的原因,笔者选择了Java+Jython的实现方案来构建原型系统,该实现方案开发周期短、系统稳定性好,但性能与工业标准有一定的距离.例如,选择C+++Pypy的实现方案,理论分析可以提升近一倍的检测速度,正常SIP消息的平均检测时间将在1.3 ms左右,而畸形SIP消息的平均检测时间将在0.9 ms左右.

5 结束语

笔者提出一种支持检测规则动态更新的畸形SIP消息检测模型,该模型能有效应对未知类型的畸形攻击.由于采用Map-Reduce的设计思路对单条SIP消息实施并行规则检测,因此尽可能降低了畸形检测所引入的时间开销,满足了电信网络的QoS要求.

参考文献
[1] Niccolini S, Garroppo R G, Giordano S, et al. SIP intrusion detection and prevention: recommendations and prototype implementation [C]//1st IEEE Workshop on VoIP Management and Security. USA: IEEE Computer Society, 2006: 47-52.
[2] Yacine B, Christophe M. Aframework for detecting anomalies in VoIP networks [C]//Proceeding ARES'08 Proceedings of the 2008 Third International Conference on Availability, Reliability and Security. USA: IEEE Computer Society, 2008: 204-211.
[3] Geneiatakis D, Kambourakis G, Lambrinoudakis C, et al. A framework for protecting a SIP-based infrastructure against malformed message attacks[J].Computer Networks, 2007, 51(10): 2580–2593. doi: 10.1016/j.comnet.2006.11.014
[4] Rieck K, Wahl S, Laskov P, et al. A self-learning system for detection of anomalous SIP messages [C]//2rd Principles, Systems and Applications of IP Telecommunications. Germany: Springer-Verlag, 2008: 90-106.
[5] Li Hongbin, Lin Hu, Lü Xin, et al. A rules-based intrusion detection and prevention framework against SIP malformed messages attacks [C]//3rd IEEE International Conference on Broadband Network and Multimedia Technology. New Jersey: IEEE Press, 2010: 700-705.
[6] 王玉龙, 杨鸿飞, 杨逸. IMS网络中畸形SIP信令的快速检测[J]. 北京邮电大学学报, 2011, 34(6): 51–54.
Wang Yulong, Yang Hongfei, Yang yi. Fast detection of malformed SIP signaling in IMS network[J].Journal of Beijing University of Posts and Telecommunications, 2011, 34(6): 51–54.