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

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

如果 Linux 计算机上的用户帐户受到威胁,显然该用户拥有的所有文件都会受到威胁。

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

是否有针对这种攻击的良好防御措施,或者是否普遍认为使用 sudo 会损害 root 权限?


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

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

答案1

完全阻止此类攻击是不可能的,至少在不进行重大系统重新设计且不给用户带来沉重负担的情况下是不可能的。

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

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

有一种方法可以控制对您的帐户的损害,即要求任何权限升级都必须通过完全可信的用户界面。这意味着:

  • root 身份验证只能经过不属于该用户且无法由用户控制的进程。特别是没有X11接口。
  • 您必须有一种方法来识别登录提示是否真实:否则攻击者可以模拟受信任的 UI。有两种方法可以实现这一点。

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

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

哦,一旦攻击者获得 root 权限,他就可以轻松安装 rootkit,使其无法被检测到。无论如何,本地攻击很常见;如果攻击者已经破坏了您的帐户并且这是高级攻击(如果您只是让终端无人看管则不一定是这种情况),则假设 root 帐户也受到了破坏。

答案2

sudo可以在配置中限制用户可以执行的命令sudo。 Sudo 不需要等同于 root。

否则,我想你回答了你自己的问题——如果我有鸡舍的钥匙,而狐狸先生得到了我的钥匙,那么我就能吃掉所有的鸡。对此没有解决办法。

不过,至少有一些类似tripwire或 之类的工具ossec可以在安装 Rootkit 时向您发出警报。 请参阅此了解一些详细信息

答案3

Tripwire/AIDE/Samhain 是 HIDS(基于主机的入侵检测系统)的工作方法。其中一些可以与中央服务器部件结合使用,因此签名不在本地计算机上(例如用于 Samhain 的 Beltane)。

另一种方法(我在工作站上使用)经常更改文件,即检查操作系统文件是否仍然一致。

我通过完整地rpm -Va将输出放入文件中并将该输出与下一次运行进行比较来做到这一点。这样我将捕获不属于操作系统补丁更改一部分的二进制更改(我也打开 gpg 验证)。

对于这两种方法都有办法规避它们......

相关内容