跳至主要內容

等保


等保

1.概述

1.1.编写目的

本文档用于说明网络安全等级保护相关概念、技术要求、测评流程、详细的安全配置,指导等保测评和认证。文档的主要内容是满足等保各个方面要求的具体的描述、操作流程和详细的配置内容。

2.等保

2.1.概念

2.1.1.什么是等保

等保,即网络安全等级保护,是指对国家重要信息、法人和其他组织及公民的专有信息以及公开信息和存储、传输、处理这些信息的信息系统分等级实行安全保护,对信息系统中使用的信息安全产品实行按等级管理,对信息系统中发生的信息安全事件分等级响应、处置。

2.1.2.等保如何分级

我国实行网络安全等级保护制度,等级保护对象分为五个级别,由一到五级别逐渐升高,每一个级别的要求存在差异,级别越高,要求越严格。

等级概要定义测评周期
第一级自主保护级信息系统受到破坏后,会对公民、法人和其他组织的合法权益造成损害,但不损害国家安全、社会秩序和公共利益。第一级信息系统运营、使用单位应当依据国家有关管理规范和技术标准进行保护
第二级指导保护级信息系统受到破坏后,会对公民、法人和其他组织的合法权益产生严重损害,或者对社会秩序和公共利益造成损害,但不损害国家安全。国家信息安全监管部门对该级信息系统安全等级保护工作进行指导至少2年一次
第三级监督保护级信息系统受到破坏后,会对社会秩序和公共利益造成严重损害,或者对国家安全造成损害。国家信息安全监管部门对该级信息系统安全等级保护工作进行监督、检查。至少每年一次
第四级强制保护级信息系统受到破坏后,会对社会秩序和公共利益造成特别严重损害,或者对国家安全造成严重损害。国家信息安全监管部门对该级信息系统安全等级保护工作进行强制监督、检查。至少半年一次
第五级专控保护级信息系统受到破坏后,会对国家安全造成特别严重损害。国家信息安全监管部门对该级信息系统安全等级保护工作进行专门监督、检查。

2.2.等保测评流程

  • 系统定级:确定系统或者子系统的安全等级,准备定级报告
  • 系统备案:准备备案材料,到当地公安网监递交备案
  • 建设整改:基于等保的安全技术和管理要求进行建设和整改,以符合等保要求
  • 等级测评:准备和接受测评机构的测评
  • 监督检查:接受公安网监定期的检查,主动开展每年的定期测评

2.3.等保所需设备(公有云)

控制域描述云产品
安全通信网络满足等保2.0中对不同网络区域边界隔离、虚拟机主动外联控制、网络攻击行为的检测告警,留存6个月的网络流量日志需求,等保必备。另外,云防火墙集成了红队攻击视角的漏洞扫描能力,IPS入侵检测和防御能力、威胁情报的实时检测和阻断能力、并支持对高级威胁的溯源能力。云防火墙
安全通信网络具有服务器身份验证和数据传输加密功能的安全服务。 满足等保对于链路加密https的要求,链路加密、禁止多个AP使用同一个认证密钥。SSL证书
安全区域边界满足等保要求中关于异常流量检测要求和业务高可用性要求,针对异常流量检测要求和业务高可用性要求、检测限制外部发起网络攻击的要求、网络各个部分的带宽满足业务高峰期需要.DDoS高防
安全区域边界满足行业自身的安全需求; 满足等保要求中的入侵防范等要求; 满足等保要求中关于应用安全防护的要求。 实现对网站完整性安全防护,防范各种页面篡改攻击行为;检测限制外部发起网络攻击的要求、记录攻击源IP、攻击类型、攻击目的、攻击时间,在发生严重入侵事件时应提供报警.Web应用防火墙
安全计算环境解决当前服务器面临的主要网络安全风险,帮助企业构建服务器安全防护体系,防止数据泄露。 满足等保要求中关于主机防病毒的要求。 满足等保要求中关于对补丁统一升级要求。主机安全
安全计算环境针对容器化部署,基于等保测评的需求,容器安全服务提供了业界常规的容器合规检测,生成合规报告并告警。容器安全
安全计算环境满足等保要求中身份鉴别、访问控制和安全审计等要求;满足信息安全等级保护数据库管理要求以及访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级.堡垒机
安全计算环境满足等保要求中关于数据库安全审计的要求,满足信息安全等级保护数据库管理要求以及访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级,针对业务层面的审计.数据安全审计
安全计算环境通过数据资产感知与风险识别,对企业云上敏感数据进行定位与分类分级,并帮助企业针对风险问题来设置数据安全策略,提高防护措施有效性。数据安全中心
安全计算环境支持为各行业网络资产提供全方位的防护解决方案,满足《信息安全技术网络安全等级保护基本要求》中漏洞和风险管理的要求,定期对系统进行漏洞扫描,及时准确的发现系统安全隐患,第一时间进行告警通知和应急处理,并提供处置建议及应对方案,满足监管机构的合规性要求。漏洞扫描服务
安全管理中心通过对海量数据进行多维、智能的持续分析,为用户提供漏洞情报、威胁发现、事件处置、基线合规、及泄漏监测、风险可视等能力,并采取相应的安全措施,保障信息系统安全,帮用户实现全生命周期安全运营。满足对分散的设备、组件、主机以及安全策略、事件等进行集中管控、审计、报警和分析。安全运营中心

2.4.等保通用要求(三级)

