基于知识图谱的自动化渗透设计与实现

 

渗透测试发展史

目前,传统安全检测大部分过于依赖人工方式,基本上是寻求传统的信息安全服务商以白帽子黑客进行人工渗透测试的方式,这种方式虽然能达到企业短期的检测需求,但是在交付方式、工作效率、标准化程度、行为及数据可控性都有非常多的不足。再者,目前市面上大多安全检测产品采用的网络信息系统安全检测技术,主要是采用模糊测试方法对目标系统进行全量漏洞探测,再加上POC(漏洞验证)做一些指纹和漏洞的关联。同时,传统安全检测工具,不管是Fuzz型还是基于Poc的精准型,都存在不同程度的误报和漏报情况,有自身的局限性和弊端。所以需要进行技术上的创新,以实现智能、简化流程、降低操作门槛甚至解放人力,并达到高于基础人工作业的效果预期。AI技术在网络安全工具研发中的应用是一个趋势。

 

大势所趋的AI攻防

目前,AI已经广泛应用于攻击检测领域,主要是WEBSHELL检测、恶意流量检测等,Github有很多的优秀开源项目,这里不再赘述。但是在渗透测试领域则不同,我们缺乏有效的渗透测试样本量,甚至我们怎么去量化渗透测试过程都是一个问题。从渗透测试发展史上来看,近二十年来,本质的渗透测试手段并没有发生改变,比如web漏洞、系统漏洞的分类,sql注入漏洞是2000年发现并提出的,xss、csrf等也是近20年前的产物,这二十年来,大家还是围绕在Linux、Windows操作系统、TCP/IP协议栈上进行攻防。相应改变的是围绕整个体系的攻击手段微调与创新。有时候我也在思考,自己在渗透过程中除了三板斧(扫端口、搞web、上Nday)还会些什么,得到的结果都是深深的自我怀疑,自己一直以来都是在别人给定的渗透思路、渗透路径中徘徊,在渗透测试领域始终无法摆脱整个既定框架实现本质的创新。或许我本来就不需要在这种问题上创新,既定的渗透测试思路、既定的渗透路径、有限的渗透工具,天然的有限集问题,在原理上给了我们开发自动化平台的可能。

既然渗透测试是一个有限集问题,那为什么又有“大佬”和“小菜”的分别,为什么那么多大学毕业生还只会CTF?这里我想到的两个字结论就是“经验”!很多时候,回看一个渗透流程,我们会发现,基础的漏洞原理我们都懂,但是思路却会让我们惊叹:“原来还有这操作!”,这里的思路就是我们所谓的经验。

举个实战例子,我们在发现一个Windows+jsp的任意文件下载漏洞,但是在下载了大部分文件后并没有发现突破口,陷入困境。这时候公司一大佬却想到让我们去下载recent file的快捷方式,通过下载快捷方式文件又找到了新的绝对路径和突破口。所以,在渗透过程中,更多的是这种经验的体现,搞得多,实战多,就成为了大佬,不然始终是一个学院派。

那么反过来讲,我们如何把这种经验进行量化,输入到决策系统里。这里我们就针对类似的经验思路,开发了一套“黑客语言”,即DPL(Decision Plan Language)语言。我们在后挂一套自主研发的渗透测试框架基础上,在这种脚本语言中,定义了各种逻辑,比如[when]参数,即指定触发条件,[action]参数即指定了后续的动作,我们基于这种思路,把相应的渗透测试思路量化下来,这样子在遇到特定问题的时候,系统就会触发相应的动作,直至完成全自动化渗透。DEMO如下

在DEMO中可以看到,系统在发现SQL注入后,触发了Sql注入攻击,获取库名-表名-字段名,直至拿到了管理员的账号和密码。而这些步骤,我们可以用if-else即可完成,那我们的优势在哪?下面就是联动功能了,在同时web路径爆破拿到管理后台登录地址后,系统自动用获得的账号密码自动完成登录,登录后再次触发后台爬虫,爬取到一个任意文件下载漏洞,通过include循环分析,得到了数据库链接文件conn.inc.php,进而交给敏感文件分析,从中得到了MySQL的链接账号密码。这时候又发现目标开放了3306端口,系统则自动通过获取到的账号密码登录3306端口,写入udf,创建函数,最终在服务端执行命令。回溯整个过程,系统不仅可以智能决策下一步该怎么走,又可以根据经验智能联动,将不同步骤的结果相互组合,最终达到“给我一个目标,还你一个shell”的效果。

PPT下载链接:https://pan.baidu.com/s/1ZSFMdeBYgbJLyoYRdtL_Sw提取码:s8k7

(完)