破解以下复制保护有多容易?[关闭]


11

我正在尝试对某些工作进行复制保护,这是一个可引导SD卡,用于在ARM设备(Raspberry Pi)上引导Linux内核。我正在使用这种方法:

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

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

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

编辑:这是一些更正,所以您不会在明显的事情上浪费时间:

  1. 根设备将使用LUKS(aes256)进行加密,并且密钥将由某些HMAC功能使用SD卡的CID和一些盐生成。
  2. 实际上,用于initramfs加密的伪随机算法将是RC4,只是使用某些自定义函数生成密钥,因为如果我仅将密钥存储在字节数组中,则将其检索变得非常简单(是的,这是通过默默无闻来实现的安全性)但似乎没有其他方法)。
  3. 我知道如果使用SD卡仿真器,某人可以复制该系统,但这对我来说是可以的,因为这样做很困难,而且没有人可以做到这一点。

内核和initrd存储在哪里?
user1686

全部都存储在单个SD卡中。两者都在单独的文件中。照常存储在/ boot中。
dimovnike

Answers:


7

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

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

最薄弱的部分是什么?

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

SD卡的CID仅为只读,但在当今时代发现不兼容的闪存设备并不罕见。 甚至有人展示了使用某些SD卡覆盖 CID 的能力。这将使密码破解变得更加容易,特别是如果克隆后只是模拟 SD卡(这可能是您可能要考虑的另一件事)。

最后,使用任何一种伪随机数生成器已经存在一些固有的缺陷,正是因为它不是随机的 -有一个原因将其称为伪随机数。最好使用预制的加密引导加载程序(如TrueCrypt或LUKS,它们都可以在Raspberry Pi上运行),并且避免进行任何手动内核修改。

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

反编译任何东西都非常困难。相反,对已编译应用程序的反汇编通常很简单,并且可以使用许多工具来帮助将反向工程汇编回另一种高级语言。如果攻击者甚至可以访问已编译的内核,则除非伪造代码,否则分析伪随机数生成器之类的东西可能很简单。


TL,DR:在加密和安全性方面,不要重新发明轮子,坚持尝试并正确。有几种全磁盘加密选项已经可用,并且已经证明可以在Raspberry Pi上正常工作。我会避免将SD卡的CID用作一种“密码”-即使无法更改它,也有一些欺骗该值的方法。

复制保护已作为SDRM包含在SD卡规范中。


谢谢你的回答。我知道CPRM,但是它的规格已被NDA封闭,并且花费了很多钱(根据我的搜索)。至于LUKS和Truecrypt,它们需要在启动时手动输入密钥。如果我修改TrueCrypt引导程序以使用某些hmac函数从CID生成密钥,会比这更好吗?我也知道可以使用SD卡仿真器完成此操作,但对我来说还可以,这是海盗的便利等级。(我知道这里没有100%的保护,只要密钥在设备中是自包含的)
dimovnike 2013年

@ user2021201确实是我要引导您的方向。这将可能是相当容易的修改从源TrueCrypt的引导程序,虽然我不知道这将是多么困难,从一个引导程序获取CID(因为你没有加载操作系统从查询SD卡规格)。但是,如果您确实进行了管理,那么它可能是满足您需求的可接受且足够的解决方案。
突破

1

熟练的技术人员可以毫不费力地破解它。在仿真器下引导SD卡,然后从RAM中读取密钥相对容易。然后,他们将没有版权保护的版本发布到海盗湾(Pirate Bay)等。

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

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

您还有另一个问题,尤其是这样:

内核被修改为具有相同的加密功能,可以用作解密程序。

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

(并不是像通过检查与库存内核那样通过反汇编来找到它那样困难)

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


是的,我知道许可问题,我仍在寻找使内核完整无缺,甚至切换到FreeBSD内核的方法,但现在仅讨论技术问题。引导加载程序的想法非常有趣,但我找不到实现此目标的方法,显然没有这种方法。
dimovnike
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.