console host process
2015-12-30conhost的全称是console host process搜索, 即命令行程序的宿主进程。
简单的说是出于安全考虑,在win7/win8/Win10/server 2008中引进的新的控制台应用程序处理机制。
原先,windows 7之前的宿主程序是由csrss.exe来完成的, 所有命令行进程都使用session唯一的csrss.exe进程. 而到了win7则改称每个命令行进程都有一个独立的conhost作为宿主。 这样当然有很多好处了,比如各进程之前不会相互影响,也不会影响到csrss,毕竟csrss还有其他更重要的任务要做。 当然最最重要的还是安全性的考虑,因为csrss是运行在local system账号下的,如果要处理window message,就要承担很多威胁,比如著名的window message shatter attack。而如果用用户权限的conhost来处理,则即使有攻击,影响的也只是低权限的宿主进程。 其实,不论是作为普通用户还是企业管理员,我们在日常的Windows应用和运维过程中都会或多或少的使用到控制台应用程序。控制台应用程序是没有用户界面的,我们需要通过命令提示符(CMD,这可不是DOS,很多人混淆不清)对其进行输入、输出操作。Windows自带的控制台应用程序 ,典型的有cmd.exe、nslookup.exe和telnet.exe等。 在早期的Windows版本中,所有代表非GUI活动的应用程序(即控制台应用程序)要在桌面上运行时,都通过系统进程Csrss.exe进行协调。当控制台应用程序需要接收字符时,会在Kernel32.dll中调用一个小型的“控制台APIs”以让Kernel32产生LPC来调用CSRSS。此时CSRSS会对控制台窗口的输入队列进行检查和校验,并将字符模式的结果通过Kernel32返回给控制台应用程序进行关联。 这样的处理机制就已经产生了一个问题:即使一个控制台应用程序在普通用户的上下文环境中执行,但Csrss.exe始终是运行在本地系统账户权限下的。因此,某些情况下“坏人”开发的恶意软件就有可能通过本地系统账户权限执行的Csrss.exe获取到更多特权。这种攻击模式被称为Shatter Attack。而到了win7和Windows Server 2008 R2时代,所有控制台应用程序都被放到了一个新的上下文进程ConHost.exe中来执行,而ConHost(控制台主机)与控制台程序运行在相同安全级的上下文环境当中,取代了发出LPC消息请求到CSRSS中进行处理这种机制,而是去请求ConHost。因此,任何应用程序企图利用消息请求来导致特权的自动提升都不会成功。
分类:操作系统 | 标签: |