0
上周,雷锋网编辑收到永信至诚小伙伴的私聊,“小老弟,周末我们有场'机机大战'来不来?”
见编辑发送过去迷惑的表情包,对方进一步解释到,“就是RHG大赛(Robo Hacking Game),给黑客解放双手,让他们搞出来的机器人互相PK。”
很难想象网络安全大赛上黑客们不搞机了,开始嗑瓜子观战的画面……
行吧,为了满足好奇心,编辑在上周日来到了比赛现场,参加BCTF-RHG漏洞挖掘北京分站赛。
一进门,大家的姿势都是这样的,
这样的,
开个玩笑,只不过现场的确没有以往大赛的紧张气氛而已。
大赛有总共有十支战队参赛,其中有蝉联两届人工智能网络安全攻防大赛冠军的国防科技大学Halfbit战队,国内外知名的LANCET、Mech-Whale战队,深耕产业和科研领域的丁牛科技DigApis战队、全球能源互联网研究院有限公司RAD战队等。
当然,这次比赛只是二进制方向的漏洞挖掘赛,接下来还有Web、综合性系统攻防等。
当天上午,指针划过10:30,比赛正式打响。10:30:54,联合战队OutIsland率先拿下一血;10:30:55、10:30:55,OutIsland接连挖到漏洞,三连击;随后Halfbit战队与RAD战队连续释放华丽大招,其中RAD战队在比赛进行到短短32分钟时横扫赛场,连破pwn、栈漏洞溢出等四道赛题,战绩惊人。
经历了六个小时的跌宕起伏,最终全球能源互联网研究院有限公司的RAD战队荣获第一名,获得奖金一万元,联合战队OutIsland和来自国防科技大学的Halfbit战队分获二、三名,分获奖金五千元、三千元。比赛前五名还获得了殿堂级赛事——在DEF CON CHINA中举行的BCTF总决赛的入场券。
作为第一次参赛就拿到第一名出乎所有人意料的黑马RAD战队,宅客频道编辑充满了好奇,于是在比赛结束了抓住他们聊了聊。
【RAD】
雷锋网:战队名字有什么来历?
RAD:我们四个人都是国家电网红队成员,平时的主要的工作就是围绕国网公司的网络安全情况,进行挖掘漏洞和漏洞分析,以及开展相关的技术研究和系统研发,包括一些应急处置工作。
其实在我们取名时候,理论上应该取国家电网公司某战队,但我们也不知道这次比赛会取得什么样的成绩,怕丢了国网的脸。然后就随便取了RAD,R表示机器人robot,A表示attack,D表示defense,是攻防机器人的意思。另外也算一个谐音代表,我们是国家电网公司的红队,红队就是red。
雷锋网:比赛具体内容是什么?
RAD:20道题分了不同的方向,其中包括栈溢出,堆溢出,格式化字符串,逻辑漏洞等不同二进制漏洞溢出方式。简单说就是通过修改程序运行的内存操作,让程序运行我们想要运行的一段代码。这次比赛我们主要对栈溢出和格式化字符串相关的算法提升做了一些准备,堆溢出也有研究,但和其他队可能有一些差距,每个队伍都有不同强项。
雷锋网:和以往的攻防对抗赛相比,这次机器人比赛有何不同?
RAD:是有很大不同的。人与机器人最大区别是什么?是逻辑分析能力,很多人一眼就可以看到的逻辑,机器可能需要很多步分析。
在比赛中,面对各种漏洞逻辑,人可能一眼就看到出哪些地方存在溢出点,用机器来做必须要进行模糊测试,发现崩溃的点,然后再进行跟踪,以及生成漏洞利用样本。
总之,整个漏洞挖掘顺序和关注点是不一样的。机器要执行很多测试样例和路径的构造,对机器性能和对其调度控制算法,包括挖掘路径的优化能力都有很大要求。
但是机器比人的优势什么?是计算能力远超人类。在计算一个测试用例时候,人算一个,机器已经算了十个、一百个。就是说机器在自动化方面的优势是计算能力和测试样例、模糊测试计算方面,在逻辑分析方面弱一些。主要是因为人逻辑分析能力还没有转化为样本或者算法,植入到机器人。机器人之后的提升还是要依靠将人的逻辑转化为样本,进一步提升。这类比赛的题目对人来说稍微简单些。
雷锋网:为什么你们写的程序能拿第一名?
RAD:我们关注RHG比赛是在2017年时候,18年初我们就开始着手研发机器人程序。
我们整个红队队伍有七十多人做漏洞挖掘相关工作,平时就编制了不少挖掘工具和挖掘脚本,包括我们也有专门负责对人工智能算法平台做性能优化的相关人员。另外,在电表、配电终端以及电动汽车充电桩等场景都有通过人工的方式进行二进制程序漏洞挖掘技术,我们也积累了很多漏洞挖掘方法和样本。
我们在准备机器人时候首先借鉴了国外的一些开源框架,比如N,FR,在此基础上结合我们红队人员自己编写的漏洞挖掘样本和挖掘方法。并且对程序中的核心算法和符号执行的技术流程,做了相应的优化升级。另外我们碰到过很多场景和案例,并且把人员经验转化到了机器里面。
我们的原型系统在18年8月份成型,之后实验室会用以前比赛的样题进行测试,或者内部构造一些样例,简单的人工解题也可以拿来尝试。我们也会设计不同场景,用逻辑的方式让他来做测试。整个过程就是根据人工经验解题的思路修改代码。
除此之外,相比高校队伍,我们可能在工程性和机器人功能性方面略有优势,机器人的性能优化和稳定性方面在比赛中是很重要的。我们也是邀请了一些外部高校老师进行技术指导。几方面结合,就保证了在这次的比赛当中我们能够取到一些成绩。
雷锋网:从成绩来看,只有四支战队得分,其余战队0分是为什么?
RAD:很好理解。
做栈溢出或堆溢出,崩溃的时候,必须让程序跳到你想要跳到的内存位置上去。用计算机语言来说,差了一个字节,差一个位,一个比特都会达不到效果。所以在挖掘方面来说,机器人一定要足够的精确。
还有一些机器人可能在本地挖掘漏洞是可以成功的,但比赛的赛制是什么?你要把漏洞利用的样本提交到靶机上面去。而靶机上的运行环境可能与本机内存符号地址存在偏差,或者说代码运行的时候有一点位置偏移。但就这一点变化可能就造成在本地可以解出来,在靶机上却解不出来,拿不到flag。
另外在本地情况下,函数路径很多。在进行符号执行时候,需要保证所有的测试覆盖整个函数逻辑,覆盖所有执行点,才能找到某处漏洞。而在机器不够智能的情况下,可能就找不到相应的点。
这就是就会有很多的不可控因素,所以虽然我们这次拿了第一名,我们也只解出了四道题,后面还有很多题目是有计划空间的。
雷锋网:这样的程序可以用于实际场景吗?
RAD:由于实际环境中的代码量远超比赛题目的代码量,所以目前在实际工作中只能用它来做模糊测试,但要用它进行漏洞的自动化利用,目前还很难。还存在漏洞挖掘路径爆炸等很多性能上面的问题,需要进一步解决。
从web的角度,我觉得机器能够替代很多人工挖掘工作。从二进制角度来说,因为二进制漏洞挖掘过程中有很多计算分析,需要计算逻辑,然后构造测试用例,要做程序跟踪的情况下,人工有很大难度。这时候它可以作为人工的一种辅助工具,帮助做一些模糊测试,找到二进制程序可能会存在哪些崩溃参数。
但是进一步面对为什么会造成漏洞崩溃?怎么造成的?怎么利用?这些问题时候,虽然目前的框架提供了技术,但还不够完善,要针对不同的环境做定制化改造。其实他能够帮助生成一些程序流图的分析,或者其他辅助工作。
总之,目前除了在模糊测试以及某些特定场景,在其他的漏洞分漏洞利用方面,可能价值还不是很大。
对于我们国家电网来说,确实存在很多场景比如电表、充电桩以及配电终端等,里面二进制程序的漏洞挖掘需求较多,如果完全依赖于人工进行漏洞挖掘工作量非常大。但这些机器人程序后面还是能够逐渐的取代一些员工的基础操作,或者用他代替些重复性工作。
雷锋网:比赛过程中是否存在突发情况?
RAD:整个比赛过程对我们来说完全是黑盒,我们能知道的只有得分了,可以在屏幕看到。至于怎么算出来了,机器有什么状况,是不是碰到什么错误,我们完全不知道。具体要等事后把日志拿来分析一下才能知道情况。
宅客频道:比赛过程中有什么特殊感受?
RAD:紧张,特别是上午,说不出来的紧张。特别是比赛一开始别的队伍就连续拿到三个一血,而我们自己的……毫无波动。而且赛制要求是第一个解出题目得300分,第二个解出得200分,之后解出的就得100分。
说白了,机器人比赛考验的是两个能力,一是漏洞挖掘能力,而是能挖出来的情况下,拼谁的算力速度更快,另外也需要有一些技巧,比如可以自动判断哪种题型更适合我,优先算简单的题,我们还做了一些设置,如果某题前三血都已经被被人拿到,那我们会自动放弃这一题目。
雷锋网:为什么你们愿意参加RHG比赛?
RAD:其实人工智能技术目前还是比较热的,我们希望在人工智能上面做一些投入研发。其一是固化我们漏洞挖掘人员的一些经验,这样一来不管人员如何流动,技术和经验都是固化在机器人里的。其二,我们还是希望能够通过这种技术的提升,挖掘出我们人工无法挖出来的一些漏洞。最终靠着这种技术积累,形成一个产品。
如果要给当前的自动分析与利用能力规档的话,可能仅仅是在玩具上层,软件特征与漏洞特征难以描述加之人工经验难以建模,都令人有些泄气。
但AlphaGo的存在又显示了基于深度学习等人工智能算法在复杂推理问题中的潜在价值。
在现场沙龙环节,国防科技大学的张斌博士提出,深度学习等在图像领域的应用表明难以描述的特征或许不用描述,增强学习在围棋、电脑游戏领域的应用表明难以建模的经验或许不用建模。
而在软件漏洞分析领域的应用,似乎还有很多路走。
BCTF-RHG漏洞挖掘北京分站赛暨人工智能安全的进阶沙龙在中关村国家自主创新示范区核心位置的北京中关村集成电路设计园开幕。大赛由百度安全主办,永信至诚承办。10支机器人战队表现优异者将获得2019年DEF CON CHINA中的 BCTF-RHG决赛的直通资格。
雷峰网原创文章,未经授权禁止转载。详情见转载须知。