防止 Linux 中的二进制植入攻击

Ali*_*Ali 6 shell security not-root-user

如果 Linux 机器上的用户帐户被盗用,显然该用户拥有的所有文件都会被盗用。

不幸的是,如果受感染的用户也有 sudo 权限,似乎可以使用二进制种植来轻松获取 sudo 密码,从而将攻击升级为 root 权限(不好)。

是否有任何针对此攻击的良好防御措施,或者是否普遍接受如果使用 sudo 会损害 root 权限?


上一个相关注释的问题: zsh - 在 <tab> 上完全展开二进制路径

这并不能解决问题,因为即使您的 shell .rc 文件归 root 所有,本地用户也可以将其删除并替换为包含恶意 $PATH 变量的文件,或者可以替换打开终端的键盘快捷键由一个恶意的。

Gil*_*il' 9

不可能完全阻止此类攻击,至少不进行任何重大的系统改造和用户的沉重负担。

如果攻击者对您的帐户具有写入权限,则用户可以创建一个模拟环境,将所有入侵痕迹隐藏在您的眼前。最明显的方法是使用LD_PRELOAD加载一个隐藏自身和攻击者植入的其他任何东西的库(这不适用于静态链接的二进制文件,需要一个更复杂的包装器)。

在攻击者升级到其他帐户之前,其他用户仍然可以看到攻击。因此,您可以让以 root 身份运行的进程检查您帐户中的文件并报告任何更改。这样做的问题是您将进行很多合法的更改;您不太可能注意到噪音中的非法变化。

有一种方法可以控制对您的帐户造成的损害,那就是要求任何权限提升都可以通过完全受信任的用户界面。这将意味着:

  • 作为 root 的身份验证必须仅通过不属于用户且无法由用户控制的进程。特别是没有X11接口。
  • 您必须有办法将登录提示识别为真实:否则攻击者可以模拟受信任的 UI。对此有两种方法。

    • 拥有安全的注意力密钥,用户无法将其反弹至其他功能。按 SAK 在不受用户控制的终端上显示登录提示。这可以在一些 unices 上设置,但我不知道经过严格安全审查的完整解决方案。
    • 让系统再次通过用户无法控制的用户界面向用户进行身份验证。验证可以是静态的,例如向您展示您孩子的照片;这对您来说很容易验证,但也很容易在有针对性的攻击中进行欺骗。身份验证可以是动态的,系统会向您显示一次性密码,您可以在单独的受信任系统上验证该密码;这要求您拥有这样的系统(通常是 OTP 令牌)。

这两种方法都只适用于本地登录。远程工作时,您无法确定您与系统之间的路径。而且你不能使用任何方便的东西,比如sudo复制粘贴命令等等;你基本上需要从 UI 的角度做一些破坏性的事情,比如切换到不同的终端。

哦,一旦攻击者成为 root,他就可以轻松安装一个无法被检测到的 rootkit。无论如何,本地攻击很常见;如果攻击者入侵了您的帐户并且这是一种高级攻击(如果您只是让终端无人看管,则不一定是这种情况),请假设 root 帐户也遭到了入侵。