Feel no regret for this life.

WEB应用安全加固方案

系统运维 silianpan 83℃ 0评论

WEB应用安全加固方案

[TOC]

Windows操作系统安全加固

本文档旨在指导系统管理人员或安全检查人员进行Windows操作系统的安全合规性检查和配置。

1. 账户管理和认证授权

1.1 账户

默认账户安全

  • 禁用Guest账户。
  • 禁用或删除其他无用账户(建议先禁用账户三个月,待确认没有问题后删除。)

操作步骤

打开 控制面板 > 管理工具 > 计算机管理,在 系统工具 > 本地用户和组 > 用户 中,双击 Guest 帐户,在属性中选中 帐户已禁用,单击 确定

按照用户分配帐户

按照用户分配帐户。根据业务要求,设定不同的用户和用户组。例如,管理员用户,数据库用户,审计用户,来宾用户等。

操作步骤

打开 控制面板 > 管理工具 > 计算机管理,在 系统工具 > 本地用户和组 中,根据您的业务要求设定不同的用户和用户组,包括管理员用户、数据库用户、审计用户、来宾用户等。

定期检查并删除与无关帐户

定期删除或锁定与设备运行、维护等与工作无关的帐户。

操作步骤

打开 控制面板 > 管理工具 > 计算机管理,在 系统工具 > 本地用户和组 中,删除或锁定与设备运行、维护等与工作无关的帐户。

不显示最后的用户名

配置登录登出后,不显示用户名称。

操作步骤:

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 安全选项 中,双击 交互式登录:不显示最后的用户名,选择 已启用 并单击 确定

1.2 口令

密码复杂度

密码复杂度要求必须满足以下策略:
+ 最短密码长度要求八个字符。
+ 启用本机组策略中密码必须符合复杂性要求的策略。即密码至少包含以下四种类别的字符中的两种:
– 英语大写字母 A, B, C, … Z
– 英语小写字母 a, b, c, … z
– 西方阿拉伯数字 0, 1, 2, … 9
– 非字母数字字符,如标点符号,@, #, $, %, &, *等

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 帐户策略 > 密码策略 中,确认 密码必须符合复杂性要求 策略已启用。

密码最长留存期

对于采用静态口令认证技术的设备,帐户口令的留存期不应长于90天。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 帐户策略 > 密码策略 中,配置 密码最长使用期限 不大于90天。

帐户锁定策略

对于采用静态口令认证技术的设备,应配置当用户连续认证失败次数超过10次后,锁定该用户使用的帐户。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 帐户策略 > 帐户锁定策略 中,配置 帐户锁定阈值 不大于10次。

配置样例:

1.3 授权

远程关机

在本地安全设置中,从远端系统强制关机权限只分配给Administrators组。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 用户权限分配 中,配置 从远端系统强制关机 权限只分配给Administrators组。

本地关机

在本地安全设置中关闭系统权限只分配给Administrators组。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 用户权限分配 中,配置 关闭系统 权限只分配给Administrators组。

用户权限指派

在本地安全设置中,取得文件或其它对象的所有权权限只分配给Administrators组。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 用户权限分配 中,配置 取得文件或其它对象的所有权 权限只分配给Administrators组。

授权帐户登录

在本地安全设置中,配置指定授权用户允许本地登录此计算机。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 用户权限分配 中,配置 允许本地登录 权限给指定授权用户。

授权帐户从网络访问

在本地安全设置中,只允许授权帐号从网络访问(包括网络共享等,但不包括终端服务)此计算机。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 用户权限分配 中,配置 从网络访问此计算机 权限给指定授权用户。

2. 日志配置操作

2.1 日志配置

审核登录

设备应配置日志功能,对用户登录进行记录。记录内容包括用户登录使用的帐户、登录是否成功、登录时间、以及远程登录时、及用户使用的IP地址。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 审核策略 中,设置 审核登录事件

审核策略

启用本地安全策略中对Windows系统的审核策略更改,成功和失败操作都需要审核。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 审核策略 中,设置 审核策略更改

审核对象访问

