使用静态污点分析检测小程序中敏感数据的流动

作者:Sec-Labs | 发布时间:

项目地址

https://github.com/OSUSecLab/TaintMini

相关技术点

  • 静态污点分析
  • 数据流图
  • 小程序安全

项目用途

TaintMini是一个用于检测小程序中敏感数据流的框架,使用静态污点分析技术。它采用了一种新型的数据流图方法,可以捕捉小程序内部和跨小程序的数据流。

使用TaintMini可以帮助开发者发现小程序中的敏感数据流,提高小程序的安全性。同时,也可以用于安全研究人员对小程序的安全性进行评估和分析。

使用TaintMini的步骤:

  1. 解包小程序
  2. 使用TaintMini进行静态污点分析
  3. 分析结果输出到指定目录

具体使用方法可以参考项目的使用文档和示例。

TaintMini

TaintMini是一个基于静态污点分析实现的用于检测小程序中敏感数据流的框架。它采用了一种新颖的通用数据流图方法,可捕获小程序内和跨小程序的数据流。

taintmini

我们基于pdg_js(来自DoubleX)实现了TaintMini。有关更多实现细节,请参阅我们的论文

目录

先决条件

环境

为了获得最佳性能,我们建议分配至少4个内核和16 GiB的内存来运行该工具。 此外,为了在分析过程中获得最佳IO性能,我们建议使用SSD而不是硬盘驱动器,因为小程序通常具有大量小文件(小于一页大小)。 作为参考,我们使用了16个Intel Xeon Silver 4314 vCPU,128 GiB的3200 MHz DDR4内存和2 TiB的NVMe SSD(700 KIOPS)作为构建和验证我们的工件评估提交的主机。

依赖项

首先安装pdg_js的Node.js依赖项。

# 确保已安装node.js和npm
node --version && cd pdg_js && npm i

安装Python的要求。

# 安装要求
pip install -r requirements.txt

预处理

TaintMini在未打包的微信小程序上运行,因此需要提前使用微信小程序解包工具。 请注意,由于潜在的法律影响,我们无法直接提供此类工具。我们建议在外部网站上寻找它。

用法

usage: mini-taint [-h] -i path [-o path] [-c path] [-j number] [-b]

optional arguments:
  -h, --help            show this help message and exit
  -i path, --input path
                        path of input mini program(s). Single mini program directory or index files will both be fine.
  -o path, --output path
                        path of output results. The output file will be stored outside of the mini program directories.
  -c path, --config path
                        path of config file. See default config file for example. Leave the field empty to include all results.
  -j number, --jobs number
                        number of workers.
  -b, --bench           enable benchmark data log. Default: False

结果将写入由-o/--output标志提供的目录。 结果文件的名称为$(basename <directory>)-result.csv,如果存在-b/--bench选项,则还包括$(basename <directory>)-bench.csv

配置

config.json是一个JSON格式的文件,包括两个字段:sourcessinks

  • sources是一个数组,表示需要包含的源API。请注意,有一个名为[double_binding]的特殊值,表示来自WXML的数据流。
  • sinks是一个数组,表示需要包含的汇API。

有关示例,请参见config.json文件。

示例

单个小程序

分析单个小程序;包括所有源和汇;启用多处理(所有可用的CPU核心);不需要基准测试。

python main.py -i /path/to/miniprogram -o ./results -j $(nproc)

多个小程序

分析多个小程序;包括所有源和汇;启用多处理(所有可用的CPU核心);需要基准测试。

# 生成索引
find /path/to/miniprograms -maxdepth 1 -type d -name "wx*" > index.txt
# 开始分析
python main.py -i ./index.txt -o ./results -j $(nproc) -b
```## 引用

如果您发现TaintMini有用,请考虑引用我们的论文:

```plaintext
@inproceedings{wang2023taintmini,
  title={TAINTMINI:使用静态污点分析检测Mini程序中的敏感数据流},
  author={Wang, Chao and Ko, Ronny and Zhang, Yue and Yang, Yuqing and Lin, Zhiqiang},
  booktitle={第45届国际软件工程会议论文集},
  year={2023}
}

许可证

该项目基于AGPLV3许可证发布。

标签:工具分享, 思路分享, 学习笔记