效果验证阶段,使用测试数据集进行验证,遍历测试数据集中的每一条数据,生成特征向量,限制在nb_max_episode_steps_test步以内进行尝试免杀,如果免杀成功则计数并进入下一次循环。
最后统计训练数据集成功免杀的个数。整个过程中免杀动作的选择使用贪婪算法,即使用Q函数对应的最大值的动作执行,代码如下:
success=0 sum=0 shp = (1,) + tuple(model.input_shape[1:]) for sample in samples_test: sum+=1 for _ in range(nb_max_episode_steps_test): if not waf_checker.check_xss(sample) : success+=1 print sample break f = features_extra.extract(sample).reshape(shp) act_values = model.predict(f) action=np.argmax(act_values[0]) sample=xss_manipulatorer.modify(sample,ACTION_LOOKUP[action]) print "Sum:{} Success:{}".format(sum,success)
运行程序,在nb_max_episode_steps_test取3的情况下(即只有3次机会进行免杀动作),51个测试样本里面有20个成功免杀,效果相当不错:
Sum:51 Success:20