控制域控制点数量
安全物理环境物理位置的选择;物理访问控制;防盗窃和防破坏;防雷击;防火;防水和防潮;防静电;温湿度控制;电力供应;电磁防护10
安全通信网络网络架构;通信传输;可信验证3
安全区域边界边界防护;访问控制;入侵防范;恶意代码和垃圾邮件防范;安全审计;可信验证6
安全计算环境身份鉴别;访问控制;安全审计;入侵防范;恶意代码防范;可信验证;数据完整性;数据保密性;数据备份和恢复;剩余信息保护;个人信息保护11
安全管理中心系统管理;审计管理;安全管理;集中管控4
安全管理制度安全策略;管理制度;制定与发布;评审和修订4
安全管理机构岗位设置;人员配备;授权和审批;沟通与合作;审核与检查5
安全管理人员人员录用;人员离岗;安全意识教育和培训;外部人员访问管理4
安全建设管理定级和备案;安全方案设计;产品采购和使用;自行软件开发;外包软件开发;工程实施;测试验收;系统交付;等级测评;服务供应商选择10
安全运维管理环境管理;资产管理;介质管理;设备维护管理;漏洞和风险管理;网络和系统安全管理;恶意代码防范管理;配置管理;密码管理;变更管理;备份与恢复管理;安全事件处置;应急预案管理;外包运维管理14

基于本章节中等保三级通用要求,根据以下章节中各项具体要求和详细操作流程进行整改和完善,即可通过等保三级测评。以下各项中,主要关注安全计算环境相关内容即可,其中包含主机系统安全、应用中间件系统安全、以及应用服务安全等部分。

3.安全物理环境

包括机房位置、物理访问控制、防火,防雷击,温湿度控制、电力供应,电磁防护等。 主要由机房建设方、云数据中心运营方等负责建设和满足等保需求。

4.安全通信网络

img.png

  • 网络架构:划分不同的网络区域,重要网络区域与其他网络区域之间应采取可靠的技术隔离手段,建设高可用、冗余的网络
  • 通信传输:应采用校验技术、密码技术保证通信过程中数据的完整性和保密性
  • 可信验证:可基于可信根对通信设备的系统引导程序、系统程序、重要配置参数和通信应用程序等进行可信验证,并在应用程序的关键执行环节进行动态可信验证,在检测到其可信性受到破坏后进行报警,并将验证结果形成审计记录送至安全管理中心

条款解读:根据服务器角色和重要性,对网络进行安全域划分;确保网络带宽和处理能力能满足业务高峰期需要;确保通信传输过程数据的完整性和保密性,可采用可信进行可信验证

5.安全区域边界

img_1.png

  • 边界防护:应保证跨越边界的访问和数据流通过边界防护设备提供的受控接口进行通信,对非授权的内部/外部联接进行检查和限制
  • 恶意代码防范:应在关键网络节点处对恶意代码、垃圾邮件进行检测和防护,并维护恶意代码、垃圾邮件防护机制的升级和更新
  • 安全审计:应在网络边界、重要网络节点对每个用户及重要用户和重要安全事件进行安全审计,并记录和保护审计信息;应能对远程访问的用户行为、访问互联网的用户行为等单独进行行为审计和数据分析

条款解读:在内外网的安全域边界设置访问控制策略,并要求配置到具体的端口;在网络边界处应当部署入侵防范手段,防御并记录入侵行为;对网络中的用户行为日志和安全事件信息进行记录和审计;可采用可信进行可信验证

6.安全计算环境

img_2.png

  • 身份鉴别:应对登录的用户进行身份标识和鉴别,同时对身份标识和鉴别有相关安全策略要求,包括身份唯一性、密码策略、账号安全策略、双因素鉴别等
  • 安全审计:应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计;并记录和保护审计信息;应对审计进程进行保护,防止未经授权的中断
  • 可信验证:可基于可信根对计算设备的系统引导程序、系统程序、重要配置参数和应用程序等进行可信验证,并在应用程序的关键执行环节进行动态可信验证,在检测到其可信性受到破坏后进行报警,并将验证结果形成审计记录送至安全管理中心

条款解读:针对服务器、数据库、应用系统等计算环境,借助第三方安全软件或通过应用本身的安全手段实现鉴权、账号安全、安全审计、数据安全保护等功能,保证系统层安全,防范入侵行为。

6.1.漏洞修复

6.1.1.概述

6.1.1.1.什么是漏洞

漏洞是指在操作系统实现或安全策略上存在的缺陷,例如操作系统软件或应用软件在逻辑设计上存在的缺陷或在编写时产生的错误。攻击者可以对这类缺陷或错误进行利用,从而能够在未获得授权的情况下访问和窃取您的系统数据或破坏系统。系统漏洞需要系统管理员及时处理并修复,否则将带来严重的安全隐患。

6.1.1.2.漏洞修复报告示例

img_3.png

术语解释

  • CVE(Common Vulnerabilities & Exposures, 通用漏洞披露),为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称,命名规则 CVE-漏洞披露年份-当年编号
  • CNVD(China National Vulnerability Database,国家信息安全漏洞共享平台)
  • CNNVD(China National Vulnerability Database of Information Security,中国国家信息安全漏洞库)
6.1.1.3.基本修复步骤
  1. 分析漏洞文档,整理修复步骤
  2. 和项目约定修复时间,并确定以下内容
    1. 是否需要停业务,停业务时长
    2. 通知客户和项目相关人员,修复期间保持联系
    3. 如果涉及到最终用户需提前发公告通知
  3. 修复漏洞
  4. 功能测试
  5. 漏洞复扫

6.1.2.系统修复

6.1.2.1.升级内核

内核有更新,需要重启服务器才能启用新内核

