忽略文件扩展名难道不会带来安全风险吗? .pdf 文件完全可以是批处理文件,不是吗?或者 .txt 可以是 .pdf (带有嵌入式 js)。这里的可能性似乎是无限的。
问题不在于 Linux 选择了错误的程序来运行文件。我知道linux如何知道文件类型如何文件扩展名以及与 Linux 中程序的关联。然而,这不是让攻击者很容易欺骗用户运行错误类型的文件吗?
答案1
文件的“运行”方式有多种上下文。
第一种是如果您要求内核使用execve()
系统调用来运行程序。这就是文件的执行权限发挥作用的地方;如果没有设置执行权限位,则该文件不能以这种方式作为程序运行。
第二种是使用其他一些特殊的 shell,例如 Unity、Plasma 或 Nautilus。这些 shell 通常会运行file
程序来检查文件并检索 MIME 类型——文件类型的声明并提供视觉指示符。如果被要求打开文件,他们通常会调用xdg-open
,它将再次file
在该文件上运行,然后查找系统配置为对该类型的文件执行的操作、可用于打开该文件的程序等。
有一个特殊且有趣的案例。与 Windows 的“.lnk”快捷方式文件非常相似,Linux 也有“.desktop”文件。这些文件包含有关文件图标的外观、文件运行时应执行的操作等的说明。
答案2
执行位是针对这种攻击的通常保护措施。下载文件的程序总是应该从中删除执行位,而没有设置执行位的文件不应该能够执行任何危险的操作。看https://wiki.ubuntu.com/Security/ExecutableBit详细信息(至少在 Ubuntu 上)。