代码审计
检查源代码中的安全缺陷、编码不规范的地方。
通过自动化工具或人工审查的方式,对程序源代码逐条进行检查和分析,发现这些代码缺陷引发的安全问题,并提供修订措施和建议
代码审计的对象包括并不限于JAVA、C、C#、ASP、PHP、JSP、JS
审计包括
前后台分离的运行架构
WEB服务的目录权限
认证会话与应用平台的结合
数据库的配置规范
SQL语句的编写规范
WEB服务的权限配置
对抗爬虫引擎的处理措施
常见高风险漏洞
非边界检查函数可能导致缓冲区溢出漏洞
可能干扰后续检查的缓存区的指针操作
调用类似于exec()、执行管道这类的命令函数,尤其是使用非静态参数时
输入验证,例如SQL中
文件引入功能
对可能与恶意代码链接的库,返回对内部可变数据结构的引用。恶意代码可能会尝试修改结构或保留引用以观察将来的更改
等……
常见低风险漏洞
客户端代码漏洞不影响服务器端(XSS)
用户名枚举
目录遍历(在WEB应用程序中)
常用的代码审计思路
常见的代码审计方式有:根据敏感关键字回溯参数,查询不可控变量,寻找敏感功能点,通读全文
重点关注:输入点、数据流、输出点(例:打开网页来判断输入点,常见输入点登录,搜索,留言,公告的URL)
通过输入点追踪数据流,主要关注是否存在过滤代码
判断文出错函数是否被其它文件调用
审计内容
参数:参数是否安全,参数是否由用户输入,参数是否进行有效校验
参数格式:参数格式是否进行校验,如:JSON流内容是否合法,字节序列是否合法
其它输入内容:输入内容匹配白名单
输出:输出是否限定字段,输出内容是否在允许范围内,输出关键信息是否加密
信道:信道是否加密
权限:是否限定访问内容
数据库:是否存在默认配置,是否限定访问范围
配置文件:配置文件是否处在不可读位置,是否存在默认配置信息
框架:使用三方框架或三方包时,是否调用了存在问题的函数或方法。如Struts的OGNL,MyBatis的#
CVE:是否包含已公布的漏洞代码。如:序列化漏洞
自动化代码审计工具
RIPS开源的一款工具,具有较强的漏洞挖掘能力,PHP的代码审计工具
检测XSS,SQL注入,文件泄露,本地/远程文件包含,远程命令执行等多种漏洞
有5种级别选项用于显示以及辅助调试扫描结果
标记存在漏洞的代码行
对变量可以高亮显示
findBugs开源的java代码审计工具,静态分析工具,更多工具是收费
Bad practice 坏的实践
Correctness 一般的正确性问题(可能导致错误的代码)
Dodgy 危险代码
performance 性能问题
Multithreaded correctness 多线程的正确性问题
Internationalization 国际化问题(国际化编码转码的时候)
其它的自动化工具:C++ —> cppcheck、flawfinder; JS —> eslint、eslint-plugin-security; python—>pylint、bandit、py-find-injection、pyt
2834

被折叠的 条评论
为什么被折叠?