1.# 升级
2.yum -y update
3.
4.# 安装完检查时间是否正确, 如果是虚拟机可能由于宿主时间不正确导致时间错误
5.date
6.# 检查定时任务是否启动成功
7.ps -ef | grep crond

6.1.2.2.常见问题

  • 服务器时间不正确
1.ntpdate -u pool.ntp.org
  • At least xMB more space needed on the /boot filesystem 原因:内核默认安装到 /boot,部分服务器分配给 /boot的存储较小,导致内核安装失败

处理:删除更久远的历史内核腾出空间安装新的内核

1.# 查看已安装内核
2.yum list kernel
3.
4.# 查看当前使用内核
5.uname -r
6.
7.# 删除历史内核,保留最近安装的内核
8.yum install yum-utils -y
9.package-cleanup --oldkernels --count=2

6.1.3.应用修复

6.1.3.1.OpenSSH升级
6.1.3.1.1.准备备用远程登录

用户反馈 openssh 存在漏洞,需要升级,升级过程中原来的 ssh 将无法使用,如果是在编译过程中的话,断开会将无法再访问服务器,需要有预案可以登录,防止出现问题。我们可以使用telnet-server来提供服务。安装:

yum -y install xinetd telnet-server

telnet-server是由xinetd管理,需要安装xinetd,这里启动的是telnet.socket而不是telnet.service。默认情况下,PAM 模块限制root不能telnet到 telnet-server,如果telnet 时报 Login incorrect 时,可以把下面的文件进行注释掉;

img_4.png

启动服务

systemctl enable xinetd.server
systemctl enable telnet.socket
systemctl start telnet.socket
systemctl start xinetd.service

img_5.png

6.1.3.1.2.升级OpenSSH
#!/bin/bash
cd /opt

# 更新 openssh 
yum update openssh -y

# 安装依赖
yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel pam-devel
yum install -y pam* zlib*

# 下载 openssh、openssl 源码
wget -c https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/openssh-8.1p1.tar.gz
wget -c https://ftp.openssl.org/source/openssl-1.0.2r.tar.gz

# 解压操作
tar zxf openssh-8.1p1.tar.gz
tar zxf openssl-1.0.2r.tar.gz

# 原文件备份
mv /usr/bin/openssl /usr/bin/openssl_bak
mv /usr/include/openssl /usr/include/openssl_bak

# 安装 openssl 
cd /opt/openssl-1.0.2r
./config shared && make && make install
echo $?

# 链接文件
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
/sbin/ldconfig
openssl version

# 编译安装 openssh 
cd /opt/openssh-8.1p1
chown -R root.root /opt/openssh-8.1p1
cp -r /etc/ssh /tmp/
rm -rf /etc/ssh
./configure --prefix=/usr/ --sysconfdir=/etc/ssh --with-openssl-includes=/usr/local/ssl/include --with-ssl-dir=/usr/local/ssl --with-zlib --with-md5-passwords --with-pam && make && make install
echo $?

# 修改配置文件
cat > /etc/ssh/sshd_config <<EOF
PermitRootLogin yes
AuthorizedKeysFile .ssh/authorized_keys
UseDNS no
Subsystem sftp /usr/libexec/sftp-server
EOF
grep "^PermitRootLogin" /etc/ssh/sshd_config
cat /tmp/ssh/sshd_config |grep -v '#' |grep -v '^$'
cp -a contrib/redhat/sshd.init /etc/init.d/sshd
cp -a contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
chmod +x /etc/init.d/sshd
chkconfig --add sshd
systemctl enable sshd
mv /usr/lib/systemd/system/sshd.service /opt/
mv /usr/lib/systemd/system/sshd.socket /opt/
chkconfig sshd on

# 启动
service sshd restart

# 测试
openssl version
ssh -V

查看版本并测试SSH远程连接

ssh -V
6.1.3.2.Tomcat
6.1.3.2.1.漏洞列表

img_6.png

6.1.3.2.2.漏洞修复

修复方案:升级Tomcat版本到各主要版本的最新Released版本,以下是具体版本升级过程。

下载地址:https://tomcat.apache.org/whichversion.html

示例:

  • 旧版本:apache-tomcat-8.0.53.tar.gz
  • 新版本:apache-tomcat-8.5.75.tar.gz
#停止原tomcat服务,进入tomcat根目录执行:
./bin/shutdown.sh

#打包现有Tomcat目录下logs和webapps目录
cd apache-tomcat-8.0.53
tar cvf logs.tar logs
tar cvf webapps.tar webapps

#备份原tomcat
mv apache-tomcat-8.0.53 apache-tomcat-8.0.53_bak

#上传新版本tomcat并解压
tar zxf apache-tomcat-8.5.75.tar.gz

#拷贝原版本打包的log和webapps到新版本并解压
cd apache-tomcat-8.5.75
mv webapps webapps_bak
cp apache-tomcat-8.0.53_bak/webapps.tar ./
cp apache-tomcat-8.0.53_bak/logs.tar ./
tar xvf webapps.tar
tar xvf logs.tar

#根据原版本配置修改新配置文件内容
vim apache-tomcat-8.5.75/conf/server.xml

#启动服务并验证
cd apache-tomcat-8.5.75
./bin/startup.sh
6.1.3.3.Mysql
6.1.3.3.1.漏洞信息

编号:CVE-2019-3822,官方说明

6.1.3.3.2.漏洞修复

Mysql新版本:下载地址

前提:备份mysql的数据目录、配置文件、导出SQL。

#查看当前mysql版本
mysql -V

#解压安装包
tar xf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar

#停止mysql服务
systemctl stop mysqld

#安装libaio
yum install libaio

