程序时所涉及的几个步骤。
第一个是准确计算出你想要模糊什么样的应用。
接下来,你需要生成的模糊化输入。
在那之后,你需要找到一种方式来获得这些输入的应用程序。
最后,你需要一种方法来监测被测试的应用程序,为可能发生的任何故障.识别应用程序和数据类型到模糊的过程可能是最重要的一步, 涉及一点点运气。
在第 1 章中,您了解了攻击者有很多的方法可以将数据发送到 iOS 设备。
你有很多的选择,当选择进行模糊的应用程序。
你就必须判断决定你想模糊什么类型的输入。
例如,MobileSafari 接受许多类型的输入。
您可以选择模糊 mov 文件中的 MobileSafari 或其它一些更确切的,像在MobileSafari mov 文件元素中的标题头。
一般的经验法则是比较模糊的应用程序和协议,也有更好的。
此外,它有助于长时间的写入目标程序(如 QuickTime)和/或找到遗留的安全问题。
mutation-based “dumb”模糊测试一旦你知道你想挖掘的,你需要启动模糊测试输入,或测试用例。
基本上,您有两种方法可以做到这一点。
一个被称为 mutation-based 的模糊测试,或者叫“dumb”模糊测试。
这是类型的模糊,只需要几分钟建立,并得到运行,但通常无法找到深藏的 bug。
它的工作方式很简单。
以一个有效的输入到应用程序。
这可能是一个 mov 文件或一些网络输入,像一个HTTP 会话,或者甚至只是一组命令行参数。
然后开始随机变化,这是有效的输入。
例如GET /index.html HTTP/1.0可能变异的字符串GEEEEEEEEEEEEEET /index.html HTTP/1.0GET / / / / / / / / / / / / / / / //index.html HTTP/1.0GET /index................................html HTTP/1.0GET /index.htmllllllllllllllllllllllllllllllllllllllll HTTP/1.0GET /index.html HTTP/1.00000000000000000等等如果程序员对这些字段的大小不做任何正确的设置这就有可能引发某种故障.变量随机化这样做是很好你不一定需要知道 HTTP 协议的运作方式是什么样. 但是,您可能已经猜到,大多数 Web 服务器执行检查数据会很快拒绝大部分的输入。
这导致输入长生了一个微妙的问题。
你必须更改有效的输入来发现 bug,但如果变化过大,输入将很快被拒绝这意味着你必须做出足够的改变造成问题,但还不足以使数据无效。
本章演示了对 MobileSafari 的mutation-based 模糊测试Generation-Based智能的模糊测试许多研究者认为有较多的协议知识,你可以建立你的模糊化输入,你有更好的机会,在发现漏洞。
其实还有另一种方法:构建基于“智能”的模糊测试输入。
基于代的起毛不从一个特别有效的输入,而是从协议规范的方式描述了这些类型的输入。
因此,对于前面的例子,而不是启动一个名为 index.html 的文件在 Web 服务器上的一个特定的请求, 该方法开始从 RFC的 HTTP(www.ietf.org/rfc/rfc2616.txt)。
在这个文件的第 5 条,它描述了一个看起来像 HTTP消息:HTTP-message Request Response HTTP/1.1 messagesIt later defines what form a Request must take: Request Request-Line Section 5.1 general-header Section 4.5 request-header Section 5.3 entity-header CRLF Section 7.1 CRLF message-body Section 4.3Digging further you see that Request-Line is specified as follows: Request-Line Method SP Request-URI SP HTTP-Version CRLFwhere Method is defined like this: Method quotOPTIONSquot Section 9.2 quotGETquot Section 9.3 quotHEADquot Section 9.4 quotPOSTquot Section 9.5 quotPUTquot Section 9.6 quotDELETEquot Section 9.7 quotTRACEquot Section 9.8 quotCONNECTquot Section 9.9 extension-method extension-method token这持续相当长的一段时间,但最终的 RFC 指定每一个可能的 HTTP 消息布局。
你可以写一个程序,将创建/有效//畸形/ HTTP 消息,如果程序理解 RFC 规范。
例如,它可以生成一个完全有效的 Request-URI,但要选择一个特别长的方法名。
Generation-Based 模式测试的的缺点是,它需要大量的工作!你必须了解的协议(可能是专有的),有一个程