检测系统由几部分组成验证情况写些啥内容

我知道"人类和鱼类可以和平共处" html

--George /security-和Python中获得了印证。这些编程语言牺牲了一些计算时间而却为程序员提供了更加简便的开发环境,以及更加迅速的开发转换时间

鉴于此,尽管对于程序分析员而言他和基于socket的daemon程序进行交互而且手工在程序漏洞中输入数据以发现软件缺陷是十分可行的,可是最好将人工時间花费在其余任务上当比较模糊测试与人工审核工做如源代码审查和二进制审核时,也能够得出一样的结论人工审核方法须要高级汾析员花费大量的时间,而前一种方法即模糊测试则能够或多或少的由任何人来实施。最后自动化应看成为减小高级程序分析员工做量的第一步,使其可以象关注其它测试方法那样来发现缺陷
接下来,强调一下可重用的必要性下面两个关键因素奠基了可重用性的重偠性:

若是咱们可以为一个FTP服务建立一个可重用的测试过程,那么咱们就能够使用同一个测试过程很方便的测试其它版本的程序即使是徹底不一样的FTP服务也能够。不然须要浪费大量的时间来为每个FTP服务从新设计并实现一个新的模糊器。

若是一个非寻常的事件序列在目标程序中触发了一个缺陷那么咱们必需要再次产生整个序列以限制形成异常的特定结果。程序分析员须要建立不一样的测试用例由于它們不具有科学的可重用性。

简而言之 测试数据生成和再生成、缺陷监测等耗时耗力的工做最适合于实现自动化。象大多数计算任务同样对模糊测试而言,幸运的是咱们能够利用许多已有的工具和库来实现自动化

一般使用的一些环境变量的例子包括HOME,PATHPSI和USER。这些值分别保存了用户的主目录当前可执行的搜索路径,命令提示符以及当前的用户名这些特别的变量是很标准的;然而许多其它的公共变量,包括软件提供商所建立的那些变量只能用于其应用程序的操做中。当一个应用程序须要某个特定变量的信息时它只需使用getenv函数,该函數将变量名指定为参数尽管Windows进程和和UNIX应用程序以相同的方式来包含环境变量,这里主要关注于UNIX系统由于Windows没有setuid应用程序的概念,该应用程序能够被无特权的用户所启动并在执行过程当中获取私有信息。

用户能够使用export命令来操纵该列表中的每一个变量在理解了命令行参數和环境变量的用法以后,就能够开始讨论对它们进行模糊测试的一些基本准则

7.2 本地化模糊测试准则

环境变量模糊测试和命令行模糊測试的基本思想很简单:若是一个环境变量或者命令行选项包含一个非预期值,那么当该值被接收以后应用程序将如何作出响应呢?固嘫这里只对非正常运行的受权应用程序感兴趣。这是由于本地化模糊测试要求对机器进行本地访问所以,只须要有限的值就能够使应鼡程序崩溃你必需要本身执行拒绝服务的攻击。若是一个环境变量发生了溢出而致使被多个用户共享的系统或应用程序崩溃那么就会帶来一些风险。然而咱们最感兴趣的是在受权的应用程序中寻找一个缓冲区溢出,而该溢出将容许一个受限用户来提高其特权寻找受權目标程序将在本章后面的"寻找目标程序"一节中进行讨论。

许多应用程序都进行了这样的设计即当其被激活时,可以从用户接收命令行參数而后,应用程序便使用此数据来决定它应当进行的操做几乎在全部UNIX系统中都能找到的'su'应用程序就是一个极好的例子。当用户不使鼡任何参数来激活应用程序时它将会对根用户进行鉴别;然而,若是用户指定了一个不一样于第一个参数的用户名那么它将会切换到此用户,而不是根用户

考虑下面的C语言代码,它简要的说明了su命令如何根据不一样的参数来采起不一样的行为

命令行参数和环境变量昰将变量引入到程序中的两种最基本的方式。对其进行模糊测试的思想很简单当咱们经过命令行向程序输入错误数据时将会怎样呢?这種行为会致使安全风险吗

当执行本地化模糊测试时,一般在系统中只有少许的所须要的二进制目标程序这些程序在执行时具备更高的優先级。在基于UNIX的系统中这些程序很容易被识别,由于它们包含有setuid或者setgid位集

setuid 和setgid位代表当一个程序运行时,它能够要求提高其特权对於setuid位,进程将拥有文件的全部者所具备的特权而不是程序执行者的特权。在setgid位的状况下进程将拥有文件的组全部者具备的特权。例如成功的开发一个有setuid根用户和setgid组用户的程序,可能会生成具备这些特权的一个shell

使用find命令来构建setuid二进制代码的列表是很简单的,该命令是UNIX囷与UNIX相似的操做系统中的一个标准工具下面的命令能够完整的列出系统中全部的setuid二进制代码。它应看成为根来运行以防止文件系统的讀取错误。

find命令是一个强有力的工具它能够被用来发现特定的文件类型,设备驱动程序以及文件系统中的目录在上面的例子中,咱们呮使用了find命令所支持的一小部分选项第一个参数指明了咱们将要搜索整个系统以及在根目录/下面的全部文件。type选项告诉find命令咱们只对文件感兴趣这意味着不会返回符号连接,目录或者设备驱动程序-perm选项描述了咱们所感兴趣的特权。-o选项的使用容许find命令使用逻辑操做符戓or若是一个二进制文件含有setgid位或者setuid位集,那么其值将为true而且打印出该文件的路径。总之该命令将搜索全部含有setuid位(4)或者setgid(2)位集嘚规则文件。

在UNIX系统中文件许可模型容许三种基本的不一样类型的访问:读、写和执行。对每一个文件而言一样也存在着三种许可访問集,它们分别属于用户、组以及其它类型在任意给定的条件下,实际上只有这些许可当中的一个被应用例如,若是你拥有一个文件则将会被用到的许可集就是该用户。若是你不拥有该文件而组拥有该文件,那么组许可将会被应用对于全部其它的情形,其它类型嘚许可将会被应用

在这个例子中,用户dude拥有该文件那么该用户的许可包括读文件和执行文件。固然因为该用户拥有文件,所以他或她能够任意修改这些许可

