代码审计学习笔记
什么是代码审计?
由具备丰富的编码经验并对安全编码及应用安全具有深刻理解的安全服务人员,根据一定的编码规范和标准,针对应用程序源代码,从结构、脆弱性以及缺陷等方面进行审查,最终输出代码审计报告,完善应用程序,提升自身安全水平。
怎么做代码审计?
从发现安全漏洞维度出发:
- 基础知识:运行环境搭建、熟悉开发语言、各类函数应用
- 漏洞原理:了解常用漏洞产生成因(SQL注入、XSS、上传漏洞、SSRF、代码执行、CSRF等)
- 漏洞调试:断点输出、变量跟踪、漏洞关键函数
- 高级应用:二次注入、截断注入、条件竞争、二次攻击、黑白盒Fuzz等
- PoC编写:数据包构造、语言类型
代码审计的好处
- 发现更多”隐蔽”的安全漏洞
- 企业合规性要求
- 提升企业整体安全水平
- 提升企业安全开发编码规范
需要的能力
- 联想能力:从代码逻辑联想到潜在漏洞
- 开发能力:理解代码结构和业务逻辑
- 寻找答案的能力:快速定位问题根源
- 抓住重点的能力:能够忽略无效信息
审计思路
方法一:敏感函数逆推
通过扫描器扫描出敏感函数,然后逆推调用链:
# PHP常见敏感函数
SQL注入:mysql_query、mysqli_query、PDO::query
XSS:echo、print、print_r
文件上传:move_uploaded_file
文件包含:include、require
命令执行:system、exec、passthru、shell_exec、popen
代码执行:eval、assert、call_user_func、create_function
反序列化:unserialize
文件操作:file_get_contents、file_put_contents、curl_exec
# Java常见敏感函数
SQL注入:Statement.execute
命令执行:Runtime.exec、ProcessBuilder
反序列化:ObjectInputStream.readObject
XXE:DocumentBuilder.parse、SAXReader.read
SSRF:URL.openConnection、HttpClient
方法二:功能点分析
访问网站,根据网站结构推测可能出现的问题:
- 黑盒测试(功能点)+ 白盒审计(对应源码)= 快速定位
- 通读全文,理解整体架构
审计技巧
- 找入口点:用户可控的输入(GET/POST参数、Cookie、Header等)
- 跟踪数据流:数据是否经过过滤、转义
- 看输出点:数据是否输出到危险函数
工具推荐
- Seay代码审计工具:自动扫描敏感函数
- PHPStorm + Xdebug:断点调试,跟踪数据流
- BurpSuite:抓包配合测试
总结
代码审计是白盒测试的重要手段,通过阅读源代码发现安全漏洞。相比渗透测试(黑盒),代码审计能发现更多隐蔽的漏洞,但需要更强的代码理解能力。
本文为个人学习笔记,如有错误欢迎指正。
