一种安全软件进程权限管理方法和装置与流程

文档序号:13238556阅读:105来源:国知局
技术领域本发明属于计算机领域,涉及一种用户进程权限管理方法和装置。

背景技术:
在安全领域中,进程拥有高权限是必然的需求,如拥有SYSTEM权限即可以安装新的驱动,做更多的事情。拥有SYSTEM权限很简单,安装时将自身注册成服务,则启动服务时进程会以SYSTEM用户启动,即可拥有SYSTEM权限。但安全软件并不是只运行在SYSTEM下即可,因为在SYSTEM权限下有诸多限制,因为WINDOWS有一种机制叫SESSION隔离,即不同SESSION下的进程是相对独立的,无法直接进行交互。这意味着一个普通的SYSTEM进程无法展示界面。如一款杀毒软件需要显示界面让用户操作,则杀软需要运行在当前用户权限下,而杀软要扫描整个系统需要更高的权限,则需要更高的权限,这是冲突的。传统的方案是同时运行服务进程和用户进程,当需要做高权限的操作时与服务进程交互,将要做的操作发给服务进程,服务进程执行完毕后再返回给用户进程。工作流程如图1所示,但是,传统方案在一定程度上兼顾了用户交互和权限部分,但缺点非常明显:第一是过多的交互,只要是有交互,必然有不稳定因素。比如通过SOCKET交互,可能被防火墙拦截,通过文件交互,可能在写文件过程被拦截等等。第二是服务程序编写困难,不但要实现全部的需要权限的操作,并且需要兼顾多用户环境,如同时登录多个用户,有多个用户程序需要和服务交互,则服务程序的编码相当复杂。

