然而,我则专注于漏洞检测更擅长的事情,那就是发现系统/程序崩溃。 首先从最简单的地方开始,那些我认为bug最可能出现的地方:复杂类型输入解析器。 TensorFlow包括编码和解码多种图像格式的功能,如tf.image.decode_png。 从图像解码器能让事情变得很容易 – 我们可以示例输入的现有语料库开始,同时这些函数只需要一个输入,将字符串转化为Tensor类型就可以了。 发现并修复更多的错误 这种方法也可以在PNG解码器和JPEG解码器中发现错误。 更多的模糊测试则使用了自动模糊测试架构,Brennan Saeta已经基本完成了。 在解决了图像解码器后,我把注意力转向了一些字符串解析函数,先是在strtonum函数中发现一个微妙的错误, 然后是TensorProto解析器中。 有趣的是,模糊测试不只是发现预期的缓冲区溢出或其他程序失败 - 它也能指出代码在错误处理中薄弱的地方。 TensorFlow的基本设计原则是,内核中的错误应以友好的方式返回给调用者,以便他们可以适当地处理它。 处理这种情况的一个常见模式是编写类似这样的代码,其中在进入内核之后,程序员为尽可能多的错误条件写入检查: 这是一种很好的类库设计,直播,因为它不会将设计者对异常处理的想法强加于用户。 通过在TensorFlow里抛出Fuzzer,我能够找到那些导致程序失败错误的确切位置,而不仅仅只是一个友好的返回信息。 我是快乐的“Bug-Killer” 之前,我一直认为模糊测试就是为了在其他人的代码中找到安全漏洞的工具。 但是,现在我我的想法改变了,我相信使用现代的基于模糊测试的漏洞检测工具是软件开发和测试的重要组成部分。它们可能不会找到程序中所有的错误,你还必须为他们编写合适的适配器来让他们测试你的代码。但通过这种方式,你能从代码中发现一些新的东西,并帮助你预先发现问题。如果你有兴趣尝试用它检测自己的代码,那下一步就是看看这个libFuzzer教程。 英文原文地址:https://da-data.blogspot.ru/2017/01/finding-bugs-in-tensorflow-with.html?spm=5176.100239.blogcont72025.27.tDY2qy GitHub资源:https://github.com/google/fuzzer-test-suite/blob/master/tutorial/libFuzzerTutorial.md?spm=5176.100239.blogcont72025.23.tDY2qy&file=libFuzzerTutorial.md 兼职翻译 招聘 《全球人工智能》面向全球招聘多名:图像技术、语音技术、自然语言、机器学习、数据挖掘等专业技术领域的兼职翻译,工作内容及待遇请在公众号内回复“兼职+个人微信号”联系工作人员。 热门文章推荐
(责任编辑:本港台直播) |