勒索软件攻击可以使用零日漏洞,但攻击者通常只会欺骗易受骗的用户通过下载和点击来运行可执行文件。
假设我们有一个天真的用户并希望将他们限制在正常路径上。有没有办法限制他们创建具有可执行权限的文件?
或者,更一般地说,有没有办法建立一个访问控制列表并定义这个用户只能执行这个列表中的文件?
勒索软件攻击可以使用零日漏洞,但攻击者通常只会欺骗易受骗的用户通过下载和点击来运行可执行文件。
假设我们有一个天真的用户并希望将他们限制在正常路径上。有没有办法限制他们创建具有可执行权限的文件?
或者,更一般地说,有没有办法建立一个访问控制列表并定义这个用户只能执行这个列表中的文件?
您表示关注的具体攻击是:
至少在文件在 Web 浏览器中下载的常见情况下,在 Ubuntu 中应该已经通过浏览器遵守Execute-Permission Bit Required策略来防止这种情况。该政策最直接相关的部分是:
因此,如果用户被告知要在 Web 浏览器中下载程序,然后执行此操作,并尝试通过双击该文件来运行该文件,它就不会运行。即使下载的文件是 shell 脚本甚至是 .desktop 文件,这也适用。(如果您想知道为什么主目录中的.desktop 文件必须标记为可执行,即使它们不是真正的程序,这就是原因。)
用户可以通过配置更改来更改此行为。大多数人不会,而那些这样做的人可能不应该这样做,但这并不是你真正需要担心的。更大的担忧是我认为您已经担心的更复杂的攻击,其中恶意人员(或机器人)指示用户下载特定文件,将其标记为可执行(通过他们的文件浏览器或使用
chmod
),并且然后运行它。不幸的是,限制用户在文件上设置执行位或执行某些白名单上的文件以外的文件的能力不会明显缓解问题。一些攻击已经生效,而那些不能生效的攻击可以通过简单的修改使其生效。根本问题是即使文件没有可执行权限也能达到运行文件的效果。
这最好通过例子来说明。假设
evil
当前目录中有一个文件,如果赋予它可执行权限 (chmod +x evil
) 和运行 (./evil
),它会做一些坏事。根据它是什么类型的程序,可以通过以下方法之一实现相同的效果:. ./evil
或在当前运行的 shell 中source ./evil
运行命令。evil
bash ./evil
运行evil
在bash
.python3 evil
运行evil
在python3
.perl evil
运行evil
在perl
.interpreter evil
中运行。evil
interpreter
/lib64/ld-linux-x86-64.so.2 ./evil
运行二进制可执行文件evil
。其中没有一个,甚至最后一个,都不需要文件具有可执行权限,甚至不需要用户能够赋予文件可执行权限。
但恶意指令甚至不必那么复杂。考虑这个非恶意命令,这是官方推荐的安装或更新 NVM 的方法之一:
不是恶意的原因是 NVM 不是恶意软件,但如果 URL 指向某个在运行时会作恶的脚本,则该命令将下载并运行该脚本。任何时候都不需要为任何文件授予可执行权限。我相信,使用这样的单个命令下载并运行恶意文件中包含的代码是攻击者诱骗用户采取的一种非常常见的行为。
您可能会考虑尝试限制哪些解释器可供用户运行。但是实际上没有一种方法可以不显着影响您可能希望用户能够执行的普通任务。如果您正在设置一个极其受限的环境,几乎不允许用户在计算机上执行的所有操作,例如仅运行几个程序的信息亭,那么这可能会提供某种有意义的保护措施。但这听起来不像是您的用例。
因此,您的问题的大致答案是“不”。更完整的答案是,您可能会设法阻止用户执行除您在白名单中提供的文件之外的任何文件。但这是在严格的技术意义上的“执行”,它并不是实现运行大多数程序或脚本的全部效果所必需的。为了防止这种情况,您可以尝试将白名单设置得非常小,这样除了可能受到高度限制的解释器之外,它没有列出任何解释器。但即使你做到了,用户也做不了什么,如果你把它做得这么小,他们不会伤害自己,他们可能什么也做不了。(见Thomas Ward 的评论。)
如果您的用户可以伤害自己,那么他们可能会被愚弄而伤害自己。
您可能能够限制特定程序的使用或以其他方式可能有害的行为,并且如果您正在查看勒索软件倾向于遵循的特定模式,您可能能够防止一些特定的常见情况。(请参阅AppArmor。)这可能会提供一些价值。但它不会给你任何接近你所希望的综合解决方案的东西。
无论您最终采取何种技术措施(如果有),最好的选择是教育用户。这包括告诉他们不要运行他们不理解的命令,并且不要在他们无法解释为什么这样做相当安全的情况下使用下载的文件。但它还包括诸如备份之类的事情,这样如果出现问题(由于恶意软件或其他原因),所造成的伤害将尽可能小。
是*
它被称为受限外壳。
您可以使用
/bin/rbash
Ubuntu 中已经提供的 ,并将其与受限制的 PATH 变量结合使用。将rbash
禁止执行任何不在$PATH
.添加受限用户:
创建一个新目录,我们可以在其中链接二进制文件,用户将被限制为:
修改
.profile
文件:sudo vim /home/res-user/.profile
使
.profile
,bashrc
和.bash_profile
不可变:现在我们给用户唯一允许他做的事情,即打开 Firefox:
现在,如果我们以
res-user
只能打开 Firefox 的方式登录:我们不能轻易地逃离我们受限的外壳:
受限用户无法使文件可执行或启动它们:
受限用户无法执行来自互联网的恶意脚本,因为用户无法执行必要的命令:
* 有一些方法可以突破受限制的外壳,但如果您的用户能够做到这一点,那么他们可能不会像您想象的那样容易上当。