安全开发基础-- DAST,SAST,IAST
简介
DAST
动态应用程序安全测试(Dynamic Application Security Testing)技术在测试或运行阶段分析应用程序的动态运行状态。它模拟黑客行为对应用程序进行动态攻击,分析应用程序的反应,从而确定该Web应用是否易受攻击。
SAST
静态应用程序安全测试(Static Application Security Testing)技术通常在编码阶段分析应用程序的源代码或二进制文件的语法、结构、过程、接口等来发现程序代码存在的安全漏洞。
IAST
交互式应用程序安全测试(Interactive Application Security Testing)是2012年Gartner公司提出的一种新的应用程序安全测试方案,通过代理、VPN或者在服务端部署Agent程序,收集、监控Web应用程序运行时函数执行、数据传输,并与扫描器端进行实时交互,高效、准确的识别安全缺陷及漏洞,同时可准确确定漏洞所在的代码文件、行数、函数及参数。IAST相当于是DAST和SAST结合的一种互相关联运行时安全检测技术。
原理简单概述
DAST
- 通过爬虫发现整个 Web 应用结构,爬虫会发现被测Web程序有多少个目录,多少个页面,页面中有哪些参数;
- 根据爬虫的分析结果,对发现的页面和参数发送修改的 HTTP Request 进行攻击尝试(扫描规则库);
- 通过对于 Response 的分析验证是否存在安全漏洞。
SAST
超过50%的安全漏洞是由错误的编码产生的,开发人员一般安全开发意识和安全开发技能不足,更加关注业务功能的实现。想从源头上治理漏洞就需要制定代码检测机制,SAST是一种在开发阶段对源代码进行安全测试发现安全漏洞的测试方案。
- 首先通过调用语言的编译器或者解释器把前端的语言代码(如JAVA,C/C++源代码)转换成一种中间代码,将其源代码之间的调用关系、执行环境、上下文等分析清楚。
- 语义分析:分析程序中不安全的函数,方法的使用的安全问题。
- 数据流分析:跟踪,记录并分析程序中的数据传递过程所产生的安全问题。
- 控制流分析:分析程序特定时间,状态下执行操作指令的安全问题。
- 配置分析:分析项目配置文件中的敏感信息和配置缺失的安全问题。
- 结构分析:分析程序上下文环境,结构中的安全问题。
- 结合2)-6)的结果,匹配所有规则库中的漏洞特征,一旦发现漏洞就抓取出来。
- 最后形成包含详细漏洞信息的漏洞检测报告,包括漏洞的具体代码行数以及漏洞修复的建议。
IAST
IAST的实现模式有很多,常见的有:
- 代理模式
- 插桩模式
代理模式
在PC端浏览器或者移动端APP设置代理,通过代理拿到功能测试的流量,利用功能测试流量模拟多种漏洞检测方式对被测服务器进行安全测试。
- 功能测试人员在浏览器或者APP中设置代理,将IAST设备地址填入。
- 功能测试人员开始功能测试,测试流量经过IAST设备,IAST设备将流量复制一份,并且改造成安全测试的流量。
- IAST设备利用改造后的流量对被测业务发起安全测试,根据返回的数据包判断漏洞信息。
插桩模式
Active插桩实现原理
- 被测试服务器中安装IAST插桩Agent
- DAST Scanner发起扫描测试
- IAST插桩 Agent追踪被测试应用程序在扫描期间的反应附加测试,覆盖率和上下文,将有关信息发送给Management Server,Management Server展示安全测试结果
Passive插桩实现原理
- 被测试服务器中安装插桩 Agent;
- 插桩 Agent在应用程序运行时获取请求和代码数据流、代码控制流;
- 插桩Agent将获取的信息发送给Management Sever,Management Sever展示安全测试结果。
插桩模式的关键是Agent,Agent需要根据不同语言进行开发,但是功能基本相同:
- 获取请求数据和返回数据;
- 代码执行中的参数传递;
- 数据库查询(如ODBC);
- 目录查询(如LDAP),文件系统权限;
- 监听内存中特定的值,识别受污染的输入;
- 第三方库的使用;
- 对外部应用程序和服务的调用;
- 特定代码的执行等。
IAST插桩被动型(动态污点分析)扫描器: