Paper Read Summery 2019--2020.06

由于越来越懒,博客更新速度明显下降,所以我决定每个月将有记录的所阅读的论文发到博客上来。嘿嘿,那么说每个月至少有一篇博客了(我可真是个小机灵鬼)。当然欢迎有兴趣的各位师傅联系我一起学习进步。

这篇文章直接贴前面阅读的一些论文,所以第一篇内容会比较多,有啥理解不对的地方希望各位师傅指正。

Revisiting software ecosystems Research: A longitudinal literature study

publish: Journal of Systems and Software 2016

link: https://www.sciencedirect.com/science/article/pii/S0164121216000406

bio: 本文是对于software ecosystem的综述

本文主要贡献

  1. 综述了231篇目前最新的软件生态系统的文章

  2. 发现本领域在快速发展,聚焦于empirical文章,且数量显著增多

  3. 我们认为这标志着本领域的相对成熟
  4. 我们发现了一些阻碍本领域发展的因素,并提出一些解决方案
  5. 提出最新的软件生态系统定义

分析结果

  1. 自2007年开始,论文发布数量每年都在增加

  2. 论文发布机构呈多样化,International Workshop on Software Ecosystems (IWSECO)和Workshop on Software Ecosystem Architectures(WEA) 最多。

主要发在软件工程相关的会议及期刊(ICSE)、以及各种软件工程相关,比如软件架构(ECSA,WICSA),软件维护(ICSM,CSMR),和多样性(VAMOS)

与数字生态系统交叉的会议期刊(MEDES,DEST)

商务方面或与软件商务生态系统交叉的会议期刊(ICSOB)

生态系统数字分析的会议期刊(MSR)

相对会议及workshop,期刊论文持续增加(JSS,IST)

  1. 研究结果分类接近一半为report,且在持续增加。empirical model 增速明显

  2. 作者将这些研究分为三类:软件工程、商务管理和软件生态系统分类

  3. 对于现存开源软件生态系统的研究在增加(108种已知软件生态系统),占总数的百分之70。多个软件生态系统之间的比较研究也在增多。

对于不同现存生态系统,作者使用三个维度进行区分。

组织结构、商务结构、软件结构

讨论

领域成熟及进化:

作者鉴于相关论文尤其期刊论文显著增多,empirical模型研究增多,认为软件生态系统的研究是流行且具有潜力的。相关领域研究也相对成熟起来。

但作者认为软件生态系统广泛且差别复杂,缺乏系统性理论、方法、工具等来概括,这些问题仍然是阻碍这一领域研究前进的主要因素

Software ecosystem scoping:

作者认为,解决上述问题的其中一个方案是,专注于特定几个或几类生态系统的深入研究,而不是广泛的对单个方面生态系统的研究。

Theory building:

对于通用理论的构建,作者认为研究者应该尝试将自己的研究成果迁移到其他软件生态系统。并且在构建新理论时,需要对自己研究的系统进行科学描述。当从其他领域引入理论时,应当注意这些理论是如何适应、影响以及被其他生态系统影响的。再者,生态系统使用社区也应当对研究者提供相应的支持。

Updating the definition:

作者最后给出了ecosystem的定义

the software and actor interaction in relation to a common technological infrastructure, that results in a set of contributions and influences directly or indirectly the ecosystem.

On the impact of security vulnerabilities in the npm package dependency network

publish: MSR 2018

link:https://ieeexplore.ieee.org/abstract/document/8668013

bio:

本文着重分析安全问题对npm依赖package网络的影响,分析了399个已知漏洞报告、269个独立package中的6752个release,其中72470个受这些package直接影响的依赖package。

数据集:

使用 snyk.io 里报告的npm开源项目的漏洞报告。使用libraries.io中跟踪的开源项目版本、元数据中的依赖信息 (去除已经从npm删除的漏洞package,忽略本来就是恶意的)。

本文回答以下问题:

  1. 多少包受到已知安全漏洞影响

  2. 不同危害等级的包都花多久时间才被修复

  3. 这些漏洞从发布到发现都花多长时间

  4. 这些漏洞都是在什么时间被修复的(漏洞发现前、漏洞发现与被公开之间、漏洞被公开之后)

  5. 这些漏洞包的依赖包中的漏洞是何时修复的(修复方法:漏洞修复前回滚无漏洞版本、修复后更新版本、删除不用这个依赖包)

FUSE: Finding File Upload Bugs via Penetration Testing

论文信息:NDSS 2020

概述:无限制文件上传漏洞(UFU)在Web中是一个非常严重的漏洞,它包括无限制可执行文件上传(UEFU)。如果能通过url运行上传的可执行文件就可以导致远程命令执行。本文实现了一个可以自动化挖掘基于PHP服务器后台的文件上传漏洞的渗透测试工具FUSE。并用FUSE测试了33个cms发现了30个漏洞包含15个CVE。

背景

​ 应用场景: 大多数web应用都允许用户上传文件,如果无限制允许上传php或者HTML、XHTML、JS文件,就可能通过URL允许这些文件导致远程命令执行或者XSS等。

