破解以下版权保护有多容易?

破解以下版权保护有多容易?

我正在尝试复制保护一些作品,这是一个可启动的 SD 卡,用于在 ARM 设备(Raspberry Pi)上启动 Linux 内核。我正在使用这种方法:

  1. 该方法使用 initrd 来挂载加密的根文件系统。
  2. initrd 根据 SD 卡的 CID 生成文件系统的密码。(使用哈希函数,尚未决定使用 md5 还是 sha1)。Initrd 将尝试使用生成的密码挂载文件系统。
  3. 现在,最有趣/最可疑的部分来了:initrd 本身使用自定义 C 函数加密,基本上每个字节都使用自定义伪随机生成器进行异或运算。内核经过修改,具有相同的加密函数,可用作解密器。
  4. 系统本身被精简,因此无法使用键盘或外部存储。单个应用程序全屏运行。

因此,在引导加载程序加载内核和 initrd 后,内核会解密 initrd 并执行其 init 脚本,该脚本将生成密码并挂载根文件系统。

我的问题是:破解这个设置(解密根文件系统并使其从任何 SD 卡启动)有多容易?最薄弱的部分是什么?反编译内核并找到那些自定义加密函数有多容易?

编辑:这里有一些更正,这样你就不会在显而易见的事情上浪费时间:

  1. 根设备将使用 LUKS(aes256)加密,并且密钥将由一些 HMAC 函数使用 SD 卡的 CID 和一些盐生成。
  2. initramfs 加密的伪随机算法实际上是 RC4,只是使用一些自定义函数生成密钥,因为如果我将密钥存储在一个字节数组中,那么检索它就会变得非常简单(是的,这是通过模糊性实现的安全性,但似乎没有其他办法)。
  3. 我知道如果使用 SD 卡模拟器,有人可以复制这个系统并启动,但这对我来说没问题,因为这非常困难,并不是任何人都能做到这一点。(也不是任何人都愿意处理模拟器)

答案1

破坏这个设置(解密根文件系统并使其从任何 SD 卡启动)有多容易?

“破解”您的设置的难度取决于您用于签名/加密文件系统本身的方法的熵位数(因为这决定了可用于暴力破解密码的唯一组合的总数)。

最薄弱的部分是什么?

毫无疑问,使用预定义的CID作为密码,以及使用自定义的伪随机数生成函数。

SD 卡的 CID 仅应该是只读的,但如今,找到不兼容的闪存设备并不罕见。 有些人甚至表现出覆写某些 SD 卡的 CID 可能与 CID 不匹配。这样更容易暴力破解密码,尤其是当一个人只是模仿克隆您的 SD 卡后(您可能还想考虑这一点)。

最后,使用任何类型的伪随机数生成器都存在一些内在缺陷,正是因为它不是随机的- 它的名字是有原因的伪随机。最好使用预先制作的加密引导加载程序(例如TrueCrypt或 LUKS,它们都可以在 Raspberry Pi 上运行),避免进行任何手动内核修改。

反编译内核并找到那些自定义加密函数有多容易?

反编译任何东西都非常困难。相反,反汇编已编译的应用程序通常很容易,并且有许多工具可用于协助逆向工程汇编成另一种高级语言。如果攻击者甚至可以访问已编译的内核,那么分析伪随机数生成器之类的东西可能很容易,除非代码是故意混淆的。


TL,DR:在加密和安全方面,不要重新发明轮子,坚持久经考验的方法。目前已有几种全盘加密选项,并且已证明它们在 Raspberry Pi 上工作得很好。我会避免使用 SD 卡的 CID 作为一种“密码”——即使它无法更改,也有办法伪造这个值。

SD 卡规范中已包含复制保护,心肺复苏术

答案2

熟练的人破解这个漏洞不会有太大困难。在模拟器下启动 SD 卡相对容易,然后只需从 RAM 中读取密钥即可。然后他们会将没有版权保护的版本发布到海盗湾(等等),就这样。

或者,使用模拟器将 shellcode 注入正在运行的模拟系统。然后使用正在运行的系统复制解密的 rootfs(或使用 读取密钥dmsetup table --showkeys等)。

快速搜索后发现Raspberry Pi 模拟器,因此部分工作已经完成。

您遇到了另一个问题,特别是这个:

内核经过修改,拥有同样的加密功能,起到解密的作用。

根据 GPL 条款,您分发此代码的任何人都有权获得内核源代码。因此,您无需反汇编它,只需使用它diff来查找额外的功能即可。

(通过反汇编找到它并不难,因为你可以例如检查一下库存内核)

我对 Raspberry Pi 启动代码不是完全熟悉,但如果您可以使用嵌入式加密密钥(然后传递给内核)重新刷新引导加载程序,那么它至少不会在 SD 卡上,因此它会挫败尝试让它在模拟器中启动的尝试。

相关内容