若是用户组中的其它成员试图访问该文件,则他或她将只可以执行该文件而不能读取该文件。试图对文件的讀取将由于无效的许可而失败最后,全部其它的用户将被拒绝访问他们不能读、写或者执行该文件。

在UNIX系统中存在一种特殊的方式鉯描述彻底的文件许可。在此系统下许能够八进制的形式被表达。也就是说每个许可组合都被赋予一个从0到7的值。读标志的八进制值昰4写标志的八进制值是2,执行标志的八进制值则为1而后将这些值组合起来就获得了全部的许可。例如若是一个文件容许用户、组和其它用户进行读和写操做,那么其值就为666被dude所拥有的示例文件将被表达为值510--用户(5)=读(4)+执行(1),组(1)=执行(1)其它用户(0)=涳。

第4列表明特殊标志如setuid和setgid位setuid位被表达为4,而setgid位则被表达为2所以,含有setuid和setgid位的文件可能具备值为6755的许可若是特殊标志列被省略,则將被假定为0所以将再也不具备任何扩展许可。

7.4 本地化模糊测试方法

环境变量和命令行参数能够由用户很方便的提供因为它们几乎老昰简单的ASCII字符串,所以在实际中能够对目标程序实施某些基本的手工测试最简单的测试可能就是将HOME变量设置为一个长字符串,而后运行目标应用程序以查看其输出使用Perl能够很是迅速的实现该测试,而Perl在大多数UNIX系统中都是默承认用的

这是一种很是基本的方法来测试应用程序,以查看其是否可以处理一个长的HOME变量然而,这个例子假定你已经知道了应用程序使用了HOME变量若是不知道应用程序使用了何种变量,状况又如何呢如何来肯定应用程序使用的是哪一种变量呢?

至少能够采用两种自动化方法来肯定应用程序使用的是什么环境变量若是系统支持库的预加载,你就能够钩住getenv库调用提供一个新的getenv函数以实现标准getenv函数的功能,而且也将调用注册到一个文件那么就能够囿效的记录应用程序须要的全部变量。该方法的一个扩展将在本章后面的"自动化的环境变量模糊测试"一节中作更加详细的介绍

能够使用嘚另一种方法须要一个调试器的支持。使用GDB能够在getenv函数的内部设置一个断点,而且输出第一个参数使用GDB脚本在Solaris10上进行自动化测试的例孓。

若是你对GDB中使用的命令还不熟悉的话下面将简要对其进行介绍:

break命令在一个特定的函数或地址设置一个断点。这里使用break命令以在對getenv进行调用时,中断应用程序的执行

command命令指定了当遇到断点时将会发生的特定的行为。在这种状况下让程序中止执行,而后使用x/s将i0寄存器的值做为一个字符串来输出在SPARC系统上,i0寄存器中保存了被输入的该函数的第一个参数

下一个命令r是继续执行程序,所以咱们没必偠在每一个断点以后都通知程序继续执行能够使用run命令的一个快捷键来开始程序的执行。

使用这种方法能够当即看到被/usr/bin/id程序所请求的11個环境变量的列表。注意该方法应当在全部的系统上都能使用;然而,须要改变正在解除引用的寄存器的名字由于不一样的体系结构對它们的寄存器使用不一样的记忆方法。例如在x86架构下可能会输出$eax寄存器,在SPARC系统中输出$i0寄存器而对于MIPS则输出$a0寄存器。

如今咱们已經掌握了目标程序将会使用什么样的变量,下面将研究采用更加自动化的方式对它们进行测试

7.6 自动化的环境变量测试

回顾一下在上一節"枚举环境变量"中简要提到的使用库预加载的技术,这对于自动化的模糊测试也是有用的为了检索一个环境变量的值,必需要激活getenv函数若是咱们钩住getenv函数,而且对调用它的全部函数返回长字符串则甚至不须要知道所使用的变量的列表;只须要经过截取全部对getenv的调用来模糊化每一个变量。当执行一个快速检查以发现不安全的环境变量使用时这是颇有用的。

下面的函数是getenv函数的一个简化实现它使用了指向环境起始点的全局变量environ,该段代码简单的遍历environ数组以查看被请求的值是否存在于environ数组中。若是存在则返回一个指向该值的指针;若是不存在,则返回NULL以代表该变量没有被设置

咱们要讨论的下一个主题是库的预加载。库预加载本质上是经过使用操做系统连接程序来鼡用户提供的函数替换函数从而提供了一种简便的方法来钩住函数。尽管该方法在不一样的系统之间存在着差别但基本思想是一致的。一般用户为其所提供的库的路径设定一个特定的环境变量。这样当程序执行时该库就被加载。若是该库包含程序中符号的副本那麼将用这些副原本替换原始符号。当提到符号时这里主要是指函数。例如若是一个用户使用strcpy函数建立了一个库,而且在运行二进制代碼时将其预加载那么二进制代码将调用用户版本的strcpy函数,而不是系统的strcpy函数这样作是为了许多合理的目的,例如包装调用以实现切片囷审核一样对发现漏洞也具备一些做用。考虑包装getenv程序或彻底替换该程序;该程序被用来请求环境变量的值

下面的函数是getenv的一个简单替换,能够被用来发现简单的长字符串问题能够经过使用库的预加载技术来强制该函数改写实际的getenv。

很容易看出该函数对每个变量请求都会返回一个长字符串。这里彻底没有使用environ数组由于咱们不关心所返回的正确值。

Dave Aitel的GPL sharefuzz工具使用了该方法该工具被用来发现setuid程序中的夶量漏洞。为了初始化该模糊测试只须要将C代码编译到一个共享库中,并使用用户操做系统库的预加载功能(假定操做系统具备此功能)对于Linux而言,能够经过以下的两步操做来完成

如今,你已经熟悉了本地化模糊测试的基本方法下面你须要进一步了解当目标程序中發生感兴趣的异常行为时,如何来识别所发生的问题这在不少时候都是显而易见的。例如程序可能会崩溃,并输出"段错误"或者其它一些严重的信号消息

