0

假设我在 linux-kernel 中插入了 Loadable-Kernel-Module 并挂钩了读取、写入、打开和关闭功能。所以现在我可以停止对任何文件的访问,但我想阻止文件被复制到设备外部,比如 USB 设备、卡、磁盘等。我想知道的是,坐在 LKM 中并与函数调用挂钩怎么能我确定正在将文件写入外部设备?

我还想知道在复制操作期间使用了哪些系统调用?我知道一个程序打开文件从中读取(读取系统调用),然后写入第二个文件(写入系统调用),但是当我试图停止对打开一个进程的文件的写访问时,我观察到了奇怪的行为文件从不对该文件调用写入操作以保存文件(检查 pdf 查看器)。

如果有人知道这种奇怪的行为,或者您知道如何停止写入文件,那么也请分享。

4

1 回答 1

1

他们可以mmap做读/写。或者他们可以将整个原始文件读入内存,关闭它,然后打开目标。

或者他们可以加密文件,然后将其写入 USB 上的新文件。

或者他们可以对内容进行小幅编辑,然后将其保存。

或者他们可以使用 gvfs 访问网络/USB 设备。

或者用户可以重新启动并将文件复制到不同的操作系统中。


真正突出的是这个问题真的很困难——一个坚定的用户总是会找到一种方法来从他们有权访问的系统中提取数据。

您最好的选择只是为了防止意外泄漏 - 因此在可移动媒体上关闭后扫描文件,并检查它们没有您不想泄漏的内容。如果有,请覆盖并删除。

或者首先阻止设备安装,并禁用 gvfs。


至于为什么你的钩子没有拦截 write(),或者:

  1. 你的钩子实际上并没有拦截操作。
  2. 该应用程序没有使用 write() 将内容放入文件中。
于 2013-03-26T18:21:41.043 回答