2021年8月25日

写在前面:

这几天最热的话题无疑是GPT4了,百度也推出了文心一言。chatGPT3.5让我们倒吸一口冷气,GPT4则让我们感到有些麻木了,似乎AI就应该这么厉害,而且还会越来越厉害,直到有一天让大多数人感到自己似乎没有必要努力学习了,需要的时候问问GPT就行了。这看似一种进步,你能直接获取想要的结果,但缺失了知识获取的过程,当然也失去了很多思考的过程。长远看,提高了效率,削弱了人的学习和创新能力,这也是很多学校禁止使用GPT的原因。最有意思和可怕的一点是,未来互联网上充斥着事实知识,也就是所谓真的知识,还有海量的假的知识,也就是人利用AI生成的不实知识,将使不了解过程和原理的一些人,真假难辨。

不过从另一方面看,很多知识也确实大大贬值。知识获取变得如此的简单直接,那我们的一些知识工作者,技术工作者的意义还在哪里呢?坦率地说,我还真想不清楚。客户问你一个问题的时候,你不能说,您去问问GPT吧,虽然你可能自己去偷偷地查询一下。但你给用户做的解答,不能仅限于知识了,而是要横向结合自己的行业经验,纵向结合自身的知识体系,提供更有价值的见解,实际上,对人的要求更高了,你要真正地思考,问自己为什么要这样,还能怎么样,彻底理解这个问题了吗?GPT会如何回答,我和它是否能有所不同!对很多行业都是如此,单纯地重复,记忆,而不是开放地关联知识,特别是结合自身体验的关联,都将变得没有任何意义。虽然事实上,GPT关联的已经很好了,但作为人类的我,这可怜的智商,也只能勉强想到这个答案来安慰自己了。

看看咱们的孩子,都在超前学习,小学生学初中课程,初一的孩子开始学高中课程,大一就准备考研,天天疯狂地自转。没有时间思考,也没有时间选择,只是贪婪地攫取,攫取一些其实价值不大的知识。在未来的竞争中,就会变成无源之水。

当然了,未来会怎样,现在该怎样,没人能回答,就人类的本性而言,即使下一秒会死亡,现在也还是要竞争,争取成为晚点消失的那个人,晚一秒也好。所以,拥抱变化,寻找新的机会,该学还得学,该干还得干!不然嘞?‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

模糊测试我不是很懂,也属于开发安全中的一部分,在国内的应用日益增加,正好看到这份资料,就顺便学习和给大家介绍一下。

神经元模糊测试(Fuzzing):更快测试软件安全性的方法

    软件漏洞是对计算机系统安全的严重威胁。它们往往多年不被发现,直到发现时为时已晚,后果不可逆转。为了找到这些弱点,软件安全测试人员和开发人员通常必须手动测试整个代码库,并确定是否存在任何漏洞。然而,由于现代软件项目的规模,这可能需要几个月甚至几年的工作。

    处理这一切的一种方法是模糊测试(fuzzing)。模糊测试测试过程向代码或软件随机输入,寻找传统测试技术可能无法发现的错误。近年来,像神经元模糊测试这样的方法已经出现,以使应用程序安全测试更快、更准确。

什么是模糊测试(Fuzzing)?

    模糊测试是一种用于发现软件或计算机系统中存在的缺陷的技术。使用模糊测试技术的目的不仅是创建一种有效的测试方法,而且还可以识别代码中的任何漏洞,并在它们成为公司网络安全的严重问题之前解决它们。

    Barton Miller在20世纪80年代末为研究生水平的大学操作系统课程开发了模糊测试概念,此后在安全研究人员和应用程序安全评测人员中迅速流行起来。

    通常,模糊测试通过提供无效输入,如随机数据、畸形数据或其任意组合来工作,并试图迫使程序生成错误。这是为了看看它如何响应,然后识别潜在的错误。模糊测试可以手动或自动完成,后者是最常用的方法。

模糊测试的方法

    模糊测试大致分为三类:黑盒模糊测试、白盒模糊测试和灰盒模糊测试。

  • 黑盒模糊测试
  • (Blackbox Fuzzing): 黑盒模糊测试是一种涉及蛮力输入和随机数据输入的测试类型。在这种情况下,测试人员对目标软件的内部结构一无所知。
  • 白盒模糊测试
  • (Whitebox Fuzzing):依赖于应用程序方法相关知识的测试类型。这可以通过二进制修改和代码插桩来实现。在这里,测试人员有了解内部情况,并可以使用这些知识来生成更有效的输入。
  • 灰盒模糊测试
  • (Greybox Fuzzing):灰盒模糊测试与黑盒模糊测试非常相似。测试人员不知道目标程序的结构,但是他们根据从过去运行中观察到的行为,使用一个反馈循环来来指导他们的搜索。它还涉及有限的源代码评估,例如使用轻量级代码插桩计算代码覆盖率。基于随机突变的灰盒模糊测试策略已经产生了模糊测试软件,如AFL (American Fuzzy Lop),它已经成功地检测了复杂程序中的大量现实问题。

