-3

我正在开发一些用C语言进行数据加密的软件。在这里,我只想问是否有可能利用一些技术来“不依赖特定的OS API”来进行防数据删除?如果您的回答是可能,如果您能告诉我如何并给我很多解释,我会很高兴。否则,如果不可能,您可以不加解释地给我答案“不可能”。

我之所以要问的原因是,我预计如果有一天攻击者已经物理访问了机器,使用依赖 OS API 的反删除将不起作用(例如,通过使用像 Backtrack 5 这样的非常快速启动的操作系统)。

4

3 回答 3

3

在 Unix 及其变体上,删除文件的标准系统调用是unlink(). 为了防止数据删除,您必须确保对该系统调用的每次调用,在系统运行的任何程序中的任何位置,都会执行您想要的任何替代技巧。这在程序级别很难做到;你必须提供一个修改过的 C 库,而且你仍然会发现有些人甚至在他们的工作中解决了这个问题(例如,他们编写了一些汇编程序)。因此,您可以通过修改unlink()内核中系统调用的行为来做到这一点,但这也很困难且不可移植。

在 Windows 上,相同的注释适用于unlink(),但很有可能还有许多其他接口也提供删除文件的机制。相同的论点适用,但您必须捕获更多系统调用等。

最后,如果您需要更多的钉子,unlink()系统调用并不是破坏数据的唯一方法。您可以打开文件并截断​​它,然后将其关闭。文件存在,但数据不存在。您可以打开文件并对其进行修改;文件存在,但原始数据丢失。

所以,我认为你正处于困难时期。

您首先提出了评论,然后对问题进行了修订:

[如果] 攻击者已经对机器进行了物理访问,则使用依赖 OS API 的反删除将不起作用(例如,通过使用像 Backtrack 5 这样的非常快速启动的 OS)。

我回答了:

  • 如果攻击者可以启动到不同的操作系统,那么游戏就结束了——您无法阻止其他操作系统删除您当前操作系统中的文件。

这些话可能陈旧而丑陋,但它们基本上是正确的。操作系统负责原始硬件。如果攻击者可以选择负责硬件的对象,则攻击者获胜。

也可以看看:

  • 软件安全十大不变法则

    1. 法则 1:如果一个坏人可以说服你在你的电脑上运行他的程序,那它就不再是你的电脑了
    2. 法则 2:如果坏人可以更改您计算机上的操作系统,那它就不再是您的计算机了
    3. 法则 3:如果坏人可以不受限制地物理访问您的计算机,那么它就不再是您的计算机了
    4. 法则 4:如果你允许坏人将程序上传到你的网站,那么它就不再是你的网站了
    5. 法则 5:弱密码胜过强安全
    6. 法则 6:只有管理员值得信赖,计算机才是安全的
    7. 法则 7:加密数据仅与解密密钥一样安全
    8. 法则 8:过时的病毒扫描程序只比没有病毒扫描程序好一点点
    9. 法则 9:在现实生活或网络上,绝对匿名是不切实际的
    10. 法则 10:技术不是灵丹妙药
于 2012-05-28T00:05:45.177 回答
1

我之所以要问的原因是,我预计如果有一天攻击者已经物理访问了机器,使用依赖 OS API 的反删除将不起作用(例如,通过使用像 Backtrack 5 这样的非常快速启动的操作系统)。

抱歉,如果攻击者可以启动不同的操作系统,那么您无能为力,因为您可能编写的任何反删除代码都不会运行。

除非您设法以某种方式拦截和修补对 ATA/SCSI 控制器的调用,并在 BIOS 将控制权交给操作系统之前插入此修补程序,但我认为这甚至是不可能的;另一方面,物理访问 = root 访问,攻击者也可以拿起螺丝刀,打开机箱,将磁盘连接到另一台计算机,然后为所欲为。

于 2012-05-28T00:18:49.013 回答
0

对不起,基本上IO操作系统。提供 IO 是操作系统最重要的工作。C 标准对它的定义如此之少,以至于它必须有所不同,尤其是在涉及取消删除文件这样晦涩难懂的事情时。

您可能会发现一些库将特定于操作系统的东西隐藏在一个不错的 API 后面,但它仍然取决于操作系统如何执行该操作。

于 2012-05-27T23:54:37.893 回答