网络安全等级保护测评 S3A3 安全计算环境之操作系统(Linux) 详解
概述
网络安全等级保护S3A3安全计算环境之操作系统(Linux)中主要包括以下
11个
部分:
身份鉴别、访问控制、安全审计、入侵防范、恶意代码防范、可信验证、数据完整性、数据保密性、数据备份恢复、剩余信息保护、个人信息保护
本文主要参考以下7个资料:
-
GB-T 22239-2019 信息安全技术 网络安全等级保护基本要求
-
GB-T 28448-2019 信息安全技术 网络安全等级保护测评要求
-
网络安全等级保护基本要求(通用要求部分)应用指南
-
网络安全等级保护基本要求(扩展要求部分)应用指南
-
网络安全等级测评师培训教材(初级)2021版
-
网络安全等级保护测评安全计算环境测评指导书
-
T-ISEAA 001-2020 网络安全等级保护测评高风险判定指引
注:参考最新发布的《
网络安全等级保护基本要求(通用要求部分)应用指南
》,针对安全计算环境中操作系统仅整理了
身份鉴别、访问控制、安全审计、入侵防范、恶意代码防范、可信验证
6项。
身份鉴别
基本要求
测评要求
应用指南
a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换。
符合建议项
1.查看系统账户
cat /etc/passwd
cat /etc/shadow
目前有哪些账户可登录,是否存在空口令账户
grep nullok /etc/pam.d/system-auth
lastlog
2.查看口令复杂度策略(对root账户无效,询问管理员root账户复杂度策略)
cat /
etc/login.defs
cat /etc/pam.d/system-auth
[SysAdmin@iZb5dlyg1ebe6oZ ~]$ cat /etc/pam.d/system-auth
password requisite pam_pwquality.so minlen=8 dcredit=-2 ucredit=-1 lcredit=-1 ocredit=-1 try_first_pass local_users_only retry=3 enforce_for_root authtok_type=
retry=3 表示在前3次尝试失败后禁止访问该账户。
enforce_for_root 表示管理员账户也需要符合密码质量要求。
maxrepeat=3 表示不允许重复使用超过3次的字符。
minlen=8 表示密码最小长度为8个字符。
lcredit=-1 表示小写字母至少需要1个。
dcredit=-2 表示数字至少需要2个。
ucredit=-1 表示大写字母至少需要1个。
ocredit=-1 表示特殊符号至少需要1个。
特别注意
密码复杂度要求仅对新用户或者修改密码有用,对已经存在的用户无效。
3、限制口令的重复使用:
cat /etc/pam.d/system-auth
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
4、查看系统账户有效期:
cat /etc/login.defs
cat /etc/shadow
查看每个账户状态
chage -l account
如
chage -l root
[SysAdmin@iZb5dlyg1ebe6oZ ~]$ sudo chage -l root
Minimum number of days between password change : 5
Maximum number of days between password change : 90
Number of days of warning before password expires : 7
结果记录
1)经核查,用户在登录时采用了用户名+口令的身份鉴别措施,用户通过堡垒机输入账号口令登录服务器;
2)经核查用户列表,用户身份标识具有唯一性,目前用户列表root、SysAdmin、SecAdmin、AudAdmin;
3)经核查用户配置信息并测试验证,不存在空口令用户;
4)经核查,用户鉴别信息具有复杂度要求并定期更换,
使用命令查看口令复杂度策略:cat /etc/login.defs、cat /etc/pam.d/system-auth,
PASS_MAX_DAYS 90
PASS_MIN_DAYS 5
PASS_MIN_LEN 8
PASS_WARN_AGE 7
用户口令8位,采用大小写字母、数字和特殊字符组合,有效期为90天。
查询限制口令的重复使用次数:cat /etc/pam.d/system-auth
限制重复使用次数为5次。
查看系统账户的有效期:cat /etc/login.def、cat /etc/shadow,或者查看每个账户的状态:chage -l account,如:chage -l root
两次改变密码之间相距的最小天数 :5
两次改变密码之间相距的最大天数 :90
在密码过期之前警告的天数 :7
b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施。
符合建议项
1、登录失败:查看相关配置文件是否配置登录失败处理策略
cat /etc/pam.d/system-auth
cat /etc/pam.d/password-auth
cat /etc/pam.d/sshd
最多连续5次认证登录都出错时,600秒后解锁,root用户也可以被锁定,root用户600秒后解锁。
特别注意
添加位置要写在第一行,即#%PAM-1.0的下面。
auth required pam_tally2.so onerr=fail deny=5 unlock_time=600 even_deny_root root_unlock_time=600
在SSH配置文件
cat /etc/ssh/sshd_config | grep MaxAuthTries
2、查看是否配置登录会话超时策略:
cat /etc/profile
是否存在
export TMOUT=900
readonly TMOUT
或
echo $TIMEOUT
echo $TMOUT
在SSH上配置
cat /etc/ssh/sshd_config | grep ClientAliveInterval
结果记录
1)经核查,配置并启用登录失败处理功能,查看登录失败处理功能相关参数,cat /etc/pam.d/system-auth 文件中存在“auth required pam_tally2.so onerr=fail deny=5 unlock_time=600 even_deny_root root_unlock_time=600
”;
2)经核查,配置并启用了限制非法登录功能,所有用户登录失败5次锁定600秒;
3)经核查,配置并启用登录连接超时及自动退出功能,本地登录超时时间900秒,远程登录超时时间300秒。
c)当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听。
符合建议项
检查远程管理方式
ps -ef | grep ssh
ps -ef | grep telnet
查看远程管理是否使用SSH方式进行远程管理。
结果记录
经核查,用户通过堡垒机输入账号密码通过SSH协议远程登录服务器,可以防止鉴别信息在网络传输过程中被窃听。
d)应采用两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用动态口令、密码技术或生物技术来实现。
符合建议项
结果记录
经核查,用户在登录操作系统的过程中只使用了口令鉴别技术,未采用动态口令、数字证书、生物技术或设备指纹等鉴别技术对用户身份进行鉴别。
访问控制
基本要求
测评要求
应用指南
a)应对登录的用户分配账户和权限。
符合建议项
创建用户,三权分立
#!/bin/bash
#******************************************************************
# 作者: 利刃信安攻防实验室
# 微信: Mannix6
# 更新时间: 2023.4
# 版本: v1.0
#
# 描述: 网络安全等级保护安全基线加固脚本,兼容Red-Hat、CentOS。
#
# 使用方法:建议在root权限下将本脚本导入/tmp目录下执行。
# sh cybersecurity_enhance.sh
#
# 更新记录:
# v1.0
# 1) 要求用户执行脚本通过useradd添加账号
# 2) 确保每个用户的home目录权限设置为750
# 3) 禁止root账户通过SSH直接登录,需要用户提前创建其他管理账号
#**********************************
********************************
check_passwd() {
dcredit=0
lcredit=0
ucredit=0
ocredit=0
class=0
user=$1
passwd=$2
num=${#passwd}
[ ${num} -lt 8 ] && return 1
[[ ${passwd} =~ ${user} ]] && return 1
((num--))
for i in $(seq 0 ${num})
do
ch=${passwd:i:1}
case $ch in
[0-9])
((dcredit++))
[ ${dcredit} -eq 1 ] && ((class++))
;;
[a-z])
((lcredit++))
[ ${lcredit} -eq 1 ] && ((class++))
;;
[A-Z])
((ucredit++))
[ ${ucredit} -eq 1 ] && ((class++))
;;
*)
((ocredit++))
[ ${ocredit} -eq 1 ] && ((class++))
esac
done
[ ${class} -ge 3 ] && return 0
return 1
}
# 1. 要求用户执行脚本通过useradd添加账号
echo -e "确保管理员账号通过提权方式管理系统,禁止直接通过root登录管理,因此需要用户手动创建一个管理员账号。"
echo -e "注意账号密码需要满足复杂度要求: "
echo -e " 1.长度不小于8位"
echo -e " 2.至少包含3类字符(大写字母、小写字母、特殊符号、数字)"
echo -e " 3.不得包含用户名"
read -p "请输入要创建的管理员用户:" user
useradd ${user}
until [[ $? -eq 0 ]]
do
echo "无效的管理员用户名, 无法执行useradd命令"
read -p "请重新输入要创建的管理员用户: " user
useradd ${user}
done
rc=1
echo -e "请输入管理员用户${user}的密码:"
until [ ${rc} -eq 0 ]
do
read -s passwd
nullbuf=$(check_passwd ${user} ${passwd})
rc=$?
if [ ${rc} -eq 1 ]; then
echo "密码复杂度不满足要求,请重新输入:"
else
echo "请再次确认密码:"
read -s confirm_passwd
if [ "${passwd}" != "${confirm_passwd}" ]; then
echo "两次输入密码不一致,请重新输入:"
rc=1
else
echo "${passwd}" | passwd --stdin ${user} > /dev/null
if [ $? -ne 0 ]; then
echo "密码复杂度不满足要求,请重新输入:"
rc=1
fi
fi
fi
done
# 用户新添加的管理员账号,加入wheel组, 支持使用su
usermod -G wheel ${user}
semode=$(sestatus |grep "Current mode:" |awk -F: '{print $2}'|tr -d ' ')
[[ $semode == "enforcing" ]] && setenforce 0
# 修改账号的最大口令过期时间、最小修改周期
chage --maxdays 90 ${user}
chage --mindays 7 ${user}
[[ $semode == "enforcing" ]] && setenforce 1
# 2. 确保每个用户的home目录权限设置为750
chmod 750 /home/*
# 3. 禁止root账户通过SSH直接登录,需要用户提前创建其他管理账号
# var=$(sshd -T -C user=root -C addr=localhost|grep -iE "\s*permitrootlogin\s+([^#]+,)?yes\b")
# if [ x"$var" != x"" ]; then
line=($(cat /etc/ssh/sshd_config | awk '{if($1 == "PermitRootLogin")print NR}'))
PermitRootLogin="PermitRootLogin no"
if [ -n "${line}" ]; then
sed -i "${line} c ${PermitRootLogin}" /etc/ssh/sshd_config
else
echo ${PermitRootLogin} >> /etc/ssh/sshd_config
fi
systemctl restart sshd
# fi
echo -e "\n\033[31;49;1m root账号已经被禁止登录系统,请使用新创建的管理员账号${user}登录并使用su或sudo命令提权管理系统。\033[39;49;0m\n"
echo -e "\033[32;49;1m 加固完成,下面部分加固项需要您根据实际部署情况选择手动修改配置加固。\033[39;49;0m"
echo -e "------------------------------------------------------------------------------------"
echo -e "等保要求:“应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制”。"
echo -e "\n1、应当配置SSH服务侦听IP地址,请根据实际部署情况选择性配置,如果只有1个网卡无需配置。"
echo -e "\t修改/etc/ssh/sshd_config文件,在ListenAddress字段后设置相应的IP地址,如果有多个可以设置多行,例如:"
echo -e "\tListenAddress \n\tListenAddress "
echo -e "2、应当配置认证黑白名单,请根据实际部署情况选择性配置,如果只有1个账号可以登录可以忽略本项。"
echo -e "\t修改/etc/ssh/sshd_config文件,添加相关Allow或Deny字段,可以任意组合,例如:"
echo -e "\tAllowUsers \n\tAllowGroups \n\tDenyUsers \n\tDenyGroups "
cat /etc/passwd
查看目前存在哪些帐户,询问管理员,是否启用访问控制功能,是否依据安全策略控制用户对资源的访问。
ls -l /etc/passwd /etc/shadow /etc/sudoers /etc/group /etc/gshadow /etc/profile /etc/crontab /etc/securetty /etc/ssh/ssh_config /etc/ssh/sshd_config
/etc/passwd 644
/etc/shadow 000
/etc/sudoers 440
/etc/group 644
/etc/gshadow 000
/etc/profile 644
/etc/crontab 644
/etc/securetty 600
/etc/ssh/ssh_config 644
/etc/ssh/sshd_config 600
结果记录
1)经核查,为用户分配了账户和权限,目前系统内账号包括超级管理员root、系统管理员SysAdmin、安全管理员SecAdmin、审计管理员AudAdmin;
2)经核查,不存在匿名,默认用户只允许超级管理员可以登录。/etc/group权限644,/etc/passwd权限为644,/etc/shadow权限为000,/etc/profile权限为644,/etc/crontab权限为644,/etc/ssh/sshd_config权限为400。
b) 应重命名或删除默认账户,修改默认账户的默认口令。
符合建议项
1、
cat /etc/passwd
cat /
etc/shadow
记录没有被禁用的系统默认的用户名
bin、daemon、shutdown、halt、sync、adm、lp、news、uucp、operator、games、gopher
删除多余用户
删除多余用户组
groupdel groupname:adm、lp、news、uucp、games、dip、pppusers、popusers、slipusers
2、查看远程连接是否
PermitRootLogin no
cat /etc/ssh/sshd_config | grep Root
核查
/etc/ssh/sshd_config
文件,文件中“PermitRootLogin”参数设置为“no”,即
PermitRootLogin no
即不许可root远程登录。
cat /etc/ssh/sshd_config
cat /etc/ssh/sshd_config | grep Root
PermitRootLogin no
结果记录
经核查,其他默认用户均已禁用,默认账户超级管理员root的默认口令已修改。查询配置文件/etc/ssh/sshd_config,SSH 远程管理 PermitRootLogin 状态为no,禁止root用户远程登录。
c) 应及时删除或停用多余的、过期的账户,避免共享账户的存在。
符合建议项
略
结果记录
经核查,系统目前只启用root、SysAdmin、SecAdmin、AudAdmin,不存在多余或过期账户,管理员用户与账户之间是否一一对应。
d)应授予管理用户所需的最小权限,实现管理用户的权限分离。
符合建议项
略
结果记录
1)经核查,系统进行角色划分,分为超级管理员、系统管理员、安全管理员、审计管理员;
2)经核查,管理用户的权限已经进行分离;
3)经核查,管理用户权限为其工作任务所需的最小权限。
e)应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则。
要求解读
操作系统的访问控制策略应由授权主体(例如安全管理员)进行配置,非授权主体不得更改访问控制策略。访问控制策略规定了操作系统用户对操作系统资源(例如文件和目录)具有哪些权限、能进行哪些操作。通过在操作系统中配置访问控制策略,可以实现对操作系统各用户权限的限制。
结果记录
1)经核查,系统由授权主体安全管理员SecAdmin负责配置访问控制策略;
2)经核查,授权主体安全管理员SecAdmin依据安全策略配置了主体对客体的访问规则并统一管理;
3)经测试,系统管理员SysAdmin和审计管理员AudAdmin不可越权访问。
f)访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级。
符合建议项
略
结果记录
经核查,访问控制策略的控制粒度达到主体为用户级或进程级,客体为文件、数据库表、记录或字段级。查看cat /etc/login.defs中的Umask为077。
g)应对敏感信息资源设置安全标记,并控制主体对有安全标记信息资源的访问。
要求解读
敏感标记是强制访问控制的依据,主体和客体都有,存在形式多样,既可能是整型数字,也可能是字母,总之,它表示主体和客体的安全级别。敏感标记由强认证的安全管理员设置。安全管理员通过对重要信息资源设置敏感标记来决定主体以何种权限对客体进行操作,实现强制访问控制。
在操作系统能够对信息资源设置敏感标记的前提下,应严格按照安全策略控制用户对相关资源的操作。
结果记录
经核查,系统未对主体、客体设置安全标记。
安全审计
基本要求
测评要求
应用指南
a) 应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计。
符合建议项
1、检查系统是否开启审计功能:
systemctl is-enabled auditd
Syslog and audit status
systemctl status auditd
systemctl status rsyslog
service auditd status
service rsyslog status
2、是否审核了审计功能启用前的进程:
grep "^\s*linux" /boot/grub2/grub.cfg
3、查看audit.rules中是否记录了修改日期和时间信息的事件(time-change)、修改用户/组信息事件(identity)、修改系统网络环境事件(system-locale)、记录用户登录退出事件(logins)、会话初始化信息(session)、访问控制权限修改事件(perm_mod)、未经授权的文件访问失败事件(access)、记录文件被重命名或修改属性、系统管理员操作(action)、内核模块的加载和卸载(modules)等等。
cat /etc/audit/audit.rules
tail -20 /var/log/audit/audit.log
ausearch -ts today
-p [r|w|x|a] 和-w一起使用,监测用户对这个目录的读 写 执行 或者属性变化如时间戳变化。
-w /etc/crontab -p rwxa -k crontab
-w /etc/passwd -p rwxa -k passwd
-w /etc/shadow -p rwxa -k shadow
-w /etc/ssh/sshd_config -p rwxa -k ssh
-w /etc/profile -p rwxa -k profile
规则格式:-w 路径 -p 权限 -k 关键字
r 读取文件
w 写入文件
x 执行文件
a 修改文件属性
注:如果没有-p选项,则默认监视所有动作rwxa
-w /etc/at.allow
-w /etc/at.deny
-w /etc/inittab -p rwxa
-w /etc/init.d/
-w /etc/init.d/auditd -p rwxa
-w /etc/cron.d/ -p rwxa
-w /etc/cron.daily/ -p rwxa
-w /etc/cron.hourly/ -p rwxa
-w /etc/cron.monthly/ -p rwxa
-w /etc/cron.weekly/ -p rwxa
-w /etc/crontab -p rwxa
-w /etc/group -p rwxa
-w /etc/passwd -p rwxa
-w /etc/shadow
-w /etc/sudoers -p rwxa
-w /etc/hosts -p rwxa
-w /etc/sysconfig/
-
w /etc/sysctl.conf -p rwxa
-w /etc/modprobe.d/
-w /etc/aliases -p rwxa
-w /etc/bashrc -p rwxa
-w /etc/profile -p rwxa
-w /etc/profile.d/
-w /var/log/lastlog
-w /var/log/yum.log
-w /etc/issue -p rwxa
-w /etc/issue.net -p rwxa
-w /usr/bin/ -p rwxa
-w /usr/sbin/ -p rwxa
-w /bin -p rwxa
-w /etc/ssh/sshd_config
注:如果没有-p选项,则默认监视所有动作rwxa
规则:-a 一系列动作 -S 系统调用名称 -F 字段=值 -k 关键字
audit.rules 样本
# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.
# First rule - delete all
-D
# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 1024
# Feel free to add below this line. See auditctl man page
-a exit,alrwxays -F arch=b64 -S umask -S chown -S chmod
-a exit,alrwxays -F arch=b64 -S unlink -S rmdir
-a exit,alrwxays -F arch=b64 -S setrlimit
-a exit,alrwxays -F arch=b64 -S setuid -S setreuid
-a exit,alrwxays -F arch=b64 -S setgid -S setregid
-a exit,alrwxays -F arch=b64 -S sethostname -S setdomainname
-a exit,alrwxays -F arch=b64 -S adjtimex -S settimeofday
-a exit,alrwxays -F arch=b64 -S mount -S _sysctl
-w /etc/group -p rwxa
-w /etc/passwd -p rwxa
-w /etc/shadow -p rwxa
-w /
etc/sudoers -p rwxa
-w /etc/ssh/sshd_config
-w /etc/bashrc -p rwxa
-w /etc/profile -p rwxa
-w /etc/profile.d/
-w /etc/aliases -p rwxa
-w /etc/sysctl.conf -p rwxa
-w /var/log/lastlog
# Disable adding any additional rules - note that adding *new* rules will require a reboot
#-e 2
读取audit报告
aureport --start this-week
aureport --user
aureport --file
aureport --summary
详见man aureport
设置了监控后,会在/var/log/audit/audit.log里出现日志
1
ausearch -f /etc/passwd -x rm
简单的使用:
auditd
auditctl -R /etc/audit/audit.rules
cat /var/log/audit/audit.log
就可以查看audit记录的信息
4、若有第三方审计工具或系统则记录其运行状态是否正常。
/var/log/messages 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 与安全相关的日志信息
/var/log/maillog 与邮件相关的日志信息
/var/log/cron 与定时任务相关的日志信息
/var/log/spooler 与UUCP和news设备相关的日志信息
/var/log/boot.log 守护进程启动和停止相关的日志消息
ls -l /var/log/secure /var/log/audit/audit.log /var/log/cron /var/log/lastlog /var/log/messages /etc/rsyslog.conf /etc/audit/auditd.conf
结果记录
1)经核查,系统开启了安全审计功能,系统审核策略:rsyslog.service和auditd.service均为active (running) ,可保证6个月留存期;
2)经核查,部署了外部Syslog日志服务器收集审计日志,审计范围覆盖到每个用户;
3)经核查,部署了外部Syslog日志服务器收集审计日志,对重要的用户行为和重要安全事件进行审计。
b) 审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息。
符合建议项
略
结果记录
经核查,Linux日志包括类型、信息、pid、uid、auid、ses、具体信息、用户名、地址、终端、结果。同时部署外部Syslog日志服务器收集审计日志,审计记录信息包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息。