检测.NET应用程序是否以runas /netonly启动

4

是否可以检测应用程序是否使用了runas命令打开?

我如何检测所使用的用户?

runas /netonly /user:DOM\usr "C:\App.exe"

请检查这是否适用于您 以管理员身份运行 - Nitesh Shaw
2个回答

3

您可以使用以下方法检查运行应用程序的用户:

System.Security.Principal.WindowsIdentity.GetCurrent()

请注意,使用/netonly,无法在本地进程中获取提供的凭据。 LSA会处理这个问题,据我所知,您无法从本地进程中执行此操作。
关于为什么会出现这种情况,这个链接上有一些很好的解释。但基本上是因为:尽管您提供的凭据已存储,但只有在进行任何类型的远程身份验证(使用SSPI)时才会检查它们,并且只有在实际远程计算机上才会进行检查。
您甚至可以执行以下操作:
runas /netonly /user:FAKE\fake something.exe

即使凭证未被检查...因此,直到进行远程身份验证之前,您基本上不会获得认证令牌。

我唯一能想到的解决方案是尝试运行一个返回用户凭据的远程进程。


不,这不会给用户DOM\usr。 - Tim
@Tim 是的,我错过了“/netonly”这个参数,你可以看我的更新…我不认为有什么方法可以解决这个问题。 - Jcl
仍然有可能实现。在我的应用程序中,我使用了ServerManager.OpenRemote(ServerName)进行测试。该方法能够检测用户。 - Tim
是的,如果它使用SSPI,它将使用您提供的凭据在远程计算机上请求令牌:然后您可以找出远程计算机上的用户并将其返回到本地,但这需要在远程计算机上完成,而不是在本地进程上(根据我所知)。 - Jcl

0

你可以在Windows事件查看器的Windows日志 > 安全中看到:[

每当你使用/runas命令和/netonly选项运行时,你将在事件ID 4624或甚至4628下看到相应信息。

在这个例子中,我使用以下命令打开了一个VS 2022 Community Edition的实例:

 runas /netonly /user:MYDOMAIN\MYUSER "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\DEVENV.EXE"

如果您通过.NET进行了编程模拟,您应该在与上述显示的相同EventID下看到它。
注意:在这个例子中,您不需要调试应用程序来获取引发的EventID。只需要运行命令即可。
此外,如果您想要检查事件查看器的值,甚至在.NET中自己创建一个事件,您可以使用EventLog类:

https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.eventlog?view=windowsdesktop-7.0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接