您的位置:首页 > 其它

浅析Windows安全相关的一些概念

2013-08-25 08:09 176 查看
Session

我们平常所说的Session是指一次终端登录, 这里的终端登录是指要有自己的显示器和鼠标键盘等, 它包括本地登录和远程登录。在XP时代每次终端登录才会创建一个Session,但是在Vista后所有的服务程序都运行在Session 0, 其他终端会依次运行在session 1, session 2...

Logon Session

登录Session是指不同帐号的登录,它包括System登录, 网络登录及活动交互登录等。 我们在任务管理器里可以看到各种进程运行在不同的帐号下,比如System, Local Service, xxx Account等, 这些帐号有不同的权限。这里要注意区分上面的终端登录Session, 每个终端登录Session内有好几个Logon Session.

Window Station

按MSDN的说法,一个Window Station管理一个剪贴板(Clipboard),一个原子表(Atom Table)和一组桌面(Desktop)。为什么要有Window Station这个概念? 实际上每个Window Station对应一个Logon Session, 也就是说通过Window Station, 把不同的帐号进行隔离,防止他们相互影响, 试想其他人在你机器上执行一个DCOM对象,如果没有Window Station隔离,他可以直接操作你的桌面了。一个终端登录Session可以有多个Window Station,但只能有一个可交互的活动Window Station, 也就是Winsta0.

[b]Desktop[/b]

每个Window Station可以创建多个Desktop, 我们平时和3个Desktop打交道比较多(WinLogon, Disconnect, Default), 他们分别代表登录桌面,屏保桌面和我们工作的桌面。我们也可以自己通过CreateDesktop创建桌面, 并通过SwitchDesktop进行切换。

[b]Sid

Sid表示Security Identifier, 它是一串唯一标志符, 它可以表示代表一个帐号, 一个用户组或是一次用户登录等, 具体可以参考[/b]这里

[b]Token[/b]

Token和进程相关联, 每个进程创建时都会根据Logon Session权限由LSA(Local Security Authority)分配一个Token(如果CreaeProcess时自己指定了Token, LSA会用该Token, 否则就用父进程Token的一份拷贝,由大部分进程是由Explorer.exe创建, 所以我们大部分时候都复制了explorer.exe的Token), 里面含有该进程的安全信息,包括用户帐号, 组信息, 权限信息和默认安全描述符(Security Descriptor)等, 我们可以通过GetTokenInformation查询某个Token的详细情况。具体可以参考这里

[b]DACL和SACL[/b]

DACL(discretionary access control list)用来标志某个安全对象允许被哪些对象访问。SACL(system access control list )用来记录某个安全对象被访问的情况。具体可以参考这里

[b]Security Descriptor

每个安全对象在创建时都可以指定一个安全描述符(Security Descriptor), 如果没有指定就用进程默认的, 该描述符指定了哪些对象可以访问该安全对象。大部分情况下我们都是传NULL, 也就是用该进程Token中默认的。具体可以参考[/b]这里

Integrity level

这是UAC提供的新特性, 强制完整性控制(Mandatory Integrity Control), 它标志某进程的安全性级别, 安全级别的高低很大程度和该标志相关联。

下面的图表示了Session, Window Station和Desktop的关系:
BOOL EnablePrivilege(HANDLE hToken, LPCTSTR lpszPrivilegeName)
void[b] CIntegrityLevel::Print(std::wostream
& os) const

如何指定程序默认启动运行的级别?

在VC里配置Manifest文件。
asInvoker:默认选项,新的进程将简单地继承其父进程的访问令牌
highestAvailable:应用程序会选择该用户允许范围内尽可能高的权限。对于标准用户来说,该选项与asInvoker一样,而对于管理员来说,这就意味着请求Admin令牌。
requireAdministrator:应用程序需要Admin令牌。运行该程序时,标准用户将要输入管理员的用户名和密码,而管理员则要在弹出的确认对话框中进行确认。



上面只是我自己的一些理解和总结, 由于不是专门搞安全相关的, 如果有不正确的地方, 欢迎指正。

注,这是部分测试代码:MySecurityTest
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: