1

我为我们的内部公司用户编写了一个自助服务密码重置工具作为 C# Winform。

此应用程序使用其他自定义 Asp.net Web 服务,使用 HTTPS 和基于客户端证书的身份验证来生成随机 6 位代码并发送到移动设备或检索用户在注册自助服务时设置的 3 个安全问题.

代码/答案被发送回网络服务,如果验证,用户的 AD 帐户被解锁并且他们的密码重置服务器端。

我认为这在任何 SSPR 工具中都很常见,如果从另一台用户机器访问,一切正常,但是......

由于问题的性质是用户在需要重置密码时无法访问他们的机器,因此有人询问我是否可以从 Windows 登录屏幕启动此应用程序。

我已经编写了一个 POC 自定义凭据提供程序,它向 Windows 7 登录屏幕添加了一个新的“磁贴”,并在单击它时启动我的应用程序,但我不禁认为这可能是一个非常糟糕的主意。

由于它是从哪里启动的,该应用程序在本地 SYSTEM 用户的上下文中运行,这已经让我感到紧张了!

看看其他最常见的“付费”SSPR 工具,从表面上看,它们正在做类似的事情,即在登录屏幕上运行外部应用程序?

  • 在 winlogin 屏幕上以 SYSTEM 身份运行任何应用程序是否完全禁止?

  • 如果没有,我应该遵循哪些建议来填补任何漏洞?

  • 我还能做些什么来降低风险(在我的程序首次运行时进行某种模拟/取消提升?)

4

1 回答 1

1

在 Windows 凭据提供程序上,您可以让它登录,然后启动您的自助服务应用程序。我们试过了,这个过程本身需要的时间太长了。

相反,我们做了以下

创建了一个允许您注册自助服务的 Web 应用程序。问题答案或注册备用电子邮件地址。这都是微不足道的东西。

有趣的是,我们创建了一个 Winform 应用程序,其中仅包含该 url 的浏览器组件。然后,我们创建了一个凭据提供程序,该提供程序具有一个链接,单击该链接将打开 winform 应用程序。我们通过这样配置 Winform 来确保没有右键单击或启动新窗口的能力。

现在,如果用户忘记了密码,他们只需在登录前单击链接。Winform 加载,他们做他们的事。然后关闭 Winform。这一切都在登录屏幕上完成。

笔记。如果您尝试使用 wpf 而不是 Winforms 来实现,则应用程序需要相当长的时间来加载。

乐于分享代码。告诉我你需要什么。还要确保在创建凭据提供程序时为他们提供唯一 ID,而不仅仅是使用 Microsoft 示例。您还需要禁用原始凭据提供程序,否则最终会出现重复。我们使用组策略相应地禁用。

于 2017-02-21T21:20:06.393 回答