网鼎拾遗——关于第二届网鼎杯中一些题目的小心思
文章来源:春秋GameCenter
前言
随着大赛晋级公告发布,网鼎杯四场官方资格赛也告一段落。作为为国家各行业选拔人才的一场网安竞赛,专家组在题目设计方面,结合了当下新技术、新思路、新热点。譬如前段时间刷爆的文言文编程、5G物联网时代最令人瞩目的智能汽车的协议分析、云时代虚拟化技术的安全的关键沙箱逃逸,还有涉及很多前沿技术如量子通信领域的类量子模式分析、人工智能攻防领域的自动化漏洞挖掘等等,让大赛不仅涵盖了热门的实用技术,也对带领我们走向未来的前沿技术做了探索,同时赛题中的防作弊水印,也让本次大赛在公平性保障方面又迈了一大步。另外,考虑到参赛人群众多,水平及经验参差不齐,尤其在AB卷随机抽选这种保密制度的要求下,如何在一天时间里,用十几个题的题量让4万参赛选手雅俗共赏,无论水平高低、什么方向,都能有所收获,我们在难度、考点分布上都阵亡了无数脑细胞。
如今,轰轰烈烈的官方资格赛已经落下帷幕,相信很多人在紧张的比赛过程中走马观花,对一些题目的思考还意犹未尽。所以我们挑出大家议论比较多的题目,来做一点简单的解释说明。希望这种坦诚的沟通方式,可以拉近春秋GAME作为赛事组织者和参赛选手之间的距离,让大家能收获更多的思路,对未来的参赛有些指引。
4个签到题
4个签到题都是改编自一些经典小游戏,获取flag有2种途径,第一种是顺利通关即可获取(青龙、玄武组的多了一个阻碍,就是flag不直接显示出来,需要按f12打开开发者工具,在console处才可以看到flag)。第二种则是查看源代码,着重查看js代码,发现都有ajax发包(同样的,青龙、玄武组的代码多了一些混淆),只要仿照发包即可获取flag值。
虚幻2
汉信码是一种全新的二维矩阵码,由中国物品编码中心牵头组织相关单位合作开发,完全具有自主知识产权。和国际上其他二维条码相比,更适合汉字信息的表示,而且可以容纳更多的信息。
出题人对汉信码情有独钟,于是推出2年前“虚幻”一题的plus版,一开始只把3个像素压缩成一个,但是想想又太简单,于是就增加了一些旋转,补全的操作。
还原到最后一步:
这里虽然缺少了一块,但是可以尝试“暴力修补”,也可以乱涂鸦
:
本题主要是让大家了解汉信码的编码规则,修复汉信码。
easy_ya
在安全学领域,TEA(Tiny Encryption Algorithm)是一种分组加密算法,它的实现非常简单。本题是基于tea算法简化版的,很容易可以破解出来,题目中的key隐藏了一个彩蛋:
3个faster题目
漏洞挖掘是在二进制程序分析领域一个经久不衰的关键问题。常用的漏洞挖掘技术包括模型检测、模糊测试、符号执行、二进制比对等,这些传统的漏洞挖掘技术在理论研究上已经比较成熟,其中大部分的技术如模糊测试、符号执行等都已基本实现自动化,可以在不需要或较少的人工干预的前提下,挖掘被测试程序中的漏洞。
faster题目主要考察自动化漏洞挖掘技术,题目设计了一个简单的N层函数嵌套互相调用,每次nc连接都会生成不同程序,并限制了连接时间,迫使选手使用自动化利用工具来对该程序进行自动化分析利用。三个faster题目的层次分别是100层、1000层、10000层。
对于此类题目,符号执行技术是一个行之有效的方法。符号执行技术,能有效解决模糊测试冗余测试用例过多导致的代码覆盖率增长慢的问题,已经被学术和工业界应用在漏洞挖掘领域。
Teslaaaaa
本题是汽车使用Flash over CAN的方法刷新ECU程序的经典场景。需要学习理解UDS诊断协议(ISO 15765-2, ISO 14229-1),将4S店给车辆刷新ECU程序时的CAN通信日志中提取出二进制程序,并逆向出其中的flag。
日志中报文长度都为8字节,参考ISO15765-2,可以将日志中的每条报文进行分类,分为单帧,首帧,连续帧和流控帧。单帧报文可以发送1 ~ 7字节的数据载荷。7字节以上的数据载荷需要拆分为一个首帧和多个连续帧组合。根据N_PCI可以知道第一条为首帧,第二帧为连续帧,一共有11字节的数据。流控帧没有数据载荷,一般用于准备接收长帧时,由接收方告知发送方的接收能力。
根据上面的规律,可以提取出所有的有效数据,参考ISO14229-1中,重点关注和刷新相关的服务0x34请求下载、0x36数据传输、0x37退出传输。
最后还原得到ECU的程序文件,是一个ARM芯片二进制程序,程序本身并不复杂,直接逆向出flag即可。
未完成的书
文言(wenyan-lang)是一门采用文言文输入的具有图灵完备的编程语言,该语言不使用英文字符,仅包含繁体中文字符,并保留繁体引号「」。
这题花费了出题人3个星期的夜晚时间,最后出题人自己都被这本书绕晕了,同时由于设计之初存在一个非预期,导致可能存在的多解,但是已经快要制作完了,并且没有保存最开始的副本,没办法还原回去了,就只能给出flag的一个哈希值,但是不影响解题的。题目是rsa winner attack加2个变种base64加一些奇怪操作组成的。因为wenyan-lang主要是js的翻译,所以就想着能不能用文言文重新描述一遍js的rsa过程,不过到最后也没有重写完成,所以可能会看到代码里有部分奇怪的地方。该题目是要求我们的输入经过层层变换,最后与一个歌词一样。因为当时中了《庆余年》片头曲《一念一生》的毒了,反复听了几天这个歌。
密码柜
Vivd
CVE-2019-18683是linux v4l2子系统上的一个竞争漏洞,潜伏时间长达5年,影响vivid驱动,最终造成UAF,有可能可以做本地提权。
本来这个题目是一个用户态和内核态pwn结合的题目,后面经过修修改改,就成了这样了。本题旨在让选手学习一下,真实CVE(CVE-2019-18683)内核提权的另一个思路,通用堆喷的一些技巧等。
预计解出时间在5-6小时,但实际情况比预期的长。其实,因为本题没设置什么保护,所以可以通过读/proc/kallsyms来找到函数地址,然后通过调试结构体,在你自己预先编译的内核中导出符号表,加以利用。
小明的bb86
量子密码体系采用量子态作为信息载体,经由量子通道在合法的用户之间传送密钥。量子密码的安全性由量子力学原理所保证。
本题基于X-NUCA2018的unconditional_security的量子密码,尝试模拟量子通信,选手可以选择监听或者放行,监听之后量子会发生偏转导致最后的结果出现问题。本题的缺陷在于每次传输的模态都相同,导致模态泄露。
supersafe_vm
Rust是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。Rust在语法上和C++类似,但是设计者想要在保证性能的同时提供更好的内存安全。
本题涉及了Rust逆向和lc3架构的漏洞识别,随着Rust的推广,未来此类pwn题会越来越多。
APL2
APL语言是一种表达能力很强的会话语言。应用范围包括数学统计、事务经营、信息检索、报表生成、财务预算等。它也可用于模拟计划管理、图形处理、正文编辑、计算机辅助教学等方面。APL的特点是,语法规则简单,运算符丰富,表达式简练,并包含多种构造和处理数据的运算符。它在数据加工和矩阵计算上特别有效,不过程序员具有较高的数学素养。
本题其实是一个SM4的apl代码实现,出题人发现使用apl居然能做到比c、python都短的SM4代码设计,而且看着也很舒(zi)服(lian),然后把大部分函数部分都合并了,所以才导致的看起来很臃肿,最后就是用打印机打印出来,拍照呈现给大家。
fixit
一个简单的修补复原过程,这里面也藏了一个彩蛋:
结语
当然,时间篇幅所限,很多想法也未能言尽。
精力能力所限,我们相信大赛的设计也有更多可改善的空间。
感谢各行各业的朋友们对大赛的关注和热情,如果你有更多对于赛事的建议、想法,或者考核的思路,欢迎在后台给我们留言,还望多多指教。
相信通过我们所有人的努力,可以为国家各行业,提供一个健康有效的网络安全实战人才培养、评价机制。一起来投入到新一轮社会主义新基建的伟大事业中来,也一起拥抱技术进步带来的信息时代的安全感。
最后,感谢你来玩我们的游戏,我们下次再见!