以普通用户身份运行不受信任软件的危险是什么

有时候我必须使用一些我不信任的专有软件,甚至是预编译的开源软件,我不知道它们是否已被编译为源代码。

假设我们在/ opt / software中安装了一个专有应用程序,然后我们以普通用户身份运行它(没有sudo,gksudo等)。

  • 我知道当我们运行程序时,它能够连接到Internet,监视X,击键,收集用户数据等等。
  • 它不能改变系统中任何重要的东西或感染系统(因为Linux权限系统)。
  • 程序可以向用户的浏览器添加一些插件/扩展(因为浏览器配置文件在用户主目录中可用)。
  • 关闭程序并重新启动后,它就再也无法执行任何操作了。 错了,因为:
    • 程序可以将自己添加到执行自动启动过程的shell / file /目录中,因此它将在任何登录时运行。
  • 如果我们认为自动启动过程是干净的,没有重新启动,则程序的进程仍然有效。
  • 程序可以删除或修改用户主目录中的任何文件(或用户具有写入权限的任何其他文件)。

那我们该怎么办?

  • 我认为运行专有程序的唯一安全方法是将其作为另一个用户运行。
  • 如果以某种方式运行程序作为另一个用户是不可能的,那么我们应该更改自动启动文件权限,以便只有root可以更改它们。 关闭程序后,重启将完成这项工作。

我对吗? 有什么我想念的吗?

以新用户身份运行不受信任的软件是一个良好的开端,但这可能还不够。

  • 您可能认为敏感的许多文件和设备都是世界可读的。 即使作为非特权用户,您也可以从系统中提取大量信息(通常您可以阅读/etc作为开始)。

  • 您可能没有正确配置自己的东西。 例如,您是否已经确定每个人都无法读取这个“super-secret-passwords.txt”文件? 那个像你自己或root一样运行的旧软件怎么样?你确定它不会写任何对磁盘敏感的东西吗?

  • 代码运行,因为nobody可以上网并下载任务,在您的系统上执行代码。

  • 有时,用于进程间通信的本地系统上的套接字(一个unix域套接字)可能无法正确保护(有时是有充分理由的),并且任何进程都可以在其上进行读写。

实际上,有些事情你可以做。

你绝对可以检查程序在启动时没有启动任何东西。 这将是乏味的,你需要真正了解你的系统。 有很多方法可以自动启动服务。 (注意:如果程序以root用户身份运行,则所有投注均已关闭,因为它可能已修改init系统以隐藏自身)

运行可怕软件的重要提示

  1. 不要运行它。
    如果你可以完全避免它,不要运行任何你不能信任的东西。 至少要确保你做出合理的权衡。 复杂性是安全的敌人。 保证安全的唯一代码行是您从未运行过的行。 🙂
  2. 在虚拟机中运行该程序。
    设置VM非常简单(如果您不想设置任何虚拟化基础架构,VirtualBox非常棒)。 这意味着您将拥有一台不包含敏感数据的计算机(您需要将其放在那里),并且您可以控制它使用的资源。 这当然不能为您提供完整的保护(它可以执行诸如使用请求泛滥Web服务器,通过telnet登录到您的灯泡等等)
  3. 在容器中运行该程序。
    容器(LXD,Docker)为在本地计算机上运行代码提供了一些安全性。 他们并不完美。 但是,一个无特权的容器为您的程序提供文件系统隔离,这是一个问题。 正确保护容器是一门艺术和科学,但它变得越来越容易。
  4. 让其他人为您运行该程序。
    这与您的问题仅略微相关,但您有时可以通过使用第三方服务来避免运行旧的,可怕的软件或复杂且难以正确保护的软件。 电子邮件就是一个很好的例子。 我不相信自己有耐心和业余时间来主持和维护我自己的电子邮件服务器。 保持这样的安全是很多工作。
  5. 以独立用户身份运行它。
    作为最后的手段,如果您觉得权衡是值得的,请使用专门为此目的创建的新用户帐户运行程序。 我用我信任的软件做到这一点。

选项1是最好的。 🙂

一般建议

  • 您的操作系统相当安全。 当然不是完全安全,但Ubuntu有一个相当不错的记录。 您在其上安装的其他软件可能不太好。 因此,在许多独立的隔离计算机上运行您的软件。 这将确保一个程序中的错误并不意味着另一个可能更敏感的程序变得可利用。
  • 转到网上。 如今,大多数最终用户软件都有很好的网络选择。 在我的机器上,我几乎运行Chrome和Emacs,就是这样。 当然,使用Web服务有其自身的安全隐患。
  • 转到云端(用于服务器软件)。 您确定需要运行自己的电子邮件服务器吗? 网络服务器? 数据库? 转到云端,让其他人为您完成所有繁琐的安全工作。