WINGFUZZ SaaS是水木羽林推出的智能模糊测试在线服务,可以在不需要用户上传源代码的情况下利用云端资源开展覆盖率引导的模糊测试。作为国内首个模糊测试SaaS服务平台,当前已开放beta版免费注册使用,支持C/C++程序内存问题等安全漏洞的自动化测试。
平台注册地址是:https://wingfuzz.com/
注册后即可登入平台查看demo项目与相关功能,等待审核激活后就可以跑测试了。
平台后端基于覆盖率引导的模糊测试实现,引入了团队自研的多引擎集成等技术,可以实现比开源工具更好的漏洞挖掘效果,前端基于容器实现测试过程的管理和追踪。
覆盖率引导的模糊测试,或灰盒模糊测试、智能模糊测试,是一种动态测试技术。工具会自动生成大量带有随机性的测试用例,触发软件异常,最终发现软件缺陷。同时,通过灰盒插桩、覆盖率引导、Sanitizer等技术,可以带来更高的测试覆盖率,更多缺陷类型支持,并提供代码行级缺陷定位。
当前模糊测试已经使用得比较广泛,Google、Microsoft、Linux基金会等组织已经在OpenSSL、Chromium、Linux、Office等软件中发现了大量bug,也有像OSS-Fuzz, One-Fuzz这样的平台化项目。但像OSS-Fuzz的测试服务只对开源软件开放,也需要用户上传自己的源代码,自己搭建如ClusterFuzz一类的平台也较为困难,WINGFUZZ提供了一个新的选择。
WINGFUZZ SaaS平台整体采用“平台+SDK”架构,SDK可通过平台下载。
SDK提供了命令行工具,支持项目编译插桩、本地验证测试、远程测试Job提交等功能。
平台端实现了测试管理、资源调度、用户计费等功能,并通过容器化环境提供用户和测试项目的隔离。用户交互层面,提供了项目管理、测试过程报告、缺陷详情分析等功能,还提供可导出的测试报告。
漏洞挖掘流程
WINGFUZZ SaaS提供了比较详细的在线教程,可以跟着教程来操作整个流程,同时了解测试运行的相关技术细节。
在线教程地址在:
https://doc.wingfuzz.com/
还配上了各种小视频来帮助上手。
直接使用教程demo程序,保存为firtst-fuzz.cpp:
e <stdio.h>
#include <string.h>
#include <string>
#include <wfuzz.h>
void echo(std::string content) {
char buf[10];
strncpy(buf, content.c_str(), 10);
printf("%s\n", buf);
}
WFUZZ_TEST_ENTRYPOINT(echo);
驱动是模糊测试器的测试入口,WINGFUZZ提供比AFL / LibFuzzer更容易使用的宏来进行驱动定义,同时也兼容AFL / LibFuzzer的驱动写法。这段demo程序是引入了一个strncpy和printf函数带来的栈缓冲区溢出(stack-buffer-overflow)错误。
使用这个命令进行编译:
wfuzz-c++ -o first-fuzz first-fuzz.cpp
完成后就得到了测试用的二进制文件。编译中会自动添加相关参数,并且在链接时添加必要的运行时库。
启动测试有两种方式,Web端直接上传二进制,和命令行启动。命令行测试时,也支持两种模式,分别是调试用的本地验证测试,以及远程云端测试。我们使用这个命令来启动远程测试:
wfuzz fuzz -R -t 600 first-fuzz
启动后命令后输出如下:
然后在Web端就可以看到一个新测试在运行了:
瞬间就能测出demo程序的bug,可以查看详情:
demo程序的基础流程就是这样,教程中还提供了OpenSSL心脏滴血漏洞挖掘实战流程,以及更多详细技术介绍。
结语
基础软件的质量非常重要,模糊测试技术逐步走入大家的视野,解决软件开发过程中的可靠性、安全性、性能等问题,但是其使用门槛也比传统软件分析方法对于开发者的要求更加苛刻,WINGFUZZ SaaS作为这一方向国内的首次尝试,希望可以降低模糊测试的使用成本和门槛,为基础软件测试带来更多选择。
精彩推荐