​ 问题陈述:当今Web程序都会实现上传文件过滤限制,不同的程序过滤代码不尽相同。过滤不严导致的文件上传漏洞非常常见。

价值

​ 论文贡献:本文开发出了一个面向PHP为后台的挖掘无限制(可执行)文件上传U(E)FU漏洞的渗透测试工具,并且在后面验证了工具的有可行性和有效性。

​ 主要挑战:

  1. 识别特定应用的内容过滤检测,并且利用过滤不严绕过它。

不同应用过滤方式不一样,过滤方法种类繁多。比如黑白名单过滤后缀、上传MIMETYPE、通过文件内容识别MIMETYPE等

  1. 这些利用漏洞成功上传的文件仍然要保持它的语义上的可执行性。

为了绕过过滤而经过变形的可执行文件,如何保证它仍然能够被执行?(即php解析器是否能解析php文件,以及浏览器解析html文件)

​ 论文弱点:1. 对seed文件的mutation 变行操作是人为定义的,存在当php解析器、浏览器等更新导致的失效。2. 本文针对的是基于php服务器后台的web程序,未考虑到如java、python等流行语言服务器后台

方案

​ 技术依据:FUSE使用一系列人为定义的seed文件(包括PHP、HTML、XHTML、JS)和对目标web程序的配置文件。利用5种mutation策略提出了13种人为定义的mutation操作对seed文件以及上传策略变形,从而达到绕过检测的效果。

mutation策略:

  1. 尝试发现内容过滤检查的遗漏。
  2. 绕过针对服务器根据文件内容识别文件类型的过滤方式。
  3. 不完善的黑白名单后缀检测。
  4. 绕过根据文件内容的关键字识别检测。
  5. 绕过基于Content-Type的过滤。

如下为13种mutation操作

​ 方案框架:分三个部分,

chain coordinator:

为不同的seed文件生成并维护一条链表,其中包含了对seed上传请求的mutation操作组合,根据策略削减链表中的组合(如M1成功了就不在测试含有M1组合的策略如M1M2)

upload agent:

根据chain coordinator提供的链表上的mutation操作组合生成文件上传策略,根据目标web程序配置文件中的配置,完成身份认证以及CSRFtoken的验证,最后尝试上传文件。

upload validator:

验证上传的文件是否真的成功上传,并且获取上传成功文件的url,验证可执行文件是否能够执行代码。

因为不少web程序不会直接返回上传了的文件的url,而有些web程序对于上传的文件有统一的格式。本文提出了监测上传成功了的文件的url的三种方式。

  1. 人为提供通用的url前缀
  2. 上传响应包中,或者该程序有页面显示
  3. 在目标服务器进行文件监控(这将使得黑盒测试变成灰盒)

评估

​ 评价标准:挑选了33个以PHP为后台的开源CMS,与目前最先进的两种文件上传渗透测试工具(fuxploider, UploadScanner)对比挖掘UEFU、UFU和PCE漏洞能力。并分析测试的效率。

​ 评估结果:FUSE在挖掘UEFU、UFU和PCE类型漏洞上都显著高于其他两种渗透测试工具。

论文信息:USENIX 2018

概述

现代多层次架构的web程序存在很多动态特性,单独的静态分析很难完成漏洞识别。本文提出了一个以静态分析为指导,结合动态分析自动化识别漏洞并生成有效的攻击载荷的工具,本工具可以处理多种类别的漏洞,在实验中对26个php web程序分析了3.2M行的PHP代码,构建了204个有效的攻击载荷。

价值

​ 论文贡献:

  1. 提出一种可以精确分析多层次架构具有动态特性的web程序漏洞的方法,结合动态分析提高代码分析的覆盖范围。
  2. 可以分析大型程序多种漏洞并自动生成攻击载荷,通过静态和动态结合提升了性能,减小了路径的规模。

​ 主要挑战:

  1. sink 可达性

污点(sink点)可理解为漏洞触发点。在目前web程序中,一些函数或者代码需要一系列的步骤才可到达,这些步骤互相也可能存在依赖。而且往往输入过滤会分布在各个部分,包括内置函数过滤(如htmlspecialchars)、隐式过滤(比如类型转换)、自定义过滤、以及数据库约束等。这都增大了获得一个有效攻击路径的难度。

  1. 动态特性

现代web应用包括很多动态特性,仅当程序运行时才会显现。比如嵌入html的php代码、动态执行的javascript生成的表单或者路劲,它们都可能包含对攻击路径有用的约束。并且也可以提高应用代码可达的覆盖范围。

  1. Scalability

分析一个大型web程序跨多个模块的攻击路径并生成可执行exp是困难的,而且还需要分析处理多种漏洞,这其中的路径分支规模是巨大的。

​ 论文弱点:

  1. 一些web程序的特定功能尚不支持分析,限制了代码的覆盖范围。比如文件上传功能。
  2. 从图node中自动导出三地址码公式存在不完整情况。
  3. 步骤一的漏洞点寻找存在误报的情况。
  4. 论文中使用的CPG图不能支持php中的动态函数调用。

方案

​ 技术依据:

  1. 识别可能的漏洞点

通过漏洞触发函数使用静态分析单独优先分析各个模块(减少规模),为这些代码构建增强的代码属性图模型,分析其中从数据来源点(source)到漏洞触发点(sink)的数据流路径,再使用符号执行和约束求解决定那个路径是可能存在漏洞的。最后为可能存在的漏洞生成漏洞利用字符串。

  1. 生成具体的漏洞利用

首先使用动态执行(爬虫)为web程序描绘导航图,发现所有模块的可能HTTP请求序列。再结合上述生成的可能漏洞点筛选执行路径。

​ 方案框架:

本工具分为两个部分。

  1. 识别可能的漏洞点

a. 首先构建攻击字典

​ 描绘各种漏洞的规范,包括漏洞点(sinks,print_r 函数 for XSS)、过滤(比如htmlspecialchars)、遍历方式(之后的图的遍历方式,包括向前和向后)、攻击字符串(为各种漏洞提供初始攻击载荷)。

b. 构建代码属性图

​ 代码属性图(CPG)是一种结合了抽象语法树(AST)、控制流程图(CFG)、调用图和数据依赖图(DDG)的表示。为了后面的生成具体的漏洞利用,作者还扩展了过滤标记和数据库约束标记。

c. 遍历图

​ 作者提出了两种遍历算法,向前遍历(从外部source点向sink点寻找路径)、向后遍历(一种从sink点向外找可用路径)。

d. 生成攻击字符串

​ 利用上面的可能漏洞的攻击路径和数据库约束、和在攻击字典中设置的约束,用约束求解器计算出一个攻击字符串。

  1. 生成具体的漏洞利用

a. 动态执行

​ 动态执行是为了为整个程序构建一个导航图。通过满足了前端(爬虫、以及对Js代码的分析,借助约束求解和concolic执行来生成大量表单输入,以帮助爬虫最大化应用程序的覆盖范围)和服务器端的约束(监控状态、敏感操作等)提高导航图的覆盖范围。

b. 生成漏洞利用

​ 最后根据增强的CPG图和攻击字符串以及导航图,将寻找http请求序列执行攻击载荷的问题转换成图遍历问题

评估

​ 评价标准: 分析了26个真实环境的php程序,与其他类似工具比较(chainsaw、rips)漏洞发现和具体漏洞利用能力。最后对性能、动态分析的覆盖范围、在增强后的CPG图的影响、前端代码分析的影响这几个方面做出了评估。

​ 评估结果:

成功构建了204个漏洞利用,在上述几个方面都得到了积极地评价。

Chainsaw: Chained Automated Workflow-based Exploit Generation

论文信息:CCS 2016

概述

本文处理了一系列web自动化利用生成中所遇到的困难,诸如多模块性、用户输入被干涉、web程序的多层次架构以及数据库问题。实现了一个工具Chainsaw,分析了9个开源软件生成了199个一次和二次注入漏洞的利用。

背景

​ 应用场景: 输入web程序源码、数据库模式和攻击标准,为所有漏洞点生成一系列的http请求链。

​ 问题陈述:

注入漏洞分析通常有两种方法:渗透测试和基于程序分析方法。渗透测试对于代码的覆盖率很低,普通静态分析会出现大量的假阳性的漏洞仍然需要大量的人工排查。本文提出一个基于静态分析,并自动化生成http漏洞利用链的方法,解决以上的问题。

价值

​ 论文贡献:提出web程序漏洞利用生成方法,此方法可以生成一系列http请求链利用XSS、SQLi甚至二次注入的漏洞。

​ 主要挑战:

  1. 对于多模块的web程序,。

  2. 数据过滤和路径敏感性。

为了能生成有效的exp,必须对用户的输入转换以及过滤和到达sink点的路径有精确的模型,而且对于不同路径过滤也可能不一样。

  1. 持久性存储的影响。

数据库里的数据也需要被考虑到,如果用户能控制数据库里的数据,也可能合适的构造一个二次注入。

​ 论文弱点:

  1. 无法处理动态特性,所以在前端存在js导致的状态转移可能降低构建通用工作流程图的覆盖率。
  2. 求解失败,有时会出现超时导致的求解失败的情况。
  3. 不支持php某些特性。不支持php的动态包含以及面向对象等特性。

方案

​ 技术依据:

种子生成:在每一个模块里,CHAINSAW把从输入点到漏洞点的所有执行路径全部符号化,这样就获得了一个符号化公式Fp。

导航问题:由于存在众多模块及模块内部的变量,全局执行路径的组合数量极为庞大,遍历尝试的代价太大。而本文提出解决方法是,根据全局执行路径的组合数量,对可能的导航序列进行排序。

工作流推断:工作流推断模块将所有可能的导航序列(程序运行流程)按照全局执行路径的所有可能性数量进行排名,下一阶段的目标是找到能触发漏洞点的全局执行路径。

