0x00 前言#
最近在做安全基线检查相关的,网上有一些代码比较零散;也有一些比较完整的项目,比如owasp中的安全基线检查项目,但是收费;还有一些开源且完整的,比如lynis,但是不符合我的要求。
我的要求如下:
-
能够对操作系统、中间件和数据库进行基线检查
-
脚本在系统上进行基线检查后的结果或者收集到的数据能够传输到一个服务端
-
服务端要做可视化展示
最终的效果是什么呢?最好能够达到阿里云里的安全基线检查的样子,差一点的话也没关系啦
本篇文章是代码中在centos7系统中将要检查的项目,参考CIS标准而来。代码在https://github.com/chroblert/SecurityBaselineCheck
现在完成了Centos基线检查第一个版本的编写,脚本(简称agent)只在要检查的服务器上运行并显示检查结果。之后会将检查的结果以json串的形式上传到基于django搭建的后端上。
简要截图如下:
0x01 初始设置#
1.1 文件系统配置:
将/tmp挂载至一个单独的分区
挂载时指定noexec,nosuid
:不允许运行可执行文件
1.2 安全启动设置:
设置bootloader的配置文件的权限为600
设置bootloader的密码:进入引导界面需输入密码
为单用户启动认证机制
1.3 强制访问控制:
安装SELinux
设置SELinux的状态为enforcing
设置SELinux的policy
为targeted
0x02 服务配置#
2.1 时间同步设置:
开启时间同步服务
使用ntp
或chrony
来统一服务器的时间
不安装X-windows
系统:即不适用可视化界面
0x03 网络配置#
3.1 hosts设置:
配置/etc/hosts.allow
与/etc/hosts.deny
文件
配置/etc/hosts.allow
1与/etc/hosts.deny
文件的权限为0644
配置/etc/hosts.allow
1与/etc/hosts.deny
文件的属主为root
3.2 防火墙配置
安装iptables
设置各个Chain
的默认策略为drop
为回环流量设置防火墙规则【-】
为新的outbound
和Estblished
的链接设置防火墙规则【-】
为所有开放的端口设立规则 【-】
0x04 审计设置#
安装并使用auditd
配置记录审计日志的文件大小:8M
配置记录审计日志的文件个数:5
单个审计日志文件大小达到设定的值时触发的动作为:keep_logs/rotate
磁盘空间满后触发的动作为:rotate
auditd
需配置的一些规则:
规则:审计更改日期和时间的操作
规则:审计更改用户/组信息的操作
规则:审计更改系统网络环境的操作
规则:审计更改系统强制访问控制的操作
规则:审计登入登出系统的事件
规则:审计企图改变文件权限的操作
规则:审计未授权情况下企图访问文件未成功的事件
规则:审计使用提权命令的操作
规则:审计删除文件的操作????
规则:审计sudoers文件的变更
规则:审计sudoers日志文件的变更????
规则:审计日志文件audit.log不能被改变
0x05 日志设置#
安装并启用rsyslog
将日志发送到远端日志服务器:????
远端日志服务器配置接收的端口与协议???
0x06 认证授权#
6.1 配置cron:
开启cron
服务
配置 /etc/crontab,/etc/cron.hourly,/etc/cron.daily,/etc/cron.weekly,/etc/cron.monthly,//etc/cron.d
文件的权限为0700
设置cron.allow
:只允许特定的用户可以使用cron
6.2 配置SSH:
配置/etc/ssh/sshd_config
文件的权限为0600
设置协议为SSH2
????
设置日志记录级别为INFO
????
关闭X11Forwarding
设置最大认证尝试次数:4
开启IgnoreRhosts
:不启用基于主机的认证
关闭HostbasedAuthentication
: 关闭基于主机的认证
禁止使用root直接登录:PermitRootLogin no
禁止使用空密码登录:PermitEmptyPasswords no
禁止用户环境:PermitUserEnvironment no
设置使用的MAC算法:
hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com,curve25519sha256@libssh.org,diffie-hellman-group-exchange-sha256
设置空闲超时时间:180秒ClientAliveInterval 180
设置一次登录花费时间:120秒LoginGraceTime 120
6.3 配置PAM:
密码长度最少位数:12
密码中最少字符类型数:3
配置密码锁定:????
配置密码重用限制:不使用最近5次的密码
配置密码hash算法:SHA512
6.5 用户账户和环境设置:
密码有效时间:90天
密码更改最短间隔:7天
密码过期警告:7天
自动禁用特定时间内没有活动的账号:365天
配置系统账号的无法登录
配置root账号默认群组的GID为0
配置umask的默认值为027
???
配置shell超时关闭会话时间:180
配置可以使用su
命令的用户
0x07 系统维护#
7.1 重要文件权限:
/etc/passwd 0644 uid 0 gid 0
/etc/shadow 0000 uid 0 gid 0
/etc/group 0644 uid 0 gid 0
/etc/gshadow 0000 uid 0 gid 0
/etc/passwd- 0644 uid 0 gid 0
/etc/shadow- 0000 uid 0 gid 0
/etc/group- 0644 uid 0 gid 0
/etc/gshadow- 0000 uid 0 gid 0
审计设置了
SUID
可执行文件的完整性 前面审计设置了
SGID
的可执行文件的完整性
7.2 用户和组设置:
不允许密码为空的账号
只允许root账号的UID为0
设置path环境变量中的目录只有owner
可写,group
及other
都没有w
的权限
设置所有用户都有家目录
设置所有用户家目录的权限为0750
设置所有用户家目录的owner
都为其自身
设置用户家目录内以.
开头的文件,只有owner
可写,group
及other
都没有w
的权限
确保没有.netrc,.rhosts,.forward
文件
确保所有在/etc/passwd
中的组都在/etc/group
确保每个用户的UID都不同
确保每个组的GID都不同
确保用户名唯一
确保组名唯一