技术实现要素:
本发明的目的在于彻底解决这两种问题,不再使用交互,做到一个进程同时拥有高权限和用户进程的便利:即最终得到一个进程拥有SYSTEM权限,能正常与用户进行UI交互,并能在使用所有用户相关的API时有正确的行为。本发明解决上述技术问题所采取的技术方案如下:一种安全软件进程权限管理方法,包括:步骤1)以服务方式安装安全软件的主服务进程,且该主服务进程以SYSTEM权限在SESSION0下运行;步骤2)通过主服务进程监视安全软件的SESSION变化,且为每一个SESSION启动一代理进程;步骤3)通过代理进程获取当前登录用户的用户访问令牌(Token),获取当前代理进程和插件需要获取的一些用户相关API信息,将获取到的信息保存到全局变量中,并据此模拟当前用户登录;步骤4)拦截代理进程或插件需要获取的用户API信息,并将当前用户的相关信息告知给代理进程或插件。优选的是,所述步骤2)中,包括以下几个子步骤:步骤21)主服务线程中每隔5秒,通过WTSEnumerateSessions函数枚举SESSION信息,可以获取到当前系统中的SESSION总数和SESSION的结构体信息;步骤22)判断SESSION是否合法;步骤23)判断SESSION中是否有代理进程正在运行,其中,已存在代理进程的SESSION则不用再创建代理进程;步骤24)创建SESSION代理进程。优选的是,子步骤22)中,判断SESSION是否合法时,如果结构体中State状态不为WTSActive和WTSDisconnected时,为非法SESSION;通过结构体中的SessionId,来查询当前SESSION登录的用户名称,如果获取不到正常的用户名称则认为此SESSION为非法SESSION。优选的是,子步骤23)判断SESSION中是否有代理进程正在运行,包括:231)通过CreateToolhelp32Snapshot,Process32First,Process32Next函数来枚举当前系统中的所有进程;232)枚举到代理进程,通过OpenProcess函数来获取此代理进程的句柄;3)通过获取到的句柄可以打开此代理进程的访问令牌(Token)。234)通过访问令牌(Token)可以获取此代理进程运行的SESSIONID。优选的是,子步骤24)创建SESSION代理进程,具体包括:241)通过GetCurrentProcess函数,来获取主服务进程句柄;242)通过主服务进程句柄,获取主服务进程的访问令牌(Token);243)通过DuplicateTokenEx函数创建一个和主服务相同的虚拟访问令牌;224)通过当前SESSIONID,使用SetTokenInformation函数来设置刚创建的虚拟访问令牌(Token);245)通过虚拟访问令牌(Token),使用CreateEnvironmentBlock函数创建适应该SESSION的环境块;246)通过虚拟访问令牌(Token)和创建的环境块,使用CreateProcessAsUser函数创建代理进程;247)销毁创建的环境块,释放访问令牌资源。优选的是,步骤3中,具体包括以下子步骤:31)通过WTSQueryUserToken函数获取当前登录用户的用户访问令牌(Token)。32)通过用户访问令牌(Token),使用ImpersonateLoggedOnUser函数来模拟当前用户登录,,其中,首先获取当前代理进程和插件需要获取的一些用户相关API信息,并将获取到的信息保存到全局变量中;33)获取完用户相关信息后,使用RevertToSelf函数可以退出用户登录,则代理进程恢复SYSTEM高权限;34)使用HOOK技术来拦截代理进程或插件需要获取的用户态API信息,将获取到的API信息返给代理进程或插件。一种安全软件进程权限管理装置,包括:服务进程安装单元,用于以服务方式安装安全软件的主服务进程,且该主服务进程以SYSTEM权限在SESSION0下运行;代理进程启动单元,用于通过主服务进程监视安全软件的SESSION变化,且为每一个SESSION启动一代理进程;该代理进程获取当前登录用户的用户访问令牌(Token),获取当前代理进程和插件需要获取的一些用户相关API信息,将获取到的信息保存到全局变量中,并据此模拟当前用户登录;信息拦截单元,用于拦截代理进程或插件需要获取的用户API信息,并将当前用户的相关信息告知给代理进程或插件。本发明采取了上述方案以后,其直接使用SYSTEM进程,并把SYSTEM进程“伪装”成一个用户进程,使得进程在有高权限的情况下能以用户的身份去执行任意操作,其真正零交互,不再依赖高权限进程为低权限进程提供服务,其能够实现同时在多个SESSION下工作,如SERVER版系统,多个用户同时登录,则多个用户可以各启动一个SESSION进程。本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。附图说明下面结合附图对本发明进行详细的描述,以使得本发明的上述优点更加明确。其中,图1是现有技术的流程示意图;图2是本发明安全软件进程权限管理方法的流程示意图;图3是本发明安全软件进程权限管理装置的结构示意图。具体实施方式以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。需要说明的是,只要不构成冲突,本发明中的各个实施例以及各实施例中的各个特征可以相互结合,所形成的技术方案均在本发明的保护范围之内。以下对本发明涉及的技术名词进行解释如下:进程提权:突破系统对进程的安全权限限制,使进程能做更多特权行为。SESSION:WINDOWS会话,每个登录用户拥有一个会话,系统自身拥有一个会话。APIHOOK:挂接系统原有API,达到在程序调用系统API时改变其行为的目的。实施例一:如图1所示,一种安全软件进程权限管理方法,包括:步骤1)以服务方式安装安全软件的主服务进程,且该主服务进程以SYSTEM权限在SESSION0下运行;步骤2)通过主服务进程监视安全软件的SESSION变化,且为每一个SESSION启动一代理进程;步骤3)通过代理进程获取当前登录用户的用户访问令牌(Token),获取当前代理进程和插件需要获取的一些用户相关API信息,将获取到的信息保存到全局变量中,并据此模拟当前用户登录;步骤4)拦截代理进程或插件需要获取的用户API信息,并将当前用户的相关信息告知给代理进程或插件。其中,所述步骤2)中,包括以下几个子步骤:步骤21)主服务线程中每隔5秒,通过WTSEnumerateSessions函数枚举SESSION信息,可以获取到当前系统中的SESSION总数和SESSION的结构体信息;步骤22)判断SESSION是否合法;步骤23)判断SESSION中是否有代理进程正在运行,其中,已存在代理进程的SESSION则不用再创建代理进程;步骤24)创建SESSION代理进程。本发明采取了上述方案以后,其直接使用SYSTEM进程,并把SYSTEM进程“伪装”成一个用户进程,使得进程在有高权限的情况下能以用户的身份去执行任意操作,其真正零交互,不再依赖高权限进程为低权限进程提供服务,其能够实现同时在多个SESSION下工作,如SERVER版系统,多个用户同时登录,则多个用户可以各启动一个SESSION进程。实施例二:结合实施例进行说明,其中,本发明的目标在于实现一个进程同时拥有高权限和用户进程的便利:即最终得到一个进程拥有SYSTEM权限,能正常与用户进行UI交互,并能在使用所有用户相关的API时有正确的行为。为此,在该实施例中,本方案实施包括以下步骤:步骤1)以服务方式安装主进程——称之为主服务,使进程能以SYSTEM权限在SESSION0下运行。步骤2)主服务监控SESSION变化,为每个SESSION启动一个进程——称之为SESSION代理进程,SESSION代理进程以SYSTEM权限运行在指定的SESSION下,完成了“伪装”成用户进程的第一步。步骤3)SESSION代理进程“伪装”自己,使得调用用户相关API(诸如GetUserNameSHGetSpecialFolderPath注册表HKEY_CURRENT_USER操作)时能像一个普通的用户进程一样有正确的行为。本方案关键点有二:其一是主服务如何监视SESSION变化并启动SESSION代理进程;其二是SESSION代理进程如何“伪装”自己。其中,SESSION代理进程的启动1:主服务线程中每隔5秒,通过WTSEnumerateSessions函数枚举SESSION信息,可以获取到当前系统中的SESSION总数以及可以获取如下结构体信息:2:判断SESSION是否合法通过步骤一获取到的SESSION信息,当结构体中State状态不为WTSActive和WTSDisconnected时,为非法SESSION。通过步骤一获取到的SESSION信息,通过结构体中的SessionId,来查询当前SESSION登录的用户名称,如果获取不到正常的用户名称则认为此SESSION为非法SESSION。3:判断SESSION中是否有代理进程正在运行。通过CreateToolhelp32Snapshot,Process32First,Process32Next函数来枚举当前系统中的所有进程。枚举到代理进程,通过OpenProcess函数来获取此代理进程的句柄。通过获取到的句柄可以打开此代理进程的访问令牌(Token)。通过访问令牌(Token)可以获取此代理进程运行的SESSIONID。记录已经存在代理进程的SESSIONID,已存在代理进程的SESSION则不用再创建代理进程,记录信息结构体如下:4:创建SESSION代理进程:通过GetCurrentProcess函数,来获取主服务进程句柄。通过主服务进程句柄,获取主服务进程的访问令牌(Token)。通过DuplicateTokenEx函数创建一个和主服务相同的虚拟访问令牌。通过当前SESSIONID,使用SetTokenInformation函数来设置刚创建的虚拟访问令牌(Token)。通过虚拟访问令牌(Token),使用CreateEnvironmentBlock函数创建适应该SESSION的环境块。通过虚拟访问令牌(Token)和创建的环境块,使用CreateProcessAsUser函数创建代理进程。销毁创建的环境块,释放访问令牌资源。SESSION代理进程的伪装:1:代理进程启动时,通过WTSQueryUserToken函数获取当前登录用户的用户访问令牌(Token)。2:通过用户访问令牌(Token),使用ImpersonateLoggedOnUser函数来模拟当前用户登录。3:在模拟当前用户登录的过程中,此代理进程的操作和用户相关的API操作和直接在此用户登录的程序获取信息是相同的。4:在模拟当前用户登录的过程中,先获取当前代理进程和插件需要获取的一些用户相关API信息,例如获取当前系统登录用户名称前登录用户的临时目录和一些特殊目录等,将获取到的信息保存到全局变量中,方便以后使用。5:获取完用户相关信息后,使用RevertToSelf函数可以退出用户登录,则代理进程恢复SYSTEM高权限。6:代理进程中使用HOOK技术来拦截代理进程或插件需要获取的用户态API信息,如GetUserNameSHGetSpecialFolderPath等:7:代理进程或插件调用用户相关的API时,以GetUserName为例说明:代理进程插件GetUserName函数获取当前登录用户的用户名称。代理进程HOOK了GetUserName函数,此时应该先经过代理进程处理GetUserName函数。代理进程把第四步获取的正确的用户名称,返回给代理进程插件,此时代理进程插件获取到的用户名称为当前SESSION登录的用户经过以上处理,SESSION代理进程成为一种特殊的进程:从任务管理器中看,它是SYSTEM用户的(即拥有高权限),但同时它能在用户SESSION弹出界面和用户产生交互,并且在进程使用GetUserNameSHGetSpecialFolderPath等用户相关API时,能真正获取到用户的相关信息,而不是SYSTEM的。该方案明显满足了安全软件对权限的需求,对比传统的方案,主要有两个优势:真正零交互,不再依赖高权限进程为低权限进程提供服务。能同时在多个SESSION下工作,如SERVER版系统,多个用户同时登录,则多个用户可以各启动一个SESSION进程。实施例三:如图3,一种安全软件进程权限管理装置,包括:服务进程安装单元,用于以服务方式安装安全软件的主服务进程,且该主服务进程以SYSTEM权限在SESSION0下运行;代理进程启动单元,用于通过主服务进程监视安全软件的SESSION变化,且为每一个SESSION启动一代理进程;该代理进程获取当前登录用户的用户访问令牌(Token),获取当前代理进程和插件需要获取的一些用户相关API信息,将获取到的信息保存到全局变量中,并据此模拟当前用户登录;信息拦截单元,用于拦截代理进程或插件需要获取的用户API信息,并将当前用户的相关信息告知给代理进程或插件。需要说明的是,对于上述方法实施例而言,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1