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

Rav*_*ina 6 permissions security proprietary

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

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

  • 我知道当我们运行一个程序时,它能够连接到互联网、监控 X、击键、收集用户数据等等。
  • 它不能更改系统中的任何重要内容或感染系统,(因为 Linux 权限系统)。
  • 程序可以向用户的浏览器添加一些插件/扩展(因为浏览器配置文件在用户主目录中可用)。
  • 关闭程序并重新启动后,它无法再执行任何操作。错误,因为:
    • 程序可以将自身添加到执行自动启动过程的外壳/文件/目录中,因此它可以在任何登录时运行。
  • 如果我们认为自动启动过程是干净的,无需重新启动,则程序的某个进程可能仍处于活动状态。
  • 程序可以删除或修改用户主目录中的任何文件(或用户具有写权限的任何其他文件)。

那么我们应该怎么做呢?

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

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

Ste*_*zzo 5

作为新用户运行不受信任的软件是一个好的开始,但这可能还不够。

  • 您可能认为敏感的许多文件和设备都是世界可读的。即使作为非特权用户,您也可以从系统中提取大量信息(通常您可以先阅读/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 服务当然有其自身的安全隐患。
  • 转到云(用于服务器软件)。您确定需要运行自己的电子邮件服务器吗?网络服务器?数据库?转到云端,让其他人为您完成所有繁琐的安全工作。