Taint Specification Collection
是专为静态分析工具 Tai-e
中的污点分析提供的配置文件集合,旨在为常见漏洞的安全分析提供支持。该集合涵盖了多种常见漏洞类型的污点规范,具体包括 source
、sink
和 transfer
。为了方便用户查询和选择,污点规范根据软件包和相关漏洞类型进行了结构化分类,从而为污点分析提供了全面的配置方案。当前,该集合包含 406 条 source
配置、995 条 sink
配置和 138 条 transfer
配置,用户可以根据不同需求灵活使用和扩展。
Taint Specification Collection
中配置文件使用 YAML
格式(文件扩展名为 .yaml
或 .yml
),便于用户阅读和编辑。用户可以直接将集合中的配置文件集成到 Tai-e
污点分析工具的 taint-config.yml
配置中,或者根据实际需求对其进行修改和扩展,从而更好地满足特定的分析需求。
Note
|
|
本项目的文件组织结构如下:
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
该项目首先对配置文件进行了分类,分为三个一级类别:infoleak
、injection
和 transfer
。
-
infoleak
类别:包含与信息泄露漏洞相关的配置,进一步细分为两个二级目录:-
source
:按软件包名进行分类。 -
sink
:按软件包名进行分类。
-
-
injection
类别:包含与注入漏洞相关的配置,同样细分为两个二级目录:-
source
:按软件包名进行分类。 -
sink
:根据漏洞类型进行分类。
-
-
transfer
类别:包含常用的transfer
配置。
由于 source
和 sink
的配置内容较多,为了帮助用户快速定位所需配置,我们采用了这种分类方式。除此以外,每个文件的叶子目录下还包含相应配置的 README
文件,供用户参考。
以下是如何使用本集合配置文件的示例。假设用户要检测 RCE(Remote Code Execution,CWE-94) 类型的注入漏洞,同时待测试程序使用 Jetty 软件库,可以按以下步骤修改 taint-config.yml 配置文件:
-
将
taint-specification-collection/injection/source/jetty/jetty-http/jetty-http.yml
文件中的 Jetty 软件库 相关的source
配置添加到taint-config.yml
。 -
将
taint-specification-collection/injection/sink/java/rce/command.yml
文件中的 RCE 类型注入漏洞 相关的sink
配置添加到taint-config.yml
。 -
将
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
类型漏洞。(^▽^)