0
“我溜进一个很神秘的会场,里面一群敲代码的码农们好像在搞大事情,就连出去上厕所警察蜀黍都跟着。”
这是前两天一位朋友八卦时候提到的,据她说所谓的“溜”进去也并不容易,想尽了各种招才进去观摩了一分钟。
其实,所谓的神秘会场就是网鼎杯半决赛和总决赛现场。
早在大赛预赛阶段编辑就开启了暗中观察模式,毕竟选拔赛主题“青龙之战、白虎之战、朱雀之战、玄武之战”非常霸气且有逼格,全国各地21000多名参赛选手们分成不同行业切磋,最终再从进入线下半决赛的200支战队中筛选出各行业排行榜前10—15支精英战队晋级决赛。
线上预选赛采用CTF解题的比赛模式,线下决赛则采用了国际顶级赛事惯用的AWD攻防兼备模式。为了保证“切磋”公平性,主办方配备了14台高频率信号屏蔽器(就是下面这货)屏蔽场内选手通讯信号,还找了督察进行巡查,总之就是前所未有的严格。
高频率信号屏蔽器
知乎上有一个问题,CTF线下赛应该如何打?点赞率最高的一个回答是这样的:
手不要抖,心不要慌,线下攻防,也就那样;
网络不通,交流不畅,镇定自若,落后何妨;
专人运维,冷静指挥,盯计分板,策略得当;
Pwn题虽多,Web更伤,挖洞很弱,光靠重放;
工具脚本,准备匆忙,反正现场,也用不上。(情不自禁唱了出来)
当然这些围观群众都是看不到,开赛后各战队便快速进入了状态,展开了比分的争夺。开赛18分钟后,广东省应急响应平台红帽先锋战队率先拿下了全场首个一血,打响了网鼎杯半决赛战场的第一枪。
到底这次赛事背后有什么故事?雷锋网宅客频道采访了获得半决赛第一名决赛第六名的Lancet战队。
Lancet名为柳叶刀,是医生的手术刀,为病人消灾祛病。他们想要做网络世界的手术刀,既要撕裂网络世界的表面看到安全隐患,也要为网络安全主刀消除隐患。Lancet最初是在15年10月由北京航空航天大学网络安全实验室的小伙伴组建的。日常研究涉及到工控、固件以及Web安全等各个层面,而对于CTF也是以赛代练,逐步提高。
Lancet:因为线上赛规定最多6人参加,当然有些队伍实际可能不止6个人一起打比赛,这种情况是监控不到的,也是网安比赛不可避免的bug。但线下赛限制人数最多四人,除非肚子里还藏着一个。(编辑:喵喵喵?)
Lancet:我们之前有过线下经验,所以这次没有特殊准备,就按以往的来。半决赛中跟以前的线下awd差不多,各队都是web先做出来,但是初期彼此差距不大。后来我们靠一道pwn的一血打到第一,并迅速拉开了与第二名的差距。下午web大佬们靠第二个漏洞(我们队先发现的)又拿到了许多分,巩固了第一的优势。第二天决赛有用到昨天的web和其中一道pwn题,但主办方部署有些不一样,导致我们初期用昨天的脚本没刷到分数(我们当时以为刷到了在做别的题),后来调试的时候耽误了初期宝贵的20mins。整场打下来,除去中间有4轮主办方验证flag错误,这初期的20mins对我们影响很大,最后5-8名分数几乎相近(大概就是一轮的差距),而我们靠一个密码学题抢到了第6。
Lancet:第一天我们防守比较到位,可以说最后两小时我们基本上没事干了,这种比赛根本核心在于一个时间效率的问题,就是说你如何用一段固定长度的时间去换取最多的flag,或者最多的别人的时间,也就时间效应。后面一天的状态稍微差一点,可能是因为前一天晚上熬夜写代码的原因。
昨天大概七八点钟回去,我写代码是写到快两点,然后今天是6点半起来。特别辛苦。
还有一个就是flag提交的那一部分,我们用的还是前一天的队伍token,虽然终端显示提交成功,但因为种种原因并没有成功。而且初始的flag分数还是蛮高的,因为这个原因,我们损失了最初几轮的flag。最终从比赛结果来看,前几名分差其实都不是很大,所以上述的失误还是影响到我们最终的名次了。
还有另外一点,就是今天的web题目限制了写入权限,昨天我们使用的比较nasty的技巧都没有用上。
Lancet:CTF相当于渗透测试的一种抽象,就是将渗透测试中的具体操作比如入侵扫描等抽象成一种模型。这种模型虽然和真实场景存在差异,但一定程度上也能预测真实场景,或者说对真实场景起到一定的作用。
雷锋网:经常在一些CTF比赛中看到你们,你们觉得打比赛的意义是什么?
Lancet:赢得奖金和获得奖项是一方面,更重要的是可以认识更多圈子里的人。其实安全圈相对较小,但生态是比较好的。打这种比赛除了可以认识各种各样的战队还能在比赛之后分享过程中出现的问题以及交流解决问题的思路。这就是不同的思想碰撞之后对自己的技术进行赋能的过程,赛场有益的技术对手也是朋友。比如我们这次比赛结束后就和孕妇防护服等战队的基友们(在各种比赛偶遇已成基友)探讨了一波。
雷锋网:每次参赛都会提前准备吗?
Lancet:当然,可以说是吃老本的一种方式。比如你在之前的研究或者比赛中存留了一些脚本和一些想法,要进行比赛时候就需要提前把这整套工具体系或整套脚本体系做出来。比赛的时候就听天由命吧,比赛完之后,再通过比赛结果的反馈,将反馈输出到你的脚本里,可以交脚本进行进一步的修缮。
也就是我们有一套比较通用的框架,如果要参加比赛就需要根据主办方环境和规则的不同进行调整,这套框架已经帮我们赚了很多钱。
Lancet:首先一点还是要考虑,线下赛考察的能力,是一种攻守兼备的状态。
先说防守,比较传统的方式(web)就是使用通防脚本,而通防脚本一般分为过滤型和转发型两种, 根据需求灵活选择。防守还有一个很重要的辅助作用就是payload收集和重放,所以有一整套完整的payload利用工具链将是锦上添花。
再说攻击,代码审计部分略去不谈,在做权限维持的时候,最重要的就是隐蔽与多样性。以我们Lancet内部使用的AWD-INTEL的框架为例,在进行权限维持的时候,我们引入了一个叫做shell service的概念(还在开发中),下面是内部设计文档中的一部分:
基于种子进行shell变异(shell类型,shell名称,shell存储位置)
通过web界面查看每个host中shell的种类和类型
可以结合server.py 获取server端的状态(webshell主动扫描,waf扫描)
一个host可以多达5个shell,允许自定义添加shell
shell高隐蔽性(类weevely后门)
垃圾流量并入到shell service中(因为垃圾流量即将转型成基于源代码生成,而非传统的通过代理流量生成【考虑效率因素和覆盖率】)
从以上我们可以看出shell service设计过程中对隐蔽性,多样性,甚至少量变异性的追求和优化。
“网鼎杯”网络安全大赛是由国家网络与信息安全信息通报中心、国家密码管理局商用密码管理办公室支持,永信至诚主办,360公司、阿里、百度、腾讯、中科院信工所、清华大学联合协办的国家级网络安全大赛。
雷峰网原创文章,未经授权禁止转载。详情见转载须知。