软件开发培训班 >> 网络技术 >> 网络安全
PHP自动化白盒审计技术与实现 |
|
本文标签:白盒审计 PHP PHP自动化审计 0x05 解决变量的净化和编码 在 实在的审计过程中,一旦发现惊险参数是可控的,我们就会迫 不迭待地去寻觅看程序员有没有对该变量进行有效的过滤或者编码,由此推断是不是存在 漏洞 。 自动化审计中,也是遵照这个思路 。在实现中,首先要对每一个PHP中的安全函数进行统计和配置,在程序 综合时,对每一条数据流信息,都应该进行回溯收集必要的净化和编码信息, 比方: 12345$a = $_GET[a] ; $a = intval($a) ; echo $a ; $a = htmlspecialchars($a) ; mysql_query($a) ; 上面的代码片段看起来有些怪异,但只不过作为演示 使用 。从代码片段 可以看出,变量a 通过了intval和htmlspecialchars两个净化 解决,依据配置文件,我们顺利的收集到了这些信息 。这时,要进行一次回溯, 目标是将目前代码行向上的净化和编码信息进行归并 。 比方在第三行时,变量a的净化信息惟独一条intval,然而第五行时,要求将变量a的净化信息归并,收集为一个list 集中intval和htmlspecialchars, 步骤便是收集到前驱代码中的全部数据流的信息,并进行回溯 。 ![]() 细节 部分是,当消费者同时对同一个变量调用了如base64_encode和base64_decode两个函数,那么这个变量的base64编码会被 肃清 。同样,假如同时进行转义和反转义也要进行 肃清 。然而假如调用顺序不对或者只进行了decode,那么你懂的,相当惊险 。 0x06 变量回溯和污点 综合 1、变量回溯 为了寻觅出全部的惊险sink点的参数(traceSymbol),将向前回溯与目前Block相连的全部的 根本块,具体过程如下: 循环目前 根本块的全部入口边,搜索没有 通过净化的traceSymbol而且搜索 根本块DataFlow属性中,traceSymbol的名字 。 假如一旦找到,那么就替换成映射的symbol,而且将该符号的全部净化信息和编码信息都复制过来 。 而后,追踪会在全部的入口边上进行 。 最终,CFG上不同路径上的 后果会返回 。 当traceSymbol映射到了一个静态字符串、数字等类型的静态对象或者目前的 根本块没有入口边时,算法就 停留 。假如traceSymbol是变量或者数组,就要 审查是不是在超全局数组中 。 2、污点 综合 污点 综合在过程间 综合 解决内置和消费者定义函数过程中开始,假如程序 综合时遇到了敏感的函数调用,则 使用回溯或者从上下文中猎取到惊险参数节点,并开始进行污点 综合 。通俗讲,便是进行惊险参数是不是可能招致 漏洞的 推断 。污点 综合工作在代码TaintAnalyser中进行实现,猎取到惊险参数后,具体步骤如下: 首先,在目前 根本块中寻觅惊险参数的赋值状况,寻觅DataFlow的右边节点中是不是存在消费者输入source, 比方$_GET $_POST等超全局数组 。并 使用不同类型 漏洞 推断的插件类推断这些节点是不是是安全的 。 假如目前 根本块中没有寻觅到source,则进入本文件多 根本块间 综合过程 。首先猎取目前 根本块的全部前驱 根本块,其中前驱 根本块中包括平行 构造(if-else if-else),或者非平行 构造(一般语句) 。并进行惊险变量 综合,假如目前循环的 根本块中没有前驱节点,则 综合算法 完毕 。 假如 根本块间 综合没有找到 漏洞,则进行最终的文件间 综合 。载入目前 根本块之前的包括文件摘要,遍历这些文件摘要做出推断 。 假如上述步骤中,浮现 漏洞,则进入 漏洞报告模块 。不然,系统 接续往下进行代码 综合 。
|