如何防止Windows服务的代码注入/交换?

如何防止Windows服务的代码注入/交换?

嘿哟!

作为我们产品的一部分,我们在客户的服务器上有一个本地安装程序,可以与他们的数据库交互。我们目前正在将其转换为 Windows 服务。我们已经找到了如何制作Windows 服务使用国家安全监测中心但是我们遇到的一个问题是如何确保我们不会允许攻击者将我们的代码替换为他们的代码,从而使我们的客户面临安全风险(例如提升的权限)。

更具体地说,该服务将运行类似的命令%SOME_DIR%\node.exe my_javascript.js,我们希望避免外部播放器简单地切换出node.exe或javascript文件。

我的问题有三个:

  • 没有管理权限的攻击者是否有可能切换服务使用的文件?
  • 这是否根本不是一个安全问题?或者我们是否可以假设,如果攻击者有能力达到可以切换文件内容的程度,那么游戏就结束了?
  • 如果这是一个安全问题,我们如何避免这个问题/降低风险?有没有办法锁定文件,以便只有特权用户(或服务本身)才能更改文件的内容?解决方案应该允许服务自动更新其代码。

非常感谢你的回答!

干杯☀️

菲尔

答案1

让我们看看我是否可以回答您的 3 个问题。

  1. 假设您的服务可执行文件和 .js 文件位于普通用户可以访问(写权限)的目录中,它可以轻松修改 .js 文件(添加/删除代码)、用同名的全新文件替换 .js 文件(覆盖合法文件)甚至删除它(阻止服务正常启动)。可执行文件也是如此。它甚至可以被恶意文件替换。

  2. 这是一个安全问题,因为您并不总是需要系统管理员权限才能修改文件。您描述的情况可能被具有用户权限的攻击者利用来获取管理员权限(特权升级)。

  3. 您应该将服务可执行文件和 .js 文件放在只有具有管理员权限的用户才有写入权限的目录中。这样可以降低风险。此外,请确保将服务命令放在引号(“”)内,以防止 Windows 未加引号的服务路径枚举(滥用未用引号括起来且其中包含空格的命令行的服务)。

如果您需要了解我的任何答案的更多详细信息,请随时询问!

相关内容