IAST:交互式应用程序安全测试(Interactive Application Security Testing),是黑盒测试(SAST),白盒测试(DAST)结合优点而成的灰盒测试
其交互性体现在agent和扫描器之间的交互,分为三类,1.主动型,2.被动型(流量型暂不考虑在内,因为未实现agent)
主动IAST
agent使用java动态代理,在程序运行时修改字节码插入代码(即插庄)。
1.agent部署:agent会是一个jar文件,程序运行的时候设置代理为agent,比如运行java程序的时候java -javaagent:agent.jar -jar service.jar
启动服务,这时agent会连接在远端扫描器,同时在程序运行时植入代码。
2.用户访问被测应用时,agent判断是否触发了风险函数。比如检测到了executeQuery()函数
Statement statement = con.createStatement();
String sql = "select * from users where name = '" + name + "'"; //通过拼接的方式构建sql查询语句,存在sql注入的风险
ResultSet rs = statement.executeQuery(sql);
那么agent会把用户访问的url连同参数一起发送给远端扫描器。
3.扫描器url去重
4.重放扫描:模拟用户向被测服务扫描,agent在风险函数处监听。如果agent检测到扫描器发送的特殊数据,证明存在漏洞,agent上报信息。如果agent没有检测到扫描器发送的数据,则不存在漏洞。
被动IAST
agent使用java动态代理,在程序运行时修改字节码插入代码。
1.agent部署,同上
2.用户访问被测应用,agent监听运行上下文,用户输入,风险函数。监控从用户输入到风险函数中间的被污染的数据,传播链。
比如:
String name = request.getParameter("name");
String sql = "select * from t_u where name = '" + name + "'";
statement.executeQuery(sql);
从name
到executeQuery()
传播链没有监控到安全过滤,则认为存在漏洞。