无障碍 关怀版

使用doop识别最近commons text漏洞的污点信息流

作者:vivo 互联网安全团队 - Chen Haojie

一、doop静态分析框架简介

1. doop静态分析框架简介

doop静态分析框架由希腊雅典大学plast-lab Yannis Smaragdakis团队设计开发,目前看是一款开源领域的比较先进的程序静态分析框架,一些程序静态分析论文的理论也有通过doop的规则实现后实验。

doop整体架构简单明了,符合通常静态代码漏洞扫描工具扫描器内核的设计思路。架构上由groovy写的调用程序“粘合”在一起,通过调用fact-generator和datalog分析器,得出自动化的分析结果。

下面是笔者画的doop整体架构图,包含doop中一些关键的组件模块:

2. doop工作流程

doop支持对java源码及字节码的分析,不过源码的jdk版本受限,建议直接使用字节码进行分析。

doop核心是其实现的一套datalog分析规则,其中包含了由粗糙到精细的context-insensitive、1-call-site-sensitive、1-call-site-sensitive+heap的丰富的静态程序分析策略等等等,同时通过在addons中添加了额外的对信息流分析、对spring等生态框架、对java反射特性的支持,十分强大。

以上是对doop的架构和功能的简单介绍,jar包信息的解析、规则的预处理、编译执行和解释执行、程序的并发设计或者由于大量sootclass加载造成的内存溢出问题等一些细节由于篇幅限制不在此介绍。

二、commons text rce漏洞简介

先对该漏洞进行简单介绍。

借用网上公开的poc触发StringLookup中的代码执行,使用commons text 1.9版本 :

完整的漏洞调用栈如下:

从调用栈可以看出,通过调用commons text的字符串替换函数,可以调用到StringLookup类的lookup方法,从而调用Engine.eval执行代码。可以看出该条漏洞链路较浅,但链路关键节点也涉及了接口抽象类的cast、输入字符串的词法分析状态机以及各种字符串的处理函数,作为实验对象非常合适。

我们选取上述二中commons text中

org.apache.commons.text.StringSubstitutor replace函数作为source,Engine eval函数作为sink。

doop设置app only模式去进行分析,doop在app only模式下会将!ApplicationMethod(?signature)加入isOpaqueMethod(?signature),这样一些分析不会进入jdk的类中,可以大大提高doop的分析效率。依据莱斯定理,静态程序分析难以达到完全的完备(truth或者perfect),也是尽可能优化sound。类似在企业级的SAST部署使用也是如此,也需要在扫描精度、扫描速度以及实际可用性中进行取舍或者平衡,所以doop的app only模式下在个人看来更接近实际嵌入到devsecops中的轻量级静态代码漏洞扫描的应用。

3.1 doop的datalog分析规则简单介绍

由于涉及doop app only规则的改造,首先先简单介绍doop使用的datalog规则。

doop目前维护使用开源的Soufflé分析datalog规则。datalog是声明式的编程语言,也是prolog语言的非图灵完备子集,所以本质上也是建立在形式逻辑中的一阶逻辑上。所以基础概念也是命题推导,在Soufflé的形式上就是表现为关系(relation)。

如下例子:

很明显可以看出该例子通过datalog定义的关系逻辑实现相等关系的自反性、对称性和传递性,首先定义了equivalence关系,该关系可以由rel1和rel2关系蕴涵得到,而equivalence的a需要满足关系rel1,b需要满足关系rel2。具体语法和高阶特性可以通过souffle-lang.github.io网站进行了解。

3.2 doop配置使用简单介绍

doop可以通过gradle去编译使用,需要提前在类unix系统中借助cmake编译安装Soufflé,doop的具体安装使用可以在https://github.com/plast-lab/doop-mirror中了解。

对doop的命令行使用进行简单,分析,有几个关键的命令参数,-i参数接受需要分析的文件(例如jar包),-a参数配置分析策略(例如是选择context sensitive还是context insensitive),--app-only参数配置开启doop的app only模式,--information-flow开启doop的信息流分析模式(可以用来做污点分析),--platform设置分析需要的jdk平台,--fact-gen-cores配置生成facts的并发性。

本文使用的doop命令参数:

-a context-insensitive --app-only --information-flow spring --fact-gen-cores 4 -i docs/commons-text.jar --platform java_8 --stats none

3.3 重新编译打包commons text

下载commons text的源码,自定义两条class和method注解TestctxTaintedClassAnnotation、TestctxTaintedParamAnnotation:

注解实现为一个空注解,主要是为了标注一下我们的source,将注解打到对应的class类和方法:

重新编译打包为jar包,得到2中命令参数-i的commons-text.jar。

3.4 改造doop app only下的规则

然而其中没有包含String split函数的污点转移规则,需要添加上:

为了确保方法的可达性,我们还添加了

ImplicitReachable("") :- isMethod("").但后续看不一定有必要,仅供参考。

通过注解我们在规则中定义了source,接下来需要定义sink,我们将Engine的eval方法定义为sink:

于是需要定义

OptTaintedtransMethodInvocationBase关系。

在此基础上,为了完成新的污点转移,doop需要根据以下自定义规则分析出返回值的类型信息。

基于以上的污点转移过程分析规则,应用到污点变量的转移分析规则中。

在结果集中的LeakingTaintedInformation.csv文件中可以找到我们需要捕捉到的souce-sink流。

LeakingTaintedInformation.csv给出了污点信息。包括污点的标签(这里是默认的default,可以自定义),sink方法的调用信息,该sink方法对应的污点源头souce信息。

如上图可以看出,

org.apache.commons.text.lookup.StringLookup:

java.lang.String lookup(java.lang.String)中调用到

javax..Engine.eval,并且污点的源头是

org.apache.commons.text.StringSubstitutor:

java.lang.String replace(java.lang.String)方法的参数@parameter0。

同时,在结果集中的AppTaintedVar.csv文件也可以看到具体的应用代码中由于污点传播过程中的被污染的变量.以上面commons text 漏洞执行方法栈中的

org.apache.commons.text.StringSubstitutor的resolveVariable为例:

可以看出方法中被污染的入参variableName、buf,还有resolver,以及$stack7等(这是经过soot生成jimple的过程中SSA pack部分优化新增的栈变量)。

基于这两个结果集基本可以看出漏洞的触发流程或者说污点的传播过程(虽然不是特别直观),如果需要也可以再搭配生成的CallGraphEdge.csv去更方便的进行分析。

四、总结

doop直接用来分析大型项目需要一定的计算资源,并且无论是规则的定制还是分析结果查看都不是特别直观,毕竟它的设计初衷就是一款分析框架,用在实际漏扫漏洞挖掘中可能需要进一步包装修改 。但可以看出,doop作为一款优秀的开源静态分析框架,在算法上毋庸置疑是比较先进和丰富的,而且基于开源的算法规则,我们可以任意去定制我们需要的分析逻辑。其与codeql在设计思路也较为相近,将程序信息提取后生成数据库,开放查询接口,将程序分析转变为数据关系的查询,因此可以扩展出更多的用途。

近期有较多投资机构在寻找优质开源创业项目,有意向可以添加微信 Hikalin,获取一手信息。

近期有较多投资机构在寻找优质开源创业项目,有意向可以添加微信 Hikalin,获取一手信息。

END

马斯克承认“家丑”,去年大裁员给自己挖了坑

这里有最新开源资讯、软件更新、技术干货等内容

点这里 ↓↓↓ 记得 关注✔ 标星⭐ 哦 返回搜狐,查看更多

责任编辑:

平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
阅读 ()

玻璃钢生产厂家惠州发光景观玻璃钢雕塑设计天心玻璃钢造型雕塑上海个性化玻璃钢雕塑方法扬州玻璃钢海豚雕塑价格学做玻璃钢雕塑玻璃钢海洋雕塑茂名玻璃钢卡通雕塑造型玻璃钢雕塑要多少钱一个园林玻璃钢卡通雕塑商家玻璃钢雕塑用法南京高档玻璃钢花盆金华佛像玻璃钢雕塑供应商玻璃钢造型雕塑选哪家温州工业玻璃钢雕塑摆件机制玻璃钢花盆人像玻璃钢雕塑价格遂宁商场美陈道具易拉罐玻璃钢雕塑马鞍山玻璃钢雕塑商家江苏人物玻璃钢雕塑设计玻璃钢花盆能种竹子吗南昌有做玻璃钢雕塑厂家么浙江主题商场美陈有哪些西安小品系列玻璃钢雕塑价格广东玻璃钢金属雕塑图片玄武春季商场美陈玻璃钢花盆大全河南玻璃钢雕塑生产商恩平玻璃钢雕塑厂家宿州玻璃钢雕塑生产厂家香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化