【问题标题】:Securing a string that will get executed保护将被执行的字符串
【发布时间】:2016-09-29 08:43:24
【问题描述】:

我正在编写一个在具有提升权限的 Windows 机器上运行的应用程序。

它通过 https 调用 web 服务器上的 api 并返回可执行文件的路径(例如 c:\windows\calc.exe)

然后软件会启动那个可执行文件。

我想要实现的是让应用程序能够安全地抵御想要侵入运行我的应用程序的机器的攻击者,以防他们入侵服务器并使 api 返回任意字符串。

我认为过滤常见攻击向量的字符串是一个很好的起点,但我应该在字符串中寻找什么?

我知道在这种情况下没有完美的解决方案,但我期待一些可以防止平庸黑客的想法。

谢谢。

【问题讨论】:

  • 1) 禁用父路径 (../) 2) 另外(?): 可能会禁用某些文件扩展名,比方说,您允许拥有 EXE,但不允许拥有 OCX、DLL、COM 等否则。
  • 好建议,可能我还需要过滤cmd.exe、explorer.exe和基本命令。
  • 不要在这种情况下运行提升的应用程序!那就是求你交出整个系统的钥匙。而是以最低权限运行,然后仅在执行实际需要提升的命令时提升。
  • HTTPS 已加密。使用证书和身份验证来确保您的客户端应用程序实际上是在与您真正受信任的服务器而不是中间人进行通信。然后,唯一的攻击向量是破坏服务器本身(不太可能)在加密之前发送恶意命令,或者破坏您的客户端应用程序(更有可能)在解密合法命令后忽略合法命令,而是执行恶意命令。但是,除非您的应用从一开始就以管理员身份运行,否则您缺乏提升会阻止您做任何有害的事情。
  • 该软件的主要目的是在没有显示器和键盘的计算机上运行,​​因此不需要用户干预。

标签: c# security delphi windows-7 windows-applications


【解决方案1】:

不接受任意命令字符串。相反,从一个固定的已知值列表发送——白名单。在接收端,将值转换为相应的命令字符串。例如,如果您要运行 10 个命令,请发送一个介于 1 和 10 之间的数字。

【讨论】:

  • 重点是让我能够执行一个我无法预测的任意软件,并加入白名单。
  • 如果你真的接受任意命令,那么你就无法区分来自普通服务器的命令和来自受感染服务器的命令。受感染的服务器可以告诉客户端运行他们想要的任何东西,因为这正是您设计的 普通 服务器要做的事情。您编写了自己的后门。
  • @sevron 您的期望不切实际。您想让恶意人员提升对您机器的访问权限吗?这简直是​​愚蠢的。
  • 我希望能够运行在无人看管的机器上工作所需的软件。防范恶意字符串只是一道额外的安全线,以防万一一切都失败了。
  • 听起来您正在重塑 Ansible 或 Symantec Management Agent。
猜你喜欢
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
  • 2023-03-29
相关资源
最近更新 更多