/SecConfig

Apache License 2.0Apache-2.0

Taint Specification Collection

目录

什么是 Taint Specification Collection?

Taint Specification Collection 是专为静态分析工具 Tai-e 中的污点分析提供的配置文件集合,旨在为常见漏洞的安全分析提供支持。该集合涵盖了多种常见漏洞类型的污点规范,具体包括 sourcesinktransfer。为了方便用户查询和选择,污点规范根据软件包和相关漏洞类型进行了结构化分类,从而为污点分析提供了全面的配置方案。当前,该集合包含 406 条 source 配置、995 条 sink 配置和 138 条 transfer 配置,用户可以根据不同需求灵活使用和扩展。

如何使用 Taint Specification Collection?

Taint Specification Collection 中配置文件使用 YAML 格式(文件扩展名为 .yaml.yml),便于用户阅读和编辑。用户可以直接将集合中的配置文件集成到 Tai-e 污点分析工具的 taint-config.yml 配置中,或者根据实际需求对其进行修改和扩展,从而更好地满足特定的分析需求。

Note
  • 有关如何正确配置 Tai-e 污点分析,请参考 Configuring Taint Analysis

  • 项目中注释的配置表示接口方法。实际使用时,请根据 Tai-e 污点分析配置的格式,手动填写对应实现方法的配置信息。

项目结构

本项目的文件组织结构如下:

taint-specification-collection
|
├─ infoleak
│   ├─ sink                 contains 141 sinks
│   │   └─ java-io
|   |
│   └─ source               contains 158 sources
│   |   └─ java
|
├─ injection                contains 854 sinks
│   ├─ sink
│   │   ├─ android
│   │   │   └─ sql-injection
│   |   |
│   │   ├─ java
│   │   │   ├─ crlf
│   │   │   ├─ path-traversal
│   │   │   ├─ rce
│   │   │   └─ ...
|   |   |
│   │   └─ ...
|   |
│   └─ source               contains 248 sources
│   |   ├─ apache-struts2
|   |   |
│   |   ├─ javax
|   |   |   ├─ javax-portlet
|   |   |   ├─ javax-servlet
|   |   |   └─ javax-swing
|   |   |
│   |   └─ ...
|
└─transfer                  contains 138 transfers about String

该项目首先对配置文件进行了分类,分为三个一级类别:infoleakinjectiontransfer

  • infoleak 类别:包含与信息泄露漏洞相关的配置,进一步细分为两个二级目录:

    • source:按软件包名进行分类。

    • sink:按软件包名进行分类。

  • injection 类别:包含与注入漏洞相关的配置,同样细分为两个二级目录:

    • source:按软件包名进行分类。

    • sink:根据漏洞类型进行分类。

  • transfer 类别:包含常用的 transfer 配置。

由于 sourcesink 的配置内容较多,为了帮助用户快速定位所需配置,我们采用了这种分类方式。除此以外,每个文件的叶子目录下还包含相应配置的 README 文件,供用户参考。

示例

以下是如何使用本集合配置文件的示例。假设用户要检测 RCE(Remote Code Execution,CWE-94) 类型的注入漏洞,同时待测试程序使用 Jetty 软件库,可以按以下步骤修改 taint-config.yml 配置文件:

  1. taint-specification-collection/injection/source/jetty/jetty-http/jetty-http.yml 文件中的 Jetty 软件库 相关的 source 配置添加到 taint-config.yml

  2. taint-specification-collection/injection/sink/java/rce/command.yml 文件中的 RCE 类型注入漏洞 相关的 sink 配置添加到 taint-config.yml

  3. taint-specification-collection/transfer/string-transfers.yml 文件中的关于 String 类型transfer 配置添加到 taint-config.yml

示例 taint-config.yml 配置如下:

source:
  - { kind: call, method: "<org.eclipse.jetty.http.HttpCookie: java.lang.String getName()>", index: result, type: "java.lang.String" }
  - { kind: call, method: "<org.eclipse.jetty.http.HttpCookie: java.lang.String getValue()>", index: result, type: "java.lang.String" }
  - { kind: call, method: "<org.eclipse.jetty.http.HttpCookie: java.lang.String asString()>", index: result, type: "java.lang.String" }
#...

sinks:
  - { method: "<java.lang.Runtime: java.lang.Process exec(java.lang.String)>", index: 0 }
  - { method: "<java.lang.Runtime: java.lang.Process exec(java.lang.String[])>", index: 0 }
  - { method: "<java.lang.Runtime: java.lang.Process exec(java.lang.String, java.lang.String[])>", index: 0 }
#...

transfer:
  - { method: "<java.lang.String: java.lang.String substring(int)>", from: base, to: result }
  - { method: "<java.lang.String: java.lang.String substring(int,int)>", from: base, to: result }
#...

完成以上配置后,用户就可以使用 Tai-e 工具对待测试程序进行污点分析,以检测 Jetty 软件库作为入口导致的 RCE 类型漏洞。(^▽^)