Martin

VUDDY

VUDDY: A Scalable Approach for Vulnerable Code Clone Disscovery

中文标题:

一个对于脆弱性代码克隆发现的可扩展方法

简介:

VUDDY 一个针对脆弱性的代码克隆检测的可扩展方法,能在大规模代码程序中有效以及准确地检测安全漏洞。其可扩展性主要应用了方法等级细粒度(function-level granularity)以及减少签名的数次比较的长度过滤技术(length-filter),用一个程序中方法作为一个单元进行代码克隆检测,其能在大规模的代码基础中有效的发现漏洞。相对利用line-level granularity代码克隆检测技术的ReDeBug 检测速度以及准确率明显提高。

摘要:

开源软件的生态系统在规模已经极其大地增长。此外,代码克隆-代码碎片化在软件系统中复制与发布-也正在增殖中。虽然代码复制可能出现在软件开发的过程中,但是它极其重要地会影响软件安全因为漏洞与bug容易通过代码克隆被传播。伴随着开源软件(OSS)增长,那些漏洞的代码克隆正在增加,潜在性地污染大量软件。虽然数十年来研究员试图去检测代码克隆,但大多数尝试也无法扩展到日益增长的开源软件代码规模。缺少扩展性阻止软件开发者易于管理代码以及相关联的软件漏洞。因此,目前克隆检测技术过度地集中在只检测代码克隆,这导致降低了正确地发现“脆弱性的”克隆的能力。
这篇论文,作者提出了VUDDY,一个针对脆弱性的代码克隆检测的扩展方法,在大规模的代码程序中能有效地以及正确地检测安全漏洞。它的伸缩可扩展性是通过方法等级细粒度(function-level granularity)以及减少签名的数次比较的长度过滤技术(length-filter)VUDDY有效用14小时17分的时间预处理了十亿行代码,之后只需用几秒钟时间识别代码克隆。此外,作者设计了安全感知抽象技术(security-awake abstract),这使得VUDDY能够适应在代码克隆中常见的修改,同时应用抽象化后也能保留代码脆弱性的条件。这也增加了VUDDY识别已知软件漏洞变体的范围能力以及获得高正确率。 作者描述其原理,并通过将其与现有机制进行比较以及呈现其检测到漏洞来评估其功效和有效性。VUDDY在可扩展性和准确性方面优于目前四种最先进的代码克隆检测技术,并通过检测广泛使用的软件系统(如Apache HTTPD和Ubuntu OS Distribution)的零日漏洞来证明其有效性。

方法:

  • 为了避免混淆各种分类,作者将代码克隆分为以下四类:
    • Type-1: Exact clones
    • Type-2: Renamed clones
    • Type-3: Restructured clones
    • Type-4: Semantic clones
  • VUDDY的模型主要分为预处理克隆检测
    • 预处理主要包括以下三点:
      • S1. Function retrieval
      • S2. Abstraction and normalization
        • Level 0: No abstraction
        • Level 1: Formal parameter abstraction.(用FPAPAM替代funcion头与funcion内参数变量)
        • Level 2: Local variable abstraction(用LVAR替代funcion内变量)
        • Level 3: Data type abstraction(用DTYPE替代funcion内包括标准c语言数据类型、限定符、用户自定义类型)
        • Level 4: Function call abstraction(用FUNCCALL替代funcion内API/)Alt text
      • S3. Fingerprint generation
    • 克隆检测主要包括以下两点:
      • S4. Key lookup
      • S5. Hash lookup
        Alt text Alt text

贡献 :

  • 可扩展性的克隆检测,一个可扩展性并准确性高的代码克隆的检测,其通过健壮性的语法分析以及指纹机制,其预处理十亿行代码只需要14小时17分。
  • 针对未知脆弱性代码克隆,作者提出一个有效抽象化的优化方案。VUDDY 能检测出超24%已知漏洞的未知变体的脆弱性的克隆
  • 作者引进一种全自动方法,通过安全补丁信息从Git repository获取已知的脆弱性的functon
  • 免费提供VUDDYhttps://iotcube.net/,其在开源社区和IoT设备制造商已广泛应用,已为140亿行代码提供开放服务以及检测出了144496个漏洞

案例:

VUDDY 检测了三种类型:Library reuse、Kernel reuse、Intral-project reuse code
1.Library reuse cases

  • LibPNG和移动浏览器:智能手机随附内置的Web浏览器应用程序,基于使用过时的LibPNG库。 Web浏览器中的LibPNG版本为1.2.45,该版本于2011年7月发布.VUDDY检测到CVE-2011-3048(LibPNG中基于堆缓冲区溢出)的修复程序未在该版本中应用,从而使浏览器脆弱。
  • Expat library and Apache HTTPD:在Apache HTTP Server ,用VUDDY检测到了脆弱性代码克隆CVE-2012 0876,Apache 2.4.23稳定版本以及2.4.18和2.4.20都是受影响的。Apache HTTP Server 主要用Expat 类库来解析 XML文件,而且被频繁在一些过时版本中调用,导致 Hash DoS攻击。

2.Kernel reuse cases

  • 内核重用一个重要特性就是通常落后于最新版本的内核,在2016年3月发布的Android智能手机的固件中,VUDDY检测到了易受攻击的克隆,作者成功地利用了易受攻击的克隆来获得智能手机运行的root特权——检查固件(CVE-2016-5195

3.Intra-project code reuse cases

  • 基于抽象策略(Level 4),作者发现了一个8年的漏洞(CVE-2008-3528),这可能是一个零日漏洞,在最新的稳定树中,包括版本4.8.6、4.7.10和Linux内核的LTS版本,在Ubuntu 16.04中触发这个漏洞,它是在内核版本4.4中构建的。令人惊讶的是,我们可以触发printk floods漏洞,从而导致拒绝服务,通过安装nilfs2文件系统的损坏映像。我们联系了Redhat Linux的安全官员,他确认这个漏洞应该修补。这一案例表明,VUDDY能够探测到已知漏洞的未知变种。

限制:

目前VUDDY主要覆盖检测脆弱性代码类型是Type-1: Exact clones以及 Type-2: Renamed clones,结合前面A Deep Learnig-Based System for Vulnerablity Decetion论文实验中出现了极高的漏报率,以及再我认为通过安全补丁信息从Git repository获取已知的脆弱性的functon这种方式也会是导致VUDDY识别准确率降低原因之一