首先,让我提到,我假设配置是由当前Linux桌面发行版(例如Debian、Fedora)设置的。我确信,有些方法如果得到实现,将减轻这里描述的问题。我感兴趣的是“开箱即用”的保安。
在我看来,shell执行像~/.profile或~/.bashrc这样的文件,允许完全操作用户的执行环境,并且是用户拥有的,这一事实破坏了像sudo这样的程序能够安全运行的任何希望。问题是,任何以用户身份运行的恶意程序都可以编辑这些文件,例如,修改PATH环境变量以包含假的sudo可执行文件,例如PATH="$HOME/.evil:$PATH",恶意程序也在其中创建文件$HOME/.evil/sudo。然后,下次用户在shell中键入sudo时,将运行假sudo并记录键入的密码。因此,即使原始恶意程序只有用户权限,假sudo也可以获得root权限。
实际上,我安装Ubuntu时创建的默认.profile文件包括以下几行:
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi因此,甚至不需要修改.profile --只需创建$HOME/bin/sudo,它就已经是PATH上的第一个了!
我的观点并不是在运行任意恶意代码时已经“太晚”了,或者用户可能会注意到这种攻击(我想这类似于一次仿冒攻击)。我希望以用户身份运行的恶意程序可以做任何用户可以做的事情。然而,我没想到的是,它可以做的比那个用户更多(root特权)。
我的问题实质上是:
sudo可执行文件?sudo的默认方法不应该确保它实际上是系统提供的可执行文件(没有人会每次输入/usr/bin/sudo )吗?由于sudo执行系统关键的安全操作,因此使用PATH变量隐藏其位置的可能性似乎带来了很大的风险,但并没有带来什么好处。在这样的环境中,使用sudo似乎根本上是不安全的,最好以root身份登录并在单独的TTY上登录。发布于 2018-06-11 00:52:55
首先,更改.profile不会自动实现权限提升。受影响的用户必须已经拥有sudo权限。
1- sudo没有被卷起。你在用别的东西代替它。您可以更改.profile并添加alias sudo=~/.evilsudo并实现相同的目标。
2-您可以考虑配置sudo的懒散方式。在桌面环境中,情况就是这样,但在服务器环境中则不然。在服务器环境中,/etc/sudoers应该只授予用户执行任务所需的命令。您可能会期望Oracle运行sudo service oracle,因此这将适用于sudoers。例如,不是oradmin ALL=(ALL:ALL) ALL。
如果有人在你的账户上运行代码已经太晚了。任何更改您的.profile的人都可以启动另一个shell,捕获每一个按键,您不仅会丢失密码,还会丢失您在上面键入的所有内容。远程ssh密码,数据库密码,ftp密码,任何东西。如果你的.profile被破坏了,游戏就结束了。
如果您真的想保护用户不受此影响,请将每个用户可写目录挂载为noexec。这样,~/bin或/tmp或其他任何东西都不会有执行任何东西的权限。你稍微增加了安全性,大大减少了方便。
https://security.stackexchange.com/questions/187502
复制相似问题