一般对代码的安全测试都是与一个应用程序进行交互,通过设计输入及观察相应内容两个步骤进行。
但通过审查源码,可以更有效的查出应用程序的问题
1、代码的审查方法
黑盒 及 白盒
黑盒是通过设计输入,监控输出,不了解内部工作机制
白盒需要分析应用程序的内部运作,查阅设计文档,源代码等资料可以更有效的查找出问题。
任何强大的项目都会包含成千上万的代码,所以进行代码审查是一件比较耗时的工作,根据经验,一般我们在审查代码的时候
需要分为以下三种方法
a、从进入点开始跟踪用户向应用程序提交的数据,审查负责处理这些数据的代码
b、在代码中搜索表示存在常见漏洞的签名,并审查这些签名,确定某个漏洞的真实存在
c、对内在危险的代码进行逐行审查,理解逻辑,并确定存在的问题
常见的漏洞签名:
a、跨站点脚本
用户获得的html中,一部分内容是用户可控制的数据,这时候如果某个链接是直接从请求查询的字符串中直接提取的字符串,这时候就会存在跨站点漏洞的危险
b、sql注入
就是简单的sql拼接。
在代码中查询所有sql操作的地方
c、路径遍历
用户的输入未经任何输入确认,或者核实,被传送到一个文件系统api, 这就是路径遍历漏洞的常见签名。 对于允许用户上传下载文件的应用程序功能要进行仔细审查。
d、任意重定向
通过源代码中的签名,可轻易确定各种钓鱼攻击向量
httpresponse.redirect(...) 当重定向中的内容获取的是用户直接输入的内容,未进行任何的处理,就会存在任意定向的问题
代码审核方法大多要求阅读源文件,并从中搜索表示获取用户输入及使用潜在危险的api的模式,为了进行有效的代码审查,最好有一款工具协助,这样效率更高。
source insight