「作者简介」:2022年北京冬奥会中国代表队,CSDN Top100,学习更多干货,请关注专栏《网络安全自学教程》
操作系统有4个安全目标,也就是说想要保证操作系统的安全,就必须实现这4个需求:
标识系统中的用户和进行身份鉴别。依据系统安全策略对用户的操作进行访问控制,防止用户和外来入侵者对计算机资源的非法访问。审计系统运行的安全性。保证系统自身的安全性和完整性。标识与鉴别就是用来实现这些需求的安全机制之一。
这一章节我们需要知道系统用什么标识用户,怎么验证用户身份,怎么做访问控制。
标识与鉴别
1、Windows系统标识1.1、安全标识符 2、Windows身份鉴别2.1、本地鉴别2.2、远程鉴别 3、Windows访问控制4、Linux系统标识5、Linux 身份鉴别6、Linux访问控制
1、Windows系统标识
为了保证系统安全,Windows从操作和被操作的角度,将系统分为主体和客体两个部分
「主体」是指主动发起操作的实体,比如用户账户、计算机以及用户或计算机运行的服务等。
账户:登录操作系统使用的用户或账号。计算机:系统调用底层资源使用的特殊服务。服务:本质是进程,服务本身跟用户没有直接交互,「客体」是被操作的对象,Windows的安全客体有文件、目录、数据等。
1.1、安全标识符
Windows用SID来标识安全主体。
「安全标识符」(Security Identifiers,SID)是一串标识用户、组和计算机账户的唯一号码。
cmd中使用 whoami /all
命令,可以查看用户和用户组的SID。
格式解析:S-1-5-21-1300873792-771181552-3550813123-1001
S:标识这个字符串时SID。1:标识SID的版本号。5:标识颁发机构。21-1300873792-771181552-3550813123:标识子颁发机构。1001:相对标识符。500和1000表示管理员。系统在生成SID时,会始终保持「唯一」,不会生成两个同样的SID或者重复使用已删除用户的SID。
2、Windows身份鉴别
Windows使用 SAM 管理用户信息,在用户登录时,用来识别用户身份。
SAM (Security Accounts Manager)是「安全账户管理数据库」,保存加密后的密码hash值。 SAM 本质上是一个数据库类型的文件,保存在 C:\Windows\System32\config\
目录下。
2.1、本地鉴别
本地登录时,由管理用户登录的winlogon.exe进程显示登录界面,将用户输入的明文密码「发送」给负责本地安全登录的lsass.exe进程处理。
lsass.exe使用身份认证协议NTML hash「加密」密码,拿加密后的结果去 SAM 数据库比较,相同就认证成功,登录;不同就认证失败。
2.2、远程鉴别
通过网络远程登录时,Windows使用远程登录协议来鉴别用户身份,远程登录协议有四种:SMB、LM、NTLM、Kerberos。
SMB(Server Message Block)是服务器消息块协议,早期用来远程登录Windows系统,因为口令是明文传输的,很不安全,已经废弃不用了。
LM(LAN Manager)局域网管理器,替代SMB用来远程登录Windows系统的协议,比如Windows NT 和 Windows 95。LM用DES算法加密,强度不高,现在也弃用了。
NTLM(NT LAN Manager)NT 局域网管理器,替代LM用来远程登录Windows系统的协议,是目前的「主流协议」。Windows Vista 和 Windows 2008 开始,默认禁用LM hash,只存储NTLM hash。
NTLM加密分为三步:NTLM Hash =md4(unicode(hex(password)))
Kerberos 是身份验证协议,常用在分布式网络中,比如域控。
3、Windows访问控制
Windows用访问令牌(Access Token)做访问控制。
用户通过身份鉴别登录成功后,系统会生成一个「访问令牌」,用户运行的每个进程都会携带这个访问令牌的「副本」,当安全主体与进程交互时,就通过访问令牌来验证安全主体是否有「访问权限」。
访问令牌是类似数组的一串数据,包含SID和权限列表等信息,详细内容如下:
用户的安全标示符SID用户属组的SID标识当前登录会话的SID用户或用户组的权限列表所有者SID主要组的SID访问控制列表访问令牌的来源令牌是授权令牌还是模拟令牌限制SID的可选列表当前模拟级别其他统计信息访问令牌分为授权令牌和模拟令牌两种:
授权令牌:也叫主令牌,用于交互式登录(比如本地登录、用户桌面)。模拟令牌:用于非交互式登录(比如 net use 访问共享文件)。访问令牌只有在系统重启或关机时才会清除,用户注销时,那么访问令牌就会由授权令牌变成「模拟令牌」,始终存放在进程里面,我们复制进程中的访问令牌,就能窃取令牌,实现提权。如果域管理账号登录这台电脑后没有重启,被我们窃取令牌,就能控制整个域。
访问令牌里有一个字段是「访问控制列表」。根据访问控制列表决定谁可以访问什么资源、可以执行什么操作。
访问控制列表(Access Control List,ACL)用来管理和控制访问权限,列表里有很多访问控制条目(ACEs),每个条目都定义了一个用户、用户组或角色相关联的权限,每个权限都指定了对资源的特定操作,比如读取、写入、执行、删除。
ACL分为DACL和SACL两种:
DACL(Discretionary Access Control List)是自由访问控制列表,用来设定谁可以访问什么资源、做什么操作。SACL(System Access Control List)是系统访问控制列表,用来记录对资源的访问和操作事件,以便追踪和分析系统的安全情况。4、Linux系统标识
Linux使用 UID 来标识安全主体。
UID 是一个0~65535之间的整数,用来唯一标识用户身份,用户身份有三种。
超级用户(UID=0):超级管理员,默认只有root,拥有最高权限,完全控制系统。内置用户(UID=1~499):系统保留的特殊服务,用来运行系统服务或进程。普通用户(UID=500~65535):权限受限,usermod -u 0 username
可以通过修改用户UID的方式将普通用户提升为管理员权限,但这并不是完整的root权限,需要做其他配置和授权才能完全控制系统。 id 用户名
可以查看指定用户的UID。cat /etc/passwd | grep :0
查看具有管理员权限的用户。
UID是单向自增的,我们可以使用 usermod -u [新UID] 用户名
修改用户的UID,但不能重复使用,即使那个UID已经没人用了。
5、Linux 身份鉴别
Linux使用文件来管理用户信息,也就是把用户信息保存在一个文件里,毕竟Linux的核心理念就是"一切结文件"。
Linux的用户账号保存在 /etc/passwd
,密码加密后保存在/etc/shadow
。
cat /etc/passwd
查看用户账号信息,这个文件对所有用户可读,一行对应一个用户,用冒号分割字段。
字段从左到右依次是:
/etc/shadow
。0:用户标识(UID)。0:用户组标识(GID)。root:注释,用来描述用户信息。/root:主目录(用户家目录),用户登录后默认进入主目录。/bini/bash:登录的shell。 cat /etc/shadow
查看用户密码信息,字段从左到右依次是:
扩展:设置/修改密码时,密码加密后,先由pwunconv将加密后的密码写到/etc/passwd,再由pwconv从/etc/passwd转换到/etc/shadow中。
6、Linux访问控制
Linux用 UGO 管理机制做访问控制。
UGO 是User、Group、0ther首字母的简写,它把文件的操作者分为三种
U:文件属主权限G:文件属组权限O:其他组用户的权限每种操作者拥有三种权限:读(r)、写(w)、执行(x)。
三种操作者的9种权限共同组成一个文件的完整权限。
ls
可以查看文件的属性,属性左边第二列显示文件的权限
在权限lrwxr-xr-x
中,从左到右;
权限的设置,可以参考我的另一篇文章 Linux修改文件权限
扩展:目录的权限与文件的权限含义有些不同:r
是可以查看目录中的内容,w
是可以增删目录中的内容,x
是可以进入目录。
除了rwx这三个常用权限位,Linux还有几个「特殊权限」 s(suid)、s (sgit)、t(Sticky Bit)。
比如 passwd 文件属主的第三个权限是s(suid),这表示其他用户在执行该文件时具有属主的权限。这样的好处是,普通用户没有修改shadow文件的权限,当普通用户用执行passwd
命令修改密码时,具有了属主root的权限,就能修改shadow文件了。sgid也是同样的效果。
:~$ ls -l /usr/bin/passwd -rwsr-xr-x 1 root root /usr/bin/passwd:~$ ls -l /etc/shadow-rw-r----- 1 root shadow /etc/shadow
新建文件或目录的默认权限,由系统掩码umask决定。「掩码」的相关资料,可以参考我的另一篇文章 Linux修改文件默认访问权限