二次注入攻击的利用:数据库内容可能会导致二次注入,文章展示了两种方法将数据库约束加入整个方法,1. 静态输入生成,建立web程序数据库输入和输出的映射,动态插入需要的数据。2. 动态审计,自动利用数据库已有数据。

​ 方案框架:

整个方法分为三步:

  1. 种子生成。 为每个模块输入构建模型,同时也产生Exp种子,即在各个模块中触发漏洞点的输入。
  2. 推导工作流。为整个应用程序提取http导航图,推到各模块之间的导航图。
  3. 最后结合上面两步通过全局路径的约束求解,得到最后的漏洞利用。

评估

CHAINSAW对9个开源的PHP应用进行了测试,其代码复杂度不尽相同,SLOC从323到63502不等。

​ 评价标准:分析了其中一次注入、二次注入的效果,以及是否加上数据库约束的效果,分析复杂度和时间消耗。并与相关工作进行了对比。

​ 评估结果:

效果良好

Code Reuse Attacks in PHP:Automated POP Chain Generation

论文信息

概述

ROP是一个常见的技术来绕过对二进制可执行文件漏洞的防护,在web程序中也存在代码复用来攻击web程序的漏洞。这篇文章介绍了基于PHP的web程序是如何遭受PHP对象注入(POI)漏洞威胁的。分析了如何利用面向属性编程(property-oriented programming,POP)来利用POI漏洞。本文的主要贡献在于提出自动化检测POI漏洞的方法,以及自动化利用代码复用构建POP链。最后用该方法测试了10个著名应用程序,检测出30个POI漏洞和28个POP链。

价值

​ 论文贡献:

  1. 系统性分析了PHP对象注入(POI)漏洞,以及面向属性编程(POP)链利用方法。
  2. 首次提出在php面向对象代码中自动化检测POI漏洞方法,并通过自动构造POP链来确定其正确性。
  3. 用该方法测试了10个著名应用程序,检测出30个POI漏洞和28个POP链。

​ 主要挑战:php面向对象特性代码分析的框架方法很少,暂时没有有效的方法支撑在众多代码中构建POP链。

​ 论文弱点: 对面向对象的代码分析不够彻底,仅从部分特性研究,会导致遗漏很多可以利用的攻击链。

方案

​ 技术依据:PHP对象注入(POI漏洞)检测方面,本文直接利用其先前工作即RIPS工具中所实现的办法。本文重点在于对面向对象代码的分析从而自动化构建POP链。

面向对象代码分析,首先收集代码中面向对象特性,如果继承连之类,然后将新对象创建、对象属性访问、等加入到先前的静态数据流分析中,在最后在过程化的分析方法中利用类继承、方法指纹来处理面向对象调用。

评估

​ 评价标准:将10个曾经披露过POI漏洞的OOPweb程序作为分析对象,分析本工具的POI检测能力、POP链构造能力、以及最后成功构造的POP链导致的漏洞类型分析。

​ 评估结果:

除2个POI漏洞未成功发现以外,检测出除去已披露的漏洞新发现30个POI漏洞和28个POP链。

MalMax: Multi-Aspect Execution for Automated Dynamic Web Server Malware Analysis

论文信息

概述:本论文提出一个新型的的检测服务器端复杂多种形式且能在运行时自动生成的恶意软件的系统MalMax。在MalMax静态分析遇到执行路径分支时,它会在一个隔离环境的沙箱中使用反事实执行( counterfactual execution )。MalMax的另一个特性就是使用了协作隔离执行(cooperative isolated execution)它能使一个隔离环境可以使用另一个隔离环境中的运行产物(变量,函数和类)。使用协作隔离执行大大的增大了反事实执行的覆盖范围。

背景

​ 应用场景: 服务器端恶意软件的检测。

​ 问题陈述:基于Web的恶意软件一直以来就是Web安全的重点之一,服务器端的恶意软件会比客户端的恶意软件更具破坏力,他们可以持久存在于服务器上长时间对广泛的客户端造成影响。然而当前存在的工具很少可以处理复杂的服务器端恶意软件,而且它们通常会混淆变异、并利用php脚本的动态特性等技术伪装他们。

价值

​ 论文贡献:

  1. 开发出一个利用反事实执行和协作沙箱技术来深入探索恶意代码动态特性的系统MalMax
  2. 基于MalMax开发出一个可以实际使用检测服务器端恶意软件的程序PhpMalScan,定义了两个评价标准PMFR(可能被当使用的恶意函数在代码中被调用的比例)和MS(人为定义的有潜力的恶意活动的数量和频率)。
  3. 一套开源的恶意软件测试系统
  4. 进行了大量评估,使用上述测试套件和1TB真实世界网站,显示出MalMax在假阳性和假阴性的错误上都低于VirusTotal。

所以本文主要贡献在于结合反事实执行技术和协作隔离沙箱使得探测代码覆盖率提高,设计出基于MalMax的恶意软件评价标准及检测系统。最后做了大量评估工作证明其有效性。

