PATH 变量中的某些文件夹可供任何人写入。危险不危险?

信息安全 账户安全 环境变量 Windows 7的
2021-09-02 16:11:22

我注意到 PATH 环境变量中的一些文件夹(例如C:\Python)为机器上的任何人提供写入权限,包括没有管理员权限的用户。我知道人们可能会修改该文件夹中的 Python 可执行文件和内容。但是,如果我不使用 Python 会有多危险?此外,由于 Windows 上的大多数程序都是通过 GUI 或使用绝对路径调用的,因此此问题是否仍会影响 PATH 中其他更敏感的文件夹,例如System32

3个回答

如果我不使用 Python 会有多危险?

您对 Python 的使用与风险无关。

PATH 变量提供了一种无需输入完整路径即可调用程序的方法。虽然 Unix 人会考虑在 PATH 变量中放置一个可公开写入的目录(或 .),但这是一个大罪。风险在于攻击者可以用他们自己的恶意代码替换用户打算运行的程序,从而诱骗受害者运行它。

在 MS Windows 上,风险较低,但更难以缓解:

  • 大多数人不在 MS Windows 中使用命令行
  • 通常程序是从使用可执行文件的完整路径的资源管理器启动的
  • MS Windows 总是先搜索当前目录,然后再签入 %PATH% 以查找可执行文件(即风险被设计为 MS Windows)

免责声明:OP的问题是明确针对Windows的,所以这个答案只关注这个系统。对于 Unix 或类 Unix 系统,答案会有所不同。

问题并不在于 PATH 中的某些文件夹对任何人都是可写的。PATH 只是一个文件夹列表,您可以从中使用简单名称而不是完整路径启动命令。

但是,任何人都可以写入包含命令的文件夹(无论它们是否在 PATH 中)这一事实存在安全风险。

如果机器没有激活的服务器服务,并且只有一个用户在物理上受到保护,那么风险可能是可以接受的:如果您擦除/重写系统文件或任何其他可执行文件,您应该知道原因,只有您自己才能知道应该受到责备。但无论如何,最佳实践(由 Windows 规定)建议您在执行潜在危险任务之前收到警告,因此系统文件夹应该需要管理员权限才能写入。

但是如果超过一个人(这里不包括管理员)可以访问该机器,那么它就会成为一个严重的安全问题。一个可以自愿或不替换可执行文件或 DLL,另一个可以在执行 Python 脚本时启动不需要的程序。如果 System32 是可公开写入的,则不说,因为任何操作都可能导致意外结果。

TL/DR:除非您是机器的唯一用户,否则 Python 文件夹不应被所有人写入,但应需要管理员权限。


在 Unix 或类 Unix 系统上,问题会有所不同。第一个默认安装通常不会使包含可执行文件的文件夹可公开写入,并且 PATH 被大量使用。所以当然,在 PATH 中有一个可公开写入的文件夹本身就是一个严重的安全问题。但是Windows有不同的用法......

是的,如果没有适当的 GPO 保护以防止运行外部可执行文件(这本身就是一个严重的安全风险),这可能是一个安全风险。

通过将一个 PATH 文件夹换成另一个,您可以诱使用户运行与他们尝试运行的可执行文件不同的可执行文件。但是,如果您制定了合理的 GPO 策略,那么这样做最多会导致用户在几分钟内惹恼技术支持,因为“他们的”程序将无法运行。如果他们使用批处理脚本或命令行的话。大多数用户没有。