MOPT: Optimized Mutation Scheduling for Fuzzers

摘要

背景:基于变异的fuzz是最流行的漏洞发现解决方案之一,它的效果很大程度上基于变异策略。

问题:现有的fuzzer遵循一个特定的分布来选择变异算子,这在一般程序中发现漏洞的效率较低。

结果:提出一种新的变异调度策略MOPT,让基于编译的fuzzer更有效率地发现漏洞。

实施:MOPT使用一个定制的粒子群优化(PSO)算法求出关于模糊测试效率的算子的最优选择概率分布,并提供一种pacemaker模糊模式来加速PSO的收敛速度。

实验:将MOPT应用于AFL,AFLFast和VUzzer,MOPT-AFL能够发现的漏洞比AFL多出170%,崩溃比AFL多出350%。

1 Introduction

相关工作:改进种子生成策略、改进种子选择策略、改进测试速度和代码覆盖、结合fuzz与其他技术。

关于变异:预先定义变异算子来确定变异位置(哪个字节)和变异策略(增删替换)。变异调度器会根据预定义的算子生成一个概率分布。

有限的关于改进变异调度器的工作:利用强化学习在每一轮前动态地选择变异算子,没能展示出在漏洞发现中的重大意义,因此需要一个更好的编译策略。我们发现先前的工作没能获得最佳效果的原因在于他们没有考虑以下因素:

  • 不同的算子效率不同:使用均匀分布的变异算子可能造成不必要的开销。
  • 一个算子的效率与目标程序有关
  • 一个算子的效率随时间变化
  • 调度器带来的性能开销
  • 不平衡的数据集:有趣少,无趣多。
下面是使用互信息法和虚假最近邻点法确定最佳时间延迟和嵌入维数,并进行相空间重构的MATLAB代码示例: ```matlab % 输入参数 x = ... % 输入的一维时间序列 maxDim = ... % 最大嵌入维度 maxTau = ... % 最大延迟时间 % 互信息法估计 MI = zeros(maxDim, maxTau); for m = 1:maxDim for tau = 1:maxTau X = zeros(length(x)-(m-1)*tau, m); for i = 1:length(x)-(m-1)*tau X(i,:) = x(i:tau:i+(m-1)*tau); end MI(m,tau) = mutualinfo(X(:,1), X(:,2)); % 仅计算前两个维度的互信息 end end % 绘制互信息矩阵 figure; imagesc(MI); xlabel('Delay time'); ylabel('Embedding dimension'); colorbar; % 虚假最近邻点法估计 D = zeros(maxDim, 1); for m = 1:maxDim X = zeros(length(x)-(m-1)*maxTau, m); for i = 1:length(x)-(m-1)*maxTau X(i,:) = x(i:maxTau:i+(m-1)*maxTau); end [~, D(m)] = fnn(X); end % 绘制虚假最近邻点曲线 figure; plot(1:maxDim, D, 'o-'); xlabel('Embedding dimension'); ylabel('FNN'); % 确定最佳嵌入维度和时间延迟 mOpt = ... % 根据互信息矩阵或虚假最近邻点曲线确定最佳嵌入维度 tauOpt = ... % 根据互信息矩阵或虚假最近邻点曲线确定最佳时间延迟 % 相空间重构 X = zeros(length(x)-(mOpt-1)*tauOpt, mOpt); for i = 1:length(x)-(mOpt-1)*tauOpt X(i,:) = x(i:tauOpt:i+(mOpt-1)*tauOpt); end ``` 其中,mutualinfo函数用于计算两个维度之间的互信息,fnn函数用于计算虚假最近邻点的比例。在实际应用中,需要根据具体问题选择合适的估计方法和参数,并对重构后的相空间进行进一步分析和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值