高效的SIP服务器模糊测试方法
王玉龙1,2, 靳国栋1, 王雨骄1    
1. 北京邮电大学 网络与交换技术国家重点实验室, 北京 100876;
2. 通信网信息传输与分发技术重点实验室, 石家庄 050081
摘要

提出了一种高效的会话发起协议(SIP)服务器畸形消息测试方法.通过SIP栈源代码静态分析, 建立危险库函数与SIP服务器接口的映射关系; 通过SIP消息模板和畸形库, 生成针对危险库函数的畸形消息集; 通过攻击效果分析和变异、继承操作逐代优化畸形消息集, 得到具有显著攻击效果的SIP畸形消息测试集.对所提方法的有效性进行了实验验证.

关键词: 会话发起协议服务器     安全     畸形消息     模糊测试    
中图分类号:TP309 文献标志码:A 文章编号:1007-5321(2015)04-0010-05 DOI:10.13190/j.jbupt.2015.04.003
An Efficient Fuzzing Test Method for SIP Servers
WANG Yu-long1,2, JIN Guo-dong1, WANG Yu-jiao1    
1. State Key Laboratory of Networking and Switching Technology, Beijing University of Posts and Telecommunications, Beijing 100876, China;
2. Science and Technology on Information Transmission and Dissemination in Communication Networks Laboratory, Shijiazhuang 050081, China
Abstract

An efficient fuzzing test method for session initiation protocol (SIP) servers was proposed, compared to the conventional method, the generated number of malformed SIP messages was reduced, good attacking result was produced. It establishes mappings between dangerous library functions and interfaces of the SIP server through static source code analysis. It also obtains a set of malformed SIP messages targeting those dangerous functions. Finally, it optimizes the set of malformed SIP messages by analyzing its attack effects and generating better messages through inheritance and mutation operations, and obtains the set of messages having the most notable attack effects. Experiments are carried out to verify the effectiveness of the proposed method.

Key words: session initiation protocol server     security     malformed messages     fuzzing test    

会话发起协议(SIP, session initiation protocol)服务器易于遭受恶意SIP消息攻击[1-4]. SIP模糊测试是提高SIP服务器安全性的有效方法.传统SIP模糊测试方法生成的畸形SIP消息数量大,漏洞覆盖率低,测试周期长.笔者提出的高效SIP服务器模糊测试方法通过建立SIP服务器源代码中危险库函数与SIP服务器对外接口之间的映射关系减小畸形SIP消息搜索空间,通过监测畸形SIP消息对被测SIP服务器可用性的影响筛选和生成更有效的畸形SIP消息.

1 相关工作

Christian W等提出了一种能对SIP进行模糊测试的测试套件PROTOS[5]. PROTOS对于SIP服务器的模糊测试具有比较好的普适性,但由于完全根据协议规范生成,导致测试消息集较大,难以满足高效测试的需要. Abdelnur等[6]提出了一种基于SIP规范的随机模糊测试方法,将SIP各个头字段原子化,并在各字段位置以协议规范所定义的字符集合为基础随机生成字符串填充该位置.该方法生成的畸形SIP消息满足SIP规范,能穿透SIP检测,但是此方法缺乏针对性,对于生成畸形SIP消息的方向没有指导作用,导致会生成大量无效的畸形SIP消息,难以满足高效测试的需要.笔者曾经提出了一种基于SIP解析模式的畸形SIP生成及攻击测试方法[4].该方法根据SIP服务器对SIP消息的解析模式和可以承载的各类畸形数据来生成有针对性的畸形SIP消息,但是由于缺乏被测SIP服务器的内部实现信息以及基于测试反馈的优化手段,其测试效率依然不高.

2 高效SIP服务器模糊测试方法

SIP服务器的安全漏洞大多是由对危险库函数的不正确使用产生的.以C语言危险库函数为例,提出可以将SIP服务器对外接口映射到危险库函数的算法,提高危险库函数的覆盖概率.借鉴遗传算法,根据畸形消息的攻击效果优化消息集合,从而得到一组高效的畸形SIP消息集合.

定义1 畸形值.畸形值是指畸形SIP消息中不符合规范的字段,如超长字符串、非法长度值、异常utf-8编码、空值等.

定义2 畸形字段.畸形字段是指RFC3261中定义的SIP字段中承载畸形值的字段名称.

2.1 SIP消息头部字段与危险库函数的映射

主流SIP协议栈(如opensips)大多使用C语言编写. C语言中部分库函数如果使用不当,极易出现栈溢出等安全漏洞.从SIP规范中可以得到SIP头部字段列表.从SIP服务器使用的开发库中可以得到全部的库函数列表,将其分为危险库函数列表和安全库函数列表.利用这3个列表对SIP服务器源代码进行分析,得到SIP头字段和危险库函数的映射关系,如算法1和算法2所示.

算法1 SIP头部字段与危险库函数映射算法

输入:SIP头部字段列表,危险库函数列表,安全库函数列表,SIP服务器源代码.

输出:SIP头部字段与危险库函数的映射.

1) 在SIP服务器源代码中利用文件名字符串匹配搜索处理SIP头部的源代码文件,存入集合Sf

2) 对于Sf中的每个文件f

3) 利用函数名字符串匹配搜索所有处理SIP头部的函数,存入列表Sc

4) 对于Sc中的每个函数func

5) 以file和func为参数,调用算法2

算法2 调用函数与危险库函数关系深度遍历算法

输入:SIP头部字段列表,危险库函数列表,安全库函数列表,调用函数func,调用函数所在文件file.

输出:SIP头部字段与危险库函数的映射.

1) 利用file及其包含文件,解析func函数体中调用的所有函数及其所在文件,存入列表Fs

2) 对于Fs中每个函数文件对〈f, file〉

3) 如果f在危险库函数列表中,则存储该SIP字段与f的映射关系

4) 如果f不在安全库函数列表中,则以f和file为参数调用算法2

算法2第1行通过调用calltree等工具解析SIP服务器源代码文件,利用解析结果,可以得到文件与函数的对应关系以及函数与子函数调用关系.最终得到SIP头部字段与危险库函数的映射关系,如表 1所示.

表 1 生成的SIP头部与危险库函数的映射
2.2 畸形SIP消息评估及筛选

SIP中Register消息因没有前驱消息并且能携带较多头部字段,所以选为测试消息模板.每个畸形消息由二元组M={畸形字段,畸形值}唯一标识.由于畸形字段和畸形值的差异,畸形消息对SIP服务器的攻击效果可能不同.通过对畸形SIP消息的评估和筛选,可以找出攻击效果较好的畸形SIP消息Mi.这些通过初步筛选的畸形SIP消息将为生成更好的畸形SIP消息提供基础.

2.2.1 畸形SIP消息攻击效果评估方法

使用各类畸形SIP消息[4]进行测试,结果显示CPU占用率有剧烈波动(变异系数为21.03),而内存占用几乎不随发送畸形SIP消息的不同而变化(变异系数为0.02).因此,以CPU占用率作为评估畸形SIP消息攻击效果的指标.

定义3 畸形CPU占用率.畸形CPU占用率即畸形SIP消息发送过程中SIP服务器端进程的平均CPU占用率.

2.2.2 畸形SIP消息筛选

不易获得SIP服务器对每个畸形SIP消息的攻击效果数据,因此通过记录一组畸形SIP消息从发送开始到发送完成过程中服务器CPU占用率数据来评估畸形消息的攻击效果.对高效畸形SIP消息的筛选即是选择使CPU占用率显著上升的消息.

定义4 畸形偏离度.畸形偏离度是畸形CPU占用率与正常CPU占用率的比值.

当畸形偏离度大于阈值时,将此时刻的CPU占用率作为显著上升点.由于SIP消息按序发送,因此畸形SIP消息的筛选就是定位显著上升点附近的畸形SIP消息.给定一次显著攻击效果,将其引起原因定位到一组连续发送畸形消息上,且该组消息具有最少发送数量(记为WS).畸形消息筛选算法用一组畸形消息进行攻击测试,根据WS对每个显著上升点进行求精搜索,直到达到评估精度时为止.当搜索完成时获得多组畸形SIP消息组:M1M2M3,…, Mn.每组Mi对应一个畸形CPU占用率.筛选过程如算法3所示.

算法3 畸形SIP消息筛选算法

输入:一组畸形SIP信令.

输出:满足测试条件的信令组合.

1) 建立测试发送队列Qt 2) 将输入的畸形SIP信令放入Qt 3) WHILE Qt!= NULL 4) 取得Qt中所有消息的编号,存入Rd

5) 发送编号在Rd中的消息

6) 获取发送期间的目标SIP服务器CPU监测结果

7) 获得偏离度超过阈值的消息编号集合Rs及畸形CPU占用率

8) IF Rs == NULL

9)  将Rd放入结果队列

10) ELSE

11)  FOR r IN Rs

12)   IF r.size>WS

13)    将r放入测试队列Qt

14)  ELSE

15)    IF Rd不在结果队列

16)     将Rd放入结果队列

3 畸形SIP消息优选方法

通过算法3可以获得初代畸形SIP消息,将畸形偏离度作为适应度函数来筛选畸形SIP消息,然后通过变异算子得到下一代的畸形SIP消息,如此迭代直到下一代的畸形SIP消息的攻击效果变低或者到达最大迭代次数.变异算子对不同的畸形类型采取不同的变异方式.

算法4 畸形SIP消息优选算法

输入:第1代畸形SIP消息集,最大代数G.

输出:使遗传代数大于G或者当前代攻击效果小于之前代的效果或者SIP服务器宕机的畸形SIP消息集.

1) 初始化结果数组Ra、上一代的攻击效果Pe、当前代的攻击效果Ce

2) DO

3)  Pe=Ce

4)  使用算法3评估当前代畸形SIP消息集合并处理得到当前代的攻击效果Ce和攻击效果最好的一组信令Bs

5)  获取Bs中的畸形值数组Bv

6)  FOR (畸形值value, 畸形类型type) IN Bv

