windows 登陆 和 pGina
一 概述
偶然的机会做windows登陆,采用的pGina开源项目, 将自己的一些理解记录一下
备注:
文章windows 登陆部分转载自:https://blog.csdn.net/kelsel/article/details/52758427
二 windows xp 登陆的类型
1 交互式登陆
交互式登录是我们平常登录时最常见的类型,就是用户通过相应的用户账号(User Account)和密码在本机进行登录。
本地登陆
采用本地用户账号登录,系统会通过存储在本机SAM数据库中的信息进行验证
域名登陆
采用域用户账号登录,系统则通过存储在域控制器的活动目录中的数据进行验证。如果该用户账号有效,则登录后可以访问到整个域中具有访问权限的资源。
2 网络登陆
如果计算机加入到工作组或域,当要访问其他计算机的资源时,就需要“网络登录”了
备注:这里需要提醒的是,输入的用户账号必须是对方主机上的,而非自己主机上的用户账号。因为进行网络登录时,用户账号的有效性是由受访主机控制的。##
3 服务登陆
服务登录是一种特殊的登录方式。平时,系统启动服务和程序时,都是先以某些用户账号进行登录后运行的,这些用户账号可以是域用户账号、本地用户账号或SYSTEM账号。采用不同的用户账号登录,其对系统的访问、控制权限也不同,而且,用本地用户账号登录,只能访问到具有访问权限的本地资源,不能访问到其他计算机上的资源,这点和“交互式登录”类似
4 批处理登陆
批处理登录一般用户很少用到,通常被执行批处理操作的程序所使用。在执行批处理登录时,所用账号要具有批处理工作的权利,否则不能进行登录。
三 交互式登陆组件
1 Winlogon.exe
Winlogon.exe是“交互式登录”时最重要的组件,它是一个安全进程,负责如下工作:
(1) 加载其他登陆组建
(2) 提供安全相关的用户操作图像界面, 以便用户能进行登陆或注销等相关操作
(3) 根据需要,同Gina发送必要信息
2 Gina
GINA的全称为“Graphical Identification and
Authentication”——图形化识别和验证。它是几个动态数据库文件,被Winlogon.exe所调用,为其提供能够对用户身份进行识别和验
证的函数,并将用户的账号和密码反馈给Winlogon.exe。
在登录过程中,“欢迎屏幕”和“登录对话框”就是GINA显示的。
3 LSA服务
LSA的全称为“Local Security Authority”——本地安全授权,Windows系统中一个相当重要的服务,所有安全认证相关的处理都要通过这个服务
它从Winlogon.exe中获取用户的账号和密码,然后经过密钥机制处理,并和存储在账号数据库中的密钥进行对比。
(1)如果对比的结果匹配,LSA就认为用户的身份有效,允许用户登录计算机。
(2)如果对比的结果不匹配,LSA就认为用户的身份无效。这时用户就无法登录计算机。
4 SAM数据库
SAM的全称为“Security Account Manager”——安全账号管理器,是一个被保护的子系统,它通过存储在计算机注册表中的安全账号来管理用户和用户组的信息。我们可以把SAM看成一个账号数据库。对于没有加入到域的计算机来说,它存储在本地,而对于加入到域的计算机,它存储在域控制器上
四 交互式登陆过程
1 用户首先按Ctrl+Alt+Del组合键。
2 Winlogon检测到用户按下SAS键,就调用GINA,由GINA显示登录对话框,以便用户输入账号和密码。
3 用户输入账号和密码,确定后,GINA把信息发送给LSA进行验证。
4 用户登录到本机的情况下,LSA会调用Msv1_0.dll这个验证程序包,将用户信息处理后生成密钥,同SAM数据库中存储的密钥进行对比。
5 如果对比后发现用户有效,SAM会将用户的SID(Security Identifier——安全标识),用户所属用户组的SID,和其他一些相关信息发送给LSA。
6 LSA将收到的SID信息创建安全访问令牌,然后将令牌的句柄和登录信息发送给Winlogon.exe
7 Winlogon.exe对用户登录稍作处理后,完成整个登录过程。
五 pGina结构
CP/GINA提供了增强或者代替默认的Windows登录认证功能。
pGina service是pGina系统的核心,它接收来自CP/GINA的证书,然后调用插件对它进行认证和授权或者其他的一些进行登录时的操作。pGina service自身并不进行认证和授权。做这些工作的全都来自插件。CP/GINA和pGina service之间的通信通过命名管道,在系统启动的时候插件由服务加载。
六 pGina的工作原理
1 pGina提供用户的输入界面,用户可通过界面输入登录凭据
2 GINA或者是CP将用户输入的登录凭据传动给pGina服务,服务再通过管道传给插件进行认证
3 经过插件的认证,pGina服务将认证成功或者是失败的结果一起传回给GINA/CP
4、如果在第三步的返回结果为成功的话,向操作系统传递一个成功的登录尝试。应当注意的pGina不是实际的登录负责登录到计算机,这个过程仍然是操作系统本身,所以如果一个验证通过的账户在操作系统中不存在,就会登录失败所以pGina提供了一个插件叫做“Local Machine”它会在pGina认证成功以后再操作系统中创建一个临时的账户
七 LocalMachine插件的介绍
三个阶段:
Authentication
插件参与到这个阶段来验证这个账户是谁,可以通过来自外部数据库的一些证书或者是其他的一些来源。
Authorization
这个阶段决定是否让通过Authentication阶段的账户获取需要的资源,例如一个用户只有属于指定分组的时候才能被允许登录。
Gateway
这个阶段同Authorization阶段类似,它的意图不是去授权一个账户而是提供一个授权后的管理。比如在LocalMachine这个插件中在这个阶段实现了创建一个临时账户(符合认证条件的)
一个插件可以参与零个或者多个阶段,在Authentication 阶段至少应该有一个插件注册成功如果没有插件注册了这个阶段,这个阶段就会失败。在Authorization阶段所有参与这个阶段的插件必须注册成功,如果没有插件注册,这个阶段成功通过。在Gateway阶段所有参与这个阶段的插件必须注册成功。如果没有插件注册这个阶段,这个阶段成功通过。
LocalMachine插件负责认证和授权本地存在的账户,同时它还可以创建通过授权的但是本地不存在的账户。在pGina的三个阶段(authentication, authorization, 和gateway)它都可以执行指定操作。