#卸载5.7.25安装5.7.28
rpm -qa |grep mysql |xargs rpm -ev --nodeps
rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm 
rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm 
rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm 
rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm --nodeps

#查看安装结果
rpm -qa | grep mysql

#启动mysql服务
systemctl start mysqld

#查看mysql版本
mysql -V

6.2.基线管理

6.2.1.概述

6.2.1.1.什么是基线

基线指操作系统、数据库及中间件的安全实践及合规检查的配置红线,包括弱口令、账号权限、身份鉴别、密码策略、访问控制、安全审计和入侵防范等安全配置检查。

6.2.1.2.常见基线分类
基线分类检查标准及检查内容覆盖的系统和服务
弱口令使用非登录爆破方式检测是否存在弱口令。避免登录爆破方式锁定账户影响业务的正常运行。操作系统Linux、MySQL、Redis、 MongoDB
等保合规等保三级合规基于服务器安全等保基线检查。对标权威测评机构安全计算环境测评标准和要求。
6.2.1.3.测评公司检查脚本示例

Linux

1.cat /etc/redhat-release
2.cat /etc/passwd
3.cat /etc/login.defs
4.cat /etc/pam.d/system-auth
5.cat /etc/pam.d/sshd
6.cat /etc/profile
7.cat /etc/pam.d/login
8.netstat -ntlp
9.cat /etc/shadow
10.cat /etc/ssh/sshd_config
11.ls -l /etc/shadow
12.ls -l /var/log/messages
13.ls -l /etc/passwd
14.service rsyslog status
15.service auditd status
16.cat  /etc/rsyslog.conf
17.auditctl -l
18.auditctl -s
19.systemctl list-unit-files|grep enable
20.chage -d
21.yum list installed
22.cat /etc/hosts.deny
23.cat /etc/hosts.allow

MySQL

1.select user, host FROM mysql.user; 
2.show variables like 'validate%';
3.show variables like '%password';
4.show variables like '%timeout%';
5.show variables like '%have_ssl%';
6.show variables like 'require_secure_transport';  
7.select user,host FROM mysql.user;
8.select * from mysql.user;  
9.show variables like'%log%';
10.show variables like '%audit%'; 
11.show global variables like 'long%';
12.select version();
13.show variables like 'log_error';
14.show status like 'ssl_cipher';

6.2.2.基线检测项

三级等保:

检测项名称威胁等级描述处理建议
确保已配置SSH空闲超时间隔高危这两个选项ClientAliveInterval和ClientAliveCountMax控制SSH会话超时。当ClientAliveInterval变量被设置,对指定的时间长度没有活动的SSH会话被终止。当ClientAliveCountMax变量被设置,sshd将在每一个客户端发送活动消息ClientAliveInterval的时间间隔。当连续发送的客户端活动消息数没有客户端响应时,ssh会话将终止。编辑/etc/ssh/sshd_config文件以设置参数,如下所示:
确保SSH MaxAuthTries设置为4或更低高危MaxAuthTries参数指定每个连接允许的最大身份验证尝试次数。登录失败次数达到设置参数一半时,错误消息将写入syslog文件,详细说明登录失败。ClientAliveInterval 300
确保已禁用SSH空密码登录高危PermitEmptyPasswords参数指定SSH服务器是否允许登录具有空密码字符串的帐户ClientAliveCountMax 0
确保配置了密码尝试失败的锁定高危连续n次失败登录尝试后锁定用户。编辑/etc/ssh/sshd_config文件以设置参数,如下所示:
确保默认用户umask限制为027或更高高危umask默认值确定用户创建的文件的权限。创建文件的用户可以通过chmod命令自行决定使其他人可以读取其文件和目录MaxAuthTries 4
确保默认用户shell超时为900秒或更短高危默认值TMOUT确定用户的shell超时时间。TMOUT值以秒为单位。编辑/etc/ssh/sshd_config文件以设置参数,如下所示:
确保配置了bootloader配置的权限中危grub配置文件包含有关引导设置的信息以及用于解锁引导选项的密码。PermitEmptyPasswords no
确保核心转储(core dump)受到限制中危核心转储是可执行程序的内存。通常用于确定程序为何中止。它还可以用于从核心文件中收集机密信息。编辑/etc/pam.d/password-auth 和/etc/pam.d/system-auth 文件,以符合本地站点策略:
确保启用了地址空间布局随机化(ASLR)中危地址空间布局随机化(ASLR)是一种漏洞利用缓解技术,它可以随机排列进程的关键数据区域的地址空间。auth required pam_faillock.so preauth audit silent deny=5 unlock_time=900
确保单用户模式需要身份验证中危当系统在引导过程中或通过从引导加载程序中手动选择检测到问题时,将使用单用户模式进行恢复。auth [success=1 default=bad] pam_unix.so
确保配置/etc/passwd的权限中危/etc/passwd文件包含许多系统程序使用的用户帐户信息,因此必须可以读取这些程序才能运行。auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=900
确保配置/etc/shadow的权限中危/etc/shadow文件用于存储有关用户帐户的信息,这些信息对于这些帐户的安全性至关重要,例如哈希密码和其他安全信息。auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=900
确保配置/etc/group的权限中危/etc/group文件包含系统中定义的所有有效组的列表。编辑/etc/bashrc,/etc/profile和/etc/profile.d/*.sh文件(以及系统上支持的任何其他Shell的适当文件),并添加或编辑umask参数,如下所示:
确保配置/etc/gshadow的权限中危/etc/gshadow文件用于存储对帐户的安全性至关重要的组的信息,例如散列密码和其他安全信息。umask 027
确保配置/etc/passwd-的权限中危/etc/passwd-文件包含备份用户帐户信息。备注(修复完后运行以下命令以确保是否已完全修复)
确保配置/etc/shadow-的权限中危/etc/shadow-文件用于存储有关用户帐户的备份信息,这些信息对于这些帐户的安全性至关重要,例如散列密码和其他安全信息。grep “umask” /etc/bashrc
确保配置/etc/group-的权限中危/etc/group-文件包含系统中定义的所有有效组的备份列表。grep “umask” /etc/profile
确保配置/etc/gshadow-的权限中危/etc/gshadow-文件用于存储有关组的备份信息,这些信息对于这些帐户的安全性至关重要,例如哈希密码和其他安全信息。grep “umask” /etc/profile.d/*.sh
确保已配置审核日志存储大小低危配置审核日志文件的最大大小。一旦日志达到最大大小,将对其进行轮换并启动新的日志文件。如果umask配置不为027的,需全部修改为027或更严格
确保已启用auditd服务低危打开auditd守护程序以记录系统事件。编辑/etc/bashrc和/etc/profile文件(以及系统上支持的任何其他Shell的适当文件),并添加或编辑任何TMOUT参数,如下所示:
确保在审核日志已满时禁用系统低危当审计日志都满了,auditd守护程序可以被配置为停止系统。TMOUT=600
确保审核日志不会自动删除低危设置max_log_file_action 值为keep_logs,当审核日志文件达到最大文件大小时将不删除旧日志运行以下命令来设置对grub配置的权限:
确保系统管理范围(sudoers)更改的收集低危监视系统管理范围更改。如果已正确配置系统以强制系统管理员先以自己的身份登录,然后使用该sudo命令执行特权命令,则可以监视更改。该文件/etc/sudoers被写入或其属性已更改为。审核记录将使用标识符“scope”标记。# chown root:root /boot/grub2/grub.cfg
确保收集了系统管理员操作(sudolog)低危监视sudo日志文件。如果系统已正确配置为禁用该su命令,并强制所有管理员必须先登录然后sudo才能执行特权命令,则所有管理员命令都将登录到/var/log/sudo.log。每当执行命令时,审计事件都会触发,并且已执行的管理命令将被写入日志。# chmod og-rwx /boot/grub2/grub.cfg
确保审核配置是不变的低危设置系统审核,以便不能使用auditctl修改审核规则。设置标志“ -e 2”将强制审核设置为不可变模式。审核设置更改只能在系统重新引导时进行。将以下行添加到/etc/security/limits.conf或/etc/security/limits.d/文件中:
确保启用对在auditd之前启动的进程的审计低危对grub进行配置, 以便即使进程比auditd更早启动也可以对其进行审计hard core 0
确保收集了修改用户/组信息的事件低危记录影响group,passwd(用户ID)shadow和gshadow(密码)或/etc/security/opasswd文件的事件在/etc/sysctl.conf或/etc/sysctl.d/*文件中设置以下参数:
确保收集了修改系统的强制访问控制的事件低危监控SELinux强制访问控制。/etc/selinux目录的任何写访问(可能在目录中添加,删除或修改文件)或属性更改都会被监控fs.suid_dumpable = 0
确保收集了登录和注销事件低危监视登录和注销事件。跟踪与登录/注销事件关联的文件的更改。该文件/var/log/lastlog保留用户最后一次成功登录的记录。该/var/run/failock 目录保留通过pam_faillock 模块登录失败的记录运行以下命令来设置活动内核参数:
确保收集了会话启动信息低危监视会话启动事件。跟踪与会话事件关联的文件的更改。该文件/var/run/utmp跟踪所有当前登录的用户。所有审核记录都将标记有标识符“会话”。/var/log/wtmp文件跟踪登录,注销,关闭和重新启动事件。# sysctl -w fs.suid_dumpable=0

6.2.3.基线处理

6.2.3.1.CentOS7 基线处理
6.2.3.1.1.备份
1.curDate=$(date '+%F')
2.cp -rf /etc/pam.d /etc/pam.d_${curDate}
3.cp /etc/ssh/sshd_config /etc/ssh/sshd_config_${curDate}
4.cp /etc/login.defs /etc/login.defs_${curDate}
5.cp /etc/profile /etc/profile_${curDate}
6.cp /etc/bashrc /etc/bashrc_${curDate}
7.cp /etc/sysctl.conf /etc/sysctl.conf_{curDate}
8.cp /etc/audit/auditd.conf /etc/audit/auditd.conf_${curDate}
9.cp /etc/default/grub /etc/default/grub_${curDate}
6.2.3.1.2.远程登录
1.# 权限控制
2.chown root:root /etc/ssh/sshd_config
3.chmod og-rwx /etc/ssh/sshd_config
4.chmod 400 /etc/ssh/*key /etc/ssh/*key.pub
5.chown -R root:root /etc/ssh/*key /etc/ssh/*key.pub
6.
7.# 配置修改
8.sed -i "s;.*ClientAliveInterval.*;ClientAliveInterval 300;" /etc/ssh/sshd_config
9.sed -i "s;.*ClientAliveCountMax.*;ClientAliveCountMax 0;" /etc/ssh/sshd_config
10.sed -i "s;.*MaxAuthTries 6.*;MaxAuthTries 4;" /etc/ssh/sshd_config
11.sed -i "s;.*PermitEmptyPasswords.*;PermitEmptyPasswords no;" /etc/ssh/sshd_config
12.sed -i "s;.*X11Forwarding yes;X11Forwarding no;" /etc/ssh/sshd_config
13.sed -i "s;.*MaxAuthTries 6.*;MaxAuthTries 4;" /etc/ssh/sshd_config
14.sed -i "s;.*IgnoreRhosts.*;IgnoreRhosts yes;" /etc/ssh/sshd_config
15.sed -i "s;.*HostbasedAuthentication no;HostbasedAuthentication no;" /etc/ssh/sshd_config
16.sed -i "s;.*PermitUserEnvironment no;PermitUserEnvironment no;" /etc/ssh/sshd_config
17.sed -i '$aCiphers aes256-ctr,aes192-ctr,aes128-ctr' /etc/ssh/sshd_config
18.sed -i '$aMACs hmac-sha2-512,hmac-sha2-256' /etc/ssh/sshd_config
19.sed -i "s;.*LoginGraceTime 2m;LoginGraceTime 60;" /etc/ssh/sshd_config
20.sed -i "s;.*Banner none;Banner /etc/issue.net;" /etc/ssh/sshd_config
21.sed -i "s;.*Protocol 2;Protocol 2;" /etc/ssh/sshd_config
22.sed -i "s;.*LogLevel INFO;LogLevel INFO;" /etc/ssh/sshd_config
23.[[ ! $(grep "Protocol" /etc/ssh/sshd_config) ]] && sed -i '$aProtocol 2' /etc/ssh/sshd_config
24.
25.# 检查配置
26.cat /etc/ssh/sshd_config | grep -E 'X11Forwarding|MaxAuthTries|IgnoreRhosts|HostbasedAuthentication|PermitEmptyPasswords|PermitUserEnvironment|Ciphers|MACs|ClientAliveInterval|ClientAliveCountMax|LoginGraceTime|Banner|Protocol|LogLevel'
27.
28.# 增加服务器提示信息
29.cat >/etc/issue.net<<EOF
30.Current-Server: wehospital 
31.EOF
32.cat /etc/issue.net
33.service sshd restart
6.2.3.1.3.弱口令

PAM(Pluggable Authentication Modules),可插拔授权模块,处于最底层,向上为接口层提供用户认证鉴别,同时也提供了支持帐户管理、会话管理以及口令管理功能的模块。

img_7.png

配置说明

  • 格式:module-type control-flag module_path options
  • module-type
    • auth:检查用户和密码,并分配权限
    • account: 账户合法性检查
    • session: 会话类接口,用户登录成功到退出的会话控制
    • password: 口令类接口,控制用户更改密码的全过程
  • control-flag
    • required:必要条件,在所有模块都调用完毕后才将错误消息返回给应用程序,通过一种隐蔽的方式来保护系统服务
    • requisite:失败立刻返回,鉴别过程到此结束
    • sufficient:充分条件,成功立刻返回,失败则当做 optional
    • optional:PAM 框架会忽略这个模块产生的验证错误
    • include:调用其他配置
  • module_path
    • 模块的全路径名,不同系统参数可能不同
  • options
    • 特定模块传递相关的选项,然后由模块分析解释这些选项
1.# minlen: 最短; 
2.# dcredit: 最少数字,至少包含一个数字; 
3.# ucredit: 最少大写字符; 
4.# lcredit: 最少小写字符; 
5.# ocredit: 最少特殊字符; 
6.password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 minlen=8 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1  remember=5 authtok_type=

操作

1.cat > /etc/pam.d/system-auth <<\EOF
2.#%PAM-1.0
3.# This file is auto-generated.
4.# User changes will be destroyed the next time authconfig is run.
5.auth        required      pam_env.so
6.auth        required      pam_faillock.so preauth audit silent deny=5 unlock_time=900
7.auth [success=1 default=bad] pam_unix.so nullok try_first_pass
8.auth        [default=die] pam_faillock.so authfail audit deny=5 unlock_time=900
9.auth        sufficient    pam_faillock.so authsucc audit deny=5 unlock_time=900
10.auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
11.auth        required      pam_deny.so
12.
13.account     required      pam_unix.so
14.account     sufficient    pam_localuser.so
15.account     sufficient    pam_succeed_if.so uid < 1000 quiet
16.account     required      pam_permit.so
17.
18.password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 minlen=8 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1  remember=5 authtok_type=
19.password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
20.password    required      pam_deny.so
21.
22.session     optional      pam_keyinit.so revoke
23.session     required      pam_limits.so
24.-session     optional      pam_systemd.so
25.session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
26.session     required      pam_unix.so
27.EOF
28.
29.\cp -f /etc/pam.d/system-auth /etc/pam.d/password-auth
30.
31.sed -i "s;#auth\s*required\s*pam_wheel.so\s*use_uid;auth            required        pam_wheel.so use_uid;" /etc/pam.d/su
32.cat /etc/pam.d/su
6.2.3.1.4.审计
1.sed -i 's;^space_left_action.*;space_left_action = email;' /etc/audit/auditd.conf
2.sed -i 's;^action_mail_acct.*;action_mail_acct = root;' /etc/audit/auditd.conf
3.sed -i 's;^admin_space_left_action.*;admin_space_left_action = halt;' /etc/audit/auditd.conf
4.sed -i 's;^max_log_file_action.*;max_log_file_action = keep_logs;' /etc/audit/auditd.conf
5.
6.cat >> /etc/audit/rules.d/mediway.rules <<\EOF
7.-w /etc/sudoers -p wa -k scope
8.-w /etc/sudoers.d/ -p wa -k scope
9.
10.-w /var/log/sudo.log -p wa -k actions
11.
12.-e 2
13.
14.-w /etc/group -p wa -k identity
15.-w /etc/passwd -p wa -k identity
16.-w /etc/gshadow -p wa -k identity
17.-w /etc/shadow -p wa -k identity
18.-w /etc/security/opasswd -p wa -k identity
19.
20.-w /etc/selinux/ -p wa -k MAC-policy
21.-w /usr/share/selinux/ -p wa -k MAC-policy
22.
23.-w /var/log/lastlog -p wa -k logins
24.-w /var/run/faillock/ -p wa -k logins
25.
26.-w /var/run/utmp -p wa -k session
27.-w /var/log/wtmp -p wa -k logins
28.-w /var/log/btmp -p wa -k logins
29.EOF
30.
31.# 检查
32.cat /etc/audit/rules.d/mediway.rules
33.service auditd restart
34.
35.sed -i 's;^GRUB_CMDLINE_LINUX.*;GRUB_CMDLINE_LINUX="audit=1";' /etc/default/grub
36.cat /etc/default/grub|grep GRUB_CMDLINE_LINUX
37.grub2-mkconfig -o /boot/grub2/grub.cfg
6.2.3.1.5.内核参数
1.sed -i '$anet.ipv4.conf.all.accept_redirects=0' /etc/sysctl.conf
2.sed -i '$anet.ipv4.ip_forward=0' /etc/sysctl.conf
3.sed -i '$anet.ipv4.conf.default.accept_source_route=0' /etc/sysctl.conf
4.sed -i '$anet.ipv4.conf.all.accept_source_route=0' /etc/sysctl.conf
5.sed -i '$anet.ipv4.icmp_echo_ignore_broadcasts=1' /etc/sysctl.conf
6.sed -i '$anet.ipv4.conf.all.log_martians=1' /etc/sysctl.conf
7.sed -i '$anet.ipv4.conf.default.log_martians=1' /etc/sysctl.conf
8.sed -i '$anet.ipv4.tcp_syncookies=1' /etc/sysctl.conf
9.sed -i '$afs.suid_dumpable=0' /etc/sysctl.conf
10.sed -i '$akernel.randomize_va_space=2' /etc/sysctl.conf
11.sysctl -p
6.2.3.1.6.其他
1.chown root:root /boot/grub2/grub.cfg
2.chmod og-rwx /boot/grub2/grub.cfg
3.chmod 600 /etc/security
4.chattr +a /var/log/messages
5.chmod 640 /var/log/boot.log
6.
7.sed -i 's;umask 0..;umask 027;' /etc/profile
8.sed -i 's;umask 0..;umask 027;' /etc/bashrc
9.
10.sed -i "s;^PASS_MAX_DAYS\s*99999;PASS_MAX_DAYS 90;" /etc/login.defs
11.sed -i "s;^PASS_MIN_DAYS\s*0;PASS_MIN_DAYS 10;" /etc/login.defs
12.sed -i "s;^PASS_WARN_AGE\s*7;PASS_WARN_AGE 7;" /etc/login.defs
13.sed -i "s;^PASS_MIN_LEN\s*5;PASS_MIN_LEN 8;" /etc/login.defs
14.cat /etc/login.defs | grep -E 'PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE|PASS_MIN_LEN'
15.
16.sed -i '$a\\n* soft core 0\n* hard core 0' /etc/security/limits.conf
17.cat /etc/security/limits.conf
18.
19.sed -i '$aTMOUT=600' /etc/profile
20.sed -i '$aTMOUT=600' /etc/bashrc
21.cat /etc/profile | grep -E 'TMOUT'
6.2.3.2.MySQL 基线处理
6.2.3.2.1.口令管理
  • 弱口令配置 使用数据库安全设置工具
1./usr/local/mysql/bin/mysql_secure_installation
  • 配置示例
  1. 输入 y 设置启动 validate_password
  2. 输入 2 选择 STRONE 的安全策略
  3. 输入 y 修改当前密码
  4. 输入 y 删除匿名用户
1.Securing the MySQL server deployment.
2.
3.Enter password for user root:
4.
5.VALIDATE PASSWORD PLUGIN can be used to test passwords
6.and improve security. It checks the strength of password
7.and allows the users to set only those passwords which are
8.secure enough. Would you like to setup VALIDATE PASSWORD plugin?
9.
10.Press y|Y for Yes, any other key for No: y
11.
12.There are three levels of password validation policy:
13.
14.LOW    Length >= 8
15.MEDIUM Length >= 8, numeric, mixed case, and special characters
16.STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file
17.
18.Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
19.Using existing password for root.
20.
21.Estimated strength of the password: 50
22.Change the password for root ? ((Press y|Y for Yes, any other key for No) : y
23.
24.New password:
25.
26.Re-enter new password:
27.
28.Estimated strength of the password: 100
29.Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
30.By default, a MySQL installation has an anonymous user,
31.allowing anyone to log into MySQL without having to have
32.a user account created for them. This is intended only for
33.testing, and to make the installation go a bit smoother.
34.You should remove them before moving into a production
35.environment.
36.
37.Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
38.Success.

配置检查

1.mysql> show variables like "%validate%";
2.+--------------------------------------+--------+
3.| Variable_name                        | Value  |
4.+--------------------------------------+--------+
5.| query_cache_wlock_invalidate         | OFF    |
6.| validate_password_check_user_name    | OFF    |
7.| validate_password_dictionary_file    |        |
8.| validate_password_length             | 8      |
9.| validate_password_mixed_case_count   | 1      |
10.| validate_password_number_count       | 1      |
11.| validate_password_policy             | MEDIUM |
12.| validate_password_special_char_count | 1      |
13.+--------------------------------------+--------+
6.2.3.2.2.账号管理
  1. 编辑 /etc/my.cnf 添加以下内容
1.[mysqld]
2.default_password_lifetime=90
  1. 设置 root 用户用不过期
1.ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER
  1. 创建应用用户并设置过期时间
1.CREATE USER 'mediway'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE INTERVAL 90 DAY;
  1. 重启数据库
1.lnmp mysql restart
6.2.3.2.3.连接控制
  1. 检查插件 connection_control 是否安装
1.mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'connection%';
2.Empty set (0.00 sec)
  1. 如果步骤一未安装,则执行以下命令安装
1.mysql> INSTALL PLUGIN CONNECTION_CONTROL SONAME 'connection_control.so';
2.mysql> INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME 'connection_control.so';
  1. 编辑 /etc/my.cnf 添加以下内容
1.[mysqld]
2.connection_control_failed_connections_threshold=4
3.# 毫秒
4.connection_control_min_connection_delay= 2000
5.connection_control_max_connection_delay = 20000
  1. 重启数据库
1.lnmp mysql restart
  1. 检查
1.mysql> # 连接控制的使用次数
2.mysql> show status like "%connection_control%";

6.3.其他安全

6.3.1.远程登录

6.3.1.1.说明
  1. 删除系统默认创建用户,如联通云会默认创建和 root 密码相同的用户 administrator
  2. 创建部门使用的非 root 用户,建议统一为 mediway
  3. 测试新建用户登录是否成功
  4. 修改 root 密码,满足一定的复杂度
  5. 设置不允许 root 远程登录
  6. 更换 ssh 监听端口,云服务器配置对应的安全组,院内服务器需要管理员配合修改映射,使用 2222
  7. 使用 mediway 登录后获取 root 权限进行运维
6.3.1.2.操作
6.3.1.2.1.用户管理
  • 检查用户时可以对照 /etc/shadow, 如果用户未设置密码,则不需要处理,系统默认不允许登录
  • 随机密码生成 cat /dev/urandom | tr -dc 'A-Za-z0-9!@#$%^&*' | head -c16
1.# 查询用户列表, 查询是否有 root 以外的远程登录用户, "!!" 或 "*" 表示为设置密码
2.cat /etc/passwd | grep -v nologin | grep -v halt | grep -v shutdown | awk -F: '{print $1}' | xargs -I {} grep {} /etc/shadow
9. 
4.# 与服务器管理员确认用户用途,如果是无用的用户则删除
5.userdel -r user_name
6.
7.# 添加用户到 visudo 中, 允许使用 sudo -i
8.echo 'mediway ALL=(ALL) ALL' >> /etc/sudoers
9.
10.# 添加部门使用用户
11.useradd mediway -M -c 'mediway ihospital' -g wheel
12.
13.# 设置密码, 长度大于 8 位, 包含特殊字符, 数字, 大小写字母
14.passwd mediway
15.
16.# 尝试远程登录(新窗口)
17.ssh mediway@ip
18.
19.# 修改 root 密码, 长度大于 8 位, 包含特殊字符, 数字, 大小写字母
20.passwd root
21.
22.# root 权限获取
23.## 方法一, 输入 root 密码
24.su root
25.
26.## 方法二, 输入 mediway 密码
27.sudo -i
6.3.1.2.2.配置修改
  • 修改端口需要配置相关安全组
  • 修改完配置需要重启 sshd 生效
  1. 编辑 ssh 服务配置文件 /etc/ssh/sshd_config, 修改以下配置并保存
1.# 端口
2.Port 2222
2. 
4.# 不允许 root 远程登录
5.PermitRootLogin no
  1. 重启服务
1.# 重启 sshd_config
2.## 方法一
3.service sshd restart
3. 
5.## 方法二
6.systemctl restart sshd
7.
8.# 确认端口和服务是否启动
9.netstat -ntlp | grep ssh

6.3.2.日常运维

  • 远程运维结束后关闭窗口
  • 所有后台管理不使用简单密码

7.安全管理中心

img_8.png

  • 系统管理:应对系统管理员进行身份鉴别,只允许其通过特定的命令或操作界面进行系统管理操作(系统资源和运行的配置、控制和管理),并对这些操作进行审计
  • 审计管理:应对审计管理员进行身份鉴别,只允许其通过特定的命令或操作界面进行安全审计操作,并对这些操作进行审计
  • 安全管理:应对安全管理员进行身份鉴别,只允许其通过特定的命令或操作界面进行安全管理操作,并对这些操作进行审计
  • 集中管控:对安全设备、安全组件进行集中管控,对网络链路、安全设备、网络设备和服务器等的运行状况进行集中监测,对各个设备上的审计数据进行集中审计和分析

条款解读:借助第三方安全管理软件设立安全管理中心,对分散在网络中的各类设备、组件进行集中的管控、检测和审计

8.安全管理体系

img_9.png

  • 安全管理制度:应建立由安全策略、管理制度、操作规程、记录表单等构成的全面的信息安全管理制度体系
  • 安全管理机构:应成立指导和管理网络安全工作的委员会或领导小组,其最高领导由单位主管领导担任或 授权
  • 安全管理人员:应制定人员方面的安全管理策略,确保人员录用、人员离岗、人员培训及外包人员的安全管理
  • 安全建设管理:应根据保护对象的安全保护等级及与其他级别保护对象的关系进行安全整体规划和安全建设
  • 安全运维管理:应采取必要的措施进行环境、资产、介质、设备维护、漏洞和风险、密码、变更等的安全运维管理

条款解读:参考业界成熟的方法论和最佳实践,建立一套符合企业实际情况的信息安全管理体系,开展并落实持续的安全建设和安全管理。