模糊测试软件工作原理

    模糊测试软件是一种自动将数据(随机数据或突变数据)注入程序以发现问题的程序。它通常从一组种子输入文件开始,通过随机突变或约束求解不断修改这些文件以生成恶意输入。

    由于恶意输入的格式可能相当复杂,生成恶意输入通常需要数百万次突变。因此,模糊测试过程可以被视为一个大规模的搜索问题,以找到一组导致更高的代码覆盖率和更多崩溃的好的突变。

传统模糊测试的局限性

    传统的模糊测试测试有许多障碍,包括如何成功地更改输入种子文件、提高代码覆盖率和避免格式验证,同时还要测试数千行代码。

    这促使人们需要开发一种准确有效的模糊测试技术来取代传统的模糊测试软件。为了解决这些问题,机器学习技术被提出作为模糊测试的一种新方法。

什么是神经元模糊测试?

    神经元模糊测试是一种新的测试软件安全性的方法,它不依赖于黑盒技术。相反,它依赖机器学习和神经网络。

    例如,随着人工智能迅速普及,微软研究人员已经能够使用深度神经网络和机器学习来改进模糊测试技术,通过学习以前的经验来更好地检测错误。神经元模型开发了一个函数来预测输入文件中的有利(和不利)位置,以便它们可以根据先前的突变和相关数据执行模糊测试突变。

    神经元模糊测试非常类似于传统的模糊测试过程,即开发人员编写测试数据来查找错误。不同之处在于神经模糊测试使用机器学习技术来生成数据,因此不需要人工输入。

    神经模糊测试是一种调用神经网络生成随机输入数据以发现软件漏洞的过程。它是一种软件自动安全测试的方法。它利用人工生成的神经元网络来改变程序指令,然后检查崩溃报告,以发现潜在的漏洞的特征。

    神经元模糊测试是一个相对较新的概念,随着深度神经网络的引入,它越来越受到关注,为开发方法来识别软件和网络中的漏洞提供了可能性,使用机器学习技术来生成输入,触发错误。

    神经模糊测试将识别出一些用更传统的方法不可能发现的错误,因为只有当发送给程序的输入数据不是预期的时候,错误才会发生。

神经元模糊测试的优缺点

    神经模糊测试是一种在程序代码中发现错误的创新方法。当涉及到寻找传统模糊测试测试方法无法发现的可利用漏洞时,它尤其有用。

    神经模糊测试的一个主要优势是它可以探索系统的不同部分,包括测试人员可能没有探索过的路径。通过这种方式,神经模糊测试可以发现人类可能忽略的错误,并提高测试过程的效率和准确性。

    这种技术可以快速发现一段软件代码中的许多问题,但由于应用程序不断崩溃和重新打开,它也可能导致不稳定,导致数据丢失和安全漏洞。

开发人员可以从神经模糊测试中获益良多,因为它不仅可以识别问题,还可以揭示最终原因,以及攻击者在现实世界的攻击中如何与之交互。它确定了漏洞的存在,允许检测问题,而不必经历误报。

    测试版本会让他们知道他们是否忽略了任何其他漏洞,从而更容易为他们试图使用模糊测试的软件创建准确的模型,并避免正在运行的应用程序上工作的潜在不稳定性。

开源神经元模糊测试工具

    网络安全供应商还没有做太多的神经元模糊测试,但有一些自动化和开源的模糊测试工具。这些包括:

  • OneFuzz:
  •  OneFuzz是一个开源的自托管开发者平台,目前由微软开发,取代了之前的MSRD(The Microsoft Security Risk Detection,微软安全风险检测)模糊测试服务。

URL:https://github.com/microsoft/onefuzz

  • ClusterFuzz:
  • 这个来自谷歌的开源模糊测试基础设施自动化了从错误发现到分类(正确的重复数据删除、一分为二)、错误报告和自动错误报告关闭的整个过程。

URL:https://opensource.googleblog.com/2019/02/open-sourcing-clusterfuzz.html?m=1

  • Fuzzbuzz:
  • 这是一个自动化的智能平台,使模糊测试实现开发人员友好,因为它不需要代码测试。

URL:https://fuzzbuzz.io/

  • Defensics:
  • 这是一个全面的、可适应的、自动化的黑盒模糊测试软件,帮助企业快速有效地发现和修复软件中的安全缺陷。

URL:https://www.synopsys.com/software-integrity/security-testing/fuzz-testing.html

  • Gitlab Protocol Fuzzer:
  • 以前称为Peach Fuzzer,这个模糊测试软件最近被Gitlab收购,提供了一个使用协议模糊测试来发现许多其他工具无法发现的漏洞和错误的平台。

URL:https://about.gitlab.com/blog/2021/03/23/gitlab-open-sources-protocol-fuzz-test-engine/

  • 其他工具
  • 包括libFuzzer,  URL: https://llvm.org/docs/LibFuzzer.html

和honggfuzz,  URL: https://github.com/google/honggfuzz