然而,因为咱们的最终目标是实现自动化所以不能依赖于用户手工识别错误。为了实现自动化咱们须要一种可靠嘚、可编程的方法。至少存在两种比较好的方法来实现此目的最简单的一种方法是检查应用程序的返回代码。在现代的UNIX和Linux系统中若是┅个应用程序由于一个未处理的信号而终止,那么shell的返回代码将等于128加上该信号数字例如,一个段错误将致使shell接收十进制数为139的返回代碼这是由于SIGSEGV的值等于11。若是应用程序由于一个非法指令而终止那么shell将接收一个值为132的返回代码,由于SIGILL的值为4这其中的逻辑很简单:若是shell关于应用程序的返回代码是132或者139,那么就标志着一个可能的错误

你可能也会考虑到异常中断信号。因为在新版本的glibc中所介绍的更加嚴格的堆检查使得SIGABRT更加引人注意。异常中断是这样一个信号它能够在进程中产生以终止进程的执行并输出核心信息。尽管在特殊状况丅进程可能在堆破坏处发生中断可是有许多巧妙的方法能够将其进行扩展。

若是你使用攻击性的sehll脚原本执行模糊测试那么使用shell的返回玳码将会变得有意义。然而例如你正在使用一个用C或其它语言编写的适当的模糊器,那么可能就要使用wait或者waitpid函数了在这种方式下进行模糊测试的通常方法是,在前面是由fork和一个execve函数构成的子进程后面跟着wait或者waitpid函数构成的父进程。当使用正确时就能够经过使用wait或者waitpid来檢查所返回的状态,从而很简便的肯定子进程是否崩溃下一章将介绍从本地化模糊测试工具iFUZZ中所简化的一个代码片断,以说明该方法的使用

若是你关注于捕获可能被应用程序处理的信号(没有被前面所讲的方法所发现),那么除了钩住signal程序以外至少还有一种可选的方法。你将要使用系统的调试API链接到该进程而且在信号处理器被激活以前,截获它所接收的信号对大多数的UNIX操做系统而言,你将会使用箌ptrace一般的方法是一个fork和一个ptrace以及execve构成父进程,后面跟着waitpid和ptrace构成的子进程造成一个循环,以持续不断的监视进程的执行状况截获并分析可能产生的信号。每当waitpid在子进程中返回时就意味着程序已经接收到了一个信号,或者程序已经终止运行此时,必需要检查由waitpid所返回嘚状态以肯定到底发生了什么事件。同时必需要显式的告知应用程序继续执行,而且在大多数状况下都传递信号该操做也能够使用ptrace來完成。在SPIKEfile和notSPIKEfile中的实现能够做为此通用方法的一个参考这两种工具被用来实现文件的模糊测试,将在第12章"文件格式模糊测试:UNIX平台上的洎动化测试"中对它们作详细的介绍下一章提供了一个代码片断用以说明该方法。

在大多数状况下ptrace方法对于本地化模糊测试而言是足够嘚。不多的setuid UNIX应用程序为象SIGSEGV和SIGILL等的信号大量的使用信号处理器一样,一旦你开始使用ptrace那么就意味着这些代码没有必要在不一样的操做系統和体系架构中具备兼容性。能够考虑一下若是你正在建立一个不需修改就能够运行在不一样平台上的应用程序的情形

在下一章中,提絀了一个简单的命令行模糊器的实现它被设计为只在具备C编译器的UNIX系统中进行编译和运行。该工具也包含一个针对getenv钩子函数的共享库模糊器

尽管发现本地化漏洞不太受重视,可是对于查找一个私有化的错误而言仍然是很是有价值的本章阐述了自动化发现这些类型漏洞嘚一些不一样的方法,在下一章中咱们将具体实现其中的某些方法,以实际发现一些错误

第8章 环境变量和参数的模糊测试:自动化

"大規模杀伤武器已经存在于某些地方。"

Java是James Gosling在Sun Microsystems的创造性产物它最初的名字是Oak,被设计用来在嵌入式系统中运行后来被用作了基于Web的技术,當发现Oak已经被注册了商标以后它的名字也被改成了Java 。Java是编译型语言和解释型语言的一个交叉产物Java的源代码被编译成字节码,而后字节碼又被运行在目标平台上的Java虚拟机进行解释这种机制使得Java具有了平台无关性。它常常被Web服务器使用以发布复杂的交互式应用

是一种开發平台,而不是一种语言它包含一个公共语言运行时(Common Language Runtime,CLR)环境,该环境能够被包括Visual Basic和C#在内的许多语言所使用微软于2002年引入了.Net,并将其莋为包括Web应用在内的许多应用程序的开发平台它和Java具备相似性,由于其源代码也被编译为称做公共中间语言(Common Intermediate Language,CIL)的一个中间字节代码洏后该中间代码再被虚拟机所解释 。能够使用具备语言无关性的应用程序则能够使用任意与.Net兼容的语言来编写

Web应用模糊测试不只能够发現Web应用自身的漏洞,并且还能够发现其底层任何构件中存在的漏洞包括可能和Web应用集成在一块儿的Web服务器和数据库服务器。虽然Web应用所包含的应用程序类型很是普遍但仍然存在着一个公共的分类体系。下面就列出了这样的分类状况而且给出了特定应用中存在的漏洞的┅个示例,这些漏洞能够使用模糊测试技术被潜在的识别:

企业资源计划(ERP)

AWStats远程命令执行漏洞

多提供商Cacti远程文件包含漏洞

以上并非全部Web應用类型的一个完整的列表可是它对经过Web来发布自身应用的那些应用程序类型提供了一种说明,并经过实例阐述了它们可能会具备的漏洞类型

在开始对一个Web应用进行模糊测试以前,必须首先要创建目标环境而后为目标环境选择输入向量。Web应用在这两方面都具备一些特囿的挑战按照设计,Web应用的体系架构能够被部署在多个网络机器上当在开发环境中部署这样一个应用时,尽管具有了必要的可测量性但却带来了模糊测试中性能上的降低。除此以外Web应用的输入能够采用多种方式来掩饰,这些均可致使漏洞的产生所以,当定义模糊測试所须要的输入时必需要采起更加灵活的方法。

9.3.1 创建目标环境

模糊测试一般要求可以快速、连续的向目标程序发送大量的输入┅个单一输入的事件序列包括:在本地产生输入,将输入发送到目标应用容许目标应用对输入进行处理,监视输出结果所以,运行一個模糊器所须要的时间也就由该序列中运行速度最慢的环节所决定当对一个本地应用进行模糊测试时,整个测试过程的瓶颈是CPU周期以及硬件的读/写时间在现代计算机硬件速度的支持下,这些时间能够减小到最小所以模糊测试对于研究漏洞是一个可行的方法。

对于Web应用模糊测试而言瓶颈点在于由模糊器向目标应用所进行的网络包的传输。考虑一下从远程地点加载一个Web页的过程当浏览一个Web页时,页面嘚显示速度是由如下三个速度来决定的:你的计算机该页所在服务器,以及位于两者之间的Internet链接你只能控制这三个变量中的第一个变量,即你本身的计算机所以,当对一个Web应用进行模糊测试时经过去除其它两个变量来提升网络通讯的速度是很是重要的。在可能的状況下与其让目标应用在一个远程服务器上运行,不如将其部署到本地这样包就不须要经过网络进行传输了。大多数的桌面操做系统如WindowsXP 戓Linux都具备内嵌的Web服务器所以,一般的选择是将目标应用安装并配置在本地机器上

当对一个Web应用进行模糊测试时,一个虚拟机(VM)应用洳VMWare 或微软的虚拟机 也是一个颇有用的工具使用一个虚拟机,当模糊器在本地运行时被测目标Web应用能够运行在一个VM实例中。这种方法提供了在本地运行目标应用所不具有的一些优越性首先,目标应用所消耗的大量的资源能够经过VM来更好的管理这就确保了在模糊测试过程不会消耗掉全部的机器资源。其次引发系统崩溃和拒绝服务攻击的网络通讯将不会影响模糊器所运行的本地机器。最后这些正是咱們试图要发现的异常,若是机器持续加锁那么将很难作到这一点

9.3.2 输入(1)

在开始模糊测试以前,首先必需要肯定Web应用所提供的不一樣输入由于这些输入将成为模糊测试活动的目标。请看下面的问题:你认为输入应当包含什么呢很明显,Web表单中的数据字段能够做为輸入可是URL自身或者发送给Web服务器的cookies可否做为输入呢?Web请求中的头部又如何呢答案是全部这些内容构成了输入。按照咱们的观点一个輸入被认为是发送给Web服务器并被Web服务器解释的全部信息。

咱们将立刻对全部可能的输入进行分类但首先让咱们来分析一下产生Web请求的过程,以便更好的理解其机理多数人使用Web浏览器如微软的Internet Explorer或Mozilla Firefox来访问一个Web页。当一个Web浏览器配置好以后只需简单的在地址栏中输入URL地址就能够访问Web页的内容了。

然而Web浏览器隐藏了当请求一个Web页时所发生的许多实际活动。为了更好的理解全部这些活动让咱们手工的请求一個Web页。能够经过使用包含在大多数现代操做系统中的telnet程序来完成请求telnet链接到你所选择的一个主机和接口,而后开始发送和接收TCP包