启用本地安全策略中对Windows系统的审核对象访问,成功和失败操作都需要审核。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 审核策略 中,设置 审核对象访问

审核事件目录服务访问

启用本地安全策略中对Windows系统的审核目录服务访问,仅需要审核失败操作。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 审核策略 中,设置 审核目录服务器访问

审核特权使用

启用本地安全策略中对Windows系统的审核特权使用,成功和失败操作都需要审核。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 审核策略 中,设置 审核特权使用

审核系统事件

启用本地安全策略中对Windows系统的审核系统事件,成功和失败操作都需要审核。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 审核策略 中,设置 审核系统事件

审核帐户管理

启用本地安全策略中对Windows系统的审核帐户管理,成功和失败操作都要审核。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 审核策略 中,设置 审核帐户管理

审核过程追踪

启用本地安全策略中对Windows系统的审核进程追踪,仅失败操作需要审核。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 审核策略 中,设置 审核进程追踪

日志文件大小

设置应用日志文件大小至少为 8192 KB,可根据磁盘空间配置日志文件大小,记录的日志越多越好。并设置当达到最大的日志尺寸时,按需要轮询记录日志。

操作步骤

打开 控制面板 > 管理工具 > 事件查看器,配置 应用日志、系统日志、安全日志 属性中的日志大小,以及设置当达到最大的日志尺寸时的相应策略。

3. IP协议安全配置

3.1 IP协议安全

启用SYN攻击保护

启用SYN攻击保护。

  • 指定触发SYN洪水攻击保护所必须超过的TCP连接请求数阈值为5。
  • 指定处于 SYN_RCVD 状态的 TCP 连接数的阈值为500。
  • 指定处于至少已发送一次重传的 SYN_RCVD 状态中的 TCP 连接数的阈值为400。

操作步骤

打开 注册表编辑器,根据推荐值修改注册表键值。

Windows Server 2012

  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\SynAttackProtect
    推荐值:2
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpMaxHalfOpen
    推荐值:500

Windows Server 2008

  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SynAttackProtect
    推荐值:2
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpMaxPortsExhausted
    推荐值:5
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpMaxHalfOpen
    推荐值:500
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpMaxHalfOpenRetried
    推荐值:400

4. 文件权限

4.1 共享文件夹及访问权限

关闭默认共享

非域环境中,关闭Windows硬盘默认共享,例如C,D

操作步骤

打开 注册表编辑器,根据推荐值修改注册表键值。

注意: Windows Server 2012版本已默认关闭Windows硬盘默认共享,且没有该注册表键值。

  • HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters\AutoShareServer
    推荐值: 0

共享文件夹授权访问

每个共享文件夹的共享权限,只允许授权的帐户拥有共享此文件夹的权限。

操作步骤

每个共享文件夹的共享权限仅限于业务需要,不要设置成为 Everyone。打开 控制面板 > 管理工具 > 计算机管理,在 共享文件夹 中,查看每个共享文件夹的共享权限。

5. 服务安全

5.1 禁用TCP/IP上的NetBIOS

禁用TCP/IP上的NetBIOS协议,可以关闭监听的 UDP 137(netbios-ns)、UDP 138(netbios-dgm)以及 TCP 139(netbios-ssn)端口。

操作步骤

  1. 在 计算机管理 > 服务和应用程序 > 服务 中禁用 TCP/IP NetBIOS Helper 服务。
  2. 在网络连接属性中,双击 Internet协议版本4(TCP/IPv4),单击 高级。在 WINS 页签中,进行如下设置:

禁用不必要的服务

禁用不必要的服务,请参考:

6.安全选项

6.1 启用安全选项

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 安全选项 中,进行如下设置:

6.2 禁用未登录前关机

服务器默认是禁止在未登录系统前关机的。如果启用此设置,服务器安全性将会大大降低,给远程连接的黑客造成可乘之机,强烈建议禁用未登录前关机功能。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 安全选项 中,禁用 关机: 允许系统在未登录前关机 策略。

7. 其他安全配置

7.1 防病毒管理

Windows系统需要安装防病毒软件。

操作步骤

安装企业级防病毒软件,并开启病毒库更新及实时防御功能。

7.2 设置屏幕保护密码和开启时间

设置从屏幕保护恢复时需要输入密码,并将屏幕保护自动开启时间设定为五分钟。

操作步骤

启用屏幕保护程序,设置等待时间为 5分钟,并启用 在恢复时使用密码保护。

7.3 限制远程登录空闲断开时间

对于远程登录的帐户,设置不活动超过时间15分钟自动断开连接。

操作步骤

打开 控制面板 > 管理工具 > 本地安全策略,在 本地策略 > 安全选项 中,设置 Microsoft网络服务器:暂停会话前所需的空闲时间数量 属性为15分钟。

7.4 操作系统补丁管理

安装最新的操作系统Hotfix补丁。安装补丁时,应先对服务器系统进行兼容性测试。

操作步骤

安装最新的操作系统Hotfix补丁。安装补丁时,应先对服务器系统进行兼容性测试。

注意:对于实际业务环境服务器,建议使用通知并自动下载更新,但由管理员选择是否安装更新,而不是使用自动安装更新,防止自动更新补丁对实际业务环境产生影响。

8. 360杀毒离线病毒库安装

下载离线病毒库后,导入到360杀毒软件即可
http://sd.360.cn/download_center.html

9. 漏洞扫描

采用nmap、Nikto或OpenVAS工具扫描

Linux操作系统安全加固

本帮助手册旨在指导系统管理人员或安全检查人员进行Linux操作系统的安全合规性检查和加固。

1. 账号和口令

1.1 禁用或删除无用账号

减少系统无用账号,降低安全风险。

操作步骤

  • 使用命令 userdel <用户名> 删除不必要的账号。
  • 使用命令 passwd -l <用户名> 锁定不必要的账号。
  • 使用命令 passwd -u <用户名> 解锁必要的账号。

1.2 检查特殊账号

检查是否存在空口令和root权限的账号。

操作步骤

  1. 查看空口令和root权限账号,确认是否存在异常账号:
    • 使用命令 awk -F: ‘($2==””)’ /etc/shadow 查看空口令账号。
    • 使用命令 awk -F: ‘($3==0)’ /etc/passwd 查看UID为零的账号。
  2. 加固空口令账号:
    • 使用命令 passwd <用户名> 为空口令账号设定密码。
    • 确认UID为零的账号只有root账号。

1.3 添加口令策略

加强口令的复杂度等,降低被猜解的可能性。

操作步骤

  1. 使用命令 vi /etc/login.defs 修改配置文件。
    • PASS_MAX_DAYS 90 #新建用户的密码最长使用天数
    • PASS_MIN_DAYS 0 #新建用户的密码最短使用天数
    • PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数
  2. 使用chage命令修改用户设置。
    例如,chage -m 0 -M 30 -E 2000-01-01 -W 7 <用户名>表示将此用户的密码最长使用天数设为30,最短使用天数设为0,密码2000年1月1日过期,过期前七天警告用户。
  3. 设置连续输错三次密码,账号锁定五分钟。使用命令 vi /etc/pam.d/common-auth修改配置文件,在配置文件中添加 auth required pam_tally.so onerr=fail deny=3 unlock_time=300。

1.4 限制用户su

限制能su到root的用户。

操作步骤

使用命令 vi /etc/pam.d/su修改配置文件,在配置文件中添加行。例如,只允许test组用户su到root,则添加 auth required pam_wheel.so group=test。

1.5 禁止root用户直接登录

限制root用户直接登录。

操作步骤

  1. 创建普通权限账号并配置密码,防止无法远程登录;
  2. 使用命令 vi /etc/ssh/sshd_config修改配置文件将PermitRootLogin的值改成no,并保存,然后使用service sshd restart重启服务。

2. 服务

2.1 关闭不必要的服务

关闭不必要的服务(如普通服务和xinetd服务),降低风险。

操作步骤

使用命令systemctl disable <服务名>设置服务在开机时不自动启动。

说明: 对于部分老版本的Linux操作系统(如CentOS 6),可以使用命令chkconfig –level <init级别> <服务名> off设置服务在指定init级别下开机时不自动启动。

2.2 SSH服务安全

对SSH服务进行安全加固,防止暴力破解成功。

操作步骤

使用命令 vim /etc/ssh/sshd_config 编辑配置文件。

  • 不允许root账号直接登录系统。
    设置 PermitRootLogin 的值为 no。
  • 修改SSH使用的协议版本。
    设置 Protocol 的版本为 2。
  • 修改允许密码错误次数(默认6次)。
    设置 MaxAuthTries 的值为 3。

配置文件修改完成后,重启sshd服务生效。

3. 文件系统

3.1 设置umask值

设置默认的umask值,增强安全性。

操作步骤

使用命令 vi /etc/profile 修改配置文件,添加行 umask 027, 即新创建的文件属主拥有读写执行权限,同组用户拥有读和执行权限,其他用户无权限。

3.2 设置登录超时

设置系统登录后,连接超时时间,增强安全性。

操作步骤

使用命令 vi /etc/profile 修改配置文件,将以 TMOUT= 开头的行注释,设置为TMOUT=180,即超时时间为三分钟。

4. 日志

4.1 syslogd日志

启用日志功能,并配置日志记录。

操作步骤

Linux系统默认启用以下类型日志:

  • 系统日志(默认)/var/log/messages
  • cron日志(默认)/var/log/cron
  • 安全日志(默认)/var/log/secure

注意:部分系统可能使用syslog-ng日志,配置文件为:/etc/syslog-ng/syslog-ng.conf。

您可以根据需求配置详细日志。

4.2 记录所有用户的登录和操作日志

通过脚本代码实现记录所有用户的登录操作日志,防止出现安全事件后无据可查。

操作步骤

  1. 运行 [root@xxx /]# vim /etc/profile打开配置文件。
  2. 在配置文件中输入以下内容:
     history
     USER=`whoami`
     USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
     if [ "$USER_IP" = "" ]; then
     USER_IP=`hostname`
     fi
     if [ ! -d /var/log/history ]; then
     mkdir /var/log/history
     chmod 777 /var/log/history
     fi
     if [ ! -d /var/log/history/${LOGNAME} ]; then
     mkdir /var/log/history/${LOGNAME}
     chmod 300 /var/log/history/${LOGNAME}
     fi
     export HISTSIZE=4096
     DT=`date +"%Y%m%d_%H:%M:%S"`
     export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"
     chmod 600 /var/log/history/${LOGNAME}/*history* 2>/dev/null
  1. 运行 [root@xxx /]# source /etc/profile 加载配置生效。
    注意: /var/log/history 是记录日志的存放位置,可以自定义。

通过上述步骤,可以在 /var/log/history 目录下以每个用户为名新建一个文件夹,每次用户退出后都会产生以用户名、登录IP、时间的日志文件,包含此用户本次的所有操作(root用户除外)。

同时,建议您使用OSS服务收集存储日志。

5. 漏洞扫描

采用nmap、Nikto或OpenVAS工具扫描

Tomcat服务安全加固

Tomcat服务默认启用了管理后台功能,使用该后台可直接上传 war 文件包对站点进行部署和管理。由于运维人员的疏忽,可能导致管理后台存在空口令或者弱口令的漏洞,使得黑客或者不法分子可以利用该漏洞直接上传 Webshell 脚本导致服务器沦陷。

通常 Tomcat 后台管理的 URL 地址为 http://iP:8080/manager/html/, 如下图所示:

黑客通过猜解到的口令登录 Tomcat 管理后台后,可以上传 Webshell 脚本导致服务器被入侵。

安全加固方案

由于此类型漏洞可能对业务系统造成比较严重的危害,建议您针对 Tomcat 管理后台进行以下安全加固配置。

1. 网络访问控制

  • 如果您的业务不需要使用 Tomcat 管理后台管理业务代码,建议您使用安全组防火墙功能对管理后台 URL 地址进行拦截,或直接将 Tomcat 部署目录中 webapps 文件夹中的 manager、host-manager 文件夹全部删除,并注释 Tomcat 目录中 conf 文件夹中的 tomcat-users.xml 文件中的所有代码。

  • 如果您的业务系统确实需要使用 Tomcat 管理后台进行业务代码的发布和管理,建议为 Tomcat 管理后台配置强口令,并修改默认 admin 用户,且密码长度不低于10位,必须包含大写字母、特殊符号、数字组合。

2. 开启 Tomcat 的访问日志

修改 conf/server.xml 文件,将下列代码取消注释:

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"   
    prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>

启用访问日志功能,重启 Tomcat 服务后,在 tomcat_home/logs 文件夹中就可以看到访问日志。

3. Tomcat 默认帐号安全

修改 Tomcat 安装目录 conf 下的 tomcat-user.xml 文件,重新设置复杂口令并保存文件。重启 Tomcat 服务后,新口令即生效。

4. 修改默认访问端口

修改 conf/server.xml 文件把默认的 8080 访问端口改成其它端口。

5. 重定向错误页面

修改访问 Tomcat 错误页面的返回信息,在 webapps\manger 目录中创建相应的401.html、404.htm、500.htm 文件,然后在 conf/web.xml 文件的最后一行之前添加下列代码:

    <error-page>      
        <error-code>401</error-code>              
        <location>/401.htm</location>          
    </error-page>          
    <error-page>    
        <error-code>404</error-code>        
        <location>/404.htm</location>          
    </error-page>  
    <error-page>    
        <error-code>500</error-code>  
        <location>/500.htm</location>      
    </error-page>

6. 禁止列出目录

防止直接访问目录时由于找不到默认页面,而列出目录下的文件的情况。

在 web.xml 文件中,将listings改成false

7. 删除文档和示例程序

删除 webapps 目录下的 docs、examples、manager、ROOT、host-manager 文件夹。

MySQL服务安全加固

数据库管理人员可以参考本文档进行 MySQL 数据库系统的安全配置加固,提高数据库的安全性,确保数据库服务稳定、安全、可靠地运行。

漏洞发现

采用sqlmap工具进行漏洞扫描

安全加固

1. 帐号安全

  • 禁止 Mysql 以管理员帐号权限运行
    以普通帐户安全运行 mysqld,禁止以管理员帐号权限运行 MySQL 服务。在 /etc/my.cnf 配置文件中进行以下设置。
[mysql.server]
user=mysql
  • 避免不同用户间共享帐号
    参考以下步骤。

    a. 创建用户。

mysql> mysql> insert into
mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject)
values("localhost","pppadmin",password("passwd"),'','','');

执行以上命令可以创建一个 phplamp 用户。

b.使用该用户登录 MySQL 服务。
mysql>exit; 
@>mysql -u phplamp -p 
@>输入密码 
mysql>登录成功
  • 删除无关帐号

DROP USER 语句可用于删除一个或多个 MySQL 账户。使用 DROP USER 命令时,必须确保当前账号拥有 MySQL 数据库的全局 CREATE USER 权限或 DELETE 权限。账户名称的用户和主机部分分别与用户表记录的 User 和 Host 列值相对应。

执行DROP USER user;语句,您可以取消一个账户和其权限,并删除来自所有授权表的帐户权限记录。

2. 口令

检查账户默认密码和弱密码。口令长度需要至少八位,并包括数字、小写字母、大写字母和特殊符号四类中的至少两种类型,且五次以内不得设置相同的口令。密码应至少每 90 天进行一次更换。

您可以通过执行以下命令修改密码。

mysql> update user set password=password('test!p3') where user='root';
mysql> flush privileges;

3. 授权

在数据库权限配置能力范围内,根据用户的业务需要,配置其所需的最小权限。

a. 查看数据库授权情况。

mysql> use mysql;
mysql> select * from user;
mysql>select * from db;
mysql>select * from host;
mysql>select * from tables_priv;
mysql>select * from columns_priv;

b. 通过 revoke 命令回收不必要的或危险的授权。

mysql> help revoke
Name: 'REVOKE'
Description:
Syntax:
REVOKE
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type]
{
  *
  *.*
  | db_name.*
  | db_name.tbl_name
  | tbl_name
  | db_name.routine_name
}
FROM user [, user] ...

4. 开启日志审计功能

数据库应配置日志功能,便于记录运行状况和操作行为。

MySQL服务有以下几种日志类型:
– 错误日志: -log-err
– 查询日志: -log (可选)
– 慢查询日志: -log-slow-queries (可选)
– 更新日志: -log-update

  • 二进制日志: -log-bin

找到 MySQL 的安装目录,在 my.ini 配置文件中增加上述所需的日志类型参数,保存配置文件后,重启 MySQL 服务即可启用日志功能。例如,

#Enter a name for the binary log. Otherwise a default name will be used. 
#log-bin= 
#Enter a name for the query log file. Otherwise a default name will be used. 
#log= 
#Enter a name for the error log file. Otherwise a default name will be used. 
log-error= 
#Enter a name for the update log file. Otherwise a default name will be used. 
#log-update=

该参数中启用错误日志。如果您需要启用其他的日志,只需把对应参数前面的 “#” 删除即可。

日志查询操作说明
* 执行show variables like ‘log_%’;命令可查看所有的 log。
* 执行show variables like ‘log_bin’;命令可查看具体的 log。

5. 安装最新补丁

确保系统安装了最新的安全补丁。
注意: 在保证业务及网络安全的前提下,并经过兼容性测试后,安装更新补丁。

6. 如果不需要,应禁止远程访问

禁止网络连接,防止猜解密码攻击、溢出攻击、和嗅探攻击。

注意: 仅限于应用和数据库在同一台主机的情况。

如果数据库不需要远程访问,可以禁止远程 TCP/IP 连接,通过在 MySQL 服务器的启动参数中添加–skip-networking参数使 MySQL 服务不监听任何 TCP/IP 连接,增加安全性。

您可以使用 安全组 进行内外网访问控制,建议不要将数据库高危服务对互联网开放。

7. 设置可信 IP 访问控制

通过数据库所在操作系统的防火墙限制,实现只有信任的 IP 才能通过监听器访问数据库。

mysql> GRANT ALL PRIVILEGES ON db.*
·-> -> TO 用户名@'IP子网/掩码';

8. 连接数设置

根据您的机器性能和业务需求,设置最大、最小连接数。

在 MySQL 配置文件(my.conf 或 my.ini)的 [mysqld] 配置段中添加max_connections = 1000,保存配置文件,重启 MySQL 服务后即可生效。

Redis服务安全加固

一.背景描述

1.漏洞描述

Redis 因配置不当存在未授权访问漏洞,可以被攻击者恶意利用。

在特定条件下,如果 Redis 以 root 身份运行,黑客可以给 root 账号写入 SSH 公钥文件,直接通过 SSH 登录受害服务器,从而获取服务器权限和数据。一旦入侵成功,攻击者可直接添加账号用于 SSH 远程登录控制服务器,给用户的 Redis 运行环境以及 Linux 主机带来安全风险,如删除、泄露或加密重要数据,引发勒索事件等。

2.受影响范围

在 Redis 客户端,尝试无账号登录 Redis:

root@kali:~# redis-cli -h 10.16.10.2
redis 10.16.10.2:6379> keys *
1) "1"`

从登录结果可以看出,该 Redis 服务对公网开放,且未启用认证。

二.修复方案

1.网络层加固

  • 指定 Redis 服务使用的网卡
    默认情况下,Redis 监听 127.0.0.1。如果仅仅是本地通信,请确保监听在本地。
    这种方式可以在一定程度上缓解 Redis 未授权访问的风险(例外情况下,如果 Redis 以 root 用户运行,攻击者借助已有的 webshell,就可以利用该 Redis 来反弹 shell 以实现提权)。
    在 redis.conf 文件中找到 # bind 127.0.0.1,将前面的 # 去掉,然后保存。
    注意:
  • 该操作需要重启 Redis 才能生效。
  • 修改后只有本机才能访问 Redis,也可以指定访问源 IP 来访问 Redis。
bind 192.168.1.100 10.0.0.1

2.设置防火墙策略

如果正常业务中 Redis 服务需要被其他服务器来访问,可以通过 iptables 策略,仅允许指定的 IP 来访问 Redis 服务。

iptables -A INPUT -s x.x.x.x -p tcp --dport 6379 -j ACCEPT

3.账号与认证

  • 设置访问密码
    在 redis.conf 中找到 requirepass 字段,去掉其注释,并在后面填上需要的密码。Redis 客户端也需要使用此密码来访问 Redis 服务。
    打开 /etc/redis/redis.conf 配置文件:
requirepass !QE%^E3323BDWEwwwe1839

确保密码的复杂度,配置完毕后重启服务即可生效。

4.服务运行权限最小化

  • 修改 Redis 服务运行账号
    请以较低权限账号运行 Redis 服务,并禁用该账号的登录权限。以下操作创建了一个无 home 目录权限,且无法登录的普通账号:
useradd -M -s /sbin/nologin [username]

注意:该操作需要重启 Redis 才能生效。

5.服务精细化授权

  • 隐藏重要命令
    Redis 无权限分离,其管理员账号和普通账号无明显区分。攻击者登录后可执行任意操作,因此需要隐藏以下重要命令:FLUSHDB, FLUSHALL, KEYS,PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME,DEBUG, EVAL。
    另外,在 Redis 2.8.1 及 Redis 3.x (低于 3.0.2) 版本下存在 EVAL 沙箱逃逸漏洞,攻击者可通过该漏洞执行任意 Lua 代码。
    下述配置将 config/flushdb/flushall 设置为空,即禁用该命令;也可设置为一些复杂的、难以猜测的名字。
rename-command CONFIG ""
rename-command flushall ""
rename-command flushdb ""
rename-command shutdown shotdown_test

保存后,执行 /etc/init.d/redis-server restart 重启生效。

6.安全补丁

定期关注最新软件版本,并及时升级 Redis 到最新版,防止新漏洞被恶意利用。

漏洞扫描工具

nmap

nmap是用来探测计算机网络上的主机和服务的一种安全扫描器。为了绘制网络拓扑图Nmap的发送特制的数据包到目标主机然后对返回数据包进行分析。Nmap是一款枚举和测试网络的强大工具。

sqlmap

sqlmap 是一个开源的渗透测试工具,可以用来自动化的检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。

sqlmap支持MySQL, Oracle,PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird,Sybase和SAP MaxDB等数据库的各种安全漏洞检测。

sqlmap支持五种不同的注入模式:
* 基于布尔的盲注,即可以根据返回页面判断条件真假的注入;
* 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断;
* 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中;
* 联合查询注入,可以使用union的情况下的注入;
* 堆查询注入,可以同时执行多条语句的执行时的注入。

Nikto

这是一个Web服务器扫描程序,它可以对Web服务器的多种项目(包括3500个潜在的危险文件/CGI,以及超过900个服务器版本,还有250多个服务器上的版本特定问题)进行全面的测试。其扫描项目和插件经常更新并且可以自动更新(如果需要的话)。

OpenVAS

OpenVAS是开放式漏洞评估系统,也可以说它是一个包含着相关工具的网络扫描器。其核心部件是一个服务器,包括一套网络漏洞测试程序,可以检测远程系统和应用程序中的安全问题。

用户需要一种自动测试的方法,并确保正在运行一种最恰当的最新测试。OpenVAS包括一个中央服务器和一个图形化的前端。这个服务器准许用户运行 几种不同的网络漏洞测试(以Nessus攻击脚本语言编写),而且OpenVAS可以经常对其进行更新。OpenVAS所有的代码都符合GPL规范。

WAScan

该工具采用的是基于黑盒的漏洞挖掘方法,这也就意味着研究人员无需对Web应用程序的源代码进行研究,它可以直接被当作成一种模糊测试工具来使用,并且能够对目标Web应用的页面进行扫描,提取页面链接和表单,执行脚本攻击,发送Payload或寻找错误消息。

转载请注明:溜爸 » WEB应用安全加固方案

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址