​ 主要挑战:服务器端恶意软件相对客户端恶意软件来说,想要运行到恶意代码逻辑通常需要攻击者提供部分信息。PHP语言的动态特性会使得恶意代码变得复杂。恶意代码通常都会捆绑在良性代码中。

​ 论文弱点:

  1. 因为人未定义的两个标准PMFR和MS,PhpMalScan可能被绕过
  2. 状态爆炸。为了解决状态爆炸问题,MalMax依靠实际执行(concrete executions)。但因为MalMax每个隔离沙箱都会分享全局的中间产物,仍然存在状态爆炸的隐患。每次互相分享时,MalMax会为其创建新的隔离的状态,将状态爆炸问题转换成路径爆炸问题。
  3. 路径爆炸。本文使用CFT处理循环中的路径爆炸。大量的条件分支以及协作隔离沙箱的创建都可能导致路径爆炸。
  4. 无用的路径以及错误的程序状态。MalMax使用反事实执行会强制进入不满足的分支,提高了代码覆盖率的同时增加了无用路径的可能。无用路径会导致错误的程序状态,会产生假阳性的例子。
  5. MS值的敏感度。设置MS的阈值可能导致不同比例的假阳性和假阴性。

方案

​ 技术依据:

反事实执行(ounterfactual execution): 反事实执行在代码分析执行遇到路径分支时,强制选择那些即使不会满足的分支,进入正常情况下通常不会运行的代码段。这样可以弥补服务器端恶意软件通常需要攻击者提供信息才能运行的问题,并且能提高代码覆盖范围。

控制流程修整(Control flow trimming): 恶意代码通常会使用大量的循环延迟躲避检测,或者在循环中有条件的执行恶意代码。CFT使用一个阈值限制循环次数,并且在运行中不断增加阈值直到发现循环中覆盖所有代码。

协作隔离执行(Cooperative Isolated Execution): 当使用反事实执行强制进入一个不满足的分支时,会为其中的代码创建一个隔离沙箱。协作隔离沙箱允许MalMax分析代码行为,在不同沙箱中共享运行产物

Cross-Origin State Inference (COSI) Attacks:Leaking Web Site States through XS-Leaks

论文信息: NDSS 2020

概述:本文概述了Web站点的COSI(跨域状态推测,Cross-Origin State Inference)攻击。受害者访问了攻击者的页面后,攻击者利用受害者浏览器的跨域交互特性来推测受害者在某个网站的状态(登录or未登录,普通会员or高级会员等)。本文对过去COSI共计的利用方法做出了概述总结,并且介绍了一种能够在多种浏览器上处理多种状态的方法,并且提出一种新的COSI的利用方法:利用window.postMessage的XS-Leak方法。将上述方法实现了一个工具Basta-COSI并在58个流行站点中都找到了COSI漏洞。

背景

​ 应用场景: 攻击者说服受害者访问一个攻击者控制的页面,而攻击者的目的就是获得受害者在某个网站上的状态(比如登录与否、是否曾经访问过某个页面、是否通过某个SSO登录、登录账号类型、甚至去匿名化用户),这对某些对隐私性要求比较高的网站有很大的危险。

价值

​ 论文贡献:

  1. 提出了可以处理复杂的COSI攻击的方法,比如多状态、多种浏览器,以及会自动使用多种XS-leak。
  2. 提出一种新颖的基于window.postMessage的XS-leak方法,此方法对流行的三大浏览器都有效。
  3. 第一次系统性概述COSI攻击的方法,概述了40个攻击集合,其中19个以往的攻击方式以及21个变种。
  4. 实现了检测COSI攻击的工具Basta-COSI。

​ 主要挑战:

  1. 现实生活中的Web站点用户常常有多种状态,通常的COSI方法很难处理多状态的问题。

  2. 很多以往单独的COSI利用方法是依靠特定浏览器的,无法满足多浏览器特性。

  3. 以往的COSI利用方法也常常聚焦于单独的XS-Leak方法。

​ 论文弱点:

  1. 前置的准备措施比较麻烦,需要为每个被测试的Web程序创建多个用户以及状态检测脚本
  2. 目前仅支持三种浏览器:Firefox、Chrome、Edge。
  3. Basta基于渗透测试工具ZAP的爬虫模块,对于动态Js生成的页面不是很好的支持
  4. 基于时间的侧信道攻击虽然在概述总结了,但是在工具中没有实现。

Deemon: Detecting CSRF with Dynamic Analysis and Property Graphs

基本信息

​ 来源:CCS 2017

​ 概述:本文提出了一种利用属性图和动态分析检测CSRF漏洞的方法。

论文要点

​ 背景:暂未存在自动化检测CSRF漏洞框架,

​ 价值:首先提出并实现了一个利用属性图和动态分析检测CSRF漏洞的框架,用其测试了10个PH P Web应用程序,发现其中14个存在的CSRF漏洞。

​ 问题陈述:

  1. 确定由于http请求导致的状态转换
  2. 确定这些状态转换是否与安全相关
  3. 确定请求参数与状态转换之间的关系
  4. 在大型Web程序的工作流程中找到改变状态的请求
  5. 如何进行对后续测试无影响的测试
  6. 建立全面、可重用的应用程序功能表示

​ 方法:

​ 监控程序执行并推断其状态转换和数据流信息模型来解决1,3问题。利用图遍历的方式对属性图进行编程访问,以确定与安全相关的状态转移,解决了2问题。依靠虚拟化环境,通过快照实现测试无影响的环境结局了5问题。使用属性图解决6问题。

评论

​ 扩展阅读: Ecient and Flexible Discovery of PHP Application EuroS&P 2017 近年php 静态分析文章。Toward Black-Box Detectionof Logic Flaws in Web Applications NDSS 2014 Web应用黑盒测试文章。

Efficient and Flexible Discovery ofPHP Application Vulnerabilities

基本信息

​ 来源:European S&P 2017

​ 概述:本论文实现了一个基于代码属性图的过程间分析技术来大规模挖掘Web程序漏洞的方法,此方法将源代码分析存入代码属性图, 最后利用图遍历的方式挖掘漏洞。作者分析了1854个程序包含了8千万行代码证明了其大规模挖掘漏洞的能力。

论文要点

​ 背景:目前为止,使用php作为web应用的语言仍占大多数,先前的自动化挖掘Web漏洞工作只是对于少数可控应用的有限代码进行分析。本文提出一种在有限时间和有限资源的情况下大规模挖掘Web程序漏洞的方法。

​ 价值:

  1. 首次提出和使用php代码属性图,是首次将代码属性图引入到高级脚本语言的分析中, 并且增强其能力使得允许过程间代码分析。

  2. 为Web应用漏洞建模,将寻找攻击者控制的source未过滤时到sink点的流的问题转换成 图遍历问题。

  3. 实现了大规模程序的漏洞挖掘, 分析了1854个Web程序,超过8千万行代码,找出了78个SQL注入、6个命令注入、105个代码注入、6个任意文件读以及若干个XSS漏洞。

​ 方法:

​ 代码属性图: 代码属性图由传统的AST、控制流程图、程序依赖图构成。作者为其添加了函数调用图实现过程间的代码分析。

​ 结果:实现了大规模程序的漏洞挖掘, 分析了1854个Web程序,超过8千万行代码,找出了78个SQL注入、6个命令注入、105个代码注入、6个任意文件读以及若干个XSS漏洞。

评论

​ 局限性:为了实现大规模的漏洞挖掘,不得不忽略了部分过滤函数等特性,才能更好的符合大规模程序共同的特性,这样的话会丧失精度,提高了假阳性的例子。而且本方法在构建call graph时仅处理全局类函数名不同的调用,如果某些类的函数名相同,对于php这种动态语言由于类的多态等原因很难精确找到改掉用的函数为哪个类的该函数。

​ 扩展阅读:Modeling and Discovering Vulnerabilitieswith Code Property Graphs 2014 S&P 首次提出代码属性图挖掘C源代码漏洞的方法。

​ 启示:使用代码属性图方式分析源代码挖掘漏洞方式值得借鉴。

Simulation of Built-in PHP Features for Precise Static Code Analysis

基本信息

​ 来源:ndss 2014

​ 概述:对于php这种弱类型、高动态性的语言,对它进行静态分析有很多的挑战。本论文仿真了九百多个php内置函数,实现了对20种污点类漏洞的挖掘,并实现了工具RIPS。

论文要点

​ 背景:流行的对php的静态分析方法精确度不行,容易漏报和误报。而且通常只能处理几种漏洞。

​ 价值:

  1. 本文为静态分析仿真了九百多个内置函数,并证实了对语言特性精确地建模可以提高准确性。
  2. 首次对php语法及特性进行细致的建模,对各种漏洞对应的过滤函数、编码函数等进行研究。最后实现了20种污点类漏洞的挖掘。
  3. 本文基于上述实现了一个php静态分析工具RIPS,使用其挖掘了现实生活中的php程序挖掘出了73个未被发现的漏洞。并与同类工具进行比较,证明其为最先进的。

​ 方法:对源码进行分析,提取用户定义函数,对剩余内容建立抽象语法树。然后将AST转换成控制流图,为每个块建立块摘要。 遇到用户自定义函数调用时,对自定义函数建立AST、函数摘要,将其用于过程间分析。最后从自定义危险函数或者被识别的内置sink点进行后向污点分析。

其中,为了提高精度与速度,为每种漏洞标记其独特的编码和过滤函数。仿真九百多个内置函数。将文件包含建模为函数。使用上下文敏感分析等。

​ 结果:实现了一个工具RIPS,在现实生活中的php程序挖掘出了73个未被发现的漏洞。

评论

​ 局限性: 不支持面向对象,

​ 启示: 精确的对某个语言的特性以及内置函数建模,可以各方面提高污点分析的准确性。

TARDIS: Rolling Back The Clock On CMS-Targeting Cyber Attacks

基本信息

​ 来源:S&P 2020

​ 概述:

​ 目前世界上55%的网站都是使用内容管理系统(CMS, Content Management Systems,比如wordpress、drupal)搭建的。由于用户基数很大,基于CMS的站点也十分的收到黑客的青睐。目前工业上很大一部分网站托管平台都会采用一种“备份和恢复”的安全模式,它通常在夜间备份网站,使用病毒扫描器扫描站点源码,如果扫描出病毒后门即通知管理员恢复前面的快照。

​ 本论文作者通过和 CodeGuard公司合作,对该公司30万+的网站备份源码进行分析。发现现存的“备份和恢复”安全机制并不能有效的达到其安全效果。并推出了一款名为TARDIS的工具,仅利用一个站点的每日备份的快照,自动化判断其是否被攻击并进行攻击溯源。该工具对30万+网站进行分析,发现20591个站点曾经被攻击,且攻击持续了6至1694天。

论文要点

​ 背景:

​ 由于广泛的使用内容管理系统(CMS)进行网站搭建,对于使用相同版本的CMS的网站,其存在的漏洞基本相同,攻击者可以很好地批量攻击。目前广泛使用的“备份和恢复”安全模式非常依赖病毒扫描器对站点源码的扫描分析,而这些扫描器仅能扫描出已知模式的病毒后门,也无法发现持续多阶段的攻击,而且大多数非专业的网站管理员也无法在扫描器报病毒时将网站恢复到合适的快照。

​ 价值:

  1. 分析出现存的工业上网站托管平台通常使用的“备份和恢复”的安全模式并不能有效的达到其安全效果。并分析并提出了一个利用更优的解决方案。
  2. 分析并实现了一个工具:TARDIS。仅需利用每日站点的源码备份,对源码进行分析,能够自动化识别其是否曾经被攻击,并识别各个攻击阶段以及整个攻击窗口时间。
  3. 对30万+网站从2014年到2019年的所有备份进行分析。发现了20591个站点存在被攻击的痕迹,计算其被攻击的窗口时间。并与之前的安全模式进行比对,效果得到了显著地提升。

​ 价值:

​ 问题陈述:

​ 目前广泛使用的“备份和恢复”安全模式非常依赖病毒扫描器对站点源码的扫描分析,而这些扫描器仅能扫描出已知模式的病毒后门,也无法发现持续多阶段的攻击,而且大多数非专业的网站管理员也无法在扫描器报病毒时将网站恢复到合适的快照。最后每个cms通常都会有十几万个文件,如何大规模进行分析是一个挑战。

​ 方法:

  1. 初步研究

首先,作者对70个已经确定被攻击过得站点的所有备份文件进行研究。作者发现①存在有限的溯源模式可以表示这些站点在被攻击的阶段的演化过程,②而且可以使用一些衡量标准将相邻源码备份发生的变化进行区分,③最后将隐含的攻击事件与这些变化进行建模。

作者在初步研究发现,攻击通常是缓慢且隐蔽持久的,通常会有立足、恶意代码注入、权限维持、隐蔽行动、清理痕迹和后门等阶段。

  1. 对备份源码衡量标准的细化

对于初步研究的②,相邻时间的备份文件变化的衡量标准,作者总结出两个类别:结构层面标准和代码层面标准。

结构层面标准:

① 隐藏的文件和文件夹。作者发现通常攻击者喜欢将恶意代码放在隐藏的文件夹或者文件中。如果紧邻着的备份出现隐藏文件/文件夹应该进行标记Hide。

②文件扩展名不符。作者发现,攻击者喜欢将php恶意代码伪装成icon等图片文件,作者根据文件内容计算出文件类型和其扩展名进行比较,不一致则进行标记ExtMis。

③文件名的熵。作者认为,攻击者创造的文件的文件名更具无序性,熵值更大。进行标记HEntrp

④权限的变化。作者认为,备份源码文件的权限突然地变化,比如突然变得可执行通常与攻击者上传恶意脚本后授予执行权限有关。标记Exec

代码层面标准:

①脚本指令异常分析。作者认为正常php指令代码的长度不会特别的长,在分析中正常的指令通常小于500个字符,而攻击者恶意代码会超过1500个字符。标记LongLine

②代码混淆。作者认为,攻击者通常会将注入的而已代码进行混淆,首先为了规避病毒扫描器的检测,其次也是混淆非专业人员其真实作用。对于被混淆的代码应该打上标记Obfus

③可以的代码执行。对于使用eval进行代码执行时,前面的payload使用base64_decode或者其他编码器解密被认为是可疑的,标记EvDc

④代码生成能力。作者认为使用create_function函数进行动态代码生成是危险且不常用的,应该进行警惕,标记CodeGen

  1. 攻击溯源

根据上面的衡量标准对备份文件按时序进行标记的结果,利用下面表中的规则将隐含的攻击事件(Attack Label)与前面的标记进行建模,从利用源码备份得到该站点的攻击过程溯源。

image-20200620004430694

最后得出该站点被攻击的窗口时间。

​ 结果:

利用该方法实现的工具对30万+网站从2014年到2019年的所有备份进行分析。发现了20591个站点存在被攻击的痕迹,计算出其被攻击的窗口时间。并与之前的安全模式进行比对,效果得到了显著地提升。最后也进行了性能的分析,因为时间。

