信息网络安全 ›› 2022, Vol. 22 ›› Issue (9): 40-45.doi: 10.3969/j.issn.1671-1122.2022.09.005
收稿日期:
2022-05-31
出版日期:
2022-09-10
发布日期:
2022-11-14
通讯作者:
文伟平
E-mail:weipingwen@pku.edu.cn
作者简介:
文伟平(1976—),男,湖南,教授,博士,主要研究方向为系统与网络安全、大数据与云安全、智能计算安全|刘成杰(1998—),男,湖南,硕士研究生,主要研究方向为软件安全、漏洞挖掘、入侵检测|时林(1998—),男,山东,硕士研究生,主要研究方向为漏洞挖掘、软件安全防护
基金资助:
WEN Weiping(), LIU Chengjie, SHI Lin
Received:
2022-05-31
Online:
2022-09-10
Published:
2022-11-14
Contact:
WEN Weiping
E-mail:weipingwen@pku.edu.cn
摘要:
空指针异常引用是系统运行过程中的一种常见问题,该问题会引起程序崩溃或者异常退出,同时攻击者也可以利用空指针解引用来完成任意读写操作,导致信息泄露。Java作为一种广泛使用的语言,也存在空指针引用问题,主要原因是对引用变量的指向检查不足。文章提出一种基于数据流追溯的空指针引用检测系统,并设计了静态分析工具jvd。该工具通过特化追踪空指针在容器中的传播,使得空指针变量不会在容器中传播丢失,在中间语言Jimple层面上完成检测并覆盖多种空指针容器传播场景,有效降低复杂场景下的漏报率。在Juliet Test Suite的CWE476号测试集上,将文章所设计的jvd与SpotBugs、Infer等工具进行对比实验。实验结果表明,jvd能够在多种空指针传播场景下使用,在高精度场景下能够取得比其他工具更好的效果。
中图分类号:
文伟平, 刘成杰, 时林. 基于数据流追溯的空指针引用挖掘系统[J]. 信息网络安全, 2022, 22(9): 40-45.
WEN Weiping, LIU Chengjie, SHI Lin. A Null Pointer Reference Mining System Based on Data Flow Tracing[J]. Netinfo Security, 2022, 22(9): 40-45.
表1
字节码翻译前后对比
语句类型 | 语句内容 |
---|---|
Java语句 | String s = null |
s.length() | |
原始Jimple语句 | r1 = new java.lang.NullPointerException |
specialinvoke r1.<java.lang.NullPointerException: void <init>(java.lang.String)>(“This statement would have triggered an Exception: $stack2 = virtualinvoke s.<java.lang.String: int length()>()") | |
throw r1 | |
修改后Jimple语句 | r1 = null |
virtualinvoke r1.<java.lang.String: int length()>() |
表2
约束条件转换过程
语句 | 转换方式 | 转换后 | 语句解释 |
---|---|---|---|
a = b | 替换 | null==b | 赋值 |
a = null | 替换 | null==null | 空赋值 |
a =@parameter | 替换 | null==@parameter | 参数传递 |
a = new A() | 替换 | null==new Expr | 构造对象 |
a = x.y | 替换 | null==x.y | 域引用 |
if(c= =d) | 添加 | null==a&&c==d | 条件语句 |
goto: | 保留 | null==a | 跳转语句 |
a = b+c | 删除 | \ | 运算语句 |
a = x[index] | 替换 | null==x:index | 数组运算 |
return a | 保留 | null==a | 返回值 |
a = call() | 递归处理 | 视情况而定 | 函数调用 |
a = v.call() | 替换 | null==v:tag | 序列容器 |
a = m.call() | 替换 | null==m:key | 关联性容器 |
throw r1 | 保留 | null==a | 抛出异常 |
a =(cast_expr)b | 替换 | null==b | 类型转换 |
表3
空指针传播支持的容器类型
容器类型 | 容器操作 |
---|---|
Array | Array[index] = val |
val = Array[index] | |
Vector | void add(int index, E element) |
boolean add(E element) | |
boolean remove(E element) | |
E remove(int index) | |
LinkedList | void add(int index, E element) |
boolean add(E element) | |
E remove(int index) | |
E remove() | |
boolean offer(E element) | |
HashMap | V put(K Key, V Value) |
V get(K Key) | |
Stack | E push(E) |
E pop() | |
E peek() |
表4
过程内检测结果
工具 | 空指针类型 | 真实报告数/个 | 缺陷总数/个 | 漏报率 | 用时/s |
---|---|---|---|---|---|
SpotBugs | String | 17 | 18 | 5.5% | 5 |
StringBuilder | 17 | 18 | 5.5% | 6 | |
Integer | 17 | 18 | 5.5% | 5 | |
array | 17 | 18 | 5.5% | 5 | |
check | 17 | 17 | 0 | 6 | |
binary | 17 | 17 | 0 | 6 | |
Infer | String | 17 | 18 | 5.5% | 32 |
StringBuilder | 17 | 18 | 5.5% | 32 | |
Integer | 17 | 18 | 5.5% | 32 | |
array | 17 | 18 | 5.5% | 32 | |
check | 17 | 17 | 0 | 32 | |
binary | 17 | 17 | 0 | 32 | |
jvd | String | 18 | 18 | 0 | 368 |
StringBuilder | 18 | 18 | 0 | 327 | |
Integer | 18 | 18 | 0 | 393 | |
array | 18 | 18 | 0 | 275 | |
check | 17 | 17 | 0 | 10 | |
binary | 17 | 17 | 0 | 13 |
表5
过程间检测结果
工具 | 空指针类型 | 真实报告数/个 | 缺陷总数/个 | 漏报率 | 用时/s |
---|---|---|---|---|---|
SpotBugs | Integer | 6 | 19 | 68.4% | 5 |
StringBuilder | 6 | 19 | 68.4% | 7 | |
Array | 7 | 18 | 61.1% | 5 | |
String | 6 | 19 | 68.4% | 5 | |
Infer | Integer | 11 | 19 | 42.1% | 12 |
StringBuilder | 11 | 19 | 42.1% | 12 | |
Array | 11 | 18 | 38.9% | 12 | |
String | 9 | 19 | 52.6% | 12 | |
jvd | Integer | 18 | 19 | 5.3% | 219 |
StringBuilder | 18 | 19 | 5.3% | 228 | |
Array | 17 | 18 | 5.6% | 186 | |
String | 18 | 19 | 5.3% | 214 |
[1] | MITRE. 2022 CWE Top 25 Most Dangerous Software Weaknesses[EB/OL]. (2022-05-03)[2022-05-12]. https://cwe.mitre.org/top25/archive/2022/2022_cwe_top25.html. |
[2] | ZHIOUA Z, SHORT S, ROUDIER Y. Static Code Analysis for Software Security Verification: Problems and Approaches[C]// IEEE. 2014 IEEE 38th International Computer Software and Applications Conference Workshops. New York: IEEE, 2014: 102-109. |
[3] | SHAO Lin, ZHANG Xiaosong, SU Enbiao. New Method of Software Vulnerability Detection Based on Fuzzing[J]. Application Research of Computers, 2009, 26(3): 1086-1088. |
邵林, 张小松, 苏恩标. 一种基于fuzzing技术的漏洞发掘新思路[J]. 计算机应用研究, 2009, 26(3): 1086-1088. | |
[4] | VALLEE-RAI R, HENDREN L J. Jimple: Simplifying Java Bytecode for Analyses and Transformations[EB/OL]. (2004-01-01)[2022-03-25]. https://www.researchgate.net/publication/243776080_Jimple_Simplifying_Java_Bytecode_for_Analyses_and_Transformations. |
[5] | WANG Ruiqiang. Null Pointer Reference Pattern Detection Based on Judgment Logic[D]. Beijing: Beijing University of Posts and Telecommunications, 2015. |
王锐强. 基于判断逻辑的空指针引用模式检测[D]. 北京: 北京邮电大学, 2015. | |
[6] | NANDA M G, SINHA S. Accurate Interprocedural Null-Dereference Analysis for Java[C]// IEEE. 2009 IEEE 31st International Conference on Software Engineering. New York: IEEE, 2009: 133-143. |
[7] | MA Sen, ZHAO Wen, XI Xiangyu, et al. Null Pointer Dereference Detection Based on Value Dependences Analysis[J]. Acta Electronica Sinica, 2015, 43(4): 647-651. |
马森, 赵文, 习翔宇, 等. 基于值依赖分析的空指针解引用检测[J]. 电子学报, 2015, 43(4): 647-651. | |
[8] | BAI Yang, WANG Yuping. Multiple Sensitive Static Method of Detecting Null Pointer Reference Bug[J]. China Sciencepaper, 2014, 9(10): 1131-1136. |
白杨, 王瑀屏. 一种多敏感空指针引用错误的静态检测方法[J]. 中国科技论文, 2014, 9(10): 1131-1136. | |
[9] | DUAN Jing, JIANG Shujuan, YU Qiao, et al. An Automatic Localization Tool for Null Pointer Exceptions[J]. IEEE Access, 2019(7): 153453-153465. |
[10] | JIN Wenhui, ULLAH S, YOO D, et al. NPDHunter: Efficient Null Pointer Dereference Vulnerability Detection in Binary[J]. IEEE Access, 2021(9): 90153-90169. |
[11] | BRUMLEY D, JAGER I, AVGERINOS T, et al. BAP: A Binary Analysis Platform[C]// Springer. International Conference on Computer Aided Verification. Heidelberg: Springer, 2011: 463-469. |
[12] | VALLÉE-RAI R, CO P, GAGNON E, et al. Soot: A Java Bytecode Optimization Framework[C]// ACM. CASCON First Decade High Impact Papers(CASCON’10). New York: ACM, 2010: 214-224. |
[13] | NIST. Juliet 1.3 Test Suite: Changes from 1.2[EB/OL]. (2018-06-14)[2022-05-21]. https://doi.org/10.6028/NIST.TN.1995. |
[14] | Spotbugs. Find Bugs in Java Programs[EB/OL]. (2022-03-22)[2022-05-08]. https://spotbugs.github.io/. |
[15] | TOMASSI D A. Bugs in the Wild: Examining the Effectiveness of Static Analyzers at Finding Real-World Bugs[C]// ACM. 2018 26th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering. New York: ACM, 2018: 980-982. |
[16] | Facebook. A Tool to Detect Bugs in Java and C/C++/Objective-C Code Before it Ships[EB/OL]. (2021-11-23)[2022-01-12]. https://fbinfer.com/. |
[17] | University of Maryland. FindBugs-Find Bugs in Java Programs[EB/OL]. (2021-05-11)[2022-01-12]. http://findbugs.sourceforge.net/. |
[18] | AL-AMEEN M N, HASAN M M, HAMID A. Making Findbugs More Powerful[C]// IEEE. 2011 IEEE 2nd International Conference on Software Engineering and Service Science. New York: IEEE, 2011: 705-708. |
[1] | 张征辉, 陈兴蜀, 罗永刚, 吴天雄. 一种Spark平台下的作业性能评估方法[J]. 信息网络安全, 2022, 22(9): 86-95. |
[2] | 梁言, 李冬, 赵贻竹, 于俊清. 基于链路冲突图嵌入的信道干扰测量与优化方法[J]. 信息网络安全, 2022, 22(9): 76-85. |
[3] | 胡禹佳, 代政一, 孙兵. SIMON算法的差分—线性密码分析[J]. 信息网络安全, 2022, 22(9): 63-75. |
[4] | 张学旺, 刘宇帆. 可追踪身份的物联网感知层节点匿名认证方案[J]. 信息网络安全, 2022, 22(9): 55-62. |
[5] | 张光华, 刘永升, 王鹤, 于乃文. 基于BiLSTM和注意力机制的智能合约漏洞检测方案[J]. 信息网络安全, 2022, 22(9): 46-54. |
[6] | 佟晓筠, 毛宁, 张淼, 王翥. 基于Henon映射与改进的提升小波变换图像加密算法[J]. 信息网络安全, 2022, 22(9): 31-39. |
[7] | 张敏, 许春香, 张建华. 无人机网络中基于多因子的认证密钥协商协议研究[J]. 信息网络安全, 2022, 22(9): 21-30. |
[8] | 于晶, 袁曙光, 袁煜琳, 陈驰. 基于k匿名数据集的鲁棒性水印技术研究[J]. 信息网络安全, 2022, 22(9): 11-20. |
[9] | 宋宇波, 陈烨, 蔡义涵, 张波. 基于状态机子图同构匹配的私有工控协议溯源[J]. 信息网络安全, 2022, 22(9): 1-10. |
[10] | 刘翎翔, 潘祖烈, 李阳, 李宗超. 基于前后端关联性分析的固件漏洞静态定位方法[J]. 信息网络安全, 2022, 22(8): 44-54. |
[11] | 高博, 陈琳, 严迎建. 基于CNN-MGU的侧信道攻击研究[J]. 信息网络安全, 2022, 22(8): 55-63. |
[12] | 魏松杰, 李成豪, 沈浩桐, 张文哲. 基于深度森林的网络匿名流量检测方法研究与应用[J]. 信息网络安全, 2022, 22(8): 64-71. |
[13] | 黄保华, 赵伟宏, 彭丽, 谢统义. 基于MPT索引的高效链上PKI模型[J]. 信息网络安全, 2022, 22(8): 72-80. |
[14] | 佟晓筠, 苏煜粤, 张淼, 王翥. 基于混沌和改进广义Feistel结构的轻量级密码算法[J]. 信息网络安全, 2022, 22(8): 8-18. |
[15] | 顾兆军, 刘婷婷, 高冰, 隋翯. 基于GAN-Cross的工控系统类不平衡数据异常检测[J]. 信息网络安全, 2022, 22(8): 81-89. |
阅读次数 | ||||||
全文 |
|
|||||
摘要 |
|
|||||