根据libFuzzer完成构造比较敏感型的模糊不清测试技术性(上)

访客4年前黑客文章520

生成型Fuzzer一般 以单一输入类型为总体目标,依据预订义的语法来生成输入数据信息,比如c *** ith(能够生成合理的C程序流程)和Peach(可以生成一切类型的输入,但必须将这类类型表明为语法界定方式)。

针对普及率导向性的突变型Fuzzer(如libFuzzer或AFL)而言,其总体目标并不限于单独输入类型,也不用语法界定。因而,突变型Fuzzer一般 比生成型Fuzzer更非常容易设定和应用。可是,因为缺乏输入语法,因此 对繁杂输入类型开展模糊不清测试的情况下,高效率较低,由于一切经传统式的突然变化(比如位旋转)而获得的输入,在分析的初期都是会被总体目标API所回绝,换句话说,生成了很多失效输入。

殊不知,根据适度的解决以后,还可以将libFuzzer变换为适用特殊输入类型的语法比较敏感(即构造比较敏感)型模糊不清测试模块。

实例:缩小

下边,大家将根据一个简易的实例,来演试怎么使用libFuzzer开展构造比较敏感型模糊不清测试的大概全过程。

好啦,大家先讨论一下模糊不清测试的目标:它接受Zlib缩小的数据信息,并对其开展缓解压力解决,假如非缩小方式的输入中的前2个字节数是“F”和“U”,便会奔溃。

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size){

uint8_t Uncompressed[100];

size_t UncompressedLen=sizeof(Uncompressed);

if (Z_OK !=uncompress(Uncompressed, &UncompressedLen, Data, Size))

return 0;

if (UncompressedLen

这是一个比较简单的测试总体目标,可是传统式的通用性Fuzzer(包含libFuzzer)事实上没办法发觉崩溃点。这是为什么呢?由于他们开展突然变化解决时,会对缩小数据信息开展实际操作,进而造成生成的全部输入针对压缩包解压全是失效的。

因此,大家务必凭借自定mutator(别名libFuzzer软件)。说白了自定mutator,实际上便是具备固定不动签字的客户自定义函数,其实行下列实际操作:

· 依据特定的語言语法来剖析输入数据信息(在大家的实例中,它会对缩小数据信息开展缓解压力解决)。假如分析不成功,它将回到合乎语法的伪输入(这儿,它将回到一个缩小字节数编码序列Hi)。

· 让输入(在本例中为未缩小的原始记录)的分析表明方式产生突然变化。自定mutator能够根据涵数LLVMFuzzerMutate要求libFuzzer对原始记录的一些一部分开展取值。

· 对突然变化后的表明方式开展实例化(在大家的实例中,便是开展缩小解决)。

extern "C" size_t LLVMFuzzerCustomMutator(uint8_t *Data, size_t Size,

size_t MaxSize, unsigned int Seed){

uint8_t Uncompressed[100];

size_t UncompressedLen=sizeof(Uncompressed);

size_t CompressedLen=MaxSize;

if (Z_OK !=uncompress(Uncompressed, &UncompressedLen, Data, Size)){

// The data didn't uncompress. Return a dummy...

}

UncompressedLen=

LLVMFuzzerMutate(Uncompressed, UncompressedLen, sizeof(Uncompressed));

if (Z_OK !=compress(Data, &CompressedLen, Uncompressed, UncompressedLen))

return 0;

return CompressedLen;

}

如今,请运作该实例。更先,使我们不在应用自定mutator的状况下编译程序该测试目标:

% clang -O -g CompressedTest.cpp -fsanitize=fuzzer -lz

%

...

INFO: A corpus is not provided, starting from an empty corpus

#2 INITED cov: 2 ft: 3 corp: 1/1b lim: 4 exec/s: 0 rss: 25Mb

#2097152 pulse cov: 2 ft: 3 corp: 1/1b lim: 4096 exec/s: 1048576 rss: 25Mb

#4194304 pulse cov: 2 ft: 3 corp: 1/1b lim: 4096 exec/s: 1048576 rss: 25Mb

#8388608 pulse cov: 2 ft: 3 corp: 1/1b lim: 4096 exec/s: 1198372 rss: 26Mb

#16777216 pulse cov: 2 ft: 3 corp: 1/1b lim: 4096 exec/s: 1290555 rss: 26Mb

#33554432 pulse cov: 2 ft: 3 corp: 1/1b lim: 4096 exec/s: 1342177 rss: 26Mb

#67108864 pulse cov: 2 ft: 3 corp: 1/1b lim: 4096 exec/s: 1398101 rss: 26Mb

...

如您所闻,这儿的普及率( cov:2)并不会提升,由于总体目标中沒有实行新的检验编码。就算应用Zlib,在模糊不清测试期内出示大量的普及率意见反馈,libFuzzer也不大可能发觉崩溃点。

下边,再度运作该测试总体目标编码,但此次应用自定mutator:

% clang -O -g CompressedTest.cpp -fsanitize=fuzzer -lz -DCUSTOM_MUTATOR

%

...

INFO: A corpus is not provided, starting from an empty corpus

#2 INITED cov: 2 ft: 3 corp: 1/1b lim: 4 exec/s: 0 rss: 25Mb

#512 pulse cov: 2 ft: 3 corp: 1/1b lim: 8 exec/s: 256 rss: 26Mb

#713 NEW cov: 3 ft: 4 corp: 2/11b lim: 11 exec/s: 237 rss: 26Mb L: 10/10 MS: 1 Custom-

#740 NEW cov: 4 ft: 5 corp: 3/20b lim: 11 exec/s: 246 rss: 26Mb L: 9/10 MS: 3 Custom-EraseBytes-Cus

#1024 pulse cov: 4 ft: 5 corp: 3/20b lim: 11 exec/s: 341 rss: 26Mb

#2048 pulse cov: 4 ft: 5 corp: 3/20b lim: 21 exec/s: 682 rss: 26Mb

相关文章

淘宝上有黑客吗?淘宝有黑客接单暗号是多少_淘宝上有黑客吗

淘宝上有黑客吗?在淘宝收到订单的黑客的代码是多少?分手后我能做什么呢?救你前男友的关键是分析分手的原因,同时也要了解他的心,找到和你相处的正确方法;淘宝有黑客接单暗号是多少 I.原因分析(情感问题加上...

专家教你怎么调取别人微信聊天记录(远程调取他人微信聊天记录)

如果您的计算机上微信记录,你可以在电脑显示器上安装其他计算机专家, 软件安装后,不留任何痕迹,键盘记录器 记录所有的键盘输入,包括中国,英文,数字记录键和功能键。 QQ聊天,像微通道记录。 专家教你怎...

看清这个世界的真相(看清这个世界的真相,仍然去热爱它)

看清这个世界的真相(看清这个世界的真相,仍然去热爱它)

本文目录一览: 1、如何看清这世界? 看清这世界的本质? 2、如何看清真实的世界——多模型思维能力 3、在你认清了这个世界的真相依然出自哪里 如何看清这世界? 看清这世界的本质? 问自已的内...

SE《FF水晶编年史》重制版发售日确定 预告公开

SE《FF水晶编年史》重制版发售日确定 预告公开

2019年12月12日,我们报道了“《最终幻想:水晶编年史》重制版延期至明年夏季”的相关消息。今日(2020年5月28日),SE官方宣布《最终幻想:水晶编年史》重制版将于2020年8月27日正式发售,...

大唐不夜城不倒翁小姐姐结婚了怎么回事 大唐不夜城不倒翁小姐姐是谁

9月17日,陕西西安,大唐不夜城不倒翁小姐姐冯佳晨结婚啦。从她丈夫的朋友圈可以看到,今天正好是她丈夫的生日,两人也选择在这天领证。有网友留言说,现在两人也已经结婚,再也不敢有人喊把手给我了,现在不倒翁...

下载的app在手机桌面上找不到怎么办

这是由于设定不善造成 。1、打开设置。2、进到主屏。3、挑选添加到主屏幕就可以。 知名品牌型号规格:iPhone12 系统软件:IOS14.3 免费下载的app在手机界面上找不着该怎么办?...