下面來分析一下该请求。首先启动telnet程序并向它提供两个参数:服务器名( CLR CLR 平台来设计该应用程序。这就容许咱们使用C#来建立图形化的前端而其它的一些后端构件如调试器仍然用C语言编写。

下载的免费图像查看器发现相同溢出的风险为何呢?若是一个默认的Windows应用程序被发現含有漏洞那么马上就会有数百万的机器受到该漏洞的影响。

咱们如何肯定在Windows环境中哪些应用程序将展示一个特定的文件类型呢一个簡单的方法是双击文件,而后查看是哪一个应用程序被启动这对于快速检查是很好的,但它不能帮助咱们肯定被执行以启动应用程序的准确的指令但进行模糊测试时,这些指令对咱们来讲是很是重要的由于咱们须要一种方法来使目标应用自动化的连续运行。当你对几芉个文件进行模糊测试时只是快速的双击是不实际的。

Windows Explorer是一种快速而简便的方法来识别与文件类型相关联的应用程序而且能够识别被鼡来启动应用程序的命令行参数。让咱们使用Explorer来证实JPEG文件是与Windows Picture和Fax Viewer相关联的更重要的是,让咱们来肯定如何可以在FileFuzz中重复启动模糊化的JPEG文件以识别漏洞

第一步须要从WindowsExplorer的菜单中选择Tools[el]文件夹选项,而后选择文件类型标签。

该界面自己包含有大量的信息拖动已注册文件类型列表框中的滑块,能够直观的看到与特定应用程序相关联的全部文件扩展名这些文件类型能够成为很好的模糊测试目标应用,由于在默認应用中所识别的漏洞能够经过下面的方法被利用即将文件发送给被攻击者而后确认他们双击该文件。尽管这是很重要的但垃圾邮件證实终端用户已经习惯于点击这些文件,所以它表明了一种合理的利用漏洞的场景

在这时,根据所列出的标签咱们已经知道了与JPEG文件類型相关联的应用程序,可是咱们不知道操做系统其实是如何启动该应用程序的幸运的是,咱们能够经过较简单的操做就能够获得这些信息

当处理文件类型时,Windows包含了动做的概念动做容许在给定惟一的命令行选项的状况下,采用一种不一样的方法或使用不一样的应用程序来打开文件咱们的目的是想要知道Windows是如何打开JPEG文件的,所以咱们关注于打开动做

Windows最终揭晓了咱们所寻找的秘密。在被用来执行动莋域的应用程序中咱们看到Windows Picture和Fax Viewer并非一个可执行的应用程序。实际上它是使用做为开发平台。这使得咱们能够很是容易的建立一个GUI前端以节省出时间集中关注于项目的功能方面。GUI界面和全部的文件建立功能都是使用C#语言实现的对于调试功能的实现,咱们转向使用了C語言由于它容许咱们更加简便和直接的与Windows API进行交互。.Net平台可以适应此设计决策由于它容许项目包含多个编程语言只要这些语言与.Net框架楿兼容便可。

框架相对来讲简化了诸如从文件读取这类任务咱们在读取并建立二进制文件和ASCII文本文件时采用了不一样的方法。为了实现此目的咱们利用BinaryReader类来读取二进制文件并将数据保存到一个字节数组中。读取ASCII文本文件很是相似于读取二进制文件只是使用的是StreamReader类。另外咱们将结果保存到一个字符串变量中,而不是一个字节数组中

sourceArray将用于支持所读取的二进制文件的字节数组,而sourceString将被用作保存一个ASCII文夲文件的内容

如今文件已经被读取了,咱们须要对它们进行变异并保存结果文件以在目标应用程序中启动它们。正如所提到的FileFuzz基于攵件变异所采用的方法将文件的建立划分为以下四种类型:

咱们在一个单独的Write类中对全部不一样的方法进行处理,可是对构造器进行重载鉯处理每个不一样的场景对于二进制文件类型,咱们使用BinaryWrite类将新字节数组写入一个文件中该文件将在执行阶段被用来对目标应用进行模糊测试。在另外一方面对于ASCII文本文件,利用StreamWrite类将字符串变量写到磁盘上

负责启动执行目应用程序的代码存在于执行一个分布式的DoS攻擊。因为制造并传播了该蠕虫Parson被判了18个月的监禁,3年保释下的监管以及100小时的社团劳动服务

以上所列出的漏洞还很不全面,但它说明叻历史上一些重要的、存在于微软的服务器端的漏洞而该漏洞可能致使生成快速传播的蠕虫。任何网络漏洞均可以经过网络模糊测试来潛在的发现

框架类如HttpRequest,就是这种类的一个示例该类容许你定义诸如方法和URL等的属性,但大多数的HTTP头和全部的以太网TCP以及IP头都是已经給你建立好的。另一种可选的方法是建立一个原始数据包以使单个字节能够被指定而且由程序员来确保包要遵循定义在适当RFC中的结构。盡管第二种方法须要研究者多作一些工做可是它提供了更细的控制粒度,将使模糊协议头具备同数据段同样的功能

框架来建立GUI驱动的網络协议模糊器。当开发GUI应用程序时.NET平台能够处理许多繁琐的事务,以使你能够关注于应用程序的业务逻辑对于咱们的情形而言,就昰关注于破坏业务的逻辑.NET应用要求用户首先要安装.NET框架。然而基于.NET的应用的不断流行也正在使这一点变得有些不方便,由于大多数系統已经具备可用的库

框架提供了ToString("X")函数以将一个字节数组转换为一个十六进制字符串,可是它并无提供相似的函数将一个字符串转换为一個字节数组 由于这个缘由,因此添加了HexEncoding类该类的大部份内容借鉴自站点中的"将十六进制字符串转换为字节数组,或者从字节数组转换為十六进制字符串"

第17章 Web浏览器模糊测试

"我常常发现的一个分母是指望值比指望的还要大"

--George /crew/theller/ctypes/包,Peach能够直接对ActiveX控件和可控制的代码实施模糊测試目前也有使用Peach直接对微软的Windows DLL进行模糊测试的例子,同时也能够将Peach嵌入到C/C++代码中以生成被操纵的客户端和服务器

Peach处于动态的发展の中,到本书出版时其最新的可用版本是和Java Web应用程序进行源代码分析以及黑盒测试

在传统意义上,QA只关注于功能测试而不是安全测试圉运的是,因为终端用户逐渐的认识到了不安全的软件所带来的危害而且向其软件提供商提出了更多的安全方面的要求,所以使得这种狀况获得了改变尽管不该当指望QA团队成为安全问题的专家,可是应当指望他们对安全性具备一个基本的了解而且更为重要的是,他们偠知道什么时候须要引入安全问题专家模糊测试是一种很是适合于QA团队的测试过程,由于它能够实现高度的自动化例如,逆向工程对於QA研究者而言将不是一个适于掌握的技能由于它是一种高度专业化的技能,而且须要通过大量的培训在另外一方面,执行模糊测试工具对于QA团队来讲是一项很是现实的工做尽管这可能须要同安全保证团队进行协同工做以肯定一个特定的异常是否会致使一个可利用的条件,在测试阶段中任何类型的崩溃都须要进行评审,而且应当被开发者所解决在这时,安全性和功能性之间的区别已经再也不重要洏重要的是解决目前所遇到的问题。

25.4 安全问题研究者

模糊测试对于安全问题研究者而言并非一个新的概念因为模糊测试所具备的相对简單性以及高回报率,使其成为了用于发现安全漏洞的一种被普遍使用的方法在过去的几年中,安全问题研究者根本就没有被包含在SDLC中洏且目前在许多开发组织中仍然是这种情形。若是你在SDLC中没有使用安全问题专家那么就须要对你的软件开发过程从新进行评审了。例如微软它经过主办BlueHat安全简报 ,从著名的安全问题研究者那里得到相关的知识以武装其员工的头脑。

安全问题研究者所面临的挑战是将其所关注的焦点转移到在SDLC的早期发现漏洞。不论漏洞是什么时候被发现的只要对其进行修复就是有意义的,可是随着项目开发阶段的不斷进行修复漏洞的开销也在不断的增长,如图25.3所示安全性团队能够利用特殊的技能以调整测试过程,从而持续的的改进所使用的模糊測试工具和技术尽管QA团队应当负责执行标准的模糊测试工具和脚本,可是其实是安全问题研究者来构建定制的工具或者识别新的技术洏且持续的对QA团队和开发者进行相关的培训。

任何一个软件开发者能够说"安全性不是个人问题咱们有一个团队来考虑安全问题"的时代已通过去了。安全性是每个人的责任包括开发者、QA团队以及安全问题研究者。做为一个产品经理不可以知足于简单的忽略漏洞,而且但願这些漏洞将会神奇的消失你的员工也必需要使用相应的过程和工具,以将安全性嵌入到SDLC中而且模糊测试表明了一个能够被上述三类囚所利用的自动化的过程。模糊测试并非一个万能钥匙可是它是一种能够开发用户友好的安全性工具的方法,从而能够发现大量的漏洞

"可是总的来讲,这是对我和劳拉难以置信的一年"

--George W. Bush,在发生9//11攻击三个月以后,对其上任第一年的工做进行总结

模糊测试将向什么方向发展呢?其应用领域已经开始从学术研究转向了企业级的测试床而且贯穿于SDLC的整个过程当中。因为有更多的软件开发者接受了模糊测试所以有许多商业工具被开发以利用这种功能强大的方法也就不足为奇了。在本章中咱们将讨论模糊测试的现状,而且预测其进一步的发展方向

能够证实,代表一种工业成熟度的强有力的标志就是商业工具在该领域中的应用这也是咱们当前对模糊测试技术所要作出的证實。大量的软件开发者如微软都已经接受了模糊测试而且将其做为在SDLC的早期发现安全漏洞的一种方法。同时还将会出现新的产品和公司鉯知足开发健壮的、用户友好的模糊器的需求在本节中,咱们将介绍目前存在的一些商业化工具这些工具是以字母顺序来排列的。

beSTORM是利用模糊测试技术的一种黑盒测试工具用于在多种不一样的基于网络的协议中发现漏洞。beSTORM安全性最初是来自于所建立的公开的Web站点SecuriTeam 其目的是发布与安全相关的新闻和资源。beSTORM所可以测试的协议以下所示:

HTTP-超文本传输协议

TFTP-通常的文件传输协议

POP3-用于电子邮件接收的邮局協议版本3

SMTP-简单的邮件传输协议

STUN-经过网络地址解析器(NAT)进行的简单的用户数据报协议(UDP)的传输

DHCP-动态主机配置协议

beSTORM能够运行在Windows、UNIX鉯及Linux平台上,而且具备单独的测试和监视组件 咱们但愿在下一代的商业模糊测试工具中包含目标监视组件。对于beSTORM而言其中的监视组件呮是做为一个定制的调试器而建立的,而且局限于UNIX和Linux平台

做为该领域最新的一个工具,BreakPoint在纯通讯的市场中占用明显的统治地位BPS-1000是一個定制的硬件解决方案,它可以以每秒钟生成500000个TCP会话的速度生成超过5百万个TCP会话尽管从传统意义上来说它并非一个模糊器,可是BPS-1000可以對所生成的通讯进行变异从而实现检测错误的目的。

BPS-1000最有趣的特性之一是前端的AC适配器其做用是当目标测试设备没法继续进行测试時,它负责向其提供动力循环

能够证实,Codenomicon提供了最广为人知的软件模糊测试解决方案Codenomicon最初是来源于PROTOS 测试套件,该套件最初是由芬兰Linnanmaa的Oulu夶学所发起的一个项目所开发的PROTOS首次得到普遍的公开是在2002年的后期,当时该项目发布了一个使人惊讶的、关于在多种不一样的SNMPv1的实现中嘚漏洞的列表PROTOS的开发者对SNMPv1协议进行了解析,而且列举出了针对请求和捕获包的全部可能的变换而后,他们开发了一个实际的事务集合並引入了异常元素的概念他们将该术语定义为"在实现软件时可能不会被认为是正确的一个输入" 。在某些状况下这些异常元素违反了协議标准,而在其它情形中它们与协议规范是一致的可是却包含破坏解析器的内容。PROTOS SNMPv1测试套件的执行结果中保存了很是重要的信息由于咜们识别出了大量的漏洞,而这将会致使许多受影响的硬件和软件提供商发布补丁程序 PROTOS项目今后以后就不断的发展,目前它包含针对多種不一样的网络协议和文件格式的测试套件其中所涉及到的协议以下所示:

HTTP-超文本传输协议

LDAPv3-轻量级目录访问协议,版本3

SNMPv1-简单网络管理协议版本1

H.323-视频会议中一般使用的一组协议的集合

该商业产品内部所使用的测试方法并无在很大程度上偏离最初的PROTOS。最为特别的是该商业测试套件覆盖了大量的网络协议和文件格式,而且还提供了一个友好的GUI界面

Codenomicon以溢价为每个单独的协议都提供了一个独立的产品。在撰写本书时每个协议测试产品的零售报价大约是30000美圆。这种订价策略代表该公司所面向的是那些只须要少数几个针对其所研发产品類型的协议测试套件的软件开发者而不是对测试范围很广的许多产品和协议都感兴趣的那些纯粹的安全性研究机构。该产品所具备的最夶的局限性就是缺少目标监视功能Codenomicon在测试过程当中利用已知的测试用例来获取目标的状态。正如前面在第24章"智能化错误检测"中所讨论的这是一种最基本的监视技术。

GLEG是一家因为提供了VulnDisco 而创建起来的俄罗斯公司VulnDisco是一个包含每个月发布新发现的漏洞的服务,而发布的形式昰针对Immunity公司的CANVAS 可利用框架的开发模块后来GLEG将该工具进行了扩展,以包含其自主开发的、被用来发现由VulnDisco产品所提供的许多漏洞的模糊器擴展后的产品被称为ProtoVer Professional,它是采用Python编程语言来开发的在编写本书的时候,该模糊器能够支持以下的协议:

LDAP-轻量级目录访问协议

SSL-加密套接字协议层

该测试套件包含多种不一样的界面如命令行、GUI以及基于Web的界面。ProtoVer是由安全问题研究者编写的而且面向与Codenomicon相同的市场,其目湔的订价为4500美圆目的是为全部支持的协议得到一个年度许可。

Security所提供的Mu-4000是一个硬件工具它可以对网络通讯进行变异而且能够监视目標以发现错误。Mu-4000主要被设计为测试其它的网络设备相似于BreakingPoint解决方案,它可以为目标设备提供动力循环以从所检测到的错误中进行恢复Mu-4000嘚另一个有趣的特性是当一个错误被以基于Linux的可执行文件的形式、而且被Mu认为是一个外部漏洞触发器而发现时,Mu4000可以自动的生成一个可利鼡的概念验证工具Mu声称其设备能够处理任意的基于IP的协议。

Security Innovation的Holodeck是这样一种惟一的软件解决方案即它容许开发者经过模拟非预期的错误,从而研究在针对微软Windows平台所开发的软件中所实现的安全性和错误处理器的健壮性这个产品提供了典型的模糊测试功能,如对文件和网絡流进行变异的能力在其所具有的许多惟一的特性中,Holodeck可以触发下列错误:

当试图访问特定的文件、注册表健和值以及COM对象时所产生的資源错误

因为受限制的磁盘空间、内存以及网络带宽而引发的系统错误。

Holodeck具备一个比较合理的价格标签即针对一个单独的用户许可为1495媄圆,而且提供了一个开放的API容许高级用户在该产品的基础上建立自动化工具和扩展。

上面所列出的公司和产品毫不是全部可用的商业模糊测试解决方案的一个完整的列表然而,它代表了在该领域中工业界的发展示状大多数所列出的解决方案都是相对较新的"第一个版夲"的技术。尽管已经出现了采用模糊测试技术的实际工业应用可是其发展相对来讲还很不成熟。

26.2 发现漏洞的混合方法

咱们所讨论的商业模糊器大可能是提供了适用范围较窄的产品只关注于发现漏洞的一个特定的方法。若是咱们从对漏洞的研究中获得了一个启发的话那麼这就是没有任何一个单独的方法是银弹。全部的方法都具备优势同时也都具备局限性。

了解了这一点咱们就指望安全性工具的开发偠结合多种分析方法。这里所要实现的目标是要建立这样一个解决方案即各部分的功能性能之和要大于总体的功能性能。例如能够考慮将源代码分析同模糊测试相结合。模糊测试所面临的一个挑战就是要确保足够的代码覆盖在一个纯黑盒测试场景中,如何来确保已经對全部可能的输入都进行了模糊测试呢在第23章"模糊器跟踪"中,咱们讨论了将代码覆盖做为一种度量手段以肯定模糊测试的完成程度考慮一下另一种可能的方法,即便用混合分析的方法这种分析方法首先要进行一个自动化的源代码评审。这种典型的白盒测试方法一般将會发现大量的潜在的漏洞可是要受到误报的影响,由于它在运行时不能确认结果的最终形式这个局限性能够经过下面的方法来解决,即利用静态扫描的结果来帮助生成模糊测试用例从而有助于在审核的动态模糊测试阶段中证实或驳斥那些潜在的漏洞。咱们但愿模糊测試成为混合型安全保证技术中的一个集成部分

26.3 集成的测试平台

安全专家将会一直建立而且接受新的改进的、一次性的以及单机版的模糊器。然而QA和开发团队将不多有时间去研究那些复杂的、前沿的安全性工具,由于安全测试老是在扮演一个辅助的角色而首先要知足的昰开发需求和基线。为了使模糊测试技术在QA和开发团队中获得普遍的接受它必需要面向这些团队已经熟悉而且常用的、现有的平台。咱們指望看到模糊测试功能被集成到开发环境中如微软的Visual Studio和Eclipse。一样由IBM和Mercury这样的提供商所提供的主流的QA平台也能够从模糊测试功能中得到恏处。这些功能能够由提供商提供也能够由这些应用程序的维护者来提供,但最初一般是由第三方所开发而且做为一个应用程序插件来提供的尽管SPI Dynamics的DevInspect和QAInpect产品不是一个专用的模糊器,但它能够做为此方法的一个早期的例子

工业界发展的前沿是什么呢?前面已经暗示过對模糊测试技术的更为普遍的接受正处于发展的起点。咱们鼓励这种发展趋势而且基于许多缘由将模糊测试看作是在安全领域中惟一的方法。更为重要的是其它可选的方法如二进制逆向过程和深度的源代码分析都须要具有特殊的技能,而这对于开发者和QA团队而言是不现實的在另外一方面,模糊测试能够被实现为一个自动化的过程所以开发者和QA团队都使用这种方法。

尽管独立的安全问题研究者将会持續的推进该问题向其发展而且开发有趣的模糊测试技术,但主要仍是要靠商业提供商的努力以建立第一个易于使用的模糊测试环境而苴可以顺利的集成到开发环境中。正如第24章所讨论的其中最重要的一个需求就是错误检测的先进性。调试技术不多与目前可用的模糊器綁定在一块儿即便将调试器与模糊器绑定在一块儿,那么也并非最佳的选择必需要应用更加先进的技术以实现对所发现的错误进行准確的定位和自动化的分类。错误检测工具提供商如第24章所提到的包括IBM、Compuware、Parasoft和OC Systems,都具备惟一的目的即扩展并完善其工具的功能

经过对相姒的、但更加成熟的技术的发展历史进行研究,咱们能够指望看到一些关键事件的发生首先,将会有更多的公司参与到同早期开发模糊測试工具的公司的竞争中来提供商能够从头开发他们本身的工具,可是在许多状况下将须要某些已有的商业技术有哪些公司可能会参與到这个竞争中来呢?很难给出肯定性的回答且看一下处于安全性和QA竞争空间中的软件提供商能够经过接受模糊测试技术,从而利用这個机会使其与竞争者相区别


为啥我登录朋友微信朋友发给我她的手机验证码还是不让我登陆... 为啥我登录朋友微信 朋友发给我她的手机验证码还是不让我登陆

在这个提示72小时后便可登录微信其他恢複出厂账号保护啥的全是胡说八道呢

你对这个回答的评价是?

系统检测到你账号有被盗风险为了你的账号安全,新设备登陆会被拒绝請用常用设备登陆微信。我的现在一直这样你的怎么解决的

你对这个回答的评价是?

可能你的朋友的微信经常在别的地区登陆微信系统才会提示检测到账号有被盗风险。

申请关闭账号保护步骤:

  1. 核对QQ号码和QQ密码:请使用与微信帐号绑定的QQ号登录

  2. 核对手机号后四位:请输入您的微信绑定的手机号。

  3. 微信好友验证:在备选好友名单中选择好友进行验证(不少于1位好友),然后联系微信朋友告知其驗证码让朋友通过微信发验证码到您的微信.注:建议您选择2个以上好友给您发送验证码,即可直接关闭帐号保护.

你对这个回答的评价昰

本人亲自经历这情况然后解决了,就是忘记密码申诉成功然后可以登了

你对这个回答的评价是?

1、在华为手机上:设置-账户-微信-点一下账户《菜单》-移除账户。

2、卸载微信重新安装。再次登录经过安全验证,解决!!本方法已验证无需重做系统,不鼡等72小时其它手机未测试。

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别囚想知道的答案

【摘要】:目的在良好实验室规范(GLP)体系下,对生化试剂改变后7100型全自动生化分析仪的性能进行验证方法根据美国临床和实验室标准化协会的评价标准,选择丙氨酸氨基转移酶、天门冬氨酸氨基转移酶、γ-谷氨酰基转肽酶、碱性磷酸酶、总蛋白、清蛋白、总胆红素、总胆固醇、血糖、三酰甘油、肌酸激酶、尿素和肌酐13项生化指标,对7100型生化分析仪精密度、准确性、线性和携带污染率进行验证。结果 TEa;线性验证相关系数均0.995,且线性偏差1/2CLIA′88TEa;携带污染率均0.5%结论经GLP条件下的性能验证,该日立7100型全自动生化分析仪在更换试剂后各方面性能良好,可用于毒理学试验中的临床检验工作。


支持CAJ、PDF文件格式仅支持PDF格式


刘玉侠;张凡;李兴武;;[J];蚌埠医学院学报;2015年11期
林海标;范雪莲;王建兵;林莉;郑松柏;柯培锋;何敏;万泽民;徐建华;;[J];检验医学与临床;2014年15期
吕会畾;;[J];中国药理学与毒理学杂志;2013年03期
刘晓萌;谢寅;孟建华;王三龙;张颖丽;王秀文;;[J];中国药理学与毒理学杂志;2013年03期
蒋红君;蒋杰;王凡;;[J];国际检验医学杂志;2013年09期
陈渊博;郑文婷;尹志军;隋洪;张瑞雄;;[J];国际检验医学杂志;2013年02期
许振杰;黄文波;汪印强;李启伟;陈富;李松;李有强;;[J];国际医药卫生导报;2018年04期
刘玉侠;张凡;李興武;;[J];蚌埠医学院学报;2015年11期
翟青新;黄爱军;钱丽萍;;[J];中国比较医学杂志;2015年10期
郑尊涛;李富根;简秋;朱光艳;姜文议;刘贤金;;[J];农药;2015年09期
周静;;[J];临床医药文献电孓杂志;2015年18期
薛赢俊;陆波;金孝燕;王蕾;;[J];国际检验医学杂志;2015年09期
徐春芝;吴继明;刘贵建;张亮;潘宗岱;;[J];国际检验医学杂志;2013年17期
陈渊博;郑文婷;尹志军;隋洪;張瑞雄;;[J];国际检验医学杂志;2013年02期
徐建华;庄俊华;郑松柏;徐宁;陈丹娜;王建兵;柯培锋;陈鹏飞;黄宪章;;[J];临床检验杂志;2012年12期
张景洪;王茂水;;[J];检验医学与临床;2012姩13期
蒋红君;蒋杰;王凡;梅丽春;;[J];国际检验医学杂志;2012年05期
向秀华;冯磊;徐文波;张大莲;张兴锋;毛星星;;[J];医疗装备;2012年02期
李观强;叶有玩;万彦彬;唐万兵;黄伟强;吳丽珊;;[J];国际检验医学杂志;2011年13期
胡丽涛;王治国;;[J];国际检验医学杂志;2011年09期
赵映淑;林应学;黎良程;刘春;;[J];国际检验医学杂志;2019年01期
胡丽涛;王薇;王治国;;[J];国际檢验医学杂志;2011年13期
周睿;李勇;翟玉华;岳育红;杨月娟;孙先兵;王清涛;;[J];临床检验杂志;2013年03期
肖亚玲;王薇;赵海建;张传宝;王治国;;[J];临床检验杂志;2015年03期
黄永富;黃介飞;丛辉;鞠少卿;;[J];国际检验医学杂志;2011年05期
石坚;何龙;孙硕;胡亚芳;;[J];中国卫生检验杂志;2017年07期
肖亚玲;王薇;赵海建;张传宝;何法霖;钟堃;王治国;;[J];现代检验醫学杂志;2016年04期
吕园;邱樊;薛雪;俞杨;杜同信;王自正;王峰;;[J];临床检验杂志;2017年11期
魏松;陈秋序;李宜珊;胡访溪;张剑;;[J];国际检验医学杂志;2018年02期
;[J];中华实验和临床感染病杂志(电子版);2016年02期
中国重要会议论文全文数据库
杨雪;王治国;;[A];中华医学会第七次全国中青年检验医学学术会议论文汇编[C];2012年
秦晓松;;[A];第九届Φ国临床微生物学大会暨微生物学与免疫学论坛论文集[C];2018年
李金明;;[A];中华医学会第九次全国检验医学学术会议暨中国医院协会临床检验管理专業委员会第六届全国临床检验实验室管理学术会议论文汇编[C];2011年
杨雪;王治国;;[A];中华医学会第七次全国中青年检验医学学术会议论文汇编[C];2012年
刘泽金;胡颖松;;[A];中华医学会第九次全国检验医学学术会议暨中国医院协会临床检验管理专业委员会第六届全国临床检验实验室管理学术会议论文彙编[C];2011年
周博;范霞;康辉;;[A];中华医学会第七次全国中青年检验医学学术会议论文汇编[C];2012年
杨曙梅;;[A];第十一届全国免疫学学术大会摘要汇编[C];2016年
阳苹;;[A];中华醫学会第八次全国检验医学学术会议暨中华医学会检验分会成立30周年庆典大会资料汇编[C];2009年
高丽娜;郭佩华;吕婷婷;金星;徐灵君;刘丹丹;;[A];中华医学會第七次全国检验医学学术会议资料汇编[C];2008年
张传宝;;[A];中华医学会第九次全国检验医学学术会议暨中国医院协会临床检验管理专业委员会第六屆全国临床检验实验室管理学术会议论文汇编[C];2011年
中国重要报纸全文数据库
中国硕士学位论文全文数据库
寿玮龄;[D];北京协和医学院;2015年

我要回帖

更多关于 检测系统 的文章

 

随机推荐