我正在开发一些用C语言进行数据加密的软件。在这里,我只想问是否有可能利用一些技术来“不依赖特定的OS API”来进行防数据删除?如果您的回答是有可能,如果您能告诉我如何并给我很多解释,我会很高兴。否则,如果不可能,您可以不加解释地给我答案“不可能”。
我之所以要问的原因是,我预计如果有一天攻击者已经物理访问了机器,使用依赖 OS API 的反删除将不起作用(例如,通过使用像 Backtrack 5 这样的非常快速启动的操作系统)。
我正在开发一些用C语言进行数据加密的软件。在这里,我只想问是否有可能利用一些技术来“不依赖特定的OS API”来进行防数据删除?如果您的回答是有可能,如果您能告诉我如何并给我很多解释,我会很高兴。否则,如果不可能,您可以不加解释地给我答案“不可能”。
我之所以要问的原因是,我预计如果有一天攻击者已经物理访问了机器,使用依赖 OS API 的反删除将不起作用(例如,通过使用像 Backtrack 5 这样的非常快速启动的操作系统)。
在 Unix 及其变体上,删除文件的标准系统调用是unlink()
. 为了防止数据删除,您必须确保对该系统调用的每次调用,在系统运行的任何程序中的任何位置,都会执行您想要的任何替代技巧。这在程序级别很难做到;你必须提供一个修改过的 C 库,而且你仍然会发现有些人甚至在他们的工作中解决了这个问题(例如,他们编写了一些汇编程序)。因此,您可以通过修改unlink()
内核中系统调用的行为来做到这一点,但这也很困难且不可移植。
在 Windows 上,相同的注释适用于unlink()
,但很有可能还有许多其他接口也提供删除文件的机制。相同的论点适用,但您必须捕获更多系统调用等。
最后,如果您需要更多的钉子,unlink()
系统调用并不是破坏数据的唯一方法。您可以打开文件并截断它,然后将其关闭。文件存在,但数据不存在。您可以打开文件并对其进行修改;文件存在,但原始数据丢失。
所以,我认为你正处于困难时期。
您首先提出了评论,然后对问题进行了修订:
[如果] 攻击者已经对机器进行了物理访问,则使用依赖 OS API 的反删除将不起作用(例如,通过使用像 Backtrack 5 这样的非常快速启动的 OS)。
我回答了:
这些话可能陈旧而丑陋,但它们基本上是正确的。操作系统负责原始硬件。如果攻击者可以选择负责硬件的对象,则攻击者获胜。
也可以看看:
我之所以要问的原因是,我预计如果有一天攻击者已经物理访问了机器,使用依赖 OS API 的反删除将不起作用(例如,通过使用像 Backtrack 5 这样的非常快速启动的操作系统)。
抱歉,如果攻击者可以启动不同的操作系统,那么您无能为力,因为您可能编写的任何反删除代码都不会运行。
除非您设法以某种方式拦截和修补对 ATA/SCSI 控制器的调用,并在 BIOS 将控制权交给操作系统之前插入此修补程序,但我认为这甚至是不可能的;另一方面,物理访问 = root 访问,攻击者也可以拿起螺丝刀,打开机箱,将磁盘连接到另一台计算机,然后为所欲为。
对不起,基本上IO是操作系统。提供 IO 是操作系统最重要的工作。C 标准对它的定义如此之少,以至于它必须有所不同,尤其是在涉及取消删除文件这样晦涩难懂的事情时。
您可能会发现一些库将特定于操作系统的东西隐藏在一个不错的 API 后面,但它仍然取决于操作系统如何执行该操作。