一、审计:
1.1、有源码:
1.二、二进制程序:
1.三、有源码、二进制程序:
1.4.完全黑盒:
二、影响:
2.1、代码语言:
2.2、代码风格:
三、审计思路
3.1.敏感关键词可追溯参数传输
3.2、接口分析
3.3.建模敏感功能点
3.4.全文关键代码
3.5.恢复安全边界
四、小源码
4.1、审计步骤:
五、大源码
5.1、审计步骤:
六、审计工具
6.1、Seay源代码审计系统
6.2、RIPS
一、审计:
1.1、有源码:
通常不包含完整的编译和测试环境,缺乏必要的关键依赖组件,往往无法构建可操作的程序
一般只能通过静态分析进行审计
1.二、二进制程序:
如 APK、EXE、jar 包、IoT 系统固件等
通常通过动态分析和逆向工程进行审计
1.三、有源码、二进制程序:
审计提供了最有利的访问权限,通常是开源软件,包括完整的环境建设和依赖
1.4.完全黑盒:
盲测只能通过外界接口进行(比较常见)
二、影响:
2.1、代码语言:
C/C 这种内存不安全的语言需要更多地关注底层细节
Java、Python 等待内存安全的语言更注重上层逻辑的实现;
2.2、代码风格:
整洁、注释清晰的项目通常比其他项目花更少的时间进行审计
三、审计思路
3.1.敏感关键词可追溯参数传输
大多数漏洞是由函数使用不当引起的
搜索相应的敏感关键词,可以快速挖掘所需的漏洞,定向挖掘,高效、高质量
但由于没有通读代码,对程序整体架构的了解不够深入,在挖掘漏洞时定位和使用需要一些时间,逻辑漏洞的挖掘无法覆盖
3.2、接口分析
找到可控变量及其函数,正向跟踪变量传输过程
数据入口点,如函数参数、环境变量等,寻找可恶意输入触发的安全漏洞
3.3、敏感功能点建模
按功能点分块寻找
文件上传功能、支付功能……
通过行为建模还原模块的抽象行为,并寻找潜在的逻辑和功能漏洞
3.4、全文关键代码
函数集文件:即公共函数文件,通过打开index.php或者一些功能性文件进行寻找
配置文件:一般包含config关键字,会有配置选项、数据库等配置信息
安全过滤文件:一般包含filter、safe、check等关键字
index文件:程序的入口,了解整个程序的架构、运行的流程、包含到的文件
3.5、还原安全边界
通过分析所有安全相关的校验和检查代码
还原开发者或者安全架构师预设的安全边界,从而对还原后安全边界进行进一步审计,构建实际攻击的威胁模型
四、小型源码
代码量一般都不大,相对比较容易找到漏洞
4.1、审计步骤:
(1)输入点:找到各个输入点。
(2)防护措施:找到针对输入的过滤并尝试绕过。
(3)函数漏洞:找到处理输入的函数并查看有无漏洞。
(4)利用:找到漏洞后进行最充分的利用。
五、大型源码
一般都是对CMS型的框架进行审计,主要问题是需要从大量代码中快速定位到漏洞
5.1、审计步骤:
(1)寻找危险函数
(2)向上回溯,寻找可用输入点
(3)绕过针对输入点的过滤
(4)构造触发漏洞
六、审计工具
6.1、Seay源代码审计系统
下载:
链接:https://pan.baidu.com/s/1H51ez9BrYohDP4hXHJLReA?pwd=bgz1 提取码:bgz1
6.2、RIPS
链接:https://pan.baidu.com/s/14RWI64sU8LU-z9qUeVUzBg?pwd=yot6 提取码:yot6