#privileges #uac #elevate #command-line

deelevate

在Windows上降低权限

3个不稳定版本

0.2.0 2022年3月17日
0.1.1 2021年1月11日
0.1.0 2020年12月18日

84Windows APIs

Download history 808/week @ 2024-03-14 853/week @ 2024-03-21 711/week @ 2024-03-28 567/week @ 2024-04-04 470/week @ 2024-04-11 527/week @ 2024-04-18 673/week @ 2024-04-25 825/week @ 2024-05-02 660/week @ 2024-05-09 927/week @ 2024-05-16 717/week @ 2024-05-23 850/week @ 2024-05-30 639/week @ 2024-06-06 864/week @ 2024-06-13 601/week @ 2024-06-20 594/week @ 2024-06-27

2,898 每月下载量
用于 2 crates

MIT 许可证

81KB
2K SLoC

EleDo - Elevated-Do

下载EleDo.zip

这个仓库是EleDo(和NormDo)的家园,这些实用程序允许在Windows 10和更高版本中从命令行切换权限级别。

核心权限转换代码也作为Rust包和一个小型C库提供,以便基于控制台的应用程序能够检测并调整其权限级别。

虽然这个仓库以权限提升功能命名,但它最初的目标是将权限降低到“正常”级别。

为什么要提升权限?

在某些情况下,您可能需要比正常级别更高的访问权限;例如,安装软件或进行系统配置。这并不新鲜;大多数用户将使用“以管理员身份运行”选项来运行powershell会话,并以这种方式运行命令,留下特权会话开启以便方便,混合命令,并以比严格要求的更高权限运行大多数命令。

来自Unix系统的用户通常不这样做,而是使用名为sudo(超级用户做)的实用程序以增加权限运行特定命令。

这个仓库提供eledo.exe作为sudo的类似物;它将尝试使用Windows内置的用户账户控制机制来提示用户确认它应该以增加的权限运行。

这个仓库还提供normdo.exe(Normal User Do),它以相反的方式工作,将权限降低到正常级别以运行命令。这种功能对于希望以较低(如果不是最低!)权限运行的具有安全意识的代码非常重要,无论调用它的代码的权限级别如何。

如何使用Rust包?

这个包有两个逻辑部分;

  • 检测权限级别,包括提升高完整性管理员权限,以便嵌入的应用程序可以选择是否将其作为错误显示,或者继续使用包的第二部分...
use deelevate::{Token, PrivilegeLevel};

let token = Token::with_current_process()?;
match token.privilege_level()? {
  PrivilegeLevel::NotPrivileged => {
    // No special privs
  }
  PrivilegeLevel::Elevated => {
    // Invoked via runas
  }
  PrivilegeLevel::HighIntegrityAdmin => {
    // Some other kind of admin priv.
    // For example: ssh session to Windows 10 SSH server
  }
}
  • 以修改后的权限重新执行应用程序,同时将stdio流和进程退出状态返回给原始父进程。
use deelevate::spawn_with_normal_privileges;
use deelevate::spawn_with_elevated_privileges;

// If we have admin privs, this next line will either spawn a version
// of the current process with reduced privs, or yield an error trying
// to do that.
// The spawn_with_elevated_privileges function works similarly, except
// that it will only return when the calling process has elevated
// privs.
spawn_with_normal_privileges()?;

// If we reach this line it is because we don't have any special privs
// and we can therefore continue with our normal operation.

show示例演示了测试权限级别。

spawn示例演示了在较低的权限级别重新执行进程。

有什么需要注意的?

有一些权限级别在这个crate的视角下没有被映射为特权级别。这样做的原因是这些级别非常不寻常,可能不是人类用户,可能不应该让这个crate调整这些权限级别。

这可能让人感觉像是一个安全问题,但值得注意的是

  • 调用代码已经具有相等的或更高的权限(因此不可能进行权限提升)
  • 这个crate旨在为人类用户提供便利和一致性

实用工具

