汽车是现代生活的常用品
为了安全 汽车设计者会在汽车上装备安全带和安全气囊 有些高级的汽车还有溃缩式车架设计 其目的都是为了防止发生设计者不愿意看到的结果:车内的人员受伤
然而 在大多数时候 保障汽车及车内人员安全的 并不是安全带和气囊 而是刹车和方向盘
在这个领域 安全带和气囊 被称为被动安全措施 刹车被称为主动安全措施
显然 主动安全措施是常用部件 而被动安全措施是不得已的最后防线
在设计KCTF的防守作品时 防守方都会在攻击方寻找正确答案的路上 设置各种障碍 以防止发生防守方不愿意看到的结果:被破解
这是被动防御
其实也可以使用主动防御 其思路是:防止攻击方走向正确答案的方向
此次出题 笔者想研究尝试一下 系统化地使用主动防御技术
什么是主动防御呢?
举个栗子
笔者多次参加KCTF 从来没有胜出过
Q老师说 要想作品存活 ccfer是个巨大的威胁 最好的办法是:趁比赛那2天拖他出去吃喝玩乐 不让他碰电脑 这样存活的可能性会大很多
这虽然只是句玩笑话 但仔细想想 却很有道理 直接有效
这 就是一种主动防御
回到技术面来 主动防御都有哪些方法和技巧呢?
为了寻求答案 笔者专门向某高校马克思主义学院的D教授求教
经过D教授的悉心指导 笔者对这方面的战术有了一定的了解
根据所学 结合具体数字化载体 设计出了叹息之墙系列作品之三:部落冲突
部落冲突一题 虽然从表面上看 与叹息之墙和七十二疑冢很相似
但是此题中 只有两成是传统的被动防御 八成部分是主动防御
下面 本文将详细介绍此题是如何使用这项技术的
主动防御的目的 就是让对手不要走正确的破解之路
而不是像被动防御那样 在正确的破解之路上设置重重困难
所谓“让对手不要走正确的破解之路”
讲人话 就是“把对手往沟里带”
但对手并不傻 很多时候攻击方比防守方更聪明
要想带对手进沟 防守方必须首先透彻了解攻击方 特别是其人性弱点(知道为什么是马克思主义学院了吧)
如何利用人性弱点 把对手引上指定的路 并且雷打不动坚定不移哪怕历尽千辛万苦也无怨无悔一去不回头呢?
# 理论部分
通过学习 笔者了解到 过程激励理论给出了上述问题的答案
其中有三大理论:期望理论、公平理论、强化理论
## 期望理论
期望理论关注2个概念:效价 和 期望
效价 指 这个步骤对达成理想目标的重要程度
期望 指 对自己能成功完成这个步骤的可能性的估计
大致意思是:当人认为某件事做成之后对自己很有价值 且自己很有可能做成此事 那么他就会很愿意去做这件事
在本题中 如果把一件事摆在攻击方面前 并且让他意识到“只要做成了这件事就能向破解此题迈进一步” 且他是能做成这件事的 那么攻击方就会去做这件事
那么 出题方该如何把‘沟’伪装成一件有效价且期望高的事呢?请见后文
## 公平理论
公平理论描述的是:心理账户追求平衡
意思是:人人心中都有一杆秤 人人都有追求公平的欲望
所谓公平就是 更多付出就应该有更多收获 人需要心理上的一种收支平衡
如果让攻击方觉得此题公平 他就会继续破解下去
反之 如果攻击方觉得 如此付出是没有收获的 或者收获不佳的 那么他就会干别的去
公平 可以体现在两个方面:纵向公平 和 横向公平
纵向公平关注的是:现在的付出比过去的付出多 那么现在的收获就应该比过去的收获多
横向公平关注的是:自己的付出比别人的付出多 那么自己的收获就应该比别人的收获多
如果让攻击方觉得 他在此题中的努力越多 就越有可能破解此题;他的努力比别人越多 他的破解机会就比别人更大 那么他就会愿意干下去;虽然他在这道题上花了更多的时间 但一旦成功就能获得更高的奖励
如何让攻击方感受到这两种公平呢?请见后文
## 强化理论
强化理论关注的是:刺激与行为之间的函数关系
强化分为 正强化 和 负强化
正强化指:由于一刺激物在‘个体作出某种行为’后出现 从而增强了该行为发生的概率
讲人话 当攻击者在做完一件事之后 如果能够得到某种奖励 那么他将来就会更有可能继续做这件事
反之 如果人做完一件事后 受到了惩罚 那么他将来就倾向于避免此事 此所谓负强化
如何能够让攻击方在走上出题方预设的错误之路时 不断得到奖励 以使之继续走下去?
如何安排这些奖励的类型、大小、频率?请见后文
# 线索和目标
在讲具体实施方法之前 笔者还想铺垫一下 先引入一个概念:线索
所谓线索 是在游戏的特定阶段 给攻击方的一个提示 能够为攻击方指出本阶段的探索方向 或本阶段的答案
在每个特定阶段 可以存在一个或多个线索 这些线索可以指向同一个方向 也可能指向不同方向
在每个特定阶段 除了线索以外 其它信息应该都是无贡献的
线索有很多种形式 包括但不仅限于:
一种特殊的指令(比较、跳转、异常等)
一段特殊的数据(字符串、资源等)
一种数学关系(满足某个方程、满足一定的过滤器等)
原则上讲 所有KCTF的题目 都是由多个线索组成的 将攻击方引向最终的正确答案
站在主办方的角度 为了公平 看雪规定必须有正确线索链 且顺着正确的线索链应该能在5分钟内走到正确终点 如果出题方无法证明这条正确线索链的存在 就算违规
站在防守方的角度 为了胜出 根本就不想给攻击方留下线索 那些留下的 要么是不得已 要么是不小心
我们细分一下
1)所有的不小心 理论上都是可以避免的 这里不讨论
不得已 可以分为主观和客观
2)主观上的不得已 是因为必须符合看雪的规定 必须要留下正确线索链
3)客观上的不得已 是由于技术原因 为了达成既定的业务目标 难以避免地留下了线索(上一篇已经描述过 这种不得已是可以通过单向函数或单向陷门函数所避免的)
显然 一个无设计缺陷的CM中所留下的线索 只有一种情况:防守方为了满足规则而故意留下的线索
笔者经过一些探索 发现 如果出题方掌握了正确的出题框架 在出新题时避免出现过去的失误且不引入新失误 则这个过程一定能把CM引向存活
但是 在这个过程中 除了能够走向存活并最终成功以外 似乎并无多少其它成果或乐趣
相反 这是个很乏味的过程
拿魔法森林举例 它避免了密室逃脱的’不小心’ 同时加大了埋藏线索的深度 最终使得破解者数量明显减少
可以预见的是 如果作者沿此数学模型继续加大埋藏线索的深度 这个破解人数还会继续下降 直至最终为零
但同样可以预见的是 此题存活胜出之日 也就是此出题思路寿终正寝之时
躯体活下来的那天 也就是灵魂死掉的那天
当笔者想明白了这一点后 跟一些’老人’交流
发现 他们大多早就已经参透了这一点 早已经不是为了名次和胜出而参赛 而是追求一些更高的东西
于是 笔者也决定改变出题目标 将来不再以存活作为目标 而是更倾向于实战 同时尽可能多创造些乐趣
在新出题时 会使用到一些将来在商业实战环境下用得上的方法和技巧
如果胜出 则说明这些方法和技巧是有实用价值的 也算是对所有参与者的一种回馈
铺垫结束 下面开始详细介绍 如何给对手挖沟
# 如何给对手挖沟
## 一、纵深
CM一定有一条解题捷径(否则违规)
值得注意的是 出题方应该在不违规的条件下 尽可能隐蔽这条正确线索链 这样才能为后面的’挖沟’留下足够的纵深
打个比方 如果攻击方需要走10步才能看到正确线索链的第一个线索 那么那些有意布置的误导线索链的起点必须在10步以内
也就是说 正确线索链越是隐蔽 那么可挖沟的空间就越大
这里 不得不提到一个硬性要求:正确线索链的总长度不能超过5分钟
如果正确线索链由5个线索构成 那么第一个线索大约就1分钟
如果想挖沟 那么沟的起点必须在这1分钟之内出现
## 二、起点
根据期望理论 首先要给出有吸引力的效价!
在部落冲突中 一眼望去 数据看上去都是随机的
看到什么 才会让攻击者觉得是对破解有价值的呢?
答案是:任何看上去不随机的数据 都会显得有价值!
什么样的数据会不随机呢?
笔者一共设计了3道沟:字符串、机器码、素因子
1)字符串是肉眼可见的
随机数据中是不易出现可读字符串的
此题中选用的字符串是:暴 风 雪(题目中已给提示)
首次出现时 用的是明文 且出现在串首 极易被发现
2)机器码是十六进制的可执行代码
随机数据通常不是可执行机器码
此题中选用的机器码是来自于经典的exe代码片段
一般人不容易识别出来 但是职业破解者大多能一眼看出来(如果攻击者把它当作代码看的话)
3)素因子是指一个整数的最大素因子
随机整数的最大素因子的长度通常是整数长度的70%左右 如果长度偏离太远 说明这个整数异常(可能不随机)
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!