AFLNET架构图解释及运行流程


一、AFLNET架构图解释

在这里插入图片描述
AFLNET架构图解释:

  pcap文件是AFLNET的输入,包含了捕获的网络流量(例如FTP客户端和FTP服务器之间的请求和响应,如List 1)。

  使用请求序列解析器(Request Sequence Parser)组件来生成消息序列的初始语料库。AFLNET使用消息结构(message structure)的协议特定信息(protocol-specific information)以正确顺序从捕获的网络流量中提取单个请求。 首先,过滤掉来自pcap文件的响应()以获取客户端请求的trace(痕迹?);然后,解析过滤的trace,以识别trace中每条消息的开始和结束。(论文中实现了一个轻量级的方法,可以找到给定协议中指定的消息的标头和终止符)

  状态机器学习(State Machine Learner)接受服务器响应,并使用新观察到的状态和转换来增强已实现的协议状态机(IPSM,implemented protocol state machine)。AFLNET将状态服务器响应读取到字节缓冲区(byte buffer)中,提取协议中指定的状态代码,并确定执行状态(transition)。如果服务器响应中有新的状态码,则添加新状态的图形节点。

  目标状态选择器(Target State Selector)从IPSM获取信息来选择AFLNET下一步应该关注的状态。(怎么选择?AFLNET使用了几种启发式方法(heuristics),这些启发式方法可以从学习的IPSM中可用的统计数据中计算出来,以帮助目标状态选择器选择下一个状态。例如,为了识别模糊测试工具盲点(Fuzzer blind spot),即很少执行的状态,它选择一个状态s,选择s的概率与执行s的变异消息序列的比例成反比【?有什么用】(#fuzz)。为了最大化发现新状态转换的概率,AFLNET选择具有更高优先级的状态s,当之前选择了这些s时,特别有助于增加代码或状态覆盖率(#paths)。注:AFLNET只有在fuzzing过程工作了足够长的时间来积累统计数据后才开始应用这些启发式方法。一开始,目标状态选择器随机选择目标状态。)

  一旦选择了目标状态s,序列选择器(sequence selector)就会从序列语料库中选择一个可以到达状态s的消息序列(即种子输入seed input)。AFL/AFLNET将种子语料库(seed corpus)(此处包含消息序列)实现为队列条目的链表。队列条目(queue entry)是包含有关种子输入的相关信息的数据结构。 此外,AFLNET维护一个状态语料库(state corpus),它包括(i)状态条目列表(state entries),即包含相关状态信息的数据结构,以及(ii)哈希图,将状态标识符映射到执行对应于状态标识符的状态的队列条目列表。序列选择器利用哈希图随机选择一个序列,如队列条目中所示,以执行状态s。

  Sequence Mutator使用具有协议感知能力的变异算子增强了AFL的fuzz_one方法。AFLNET是一种基于突变的模糊测试方法,即从语料库中选择种子消息序列并进行突变以生成新序列。(相比于从头开始生成新消息序列的现有基于生成的方法相比,有几个优点。首先,基于突变的方法可以利用真实网络流量的有效trace来生成可能有效的新序列–尽管完全没有协议规范;相比之下,基于生成的方法需要详细的协议规范,包括具体消息模板和协议状态机。其次,基于突变的方法可能进化出特别有趣的消息序列的语料库。引起发现新状态、状态转换或程序分支的生成的序列,会被添加到语料库中以进行进一步的模糊测试。这种进化方法是基于覆盖的灰盒模糊测试取得巨大成功的秘诀。)

二、AFLNET运行流程

  现在我们说明 AFLNET 的所有这些组件如何协同工作以模糊测试 LightFTP 服务器。假设 AFLNET 仅从一个包含网络流量的 pcap 文件开始,如清单 1 所示。首先,Request Sequence Parser 解析 pcap 文件以生成单个序列(如图 3 所示)并将其保存到语料库 C 中。
在这里插入图片描述

  同时此时,状态机学习根据响应码构造初始IPSM;这个初始的 IPSM 包含图 4 中的黑色节点和转换。假设目标状态选择器选择状态 331 (USER foo OK) 作为目标状态,然后序列选择器将从序列语料库 C 中随机选择一个序列,其中当前仅包含一个序列。之后,Sequence Mutators 识别序列前缀(“USER foo”请求)、候选子序列(“PASS foo”请求)和剩余子序列作为后缀。通过使用堆叠的变异器(stacked mutator)对候选子序列进行变异,序列变异器可能会生成错误的密码请求(“PASS bar”),从而导致错误状态(530未登录)。在这个错误密码之后,它会重放后缀(例如,“MKD demo”、“CWD demo”),导致状态 530 循环,因为在成功验证之前不允许所有这些命令。最后,发送“QUIT”请求,服务器退出。
在这里插入图片描述
在这里插入图片描述

  由于生成的测试序列(如图 5 所示)涵盖了新的状态和状态转换(如图 4 中以红色突出显示),因此将其添加到语料库 C 和 IPSM 中。


https://mboehme.github.io/paper/ICST20.AFLNet.pdf

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot是一个用于构建独立的、生产级别的Spring应用程序的框架。它简化了Spring应用程序的配置和部署过程,并提供了一套强大的开发工具和约定,使得开发者可以更加专注于业务逻辑的实现。 Spring Boot的系统架构运行流程图如下: 1. 开发阶段: - 开发者使用Spring Boot提供的开发工具和约定,编写应用程序的业务逻辑。 - 开发者可以使用Spring Initializr来初始化一个Spring Boot项目,选择所需的依赖和配置,生成项目骨架。 2. 构建阶段: - 开发者使用构建工具(如Maven或Gradle)对应用程序进行构建。 - 构建工具会根据项目配置文件(如pom.xml或build.gradle)下载需的依赖,并将应用程序打包成可执行的JAR或WAR文件。 3. 部署阶段: - 将打包好的应用程序部署到目标环境中(如服务器、云平台等)。 - 可以使用命令行工具或集成开发环境(IDE)来运行应用程序。 4. 运行阶段: - Spring Boot应用程序启动后,会自动加载并配置所需的组件(如Web服务器、数据库连接等)。 - 应用程序会根据配置文件中的设置,自动扫描并加载业务逻辑的实现类。 - 当有请求到达时,Spring Boot会根据路由配置将请求分发给对应的控制器(Controller)处理。 - 控制器处理请求后,可以调用服务层(Service)进行业务逻辑处理,并返回结果给客户端。 5. 监控与管理: - Spring Boot提供了一套监控和管理工具,可以帮助开发者监控应用程序的运行状态和性能指标。 - 开发者可以通过配置文件或注解来启用监控和管理功能,如健康检查、性能指标收集等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值