这个crate提供了用于以普通权限运行命令的 normdo.exe 和用于以提升权限运行命令的 eledo.exe。与其他提升解决方案不同,这两个实用工具都设计为在控制台中运行,并将目标应用程序的输出保留在该控制台中。此外,这些工具使用PTY API以正确支持运行终端应用程序,如分页器编辑器(vim.exe)!

这两个工具都需要将 eledo-pty-bridge.exe 与它们一起安装,或者将其放在PATH中。桥接进程需要托管PTY并在此替代权限上下文中启动程序。

eledo.exe

以提升权限运行程序

eledo.exe PROGRAM [ARGUMENTS]

eledo.exe 将检查当前上下文是否有管理员权限;如果有,则直接执行请求的 PROGRAM 并返回其退出状态。

否则,eledo.exe 将安排使用桥接到当前终端会话的提升PTY运行程序。提升需要当前进程能够与当前桌面会话中的shell通信,通常将触发用户的UAC提示。

> eledo.exe whoami /groups

GROUP INFORMATION
-----------------

Group Name                                                    Type             SID          Attributes
============================================================= ================ ============ ===============================================================
Everyone                                                      Well-known group S-1-1-0      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Local account and member of Administrators group Well-known group S-1-5-114    Mandatory group, Enabled by default, Enabled group
BUILTIN\Administrators                                        Alias            S-1-5-32-544 Mandatory group, Enabled by default, Enabled group, Group owner
BUILTIN\Performance Log Users                                 Alias            S-1-5-32-559 Mandatory group, Enabled by default, Enabled group
BUILTIN\Users                                                 Alias            S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\INTERACTIVE                                      Well-known group S-1-5-4      Mandatory group, Enabled by default, Enabled group
CONSOLE LOGON                                                 Well-known group S-1-2-1      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users                              Well-known group S-1-5-11     Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization                                Well-known group S-1-5-15     Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Local account                                    Well-known group S-1-5-113    Mandatory group, Enabled by default, Enabled group
LOCAL                                                         Well-known group S-1-2-0      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NTLM Authentication                              Well-known group S-1-5-64-10  Mandatory group, Enabled by default, Enabled group
Mandatory Label\High Mandatory Level                          Label            S-1-16-12288

normdo.exe

以普通权限运行程序

normdo.exe PROGRAM [ARGUMENTS]

normdo.exe 将检查当前上下文是否有管理员权限;如果没有,则直接执行请求的 PROGRAM 并返回其退出状态。

否则,eledo.exe 将安排以具有中等完整性级别的普通用户令牌运行程序,从当前令牌中删除/拒绝本地管理员组。程序将在桥接到当前终端会话的PTY中运行。

> normdo.exe whoami /groups

GROUP INFORMATION
-----------------

Group Name                                                    Type             SID          Attributes
============================================================= ================ ============ ==================================================
Everyone                                                      Well-known group S-1-1-0      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Local account and member of Administrators group Well-known group S-1-5-114    Group used for deny only
BUILTIN\Administrators                                        Alias            S-1-5-32-544 Group used for deny only
BUILTIN\Performance Log Users                                 Alias            S-1-5-32-559 Mandatory group, Enabled by default, Enabled group
BUILTIN\Users                                                 Alias            S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\INTERACTIVE                                      Well-known group S-1-5-4      Mandatory group, Enabled by default, Enabled group
CONSOLE LOGON                                                 Well-known group S-1-2-1      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users                              Well-known group S-1-5-11     Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization                                Well-known group S-1-5-15     Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Local account                                    Well-known group S-1-5-113    Mandatory group, Enabled by default, Enabled group
LOCAL                                                         Well-known group S-1-2-0      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NTLM Authentication                              Well-known group S-1-5-64-10  Mandatory group, Enabled by default, Enabled group
Mandatory Label\Medium Mandatory Level                        Label            S-1-16-8192

感谢

嵌入到实用工具中的电梯图标由 Pixel perfect www.flaticon.com 制作

依赖关系

~13MB
~275K SLoC