3个不稳定版本
0.2.0 | 2022年3月17日 |
---|---|
0.1.1 | 2021年1月11日 |
0.1.0 | 2020年12月18日 |
84 在 Windows APIs 中
2,898 每月下载量
用于 2 crates
81KB
2K SLoC
EleDo - Elevated-Do
这个仓库是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