From 6d35f2ddc6bae7cd04c53d40d9934763ea025789 Mon Sep 17 00:00:00 2001 From: ZhidanLiu Date: Thu, 27 Aug 2020 10:55:06 +0800 Subject: [PATCH] add fuzzer design --- docs/source_zh_cn/design.rst | 1 + .../design/mindarmour/fuzzer_design.md | 70 ++++++++++++++++++ .../mindarmour/images/fuzz_architecture.png | Bin 0 -> 20564 bytes .../design/mindarmour/images/fuzz_process.png | Bin 0 -> 28647 bytes tutorials/source_zh_cn/advanced_use/fuzzer.md | 8 +- 5 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 docs/source_zh_cn/design/mindarmour/fuzzer_design.md create mode 100644 docs/source_zh_cn/design/mindarmour/images/fuzz_architecture.png create mode 100644 docs/source_zh_cn/design/mindarmour/images/fuzz_process.png diff --git a/docs/source_zh_cn/design.rst b/docs/source_zh_cn/design.rst index e90702b4..be5491fd 100644 --- a/docs/source_zh_cn/design.rst +++ b/docs/source_zh_cn/design.rst @@ -11,3 +11,4 @@ design/mindinsight/graph_visual_design design/mindinsight/tensor_visual_design design/mindarmour/differential_privacy_design + design/mindarmour/fuzzer_design diff --git a/docs/source_zh_cn/design/mindarmour/fuzzer_design.md b/docs/source_zh_cn/design/mindarmour/fuzzer_design.md new file mode 100644 index 00000000..022fc5b0 --- /dev/null +++ b/docs/source_zh_cn/design/mindarmour/fuzzer_design.md @@ -0,0 +1,70 @@ +# AI模型安全测试 + + +- [AI模型安全测试](#ai模型安全测试) + - [背景](#背景) + - [Fuzzer设计图](#Fuzzer设计图) + - [Fuzzer流程](#Fuzzer流程) + - [代码实现](#代码实现) + - [参考文献](#参考文献) + + + + + +## 背景 + +不同于[传统程序的Fuzz安全测试](https://zhuanlan.zhihu.com/p/43432370),MindArmour针对深度神经网络,提供AI模型安全测试模块Fuzzer。根据神经网络的特点,引入神经元覆盖率[1]的概念,作为Fuzz的测试指导,引导Fuzz朝神经元覆盖率增加的方向生成样本,让输入能够激活更多的神经元,神经元值的分布范围更广,以充分测试DNN,探索不同类型的模型输出结果、模型错误行为。 + +## Fuzzer设计图 + +AI模型安全测试设计图如下。 + +![fuzz_architecture](./images/fuzz_architecture.png) + +在用户接口层,需要用户提供原始数据集`DataSet`、被测试模型`Model`和配置Fuzzer参数`Fuzzer configuration`。Fuzzer模块对模型和数据进行Fuzz测试后,返回安全评估报告`Security Report`。 + +Fuzzer架构主要包括三个模块: + +1. Natural Threat/Adversarial Example Generator(数据变异模块): + + 随机选择变异方法对种子数据变异生成多个变种。支持多种样本的变异策略, 包括: + + - 图像仿射变换方法如:平移、旋转、缩放、错切。 + - 基于图像像素值变化的方法如:改变对比度、亮度、模糊、加噪。 + - 基于对抗攻击的白盒、黑盒对抗样本生成方法,如FGSM、PGD、MDIIM。 + +2. Fuzzer moduler(变异指导模块): + + 对变异生成的数据进行fuzz测试,观察神经元覆盖率的变化情况,如果生成的数据使得神经元覆盖率增加,则加入变异的种子队列,用于下一轮的数据变异。目前支持的神经元覆盖率指标包括KMNC、NBC、SNAC[2]。 + +3. Evaluation(评估模块): + + 评估Fuzzer效果,生成数据的质量,变异方法的强度。支持3个类型5种指标,包括通用评价指标:accuracy,神经元覆盖率指标:kmnc, nbc,snac,对抗攻击评价指标:attack_success_rate。 + +## Fuzzer流程 + +![fuzz_process](./images/fuzz_process.png) + +具体的Fuzzer流程如下: + +1. 根据策略从种子队列中选择一个种子A。 +2. 随机选择变异策略,对种子A进行变异,生成多个变种数据A1,A2... +3. 用目标模型对变种A1,A2...进行预测,如果变种使得目标模型预测错误,则改变种进入Failed tests。 +4. 若目标模型对于变种的预测结果是正确的,用神经元覆盖率指标进行分析。 +5. 如果变种使得覆盖率增加,那么将该变种放入种子队列,用于下一轮变异。 + +通过多轮循环,我们获得一系列变异数据Fuzzed Tests,并进一步分析,从多个角度给出安全报告。可以用于深入分析神经网络模型的缺陷,从而针对这些缺陷,进行模型增强等,改善提升模型的通用性、鲁棒性。 + +## 代码实现 + +1. [fuzzing.py](https://gitee.com/mindspore/mindarmour/blob/master/mindarmour/fuzzing/fuzzing.py):Fuzzer总体流程。 +2. [model_coverage_metrics.py](https://gitee.com/mindspore/mindarmour/blob/master/mindarmour/fuzzing/model_coverage_metrics.py):神经元覆盖率指标,包括KMNC,NBC,SNAC。 +3. [image_transform.py](https://gitee.com/mindspore/mindarmour/blob/master/mindarmour/fuzzing/image_transform.py):图像变异方法,包括基于像素值的变化方法和仿射变化方法。 +4. [adversarial attacks](https://gitee.com/mindspore/mindarmour/tree/master/mindarmour/attacks):对抗样本攻击方法,包含多种黑盒、白盒攻击方法。 + +## 参考文献 + +[1] Pei K, Cao Y, Yang J, et al. Deepxplore: Automated whitebox testing of deep learning systems[C]//Proceedings of the 26th Symposium on Operating Systems Principles. ACM, 2017: 1-18. + +[2]Ma L, Juefei-Xu F, Zhang F, et al. Deepgauge: Multi-granularity testing criteria for deep learning systems[C]//Proceedings of the 33rd ACM/IEEE International Conference on Automated Software Engineering. ACM, 2018: 120-131. \ No newline at end of file diff --git a/docs/source_zh_cn/design/mindarmour/images/fuzz_architecture.png b/docs/source_zh_cn/design/mindarmour/images/fuzz_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..d4e8b89bd9a9f4844c59790f5b2114d1d477f927 GIT binary patch literal 20564 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 literal 0 HcmV?d00001 diff --git a/docs/source_zh_cn/design/mindarmour/images/fuzz_process.png b/docs/source_zh_cn/design/mindarmour/images/fuzz_process.png new file mode 100644 index 0000000000000000000000000000000000000000..2e04347f7cfb0819562578a6be1e91b5cc7ce9d5 GIT binary patch literal 28647 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 literal 0 HcmV?d00001 diff --git a/tutorials/source_zh_cn/advanced_use/fuzzer.md b/tutorials/source_zh_cn/advanced_use/fuzzer.md index 1ae638da..9ab97020 100644 --- a/tutorials/source_zh_cn/advanced_use/fuzzer.md +++ b/tutorials/source_zh_cn/advanced_use/fuzzer.md @@ -18,7 +18,7 @@ 传统软件的决策逻辑由代码逻辑决定,传统软件通过代码行覆盖率来判断当前测试是否充分,理想情况下覆盖率越高,代码测试越充分。然而,对于深度神经网络而言,程序的决策逻辑由训练数据、网络模型结构和参数通过某种黑盒机制决定,代码行覆盖率已不足以评估测试的充分性。需要根据深度网络的特点选择更为适合的测试评价准则,指导神经网络进行更为充分的测试,发现更多的边缘错误用例,从而确保模型的通用性、鲁棒性。 -MindArmourd的Fuzzer模块以神经元覆盖率作为测试评价准则。神经元覆盖率,是指通过一组输入观察到的、激活的神经元数量和神经元输出值的范围。我们通过神经元覆盖率来指导输入变异,让输入能够激活更多的神经元,神经元值的分布范围更广,从而探索不同类型的模型输出结果、错误行为。 +MindArmour的Fuzzer模块以神经元覆盖率作为测试评价准则。神经元覆盖率,是指通过一组输入观察到的、激活的神经元数量和神经元输出值的范围。我们通过神经元覆盖率来指导输入变异,让输入能够激活更多的神经元,神经元值的分布范围更广,从而探索不同类型的模型输出结果、错误行为。 这里以LeNet模型,MNIST数据集为例,说明如何使用Fuzzer。 @@ -135,13 +135,13 @@ context.set_context(mode=context.GRAPH_MODE, device_target=cfg.device_target) eval_metrics =['accuracy', 'kmnc', 'attack_success_rate'] ``` -3. 初始化种子队列,种子队列中的每个种子,包含3个值:原始图片、图片标签、变异标记。变异标记初始化时均为0。 +3. 初始化种子队列,种子队列中的每个种子,包含3个值:原始图片、图片标签。 ```python # make initial seeds initial_seeds = [] for img, label in zip(test_images, test_labels): - initial_seeds.append([img, label, 0]) + initial_seeds.append([img, label]) initial_seeds = initial_seeds[:100] ``` @@ -184,7 +184,7 @@ context.set_context(mode=context.GRAPH_MODE, device_target=cfg.device_target) Neural_coverage_KMNC: 0.4797 ``` - Fuzz测试前种子的KMNC神经元覆盖率为8.5%,Fuzz后,KMNC神经元覆盖率为47.97%,神经元覆盖率提升,样本的多样性提升。Fuzz后,模型对于Fuzz生成样本的准确率为96.8%,使用了对抗攻击方法的样本,攻击成功率为79.29%。由于初始化种子、变异方法和相应的参数均为随机选择的,结果有一定的浮动是正常的。 + Fuzz测试前种子的KMNC神经元覆盖率为8.5%,Fuzz后,KMNC神经元覆盖率为47.97%,神经元覆盖率提升,样本的多样性提升。Fuzz后,模型对于Fuzz生成样本的准确率为79.29%,使用了对抗攻击方法的样本,攻击成功率为47.97%。由于初始化种子、变异方法和相应的参数均为随机选择的,结果有一定的浮动是正常的。 原始图片: -- GitLab