云安全中心-基线检查

安全无小事,尽早检查,尽早防范,尽早加固!整理一些常见的基线检查和加固方式。

阿里云标准-Nginx安全基线检查

参考CIS及阿里云基线标准进行中间件层面基线检测

  1. 针对Nginx SSL协议进行安全加固 | 服务配置

    描述

    Nginx SSL协议的加密策略进行加固

    加固建议

    Nginx SSL协议采用TLSv1.2: 1、打开conf/nginx.cconf配置文件; 2、配置

    1
    2
    3
    4
    5
    server { 
    ...
    ssl_protocols TLSv1.2;
    ...
    }

    备注:配置此项请确认nginx支持OpenSSL,运行nginxv -V 如果返回中包含built with OpenSSL则表示支持OpenSSL。如果不支持,请重新编译nginx

    操作时建议做好记录或备份

  1. 确保NGINX配置文件权限为644 | 文件权限

    描述

    把控配置文件权限以抵御外来攻击

    加固建议

    修改Nginx配置文件权限: 执行chmod 644来限制Nginx配置文件的权限;(为配置文件的路径,如默认/安装目录/conf/nginx.conf或者/etc/nginx/nginx.conf,或用户自定义,请 自行查找)

    操作时建议做好记录或备份

  1. 隐藏Nginx服务的Banner | 服务配置

    描述

    Nginx服务的Banner隐藏状态

    加固建议

    Nginx后端服务指定的Header隐藏状态隐藏Nginx服务Banner的状态: 1、打开conf/nginx.conf配置文件; 2、在server栏目下,配置server_tokensserver_tokens off;

    操作时建议做好记录或备份

  1. 检查Nginx进程启动账号。 | 服务配置

    描述

    Nginx进程启动账号状态,降低被攻击概率

    加固建议

    修改Nginx进程启动账号: 1、打开conf/nginx.conf配置文件; 2、查看配置文件的user配置项,确认是非root启动的; 3、如果是root启动,修改成nobody或者nginx账号; 备注: 4、修改完配置文件之后需要重新启动Nginx。

    操作时建议做好记录或备份

  1. 检查是否配置Nginx账号锁定策略。 | 身份鉴别

    描述

    • 执行系统命令passwd -S nginx来查看锁定状态 出现Password locked证明锁定成功 如:nginx LK ….. (Password locked.)或nginx L ….

    • 默认符合,修改后才有(默认已符合)

    • 执行系统命令passwd -l nginx进行锁定

      加固建议

      配置Nginx账号登录锁定策略: Nginx服务建议使用非root用户(如nginx,nobody)启动,并且确保启动用户的状态为锁定状态。可执行passwd -l <Nginx启动用户> 如passwd -l nginx 来锁定Nginx服务的启动用户。命令 passwd -S <用户>passwd -S nginx可查看用户状态。 修改配置文件中的nginx启动用户修改为nginx或nobody 如: user nobody;

      操作时建议做好记录或备份

  1. Nginx的WEB访问日志记录状态 | 服务配置

    描述

    Nginx后端服务指定的Header隐藏状态

    加固建议

    开启Nginx的WEB访问日志记录: 1、打开conf/nginx.conf配置文件; 2、在http下配置access_log
    access_log logs/host.access.log main; 3、 并删除off

    操作时建议做好记录或备份

  1. Nginx后端服务指定的Header隐藏状态 | 服务配置

    描述

    隐藏Nginx后端服务X-Powered-By头

    加固建议

    隐藏Nginx后端服务指定Header的状态: 1、打开conf/nginx.conf配置文件; 2、在http下配置proxy_hide_header项; 增加或修改为 proxy_hide_header X-Powered-By; proxy_hide_header Server;

    操作时建议做好记录或备份

阿里云标准-Redis安全基线检查

基于阿里云最佳实践安全实践的Redis基线标准

  1. 打开保护模式 | 访问控制

    描述

    redis默认开启保护模式。要是配置里没有指定bind和密码,开启该参数后,redis只能本地访问,拒绝外部访问。

    加固建议

    redis.conf安全设置: # 打开保护模式 protected-mode yes

    操作时建议做好记录或备份

  1. 禁止监听在公网 | 访问控制

    描述

    Redis监听在0.0.0.0,可能导致服务对外或内网横向移动渗透风险,极易被黑客利用入侵。

    加固建议

    在redis的配置文件redis.conf中配置如下: bind 127.0.0.1或者内网IP,然后重启redis

    操作时建议做好记录或备份

  1. 禁用或者重命名危险命令 | 入侵防范

    描述

    Redis中线上使用keys *命令,也是非常危险的。因此线上的Redis必须考虑禁用一些危险的命令,或者尽量避免谁都可以使用这些命令,Redis没有完整的管理系统,但是也提供了一些方案。

    加固建议

    修改 redis.conf 文件,添加

    1
    2
    3
    4
    5
    6
    7
    rename-command FLUSHALL ""
    rename-command FLUSHDB ""
    rename-command CONFIG ""
    rename-command KEYS ""
    rename-command SHUTDOWN ""
    rename-command DEL ""
    rename-command EVAL ""

    然后重启redis。 重命名为”” 代表禁用命令,如想保留命令,可以重命名为不可猜测的字符串,如: rename-command FLUSHALL joYAPNXRPmcarcR4ZDgC

    操作时建议做好记录或备份

  1. 修改默认6379端口 | 服务配置

    描述

    避免使用熟知的端口,降低被初级扫描的风险

    加固建议

    编辑文件redis的配置文件redis.conf,找到包含port的行,将默认的6379修改为自定义的端口号,然后重启redis

    操作时建议做好记录或备份

  1. 限制redis 配置文件访问权限 | 文件权限

    描述

    因为redis密码明文存储在配置文件中,禁止不相关的用户访问改配置文件是必要的,设置redis配置文件权限为600,

    加固建议

    执行以下命令修改配置文件权限:

    1
    chmod 600 /<filepath>/redis.conf

    操作时建议做好记录或备份

  1. 禁止使用root用户启动 | 访问控制

    描述

    使用root权限去运行网络服务是比较有风险的(nginx和apache都是有独立的work用户,而redis没有)。redis crackit 漏洞就是利用root用户的权限来替换或者增加authorized_keys,来获取root登录权限的

    加固建议

    使用root切换到redis用户启动服务:

    1
    2
    useradd -s /sbin/nolog -M redis 
    sudo -u redis /<redis-server-path>/redis-server /<configpath>/redis.conf

    操作时建议做好记录或备份

阿里云标准-Mysql安全基线检查

基于阿里云最佳实践安全实践的Mysql基线标准,支持版本:Mysql5.1-Mysql5.7

  1. 确保MYSQL_PWD环境变量未设置 | 身份鉴别

    描述

    mysql_pwd环境变量的使用意味着mysql凭证的明文存储,极大增加mysql凭据泄露风险。

    加固建议

    删除系统环境变量中Mysql密码(MYSQL_PWD)配置

    操作时建议做好记录或备份

  1. 匿名登陆检查 | 身份鉴别

    描述

    检查Mysql服务是否允许匿名登陆

    加固建议

    登陆Mysql数据库,执行以下命令删除匿名帐户:

    1
    2
     delete from user where user='';
    flush privileges;

    操作时建议做好记录或备份

  1. 确保没有用户配置了通配符主机名 | 身份鉴别

    描述

    避免在主机名中只使用通配符,有助于限定可以连接数据库的客户端,否则服务就开放到了公网

    加固建议

    执行SQL更新语句,为每个用户指定允许连接的host范围。 1. 登录数据库,执行use mysql; ; 2. 执行语句select user,Host from user where Host='%';查看HOST为通配符的用户; 3. 删除用户或者修改用户host字段,删除语句:DROP USER 'user_name'@'%'; 。更新语句:update user set host = where host = '%';。 4. 执行SQL语句:

    1
    2
    OPTIMIZE TABLE user;
    flush privileges;

    操作时建议做好记录或备份

  1. 确保log-raw选项没有配置为ON | 安全审计

    描述

    当log-raw记录启用时,有权访问日志文件的人可能会看到纯文本密码。

    加固建议

    编辑Mysql配置文件/etc/my.cnf,删除log-raw参数,并重启mysql服务

    操作时建议做好记录或备份

  1. 禁止使用–skip-grant-tables选项启动Mysql服务 | 访问控制

    描述

    使用此选项,会导致所有客户端都对所有数据库具有不受限制的访问权限。

    加固建议

    编辑Mysql配置文件/etc/my.cnf,删除skip-grant-tables参数,并重启mysql服务

    操作时建议做好记录或备份

  1. 为Mysql服务使用专用的最低特权帐户 | 访问控制

    描述

    使用最低权限帐户运行服务可减小MySQL天生漏洞的影响。受限帐户将无法访问与MySQL无关的资源,例如操作系统配置。

    加固建议

    使用非root和非sudo权限用户启动Mysql服务

    操作时建议做好记录或备份

  1. 修改默认3306端口 | 服务配置

    描述

    避免使用熟知的端口,降低被初级扫描的风险

    加固建议

    编辑/etc/my.cnf文件,mysqld 段落中配置新的端口参数,并重启mysql服务:

    1
    port=3506

    操作时建议做好记录或备份

  1. 禁用symbolic-links选项 | 服务配置

    描述

    禁用符号链接以防止各种安全风险

    加固建议

    编辑Mysql配置文件/etc/my.cnf,在mysqld 段落中配置symbolic-links=0,5.6及以上版本应该配置为skip_symbolic_links=yes,并重启mysql服务。

    操作时建议做好记录或备份

  1. 确保配置了log-error选项 | 安全审计

    描述

    启用错误日志可以提高检测针对mysql和其他关键消息的恶意尝试的能力,例如,如果错误日志未启用,则连接错误可能会被忽略。

    加固建议

    编辑Mysql配置文件/etc/my.cnf,在mysqld_safe 段落中配置log-error参数,代表存放日志文件路径,如:/var/log/mysqld.log,并重启mysql服务:

    1
    log-error=<log_path>

    操作时建议做好记录或备份

  1. 删除’test’数据库 | 服务配置

    描述

    测试数据库可供所有用户访问,并可用于消耗系统资源。删除测试数据库将减少mysql服务器的攻击面。

    加固建议

    登陆数据库执行以下SQL语句删除test数据库:

    1
    2
    DROP DATABASE test;
    flush privileges;

    操作时建议做好记录或备份

  1. 禁用local-infile选项 | 访问控制

    描述

    禁用local_infile选项会降低攻击者通过SQL注入漏洞器读取敏感文件的能力

    加固建议

    编辑Mysql配置文件/etc/my.cnf,在mysqld 段落中配置local-infile参数为0,并重启mysql服务:

    1
    local-infile=0

    操作时建议做好记录或备份

阿里云标准-CentOS Linux 7安全基线检查

基于阿里云最佳实践安全实践的CentOS Linux 7基线标准

  1. 确保root是唯一的UID为0的帐户 | 身份鉴别

    描述

    除root以外其他UID为0的用户都应该删除,或者为其分配新的UID

    加固建议

    除root以外其他UID为0的用户(查看命令cat /etc/passwd | awk -F: '($3 == 0) { print $1 }'|grep -v '^root$')都应该删除,或者为其分配新的UID

    操作时建议做好记录或备份

  1. 开启地址空间布局随机化 | 入侵防范

    描述

    它将进程的内存空间地址随机化来增大入侵者预测目的地址难度,从而降低进程被成功入侵的风险

    加固建议

    在/etc/sysctl.conf或/etc/sysctl.d/*文件中设置以下参数: kernel.randomize_va_space = 2 执行命令: sysctl -w kernel.randomize_va_space=2

    操作时建议做好记录或备份

  1. 设置用户权限配置文件的权限 | 文件权限

    描述

    设置用户权限配置文件的权限

    加固建议

    执行以下5条命令

    1
    2
    3
    4
    5
    chown root:root /etc/passwd /etc/shadow /etc/group /etc/gshadow
    chmod 0644 /etc/group
    chmod 0644 /etc/passwd
    chmod 0400 /etc/shadow
    chmod 0400 /etc/gshadow

    操作时建议做好记录或备份

  1. 访问控制配置文件的权限设置 | 文件权限

    描述

    访问控制配置文件的权限设置

    加固建议

    运行以下4条命令:

    1
    2
    3
    4
    chown root:root /etc/hosts.allow 
    chown root:root /etc/hosts.deny
    chmod 644 /etc/hosts.deny
    chmod 644 /etc/hosts.allow

    操作时建议做好记录或备份

  1. 确保SSH LogLevel设置为INFO | 服务配置

    描述

    确保SSH LogLevel设置为INFO,记录登录和注销活动

    加固建议

    编辑 /etc/ssh/sshd_config 文件以按如下方式设置参数(取消注释):

    1
    LogLevel INFO

    操作时建议做好记录或备份

  1. 确保rsyslog服务已启用 | 安全审计

    描述

    确保rsyslog服务已启用,记录日志用于审计

    加固建议

    运行以下命令启用rsyslog服务:

    1
    2
    systemctl enable rsyslog
    systemctl start rsyslog

    操作时建议做好记录或备份

  1. 确保SSH MaxAuthTries设置为3到6之间 | SSH服务配置

    描述

    设置较低的Max AuthTrimes参数将降低SSH服务器被暴力攻击成功的风险。

    加固建议

    在/etc/ssh/sshd_config中取消MaxAuthTries注释符号#,设置最大密码尝试失败次数3-6,建议为4:

    1
    MaxAuthTries 4

    操作时建议做好记录或备份

  1. 确保密码到期警告天数为7或更多 | 身份鉴别

    描述

    确保密码到期警告天数为28或更多

    加固建议

    在 /etc/login.defs 中将 PASS_WARN_AGE 参数设置为7-14之间,建议为7:

    1
    PASS_WARN_AGE 7

    同时执行命令使root用户设置生效:

    1
    chage --warndays 7 root

    操作时建议做好记录或备份

  1. 禁止SSH空密码用户登录 | SSH服务配置

    描述

    禁止SSH空密码用户登录

    加固建议

    编辑文件/etc/ssh/sshd_config,将PermitEmptyPasswords配置为no:

    1
    PermitEmptyPasswords no

    操作时建议做好记录或备份

  1. 检查系统空密码账户 | 身份鉴别

    描述

    检查系统空密码账户

    加固建议

    为用户设置一个非空密码,或者执行passwd -l锁定用户

    操作时建议做好记录或备份

  1. 检查密码重用是否受限制 | 身份鉴别

    描述

    强制用户不重用最近使用的密码,降低密码猜测攻击风险

    加固建议

    在/etc/pam.d/password-auth和/etc/pam.d/system-auth中password sufficient pam_unix.so 这行的末尾配置remember参数为5-24之间,原来的内容不用更改,只在末尾加了remember=5。

    操作时建议做好记录或备份

  1. 密码复杂度检查 | 身份鉴别

    描述

    检查密码长度和密码是否使用多种字符类型

    加固建议

    编辑/etc/security/pwquality.conf,把minlen(密码最小长度)设置为9-32位,把minclass(至少包含小写字母、大写字母、数字、特殊字符等4类字符中等3类或4类)设置为3或4。如:

    1
    2
    minlen=10
    minclass=3

    操作时建议做好记录或备份

  1. 设置SSH空闲超时退出时间 | 服务配置

    描述

    设置SSH空闲超时退出时间,可降低未授权用户访问其他用户ssh会话的风险

    加固建议

    编辑/etc/ssh/sshd_config,将ClientAliveInterval 设置为300到900,即5-15分钟,将ClientAliveCountMax设置为0-3之间。

    1
    2
    ClientAliveInterval 600
    ClientAliveCountMax 2

    操作时建议做好记录或备份

  1. 设置密码修改最小间隔时间 | 身份鉴别

    描述

    设置密码修改最小间隔时间,限制密码更改过于频繁

    加固建议

    在 /etc/login.defs 中将 PASS_MIN_DAYS 参数设置为7-14之间,建议为7:

    1
    PASS_MIN_DAYS 7

    需同时执行命令为root用户设置:

    1
    chage --mindays 7 root

    操作时建议做好记录或备份

  1. 设置密码失效时间 | 身份鉴别

    描述

    设置密码失效时间,强制定期修改密码,减少密码被泄漏和猜测风险,使用非密码登陆方式(如密钥对)请忽略此项。

    加固建议

    使用非密码登陆方式如密钥对,请忽略此项。/etc/login.defs中将 PASS_MAX_DAYS 参数设置为 60-180之间,如:

    1
    PASS_MAX_DAYS 90

    需同时执行命令设置root密码失效时间:

    1
    chage --maxdays 90 root

    操作时建议做好记录或备份

弱密码检查

  1. 系统登陆弱密码

    描述

    若系统使用弱口令,存在极大的被恶意猜解入侵风险,需立即修复。

    加固建议

    将弱密码修改复杂密码,应符合复杂性要求:

    1
    2
    3
    4
    5
    6
    7
    1、长度8位以上
    2、包含以下四类字符中的三类字符:
    英文大写字母(A 到 Z)
    英文小写字母(a 到 z)
    10 个基本数字(0 到 9)
    非字母字符(例如 !、$、#、%、@、^、&)
    3、避免使用已公开的弱密码,如:abcd.1234 、admin@123等

    操作时建议做好记录或备份

  1. Mysql数据库登陆弱密码

    描述

    若系统使用弱口令,存在极大的被恶意猜解入侵风险,需立即修复。

    检查提示

    弱密码(用户名@主机/密码):@xxxxxxxx/ @localhost/

    加固建议

    将弱密码修改复杂密码,应符合复杂性要求:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    1、长度8位以上
    2、包含以下四类字符中的三类字符:
    英文大写字母(A 到 Z)
    英文小写字母(a 到 z)
    10 个基本数字(0 到 9)
    非字母字符(例如 !、$、#、%、@、^、&)
    3、避免使用已公开的弱密码,如:abcd.1234 、admin@123等

    可使用 SET PASSWORD 命令把弱密码修改为强密码:
    1、登陆数据库
    2、查看数据库用户密码信息
    mysql> SELECT user, host, authentication_string FROM user;
    部分版本查询命令为:
    mysql> SELECT user, host, password FROM user;
    3、根据查询结果及弱密码告警信息修改具体用户的密码
    mysql> SET PASSWORD FOR '用户名'@'主机' = PASSWORD('新密码');

    操作时建议做好记录或备份

  1. 开启redis密码认证,并设置高复杂度密码 | Redis数据库登陆弱密码

    描述

    redis在redis.conf配置文件中,设置配置项requirepass, 开户密码认证。 redis因查询效率高,auth这种命令每秒能处理9w次以上,简单的redis的密码极容易为攻击者暴破。

    检查提示

    (配置文件|密码):/www/server/redis/redis.conf|

    加固建议

    打开redis.conf,找到requirepass所在的地方,修改为指定的密码,密码应符合复杂性要求:

    1
    2
    3
    4
    5
    6
    7
    1、长度8位以上
    2、包含以下四类字符中的三类字符:
    英文大写字母(A 到 Z)
    英文小写字母(a 到 z)
    10 个基本数字(0 到 9)
    非字母字符(例如 !、$、%、@、^、&等,#除外)
    3、避免使用已公开的弱密码,如:abcd.1234 、admin@123等

    再去掉前面的#号注释符,然后重启redis

    操作时建议做好记录或备份

-------------------本文结束 感谢您的阅读-------------------
0%