7)  将畸形值长度len变异为Vl(len+ rand(len))

8)  随机生成一个符合type的数据作为变异值Va

9) IF畸形类型为整型

10)  将畸形值Va, value添加到Ra

11) ELSE

12)  将畸形值(Va, Vl), (value, Vl), (Va+value, Vl/2), (value, len)添加到结果数组Ra

13) 通过结果数组Ra产生下一代消息集

14) WHILE代数未到G并且Ce>Pe

4 实验结果与分析4.1 C语言危险库函数的选择

使用opensips1.10的协议栈作为测试对象.扫描结果显示该协议栈包含4个危险库函数为fprintf、printf、memcpy、malloc,出现次数分别为1、1、3、9,因此着重比较针对malloc函数漏洞的畸形SIP消息生成策略的有效性.

4.2 畸形值长度与攻击效果的关系

图 1显示了畸形值长度与畸形消息攻击效果的关系.横坐标表示畸形值的长度,对于每个长度,都会有6种畸形:八进制、十六进制、utf-8、format-string、general和ASCII.

图 1 畸形值长度对CPU平均占用率的影响

图 1可知,当畸形值的长度在31 KB之前时,畸形SIP报文攻击效果随着长度增长而增大,这是因为随着畸形值的长度增长,SIP服务器将会花费更多的时间和CPU资源来处理该SIP报文.但是,当畸形值的长度大于31 KB后,畸形SIP报文攻击效果迅速下降并在46 KB之后维持在10%左右.这是因为当报文过长时,SIP服务器会在进一步解析前丢弃该报文.

4.3 畸形值中畸形类型数量与攻击效果的关系

Malloc函数对应的畸形主要有6种:八进制、十六进制、utf-8、format-string、general和ASCII. 1个畸形值可能包含多种畸形,如将utf-8与general组合,生成用utf-8填充的general畸形. 图 2显示了CPU占用率随畸形类型变化的情况.平均而言,畸形值中畸形类型增加将导致CPU平均占用率下降.这是由于当畸形值中畸形类型增多时,畸形SIP消息不符合RFC3261规范的特征会更加明显. SIP服务器在收到这样的畸形消息时初步解析后即丢弃的概率高.

图 2 畸形类型数量对CPU平均占用率的影响
4.4 变异代数与攻击效果的关系

图 3所示,实验结果表明进化代1所包含畸形消息的攻击效果明显高于原始代所包含畸形消息的攻击效果.因为遗传算法的变异算子针对于给定的畸形值在该畸形值的长度上增加,所以所得畸形消息的攻击效果也会变高.但是进化代2的攻击效果变低并且后面的畸形消息的攻击效果为0,查看SIP服务器发现该服务器已经宕机,说明进化代2所包含的畸形消息能将目标SIP服务器宕机,所以畸形SIP消息评估方法无法获得畸形消息的攻击效果,其攻击效果值为0.

图 3 遗传代数对CPU平均占用率的影响

对比测试表明,PROTOS测试集包括1 935个报文,攻击效果为6.98%.使用Abdelnur等的方法生成976个报文,攻击效果为1.36%,且未测出malloc处理漏洞.笔者所提方法的测试集包括105个报文,攻击效果为11.05%,测试效果有显著提升.

5 结束语

高效的SIP服务器模糊测试方法通过对SIP服务器源代码进行静态分析,得到源代码中使用的危险库函数与SIP服务器对外接口之间的映射关系.利用该映射关系有针对性地将畸形SIP消息模板实例化.通过在被测端检测攻击效果,筛选较为有效的SIP畸形消息实例,并通过对畸形载荷的变异逐代优化SIP畸形消息.最终得到1组具有明确目标(如滥用malloc函数)且有高攻击性(如CPU资源消耗显著)的畸形SIP消息集合,提高了SIP模糊测试的效率.下一步工作将增加时序畸形测试能力,使之能发现SIP服务器逻辑处理方面的漏洞.

参考文献
[1] Huici F, Niccolini S, d'Heureuse N. Protecting SIP against very large flooding DoS attacks [C]//Proceedings of the IEEE Global Telecommunications Conference. USA: IEEE Communications Society, 2009: 1-6.
[2] Wang Yulong, Yang Yi. A practical method for SIP-DoS attack effect evaluation[J].Journal of Information and Computational Science, 2012, 9(2): 333–345.
[3] 王玉龙, 杨鸿飞, 杨逸. 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.
[4] Wang Yulong, Wang Dong, Wang Lei. A parsing mode based method for malformed SIP messages testing for IMS network[J].Jounal of Networks, 2013, 8(4): 812–821.
[5] Christian W, Marko L. PROTOS test-suite: c07-sip [EB/OL]. Finland: University of OULU [2013-12-14]. https://www.ee.oulu.fi/research/ouspg/PROTOS_Test-Suite_c07-sip.
[6] Abdelnur H, Radu S, Festor O. KiF: a stateful SIP fuzzer [C]//Proceedings of the 1st International Conference on Principles, Systems and Applications of IP Telecommunications. USA: ACM, 2007: 47-56.