乐高 NXT 漏洞利用和漏洞?

逆向工程 调试 开发
2021-06-17 09:14:10

首先,我不确定我是否应该在 Lego Stack Exchange 网站上或这里发布这个,我决定这个网站与这个问题有更多的关系(我希望我不会因此而受到不良影响)。好的,我和我的朋友们为了好玩玩乐高 NXT 相扑机器人比赛。基本上,您构建了一个等待 5 秒钟并与机器人竞争以留在板上的机器人。我们通常专注于机械方面来战胜其他机器人(找到它们并将它们推下棋盘),但我有了尝试软件攻击的想法。我的想法也是:

  1. 找到某种我可以从另一个 NXT 中利用的蓝牙漏洞(我在 NXC 中编写我的程序)。
  2. 上传一个恶意程序,使机器人永远向后行驶。
  3. 以某种方式执行程序(并获胜!)。

我曾尝试测试 NXT 蓝牙的漏洞(我了解 Windows/Linux 开发和调试知识),但我找不到任何东西。主要问题是 NXT 固件处理蓝牙连接,换句话说,您运行需要蓝牙的程序之前使用密码连接设备所以,我的问题是:

  • 这甚至有点可能还是浪费时间?
  • 如果存在 NXT 蓝牙漏洞,我是否可以从另一个未连接的 NXT 发送它?
  • 这是发布此问题的正确位置吗?
  • NXT调试甚至可能吗?

更新 首先,感谢所有的想法和答案。其次,有几个答案说明了我试图做的事情的合法性。是的,我住的地方是合法的。第三,我与比赛的主要人物和评委进行了交谈,他说他很乐意看到这样的软件攻击。

我现在在哪里, 我有 Kali Linux 并且找到了 mac 地址。我还在这里找到了一篇 关于控制协议的论文。我仍然面临的主要困境是必须我打算连接的设备上输入蓝牙密码任何更新都会在这里发布!

2个回答

两个主要问题:如果您的比赛是与一个正式的组织/“朋友”的人进行的,但你们从来没有一起喝过啤酒,那么首先,您想看看这在您的国家是否合法。在 ole' US-of-A 中,因为这可能违反 CFAA,但我不是律师。另外,这会取消您参加(非正式)比赛的资格吗?

其次,想一想:众所周知,以下(厚脸皮)攻击很难防御,并且需要您和您的朋友在每次私下比赛之前和之后立即更改配对代码,这很痛苦。

除此之外,还有很多方法可以通过功能而不是错误来损害敌方团队:D 为什么要费力地对 NXT 的蓝牙堆栈进行模糊测试并查看它是否有 JTAG 端口供您在可以进行调试时进行调试它的简单方法?例如,在比赛开始之前(如果他们的 NXT 已经打开并且在范围内),您可以与它配对,浏览其保存的连接并控制他们的 NXT、他们的机器人和你的!或者直接与他们的机器人配对。但是,您需要配对码!

要执行此攻击,您绝对需要一个可以嗅探(高速)蓝牙流量的设备。强烈推荐像 hackRF 这样的软件定义无线电,因为它是我所知道的唯一可以捕获高速蓝牙数据包的蓝牙设备之一这些是我要利用敌方团队的乐高 NXT 或机器人的步骤:

对于第 1-4 步,请先在您自己的设备上而不是他们的设备上进行尝试。在“实时”运行(在步骤 5 中针对他们的 NXT/机器人)之前,最好先进行“干”运行(步骤 1-4)。

  1. 获取 Kali linux,因为大多数工具都带有图像
  2. 使用 bluesniff/blueScanner/等。获取设备的地址(看起来像一个 mac 地址)
  3. 从那里,使用bluesnarf发送自定义 ([-c]) 命令。在这种情况下,他们将遵守 Lego NXT 通信协议LCP 规范或者,您可以使用 bluesniff,记录/保存蓝牙数据包并使用裂纹来破解您的配对代码
  4. 可选:您从乐高 NXT 套件发送给机器人的正常 LCP 命令可能可以重播,因此我会尝试先使用 bluesnarf 和 SDR 嗅探和重播它们。
  5. 一旦你弄清楚发送到乐高 NXT 的蓝牙命令的格式,现在是完成侦察/枚举的时候了。机器人的地址,用你的 SDR 嗅探,记录/保存蓝牙数据包)并使用裂纹来破解它们的配对码。

有了敌方团队的配对代码,以及如何通过 SDR 和/或 bluesnarf 发送自定义 LCP 命令的知识,在下一轮中,您应该能够以多种不同的方式作弊:

  1. 让他们的机器人玩 Frogger:与敌方团队的 NXT 设备配对作为主设备(它是从设备)并编辑通过蓝牙推送到他们的机器人的 NXC 脚本
  2. 锁定他们:在比赛开始时更改他们机器人的配对代码
  3. 奖励:使用你学到的关于 LPC 和 SDR 的知识来编写一个轻量级的蓝牙模糊器,将蓝牙数据发送到 NXT 或机器人。您很有可能需要一个 JTAG 调试器。如果您能在 NXT 的蓝牙堆栈中找到远程代码执行 (RCE) 漏洞,您可以利用该漏洞将皮卡丘绘制到他们的 NXT 屏幕上,则可以获得奖励积分

我不知道您使用的是哪个版本的 NXT,因为我对 3.0 没有经验,但是如果您有 2.0 砖,您可以安装一个自定义固件,该固件允许您用不同的语言进行编码。

有两种主要的 cfw,一种允许您用 Java 编程,另一种允许您用 C 编程。

这里我建议您安装 RobotC,因为它非常强大;虽然您可以运行标准的乐高二进制文件(使用 block ide 创建的二进制文件),但您拥有 C 的强大功能。

从那里,您应该阅读 RobotC 文档并学习用于蓝牙的 API,然后尝试实施公共漏洞利用(如果存在)或开发您自己的漏洞利用。

我的观点是它需要很多时间,而且蓝牙协议可能是安全的(不是因为它不安全(因为它不是并且可以嗅探流量),但我认为很难在遥控乐高)

另外,看看堆栈粉碎漏洞。

编辑:还要考虑在比赛中使用这些技术可能是非法的,在您的国家,搜索漏洞也可能是非法的。