SerialDetector:Web对象注入漏洞的原理和实践探索
2021-02-04 21:39:12 Author: mp.weixin.qq.com(查看原文) 阅读量:117 收藏

原文作者:Mikhail Shcherbakov, Musard Balliu
原文标题:SerialDetector: Principled and Practical Exploration of Object Injection Vulnerabilities for the Web
原文链接:https://www.diva-portal.org/smash/get/diva2:1515038/FULLTEXT01.pdf
原文来源:Network and Distributed Systems Security (NDSS) Symposium 2021
笔记作者:cherry@SecQuan

介绍

实际情况中,多数已知的对象注入攻击源于框架和库的漏洞,但由于框架大量的基础代码、复杂的语法特征和缺乏源代码等特点,分析这些应用程序的底层框架和库具有挑战性。而现有方法多依赖于对应用程序的静态源代码分析,忽略框架和库,同时也缺乏自动化的开源工具调查潜在攻击的可行性。
论文介绍了在.NET应用程序(包括框架和库)中检测和利用对象注入漏洞(OIV)的第一个系统方法。作者的主要见解是:OIV的根本原因是从应用程序的公共入口点到敏感方法的不可信信息流,该敏感方法创建任意类型的对象以调用方法触发小工具的执行。论文开发并实现了基于污点的数据流分析系统SerialDetector,可以自动发现.NET程序集中的OIV模式,然后使用这些模式来匹配公开可用的小工具,自动验证OIV攻击的可行性。

整体架构

SerialDetector分两个阶段运行:全自动检测阶段和半自动化漏洞利用阶段。在检测阶段,将.NET程序集列表和敏感方法列表作为输入,并进行系统分析以自动生成OIV模式,作者将OIV模式定义为触发敏感方法执行以创建控制攻击触发器执行的对象的公共入口点。漏洞利用阶段将生成的模式与可公开获得的小工具列表进行匹配,知识库中描述匹配的小工具,以生成用于不同格式的payload。

基于污点的静态分析

分析以面向对象的CIL(面向对象的基于堆栈的二进制指令集)为目标,利用具有模块化的过程间字段敏感数据流分析功能检测大型代码的OIV模式。

过程内数据流分析
  1. 抽象堆
    将堆表示为有向图,其中节点表示内存中的抽象位置,边表示符号位置之间的点对关系。边包含与连接两个位置的字段和变量相对应的标签。根据符号环境和符号堆来计算图。通过更新功能实现对流不敏感和对字段不敏感的抽象语义,将两个位置(以及当前环境,堆,堆栈和φ节点)作为输入,并合并以这些位置为根的子图,使用新的符号值更新符号配置。
    可以将如下代码片段抽象为图4中的堆图。
  1. 抽象控制流
    分析控制流指令的主要挑战是缺乏结构以及保持不同分支之间符号堆栈的一致性。作者按照程序计数器pc强制执行的程序顺序分析指令,不需要显式重建CFG并确保符号堆栈和动态堆的一致性,通过记录集合ψ确保不会重复分析循环。
控制流指令代码
  1. 别名和污点追踪
    每当分析敏感方法的返回值时,我们都会用污点标记丰富抽象堆图中的位置节点。通过基于存储的抽象堆模型,堆图已经为给定节点提供了别名,并可以通过查看给定位置节点的传入边的标签来计算别名。
    下图为别名和污点追踪的示例:在第1行对敏感函数的调用将返回值压入堆栈,将相应节点标记为已污染,并向已污染节点添加标有b.foo的边。类似地,第2行中的指令为污点创建b.bar的别名,从而产生图6b中的堆图。最后,对第3行的虚拟调用的分析表明b.bar被污染,因此控制其类型的攻击者确定了VirtualCall()的哪种具体实现被执行。我们认为这种方法是潜在的攻击触发器。
模块化过程间分析
  1. 调用图分析
    首先分析目标CIL程序集,以识别与call和callvirt指令关联的方法签名,将它们作为键存储在哈希表中,并将调用方法作为值。哈希表表示一个调用图,可以通过向后分析对其进行重构。
  2. 使用方法摘要进行过程间分析
    对在初步阶段确定的每个入口点执行模块化数据流分析。当算法遇到新方法时就会触发过程内分析,独立于调用上下文来分析该方法,即堆h和环境E均为空。生成称为摘要的堆图的紧凑表示并存储到缓存结构K中,在以后对同一方法的每次调用中重新使用该摘要。

系统实现

模式检测:(1)SerialDetector为整个.NET程序集数据集建立方法调用图的索引。(2)它使用定义敏感方法的条件过滤所有本机方法签名。此步骤将生成敏感方法的签名,从敏感方法到入口点方法,我们将其用于向后构建调用图的切片。(3)SerialDetector执行基于摘要的过程间数据流分析。(4)输出一系列模式,其中包含对每个敏感方法的攻击触发的调用以及从入口点到敏感方法的跟踪。我们在知识库中收集这些模式,并将其用作开发阶段的输入。

漏洞利用的生成和验证:(1)手动匹配:将生成的模式与实际的敏感方法和具有已知漏洞利用工具的的攻击触发器进行匹配,为工具生成payload并重现漏洞。给检测到的敏感接收器和攻击触发调用设置断点。如果触发了断点,并且攻击触发器对payload的恶意行为执行了调用链,则认为该模式是可利用的。(2)用匹配到的结果手动填充知识库。(3)自动生成payload和模板。(4)自动执行调用图分析。(5)自动化模板验证:验证给定的payload可以利用模板中的入口点。(6)安全人员进行漏洞利用。

实验结果

检测阶段

漏洞利用阶段

安全学术圈招募队友-ing, 有兴趣加入学术圈的请联系secdr#qq.com


文章来源: http://mp.weixin.qq.com/s?__biz=MzU5MTM5MTQ2MA==&mid=2247485499&idx=1&sn=6c3ec2889b30b71cc967ab92f8bc7c59&chksm=fe2ef7b0c9597ea61d41712b1aaeba09a7fc69ba14b97325db29ddbaafe402e488ed66fc7e64#rd
如有侵权请联系:admin#unsafe.sh