你想成为Minecraft世界中的超人,发现传说中的“古灵阁”(没错,和哈利波特系列同名的古灵阁藏宝阁),”拿“走其中几亿道具吗?
也许我们不知道《黑客帝国》描述的世界是不是真的就是我们这个生活的世界,但是在Minecraft的世界中,Neo确实存在:知名的Minecraft神秘组织SpawnMasons(在https://2b2t.miraheze.org/wiki/SpawnMasons 有关于他们的介绍)披露了一个影响Minecraft Beta 1.8至1.12.2版本的安全漏洞,并将它命名为“Randar”。这个漏洞最初是在2011年被引入的,直到10余年后才被发现,它能够让攻击者准确地定位到其他玩家的位置,无论他们相距多远。
先来看一段视频(注意!视频里面猝不及防植入的《崩坏:星穹铁道》广告不是我们提供的,米哈游没给我们付广告费):
SpawnMasons在上面的视频中指出,这个漏洞的核心原理在于游戏中的事件会共享某个随机数生成器(RNG),然后就可能被玩家预测到。具体到技术细节,在Minecraft世界中,每当物体被破坏时,游戏会生成掉落物品的随机位置。这个过程的随机值是通过调用java.util.Random
函数来获取的。问题在于,受到Randar漏洞影响的服务器版本(Beta 1.8至1.12.2版本)并没有正确使用java.util.Random
!在java.util.Random
中,使用了线性同余生成器(LCG)作为随机数发生器的生成算法,如果不同事件用到的LCG是不同的,那各个生成的随机数就确实是随机不可预测的。可是,但在这些存在漏洞的版本中,不同的事件用到了同一个LCG,导致生成的随机数可以被预测,甚至可以反推先前的序列!
该漏洞利用的总结如下:
-
服务器上的某个玩家(受害者)四处走动时,地图的两个“chunk”会加载到服务器的内存中,代表玩家所处的水平面位置(不包括纵向),范围为 -23440 到 +23440。服务器会检查附近的坐标,判断是否需要生成某种建筑物,这一过程中用到了LCG的某个序列,当两个“chunk”和随机数seed满足下面的同余关系时则生成该建筑物。
-
之后,作者控制的角色在相距遥远的某个地方开采了一个区块,掉落的物品出现在该块内的随机坐标处。这一步的计算用到了同一个LCG,它将随机数的高一半比特转变为浮点数,再加上区块的坐标。例如,如果块位于
(10, 20, 30)
,则该物品将出现在(10.25, 20.25, 30.25)
和(10.75, 20.75, 30.75)
之间的某个位置。
-
此时,作者可恢复三个连续随机数的高24比特;在这里,攻击者使用了一个密码学领域非常经典的算法——LLL lattice reduction算法,恢复出这三个连续序列,反推先前的随机序列。
-
但是,通过第一步的关系式可知,还有两个坐标仍然未知。这对于计算机来说显然不是问题,因为每个坐标的范围仅为4万多!固定seed时,遍历x的每个可能值,判断计算出的z是否在给定的范围里,即可确定其他玩家的水平坐标!作者的实验结果表明,利用CUDA和多线程技术加速,在3090上每秒破解一千万个种子,简直不要太简单~~
最后,作者利用上述思路开发了一个自动化工具,用于收集2b2t服务器上其他玩家的活动路线,生成了一张轨迹图。这就像在寻宝冒险中找到了一条捷径,轻而易举定位到宝藏的位置后捡走。通过这个工具,作者收集到6亿多的藏品,对其他玩家来说简直是噩梦!!!
好了,总结一下,要想在Minecraft世界中称王称霸,必须要掌握密码学知识!所以欢迎关注G.O.S.S.I.P 活动推荐 2024-04-07 上海期智研究院2024密码学夏令营(嗯,这才是今天真正的广告植入)。
详细内容:https://github.com/spawnmason/randar-explanation
原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 安全“事件” 2024-04-19 欢迎来到Minecraft的黑客帝国
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论