评论

​ 局限性:

  1. 工具的有效性极大地依赖于备份文件的间隔时间,如果间隔时间过长,那么两次备份的时间攻击者可能已经进行了好几个攻击阶段了。

​ 启示:

前面的对备份变化的衡量标准略显单薄,后面的建模过程不好理解,难点在于将备份之间的变化与攻击事件进行建模以及能够弄到30万+网站五年的备份数据进行分析。

Host of Troubles: Multiple Host Ambiguities in HTTP Implementations

publish: CCS 2016

pdf links: http://library.usc.edu.ph/ACM/SIGSAC%202017/ccs/p1516.pdf

chinese analyse: https://blog.csdn.net/zhangtengyuan23/article/details/54135105

bio:

这篇论文探讨了在对HTTP协议解析时对多个Host的二义性解析会导致的问题。

这个问题的出现在于当前Web环境的复杂性,通常会经过多个系统解析(比如代理、防火墙、透明缓存)。不同双方之间对消息解析的不一致就可能导致缓存污染、WAF绕过等问题。

Don't Trust The Locals: Investigating the Prevalence of Persistent Client-Side Cross-Site Scripting in the Wild

publish: ndss 2020

link: https://www.ndss-symposium.org/ndss-paper/dont-trust-the-locals-investigating-the-prevalence-of-persistent-client-side-cross-site-scripting-in-the-wild/

研究的是客户端存储导致的XSS

JavaScript Template Attacks: Automatically Inferring Host Information for Targeted Exploits

link: https://www.ndss-symposium.org/ndss-paper/javascript-template-attacks-automatically-inferring-host-information-for-targeted-exploits/

Javascript获取主机信息

CSP Is Dead, Long Live CSP! On the Insecurity of Whitelists and the Future of Content Security Policy

publish : css 2016

link: https://doi.org/10.1145/2976749.2978363

bio:

这篇文章深入分析了大量的带有CSP的网站,发现其中的大多数网站使用了错误配置的CSP和白名单限制HOST的方法,其中很多CSP对于限制XSS是无效的,或者存在绕过方法。

基于上述认识,本文倡导另一种使用csp的方式,基于nonce(此方法本就存在于CSP规则中),并提出一个新的规则‘strict-dynamic’,用于缓解上述的问题。

CSPAutoGen: Black-box Enforcement of Content SecurityPolicy upon Real-world Websites

publish: css 2016

link: https://dl.acm.org/doi/10.1145/2976749.2978384

bio:

为网站黑盒生成CSP,黑盒是创新点

基于同一个网站里面的网页都差不多会用同一个网页这个情况,它推断出网站script模板,基于上述生成CSP。

Small World with High Risks:A Study of Security Threats in the npm Ecosystem

publish: usenix 2019

link: https://www.usenix.org/conference/usenixsecurity19/presentation/zimmerman

bio:

这篇论文探讨的是npm(node js的包管理器)生态系统的安全威胁。它指出npm生态系统有诸多危险的特性,比如锁定的依赖项、高度的复用度、存在很多小包、没有做权限分离、没有系统性的审查制度。

它分析了5,386,239个版本的包,199,327 个包维护者,609 个公开漏洞。基于以上他指出了以下安全缺陷。1 一个包平均依赖79个第三方包和39个包维护者。2.流行的包通常会影响到很多(大于100000)其他的包。3一些单个的包维护者会影响很多的包。4. 单个包和维护者的影响在逐年上升。5 很大比例(大于百分之四十)的包所以来的第三方代码存在已知漏洞。

Ecosystem-Level Determinants of Sustained Activity in Open-Source Projects: A Case Study of the PyPI Ecosystem

publish: ESEC/FSE 2018

link: https://www.researchgate.net/profile/Marat_Valiev2/publication/328595587_Ecosystem-level_determinants_of_sustained_activity_in_open-source_projects_a_case_study_of_the_PyPI_ecosystem/links/5be04bfb4585150b2b9fc23c/Ecosystem-level-determinants-of-sustained-activity-in-open-source-projects-a-case-study-of-the-PyPI-ecosystem.pdf

bio:

针对python的包生态系统PyPi,本文讨论基于开源软件生态系统层面,对一个开源程序的可持续性的影响。其中总结调研了基于项目层面的因素,更多的讨论基于生态系统层面,并且对开源系统维护者做出了采访。对于这些因素还给出了一个相关模型。

Known XML Vulnerabilities Are Still a Threat toPopular Parsers and Open Source Systems

publish: QRS 2015 CCF C

link: https://ieeexplore.ieee.org/abstract/document/7272938/metrics#metrics

bio:

本文关注于xml解析器的XXE漏洞和BIL漏洞,测试13个常用xml解析器不同版本在默认配置情况下受到dos攻击和XXE的脆弱性。并且还分析了github上1000个使用Std-DOM (xml解析器)类的java开源项目,其中749个的确使用了该解析器,735个使用的是存在漏洞的版本。