赞
踩
这篇博客以等保2.0为要求,搭建一台系统内的日志服务器,以最大限度地满足等保要求。
a)测评指标:应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换。
c)测评实施包括以下内容:
1)应核查用户在登录时是否采用了身份鉴别措施;
2)应核查用户列表确认用户身份标识是否具有唯一性;
3)应核查用户配置信息或测试验证是否不存在空口令用户;
4)应核查用户鉴别信息是否具有复杂度要求并定期更换。
使用用户名和口令进行身份鉴别。
Linux中使用UID作为用户标识,而UID在系统内是唯一的。可以使用如下命令查看系统内的所有账户的UID,查看是否存在相同数字即可:
cat /etc/passwd | cut -d':' -f3 | sort -n
Linux中所有能够登录系统的账户都需要口令才能成功登录系统,如果新增一个账户,但不设置口令的话,是无法成功登录系统的。
在/etc/system-auth文件中的password部分第一行增加如下内容:
password requisite pam_cracklib.so retry=3 difok=1 minlen=8 dcredit=-2 ucredit=-2 lcredit=-2 ocredit=-2 minclass=4 maxrepat=2
参数说明:retry=3:在设置口令的时候,如果3次输入的口令都不满足口令策略要求的话,则终止口令设置;
difok=1:在设置口令的时候,允许新密码中有1个字符和旧密码相同;
minlen=8:口令的最短位数要求为8位;
dcredit=-2:口令中需要包含2个数字;
ucredit=-2:口令中需要包含2个大写字符;
lcredit=-2:口令中需要包含2个小写字符;
ocredit=-2:口令中需要包含2个特殊字符;
maxrepat=2:如果出现两个连续的字符,拒绝口令。
修改/etc/login.defs中的如下四行:
PASS_MAX_DAYS 90
PASS_MIN_DAYS 1
PASS_MIN_LEN 8
PASS_WARN_AGE 7
参数说明:PASS_MAX_DAYS:口令有效期;
PASS_MIN_DAYS:设置口令之后修改需要等待的时间;
PASS_MIN_LEN:口令的最短位数要求为8位;
PASS_WARN_AGE:口令过期前多少天进行警告提醒;
a)测评指标:应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施。
c)测评实施包括以下内容:
1)应核查是否配置并启用了登录失败处理功能;
2)应核查是否配置并启用了限制非法登录功能,非法登录达到一定次数后采取特定动作,如账户锁定等;
3)应核查是否配置并启用了登录连接超时及自动退出功能。
Linux系统可以从本地TTY登录或者SSH远程登录,所以需要从本地和远程两个方面来配置登录失败处理功能。
修改/etc/pam.d/system-auth文件,在auth部分第一行增加如下内容:
auth required pam_tally2.so deny=3 lock_time=15 unlock_time=30 even_deny_root root_unlock_time=35 audit
参数说明:deny=3:登录的时候,允许尝试的次数为3;
lock_time=15:登录失败一次之后,锁定登录15秒,在这15秒之内,哪怕输入正确的密码也不能成功登录;
unlock_time=30:3次登录失败之后,需要等待30秒再重新发起登录会话;
even_deny_root:开启root账户的登录失败处理功能;
root_unlock_time=35:root账户的锁定时间为35秒;
audit:对登录失败的情况进行审计。
修改/etc/pam.d/password-auth,在auth部分第一行增加如下内容:
auth required pam_tally2.so deny=3 lock_time=15 unlock_time=30 even_deny_root root_unlock_time=35 audit
参数的含义如上。/etc/pam.d/system-auth控制本地登录的登录失败处理,/etc/pam.d/password-auth则控制ssh的登录失败处理。
只要你配置了上面的登录失败处理,这一条测评实施自然就满足了,登录失败一定次数之后会锁定账户。
在/etc/profile文件的添加如下一行内容:
TMOUT=300
这一行的配置含义为300秒内无操作会断开当前会话,本地登录和ssh远程都适用。
a)测评指标:当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听。
c)测评实施:应核查是否采用加密等安全方式对系统进行远程管理,防止鉴别信息在网络传输过程中被窃听.
我们通过SSH来对设备进行管理。
a)测评指标:应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现。
c)测评实施包括以下内容:
1)应核查是否采用动态口令、数字证书、生物技术和设备指纹等两种或两种以上组合的鉴别技术对用户身份进行鉴别;
2)应核查其中一种鉴别技术是否使用密码技术来实现。
这里我们使用SSH公钥和谷歌认证来实现双重认证。
首先我们先完成SSH的公钥认证步骤。在我们的SSH客户端上执行以下命令来生成SSH公钥:
ssh-keygen -b 2048 -t rsa
然后在当前用户的.ssh目录中找到.pub公钥文件,需要把这个文件上传到服务器中,然后在服务器执行以下命令:
cat xxx.pub >> ~/.ssh/authorized_keys
chmod -R 700 ~/.ssh/
chmod 600 ~/.ssh/authorized_keys
然后修改/etc/ssh/sshd_config中的以下内容:
修改完成后重启SSH服务。
谷歌认证器在Linux系统也是可以使用的,如果系统不能联网,那也可以下载单独的安装包上传到服务器进行离线安装:google-authenticator;如果是联网的系统,可以使用yum安装:
yum install google-authenticator
安装完成后,修改/etc/pam.d/ssh如下:
sed -i '2,3{s/^/#/}' /etc/pam.d/sshd
sed -i '2i auth required pam_google_authenticator.so' /etc/pam.d/sshd
sed -i '5i auth required pam_google_authenticator.so' /etc/pam.d/system-auth-ac
sed -i '5i auth required pam_google_authenticator.so' /etc/pam.d/password-auth-ac
再次修改/etc/ssh/sshd_config。增加如下内容:
完成后重启SSH服务。
让系统的所有使用人员登录其账户,然后执行google-authenticator命令,即可生成其个人的二维码,然后用两步验证APP扫码设置即可完成两步认证。
上述设置公钥认证的时候,我们已经使用了RSA2048来生成公钥了。
a)测评指标:应对登录的用户分配账户和权限。
c)测评实施包括以下内容:
1)应核查是否为用户分配了账户和权限及相关设置情况;
2)应核查是否已禁用或限制匿名、默认账户的访问权限。
按照标准的三级系统来说,应该有3个管理员,系统管理员、审计管理员、安全管理员,再加一个安全主管。以下的配置均按照这个标准来分配账户和权限:
安全主管:root。
系统管理员:负责搭建基础的系统支撑环境;
审计管理员:负责审核系统内的各种日志;
安全管理员:负责系统内的安全参数配置。
按照以上的账户和权限需求,则需要在系统内增加3个账户,且设置相对应的权限:
系统管理员:sysadmin
审计管理员:sysaudit
安全管理员:sysecure
确定账户和权限的对应关系之后,添加账户:
[root@LogServer ~]# useradd sysadmin
[root@LogServer ~]# useradd sysaudit
[root@LogServer ~]# useradd sysecure
按照我们上面的规划,系统管理员需要负责各服务器的业务环境搭建,对应到日志服务器就是安装日志服务器所需的各软件并配置好所需的配置参数。以最小化安装的CentOS 7来说,服务器是默认带有日志服务器所需的日志软件rsyslog、远程连接软件openssh的,所以在日志服务器上只需要为系统管理员分配以下文件的修改权限:
1、SSH配置文件:/etc/ssh/sshd_config;
2、网络配置文件:/etc/sysconfig/network-scripts/ifcfg-ens32;
由于默认安装系统的时候系统为部分配置文件设置的权限并不符合我们的安全策略,所以先由安全主管使用root账户按照安全策略配置文件权限:
[root@LogServer ~]# chmod 640 /etc/rsyslog.conf
[root@LogServer ~]# chmod 640 /etc/pam.d/system-auth-ac
[root@LogServer ~]# chmod 640 /etc/pam.d/password-auth-ac
[root@LogServer ~]# chmod -R 640 /var/log/
[root@LogServer ~]# chmod 640 /etc/sysconfig/network-scripts/ifcfg-ens32
然后我们采用sudo对账户进行授权。
[root@LogServer ~]# visudo -f /etc/sudoers
在大概100行的位置找到如下内容:
root ALL=(ALL) ALL
然后在下面加一行:
sysadmin ALL=(ALL) /usr/bin/vi /etc/ssh/sshd_config
按照安全策略,审计管理员职责为系统审计记录的查看和备份,所以需要对/var/log/目录下的所有审计记录文件都要有读权限,但不能修改日志,所以不能有写权限;对审计记录的备份要用到计划任务,所以由root账户设定定时任务每天0时1分对前一天的审计记录打包压缩并存储到远程服务器之上,同时清除181天之前的审计记录以释放存储空间。
使用sudo为审计管理员赋予审计记录查看权限:
[root@LogServer ~]# visudo -f /etc/sudoers
在大概100行的位置找到如下内容:
root ALL=(ALL) ALL
然后在下面加一行:
sysaudit ALL=(ALL) /bin/cat /var/log/*,/bin/ls -l /var/log/*,/usr/bin/grep
这样,审计管理员对于日志的权限就满足了。
在安全策略中,安全管理员负责系统安全策略的配置,比如登录失败处理、会话超时退出,系统补丁的安装等。
使用sudo为安全管理员赋予相对应的权限:
sysecure ALL=(ALL) /usr/bin/vi /etc/pam.d/system-auth,/usr/bin/vi /etc/pam.d/password-auth,/usr/bin/vi /etc/profile
Linux中的默认账户,只有root是可以登录系统的,所以要说默认账户的访问权限,就只能是禁止root账户的远程登录权限了。我们通过SSH的配置文件来实现这一要求:
在/etc/ssh/sshd_config中找到“PermitRootLogin”选项,将行首的“#”删除,并且更改后面的参数为“no”,完成后如下:
PermitRootLogin no
a)测评指标:应重命名或删除默认账户,修改默认账户的默认口令。
c)测评实施包括以下内容:
1)应核查是否已经重命名默认账户或默认账户已被删除;
2)应核查是否已修改默认账户的默认口令。
d) 单元判定:如果1)或2)为肯定,则符合本测评单元指标要求,否则不符合或部分符合本测评单元指标要求。
该项的判定标准为1)或2)符合即可,且Linux下重命名root不太行,所以我们就重命名一下root的口令就行了,但由于系统在安装的时候必须设置一个口令,所以默认口令肯定是被修改了的。如果在安全策略中规定了系统安装时的默认口令,则只需在系统安装完之后再按照口令策略重新设置一个口令就可以了。
a)测评指标:应及时删除或停用多余的、过期的账户,避免共享账户的存在。
c)测评实施包括以下内容:
1)应核查是否不存在多余或过期账户,管理员用户与账户之间是否一一对应;
2)应测试验证多余的、过期的账户是否被删除或停用;
按照第一项的安全策略来配置,那么日志服务器就不存在多余或过期账户,并且,管理员用户和账户之间也是一一对应的。
a)测评指标:应授予管理用户所需的最小权限,实现管理用户的权限分离。
c)测评实施包括以下内容:
1)应核查是否进行角色划分;
2)应核查管理用户的权限是否已进行分离;
3)应核查管理用户权限是否为其工作任务所需的最小权限;
按照第一项的安全策略:
已进行了角色划分,划分了系统管理员角色、审计管理员角色、安全管理员角色;
通过sudoers文件夹对系统管理员、审计管理员、安全管理员的管理权限进行了分离;
通过sudoers已将管理员的权限设置为其工作任务所需的最小权限。
a)测评指标:应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则。
c)测评实施包括以下内容:
1)应核查是否由授权主体(如管理用户)负责配置访问控制策略;
2)应核查授权主体是否依据安全策略配置了主体对客体的访问规则;
3)应测试验证用户是否有可越权访问情形;
按照第一项的安全策略:
访问控制策略是由安全主管使用root账户负责配置的;
安全主管依据安全策略配置了主体(管理用户)对客体(日志服务器、服务器中的文件)的访问规则
这一项就让测评人员来进行渗透测试验证是否可以进行越权吧
a)测评指标:应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则。
c)测评实施:应核查访问控制策略的控制粒度是否达到主体为用户级或进程级.客体为文件、数据库表、记录或字段级。
按照第一项的安全策略:
日志服务器的访问控制策略的控制力度主体为用户级,客体为文件级。
a)测评指标:应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问。
c)测评实施包括以下内容:
1)应核查是否对主体、客体设置了安全标记;
2)应测试验证是否依据主体、客体安全标记控制主体对客体访问的强制访问控制策略。
听说SELinux能实现,但还没看到过哪个实现了。(这一测评项个人感觉提的很垃圾,没有水平)
a)测评指标:应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和敢要安全事件进行审计。
c)测评实施包括以下内容:
1)应核查是否开启了安全审计功能;
2)应核查安全审计范围是否覆盖到每个用户;
3)应核查是否对重要的用户行为和重要安全事件进行审计;
CentOS安装好之后自动会启用rsyslog作为系统事件审计、audit作为用户行为审计,所以第一项是默认符合的。可以通过以下命令来查看服务状态:
[root@LogServer ~]# systemctl status auditd
[root@LogServer ~]# systemctl status rsyslog
只要上面的两个审计服务开了,那么审计的范围就是覆盖到所有用户的。
从等保的角度来说,重要的用户行为可以包括以下两点:
1、登录、登出系统;
2、执行命令。
用户的登录、登出在系统日志中是有日志进行记录的,SSH登录和本地登录都有日志记录。
首先来配置一下rsyslog,使程序按照主机名和日期来保存日志,编辑/etc/rsyslog.conf如下:
1、去掉下面两行行首的#,开启UDP接受日志的功能
$ModLoad imudp
$UDPServerRun 514
2、在$WorkDirectory /var/lib/rsyslog下面一行添加如下内容:
$template dailylog,"/var/log/LogStorage/%$YEAR%-%$MONTH%-%$DAY%/%HOSTNAME%/%PROGRAMNAME%.log" *
*.* ?dailylog
& ~
3、将倒数第二行修改为如下内容:
*.* @192.168.150.136:514
按照上面的配置,我们启用了日志服务器通过UDP接收其他设备发送过来的日志的功能,且根据日期、主机名、程序名将日志分开存放在/var/log/LogStorage/目录下。
前面说过,rsyslog只是对系统事件进行审计,但用户操作审计是由另一个审计程序auditd来掌管的,所以我们还得配置以下auditd让它来审计用户执行了哪些命令并把审计记录发送到rsyslog进行收集。
编辑/etc/audit/rules.d/audit.rules: ## First rule - delete all -S execve -a exit,always -w /etc/ssh/sshd_config -p wa -k SSH -w /etc/sysconfig/network-scripts/ifcfg-ens32 -p wa -k Network -w /etc/pam.d/system-auth -p wa -k System-auth -w /etc/pam.d/password-auth -p wa -k Password-auth -w /etc/profile =p wa -k Profile -w /etc/rsyslog.conf -p wa -k Rsyslog ## Increase the buffers to survive stress events. ## Make this bigger for busy systems -b 8192 ## Set failure mode to syslog -f 1
编辑/etc/audisp/plugins.d/syslog.conf如下:
active = yes
direction = out
path = builtin_syslog
type = builtin
args = LOG_SYSLOG
format = string
按照上面的配置,我们启用了日志服务器自身的用户操作审计,通过audisp将操作日志发送到Rsyslog。
通过上面的配置,我们实现了日志服务器的用户操作审计和系统事件审计。
a)测评指标:审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息。
c)测评实施:应核查审计记录信息是否包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息。
通过上面的配置,我们审计出来的日志自然会包含事件的日期和事件、用户、事件类型、事件结果。
a)测评指标:应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等。
c)测评实施包括以下内容:
1)应核查是否采取了保护措施对审计记录进行保护。
2)应核查是否采取技术措施对审计记录进行定期备份,并核查其备份策略。
通过上面的配置,审计记录只能由审计管理员进行查看,不能编辑,也不能手动删除,所以我们是采取了技术措施对审计记录进行了保护的。
我们通过计划任务来自动对审计记录进行备份。
[root@LogServer ~]# crontab -e
1 0 * * 1-7 /usr/bin/sh /etc/logbackup.sh
上面的计划任务的意思是在每天的00:01分,自动执行日志备份脚本。
我们的备份策略是。每天00:01分,打包备份前一天的日志,并清除181天之前的日志以为后续的日志留出空间。
#!/bin/bash date=$(date +%F -d "1 day ago") #打包前一天的所有主机的日志到/var/log/LogBackup/目录下,并且以前一天的日期进行命名 /usr/bin/tar -zcvf /var/log/LogBackup/$date.tar.gz /var/log/LogStorage/$date/ #删除180天之前的日志 /bin/ls /var/log/LogBackup/ | /bin/cut -d'.' -f1 > /root/filename date1=$( /bin/date +%F -d "181 day ago" ) date3=$( /bin/date +%s -d $date1 ) for i in $( /bin/cat /root/filename ) do date2=$( /bin/date +%s -d $i ) if [ $date2 -lt $date3 ]; then /bin/rm -rf /var/log/LogBackup/$i.tar.gz elif [ $date2 -ge $date3 ]; then break fi done /bin/rm -rf /root/filename
a)测评指标:应对审计进程进行保护,防止未经授权的中断。
c)测评实施:应测试验证通过非审计管理员的其他账户来中断审计进程,验证审计进程是否受到保护。
按照我们上面定的审计策略,除了安全主管外的所有账户都不能中断审计进程!
a)测评指标:应遵循最小安装的原则,仅安装需要的组件和应用程序。
c)测评实施包括以下内容:
1)应核查是否遵循最小安装原则。
2)应核查是否未安装非必要的组件和应用程序。
服务器的操作系统安装选的就是最小化安装选项。只要后续没有安装别的程序,就没有非必要的组件和应用程序。日志服务器要用的服务和程序有:rsyslog(日志审计)、ssh(远程管理)、vi(文本编辑)、audit(日志审计)、chrony(时间同步),其他的是依赖文件。
a)测评指标:应关闭不需要的系统服务、默认共享和高危端口。
c)测评实施包括以下内容:
1)应核查是否关闭了非必要的系统服务和默认共享。
2)应核查是否不存在非必要的高危端口。
按照我们的安全策略,日志服务器上面没有默认共享,服务的话,有rsyslog、audit、ssh、chrony,但安装的操作系统默认启用了postfix服务,所以使用如下命令关闭:
systemctl stop postfix
systemctl disable postfix
使用如下命令查看当前服务器启用了哪些服务,然后根据服务器的角色来判断是否有多余服务和端口,再通过漏洞扫描报告来核对系统管理和业务端口是否存在高危漏洞:
netstat -nlp
a)测评指标:应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制。
c)测评实施:应核查配置文件或参数是否对终端接入范围进行限制。
既然有堡垒机,那么把堡垒机的IP加到hosts.allow和hosts.deny就行了,然后在堡垒机上再对用户进行访问地址范围限制即可。
vi /etc/hosts.allow
sshd:10.100.0.1/16
vi /etc/hosts.deny
sshd:ALL
a)测评指标:应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞。
c)测评实施包括以下内容:
1)应通过漏洞扫描、渗透测试等方式核查是否不存在高风险漏洞。
2)应核查是否在经过充分测试评估后及时修补漏洞。
关于这一项,可以在系统内部署一台绿盟的远程安全评估设备,没半个月对系统内设备进行漏洞扫描,然后对发现的漏洞进行评估后修复。(经过我的测试,发现绿盟的漏扫比较水,在扫出SSH存在漏洞后,通过sed命令把SSH的版本号改成另一个新的版本,实际并没有升级SSH版本,又扫描了一次,漏洞就没了,XD)
a)测评指标:应能够检测到对重要节点进行入侵的行为,并在发生严重入侵事件时提供报警。
c)测评实施包括以下内容:
1)应访谈并核查是否有入侵检测的措施。
2)应核查在发生严重入侵事件时是否提供报警。
说实话,这个入侵检测应该是在网络层面部署入侵检测系统来实现吧,不知道为何在安全计算环境里提要求,或许可以买一套安全软件来满足这个要求。
a)测评指标:应采用免受恶意代码攻击的技术措施或主动免疫可信验证机制及时识别入侵和病毒行为,并将其有效阻断。
c)测评实施包括以下内容:
1)应核查是否安装了防恶意代码软件或相应功能的软件,定期进行升级和更新防恶意代码库。
2)应核查是否采用主动免疫可信验证技术及时识别入侵和病毒行为。
3)应核查当识别入侵和病毒行为时是否将其有效阻断。
1)如果上面采购了安全软件的话,这里的第一项就符合了。
2)主动免疫可信验证技术,不知道哪个防恶意代码软件使用了这个技术。
3)只要是正常的防恶意代码软件应该都能在识别到入侵和病毒行为的时候进行阻断吧。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。