蓝队主机安全基线配置:基于 CIS Benchmark 的加固实录

封面信息图

在蓝队防御体系中,端点主机是抵御攻击者横向移动、特权提升与持久化控制的最后防线。未加固的操作系统默认配置通常包含大量宽松的权限、过时的加密算法与脆弱的内核参数。**CIS Benchmark(互联网安全中心基准)**提供了公认的系统安全硬化行业标准。在生产环境中实施 CIS 加固,既要在系统底层最大化收敛攻击面,又要避免过度硬化引发线上服务中断。

生产级加固架构与核心加固维度

主机加固必须覆盖系统访问、身份认证、网络协议栈与审计追踪四个核心维度:

+-------------------------------------------------------------------------+
| [Layer 1] Access Control (SSH Hardening)                                |
| - Disable root login, Enforce Ed25519, Strip weak ciphers & MACs        |
+-------------------------------------------------------------------------+
                                    │
+-------------------------------------------------------------------------+
| [Layer 2] Identity & PAM (Pluggable Authentication Modules)             |
| - Account lockout (pam_faillock), Password policy, Restrict su access   |
+-------------------------------------------------------------------------+
                                    │
+-------------------------------------------------------------------------+
| [Layer 3] Kernel & Network Stack Hardening (sysctl.conf)                |
| - Full ASLR (randomize_va_space=2), SYN Cookies, Reverse Path Filtering |
+-------------------------------------------------------------------------+
                                    │
+-------------------------------------------------------------------------+
| [Layer 4] Continuous Auditing & Monitoring (auditd)                     |
| - Monitor /etc/shadow, Module loading, SUID execution, Privileged calls |
+-------------------------------------------------------------------------+

核心加固实战配置

1. SSH 服务端安全硬化 (/etc/ssh/sshd_config)

消除弱加密套件,强制实施密钥认证与最小权限原则:

# 协议与端口约束
Port 22
Protocol 2

# 身份验证策略
PermitRootLogin no
MaxAuthTries 3
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
AuthenticationMethods publickey

# 算法套件强约束(剔除 SHA1、CBC 及弱 Diffie-Hellman 组)
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com

# 会话与环境控制
ClientAliveInterval 300
ClientAliveCountMax 2
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no

2. PAM 认证与防暴力破解策略 (/etc/pam.d/system-auth & password-auth)

在 RHEL/CentOS 8+ 与 Ubuntu 22.04+ 中,使用 pam_faillock 替代过时的 pam_tally2

# 连续失败 5 次锁定 900 秒,同时记录审计日志
auth        required      pam_env.so
auth        required      pam_faillock.so preauth audit silent deny=5 unlock_time=900
auth        sufficient    pam_unix.so try_first_pass
auth        [default=die] pam_faillock.so authfail audit deny=5 unlock_time=900
account     required      pam_faillock.so

限制普通用户通过 su 切换为 root,仅允许 wheel 组用户:

# /etc/pam.d/su
auth required pam_wheel.so use_uid

3. 内核与网络协议栈加固 (/etc/sysctl.d/99-cis-security.conf)

防范 SYN Flood、IP 欺骗、中间人嗅探及内存地址预测攻击:

# 启用完全地址空间随机化 (ASLR)
kernel.randomize_va_space = 2

# 限制 dmesg 内核日志访问权限给 root
kernel.dmesg_restrict = 1

# 限制 ptrace 进程追踪范围(防进程注入)
kernel.yama.ptrace_scope = 2

# 禁用核心转储中的 SUID 程序内存
fs.suid_dumpable = 0

# 开启 TCP SYN Cookies 防御 DoS
net.ipv4.tcp_syncookies = 1

# 严格反向路径过滤(防 IP 欺骗)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# 禁用 ICMP 重定向报文接收与发送(防路由劫持)
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# 禁用数据包转发功能(非路由器主机)
net.ipv4.ip_forward = 0

执行生效命令:sysctl -p /etc/sysctl.d/99-cis-security.conf

4. 生产级 Auditd 审计规则定制 (/etc/audit/rules.d/cis.rules)

实时捕获特权文件访问、时间变更与恶意模块加载:

# 删除所有已有规则并设置缓冲区大小
-D
-b 8192

# 监控系统时间篡改
-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time-change
-a always,exit -F arch=b64 -S clock_settime -k time-change
-w /etc/localtime -p wa -k time-change

# 监控账户与特权文件篡改
-w /etc/group -p wa -k identity
-w /etc/passwd -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/security/opasswd -p wa -k identity

# 监控内核模块动态加载与卸载
-w /sbin/insmod -p x -k modules
-w /sbin/rmmod -p x -k modules
-w /sbin/modprobe -p x -k modules
-a always,exit -F arch=b64 -S init_module -S delete_module -k modules

# 锁定 auditd 配置,防止攻击者禁用审计
-e 2

自动化合规基线检查脚本

以下为自动化检查脚本,可集成至运维巡检与 CI/CD 镜像构建流程:

#!/usr/bin/env bash
set -euo pipefail

RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'

pass_count=0
fail_count=0

check_item() {
    local title="$1"
    local cmd="$2"
    local expected="$3"

    actual=$(eval "$cmd" 2>/dev/null || true)
    if [[ "$actual" == "$expected" ]]; then
        echo -e "[ ${GREEN}PASS${NC} ] $title"
        pass_count=$((pass_count + 1))
    else
        echo -e "[ ${RED}FAIL${NC} ] $title (Expected: $expected, Got: $actual)"
        fail_count=$((fail_count + 1))
    fi
}

echo "============================================="
echo "       Linux CIS Benchmark Baseline Check    "
echo "============================================="

# 1. SSH 检查
check_item "SSH PermitRootLogin is 'no'" \
    "grep -Ei '^\s*PermitRootLogin\s+no' /etc/ssh/sshd_config | awk '{print \$2}'" \
    "no"

check_item "SSH PasswordAuthentication is 'no'" \
    "grep -Ei '^\s*PasswordAuthentication\s+no' /etc/ssh/sshd_config | awk '{print \$2}'" \
    "no"

# 2. 内核参数检查
check_item "Kernel ASLR is set to 2" \
    "sysctl -n kernel.randomize_va_space" \
    "2"

check_item "TCP SYN Cookies enabled" \
    "sysctl -n net.ipv4.tcp_syncookies" \
    "1"

check_item "IPv4 IP Forwarding disabled" \
    "sysctl -n net.ipv4.ip_forward" \
    "0"

# 3. 审计服务状态
check_item "Auditd service is active" \
    "systemctl is-active auditd" \
    "active"

echo "============================================="
echo "Check Completed: $pass_count Passed, $fail_count Failed."
echo "============================================="

生产运维防踩坑实录

  1. SSH 配置双会话验证:在修改 /etc/ssh/sshd_config 并重启 sshd 服务前,务必保持当前 SSH 会话不要断开,在另一个终端发起新连接测试。一旦配置错误(如公钥格式问题或 PAM 冲突),当前会话尚可用于紧急回滚。
  2. Auditd 缓冲区防溢出:若主机承载高并发读写业务(如 Redis、Kafka、DB),-b 8192 缓冲区可能被打满导致系统拒绝服务。必须根据负载压测合理设置 auditd.conf 中的 backlog_wait_timeaction_mail_acct
  3. suid_dumpable 导致调试受阻:将 fs.suid_dumpable 设为 0 会导致生产环境 crash 时无法生成 coredump 文件,排查段错误时应结合临时开关或配合 systemd-coredump 集中收集。

通过在镜像发布与节点初始化阶段固化 CIS 加固基线,企业可大幅提高攻击者的渗透成本,有效遏制利用弱口令与系统缺陷进行的横向渗透。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