模糊测试(Fuzzing),是一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。
从字面上理解,模糊就是不确定,我们在遇到不确定的事情时,该怎么办呢?我们需要不断尝试可能的情况,直到最终确定下来。
我们需要关注的几个点:输入、非预期、监视异常结果、软件漏洞
模糊测试(fuzz testing)是一种安全测试方法,他介于完全的手工测试和完全的自动化测试之间。为什么是介于那两者之间?首先完全的手工测试即是渗透测试,测试人员可以模拟黑客恶意进入系统、查找漏洞,这对测试人员的要求比较高。能力强的测试人员可以发现比较多或者高质量的安全性问题,但是如果测试人员的能力不够,可能就不能找到足够多、威胁大的安全漏洞。所有渗透测试对人员能力的依赖性强,成本高,难以大规模的实施。
在模糊测试中,用随机坏数据(也称做 fuzz)攻击一个程序,然后等着观察哪里遭到了破坏。模糊测试的技巧在于,它是不符合逻辑的:自动模糊测试不去猜测哪个数据会导致破坏(就像人工测试员那样),而是将尽可能多的杂乱数据投入程序中。由这个测试验证过的失败模式通常对程序员来说是个彻底的震撼,因为任何按逻辑思考的人都不会想到这种失败。
模糊测试是一项简单的技术,但它却能揭示出程序中的重要 bug。它能够验证出现实世界中的错误模式并在您的软件发货前对潜在的应当被堵塞的攻击渠道进行提示。
输入:对于软件而言,只要你需要跟用户交互,你就需要为用户提供输入的地方,比如:输入框、按钮等,对于安全而言,用户的输入都是不可信的,因为存在用户输入的地方,那么对于用户输入的内容是不可预料的,一定会有我们考虑不全的情况存在,出现非预期的情况。
非预期:我们在设计一个功能的时候,是有预期的,比如用户评论功能,只允许用户提交 50 个字,当用户成功提交了 51 个字,那么这就是非预期的情况,我们把这种情况就叫做非预期的结果,导致这个结果的原因就是漏洞或者 bug。
监视异常结果:对于一个输入口,我们在输入各种参数进行测试时,如何知道参数是否有效,那么就需要监视参数提交的过程以及提交后产生的结果是否存在异常,这里的异常就是跟我们最初预期的结果有所不同,出现这种情况就需要我们重点关注了。
软件漏洞: