看了一个搜狗输入法绕过 Windows 登录的漏洞,想到了一个问题。
之前就发现 Windows 的锁屏似乎只是限制前端的用户进入系统,但各种文件都可以以当前用户身份打开(是从开机启动项发现的,开机后过段时间再登录系统会发现启动项都已经准备好了。这和搜狗的还不一样,搜狗好像是以 System 身份进入系统)。这是 Windows 有意为之?为什么要这样设计?那这样不就会出各种问题?
1
codehz 146 天前
这种操作也不是一天两天了,好早以前就有在登录屏幕通过输入法打开别的东西的方法。。。
|
2
virusdefender 146 天前
这漏洞十几年前就存在
|
3
PrinceofInj 146 天前
想起 win2000 的输入法漏洞了。
|
4
HFX3389 146 天前
居然是 System 权限呀,带密码的装了搜狗输入法的电脑我这还不少,不知道在线账户能不能这样加账户:D
肯定不是有意为之,一个输入法要以 System 权限启动啥啊...系统服务吗? 这设计应该不是给输入法用的。 Windows 出各种问题很正常,习惯就好:D |
5
HFX3389 146 天前
|
6
zx123ok 146 天前 via Android 3
这次视频大概率是用来钓鱼的,如果尝试复现的人去 bing 搜索 搜狗输入法 ,搜索结果 国内版第一/国际版第二 就是钓鱼网站,做了免杀
|
7
yanqiyu 146 天前
是登录界面运行在 system 用户下的,搜狗输入法是作为登录界面的输入法于是就有了同等权限。至于为什么登录界面要这么高权限自然是因为鉴权和登陆本身就是特权行为。
操作上不是完全没办法规避,比如登录界面可以设计成由特权的鉴权程序+非特权的 UI 组成,特权程序自从非特权 UI 拿鉴权需要的信息(用户名/密码等等)。但是 Windows 没这么做,我也不知道为啥。 |
9
EVANGELIONAir 146 天前
Linux 那边也是,sddm 和 gdm ,因为登录界面管理并不知道你是要登录哪个用户,权限是很高的,所以不要装有特权的输入法才是对的,Windows 也没错,毕竟安装搜狗的时候提权了
|
10
HFX3389 146 天前
> Windows 是否确实是这样设计的
是 > 是不是主观上确实想要这样 是 > 为什么要这样 因为这个是漏洞,搜狗输入法就不应该在锁屏界面打开其他的窗口或者允许新窗口由用户自定义控制。 是搜狗输入法滥用 System 权限。 |
11
Makerlife OP @yanqiyu @EVANGELIONAir #6 #9 想问一下我看到开机自启的一些应用在任务管理器里是按用户身份来现实的,这是我自己的问题还是任务管理器的问题
|
12
crab 146 天前
想到以前网吧智能 ABC 绕过万象系统,还有 3389 shift 后门。
|
13
yanqiyu 146 天前 2
@EVANGELIONAir #9 至少 gdm 是做了权限隔离的,root 下的 gdm 会 fork 出来一个 gdm 进程运行在非特权用户下,整个登录界面的 ui 和进一步启动的程序(辅助功能之类的)也在这个非特权用户下。在 gdm 界面 ssh 上去看进程树就能看出来。这种情况下想要提权就得先控制非特权的 gdm ,然后想办法借由它们之间的 ipc 来破坏特权的 gdm ,没那么容易。
这种思维很常见,sshd 也会 fork 出来一个无特权(甚至受限)的子进程来负责网络通信之类的服务,不知道为啥 Windows 登录界面设计就这么简单,还是说 Linux 的思路在 Windows 不适用? @HFX3389 #10 我倒觉得不能全怪搜狗,这更接近于搜狗没有特殊处理“输入法被运行在登录界面”这种情况导致的漏洞,Windows 远古时期貌似微软自己也犯过类似的错误。不过换个角度,其实输入法这种程序 per-user 安装就行了,一开始安装到所有用户就是不那么正确的决定。(当然大多数情况没得选....直接弹个 UAC ) @Makerlife #11 那些是用户身份运行的,或者说是用户的启动项,当然是在用户名下的。不过还有一类启动项是“服务”,这些东西可以是 system 权限的,不过大概率不是你在任务管理器看见的那些。 |
14
yanqiyu 146 天前
问题不是“输入法有特权”,而是启动输入法的整个环境就是个特权和完整性拉满的环境。Windows 在启动输入法的时候也没做特殊处理,输入法也没特别的实现发现权限太高就 drop 权限或者 lockdown 的逻辑,于是就留下一个和登录界面整个有同等权限的输入法了。
|
15
VeroFess 145 天前 1
专门注册了个账号...
> 之前就发现 Windows 的锁屏似乎只是限制前端的用户进入系统,但各种文件都可以以当前用户身份打开 因为 Windows 中实际上存在两种登录模式: User logon 和 Application logon, 你看到的这些程序是被 Secur32.dll 以 Application logon 模式拉起来的 > 这和搜狗的还不一样,搜狗好像是以 System 身份进入系统 因为搜狗是被 Winlogon.exe 拉起来的, Winlogon.exe 是登录的核心进程,他管理所有 User logon 的授权行为,所以说是 System 权限 > 这是 Windows 有意为之? 是的, TSF(文本服务框架) 明确授权了输入法访问系统线程的权利,但是前提是必须有有效的数字证书 > 为什么要这样设计? 要不然高安全性的 APP 只能输入英文, 这不好吧.jpg > 那这样不就会出各种问题? 会,但是最佳安全实践里说明了应该注意自身的权限,是搜狗的锅 ... Windows 要求输入法主动检查自己在哪个模式下 ( https://learn.microsoft.com/en-us/windows/win32/api/msctf/nf-msctf-itfthreadmgrex-getactiveflags) > 比如登录界面可以设计成由特权的鉴权程序+非特权的 UI 组成 其实确实是这样的,相对于 Lsass 来说, CREDUI 已经是非特权 UI 了,详见 Credential Guard, 实际上如果尝试过 XXOO UAC 会发现, SendInput 这种号称可以直接将输入插入内核队列的 API 对登陆界面和 UAC 弹窗是无效的,即使自身已经提权到了 System 权限。因为他们隔离的概念不是以用户权限,而是将登录和认证有关的窗口统一扔到了 Session0 的安全桌面上,而 Session Zero Guidelines 的第一句就是 Do not create a user interface (UI) element, such as a dialog box, or depend on user input. |
16
hwf 145 天前
windows 的设计就是 只要硬件在你手里就默认是你的
|
17
wevsty 145 天前
@yanqiyu
Windows 输入框架决定了,输入法就是要注入进程才能提供服务,如果要在 LoginUI 上提供输入法支持,那么输入法必然要运行在 LoginUI 进程中。 LoginUI 本身和本身负责用户登录的 winlogon 本身是隔离的,只不过可能由于通信机制,特权或者自定义登录之类的原因(微软没有解释过) LoginUI 看上去是以 system 权限运行。 另外 windows 上 system 权限比较特殊和 Linux 上的 root 不能完全划等号。 system 权限尽管相对大但并不代表会绕过所有的权限检查,最终能否访问/修改一个资源还是需要看进程本身的 token 是否符合 DACL 。 例子 1:进程以 system 权限运行,但同时附加 Administrators Deny 的 ACE ,如果一个资源要求必须是 Administrators 权限才能读取的时候,系统会拒绝进程访问该资源。 例子 2:进程以 system 权限运行,但 token 包含 TrustedInstaller 权限,那么比如修改系统文件的请求系统将会拒绝。 |