防止ddos_防ddos攻击端口
DDOS
国内DDoS防御_香港高防IP防护DDoS攻击-寒冰互联
德尔网络
2020-08-01 01:42

介绍模糊化是软件自动测试中最常用的方法之一。通过模糊化,可以根据一组规则为应用程序生成许多可能的输入,并将它们注入程序中,以观察应用程序的行为。在安全领域,模糊化被认为是一种有效的方法来识别角落案例中的漏洞和漏洞有太多的模糊化框架,既有开源项目,也有商业化的。有两大类模糊技术:基于进化的模糊化:他们使用遗传算法来增加代码覆盖率。他们将修改所提供的测试用例,cc防御华为,以便进一步深入分析的应用程序。直观地说,网络病毒,这需要某种形式的代码插入来向变异引擎提供反馈。一般来说,基于进化的模糊器会忽略所需的输入格式,有点"学习"它。这种技术在开源社区中得到了很好的支持和维护。最先进的工具包括美国模糊Lop(AFL)、libFuzzer和hongfuzzz。基于代的模糊化:与基于进化的模糊化相反,它们基于提供上下文感知的一些规范和/或格式构建输入。最先进的商业工具包括Defensics和PeachFuzzer,开源工具包括Peach、Spike和Sulley。这种分类并不是相互排斥的,而是更一般的设计区别。有些工具包括这两种技术,比如PeachFuzzer。在应用程序和威胁情报(ATI)研究中心,我们的目标之一是识别应用程序中的漏洞,并帮助开发人员在漏洞被利用之前修复它们。这是通过将不同的应用程序和库连接到我们的fuzzing框架来实现的。本文将通过在研究一个开源库时强调我们的一些发现,来展示我们如何在我们的安全研究中使用模糊化。模糊化SDL库simpledirectmedia层(SDL)是一个跨平台的库,网站如何防御cc,它提供了一个API来实现多媒体软件,如游戏和模拟器。它是用C语言编写的,由社区积极维护和使用。选择模糊化框架我们将使用著名的AFL模糊SDL。由lcamtuf编写,AFL使用运行时引导技术、编译时工具和遗传算法为测试的应用程序创建变异的输入。它有一个令人印象深刻的缺陷识别案例,这就是为什么它被认为是最好的模糊化框架之一。一些研究人员对AFL进行了详细的研究,并提出了修改某些组件行为的扩展,例如不同代码分支的变异策略或重要性。这些项目产生了FairFuzz、AFL-GO、AFL unicorn、AFLSmart和python-AFL。我们将使用AFLFast,这个项目实现了一些模糊化策略,不仅针对高频代码路径,ddos防御溯源,而且针对低频路径,"在相同的时间内显著地强调更多的程序行为。"简言之,在我们的研究过程中,我们观察到对于某些模糊化活动,与vanilla-AFL相比,app如何防御cc,这种优化产生了大约2倍的加速改进和更好的总体代码覆盖率。绒毛制备要使用AFL,必须用AFL的编译器包装器编译库的源代码。$./configure CC=afl clang fast\CFLAGS="-O2-D_FORTIFY_SOURCE=0-fsanitize=地址"\LDFLAGS="-O2-D_FORTIFY_SOURCE=0-fsanitize=地址"$make;sudo make安装如前所述,我们将同时使用AFL工具和ASAN(地址消毒剂)编译器工具,用于识别与内存相关的错误。如本文所述,ASAN将插入指令的程序的执行速度降低了2倍,但增益要高得多,因此我们可以检测到与内存相关的问题,例如:空闲后使用(悬挂指针取消引用)堆缓冲区溢出栈缓冲区溢出全局缓冲区溢出返回后使用范围后使用初始化顺序错误内存泄漏此外,为了优化模糊处理过程,我们将源代码编译为:-D_FORTIFY_SOURCE=0(ASAN不支持源代码强化,因此禁用它以避免错误警告)-O2(打开-O指定的所有优化标志;对于llvm3.6,-O1是默认设置)让我们检查设置是否已成功应用:$checksec/usr/local/lib/libSDL-1.2.so.0[*]'/usr/local/lib/libSDL-1.2.so.0'拱门:amd64-64-little雷罗:没有堆栈:找到金丝雀NX:NX启用饼图:启用饼图ASAN:已启用Checksec是一个很好的工具,它允许用户检查二进制文件中的安全选项,例如二进制文件是用不可执行的堆栈(NX)构建的,还是使用重定位表作为只读(relo)构建的。它还检查二进制文件是否使用ASAN工具构建,这正是我们需要的。它是pwntools Python包的一部分。如前所述,编译二进制文件时使用了我们希望的ASAN工具。现在让我们继续模糊化吧!编写测试线束AFL模糊操作包括三个主要步骤:启动新流程输入经过变异引擎修改的输入通过跟踪使用此输入到达的路径来监视代码覆盖率,并在发生任何崩溃或挂起时通知您这是由AFL自动完成的,这使得它非常适合于模糊化接受输入作为参数的二进制文件,然后对其进行解析。但是要使库变得模糊,我们必须首先制作一个测试工具并编译它。在我们的例子中,harness只是一个C程序,它使用库中的某些方法,允许您间接地对其进行模糊处理。#包括#包括"SDL\u config.h"#包括"SDL.h"结构{音频规范;Uint8*sound;/*指向波形数据的指针*/Uint32 soundlen;/*波浪数据长度*/int soundpos;/*当前播放位置*/}波浪;/*调用这个而不是exit()来清理SDL。*/静态空隙退出(int rc){SDL_Quit();出口(rc);}int main(int argc,char*argv[]){/*加载SDL库*/如果(SDL_Init(SDL_Init_AUDIO)