中间件安全加固配置四步走
对于大型企业来说,会应用各类中间件和框架组件,而组件的安全配置和版本成为主要的攻击脆弱点,为此作为安全能力中心,我们定义了适用于各组件的通用安全配置基线,由各个项目组或中心基于此裁剪使用。
第一步:识别和列出产品所涉及的中间件清单
第二步:中间件版本控制流程
中间件版本需与官网最新安全稳定版本保持一致并周期性审计版本
第三步:识别并列出每个中间件对象的安全配置项清单
需满足中间件通用加固策略要求,参考业界标准如CIS标准、运营商标准安全配置规范、业界标准文档等确定中间件安全配置项清单。
第四步:测试实施
在测试实施后,记录加固检查记录至加固检查记录表中。
适用各类中间件的配置指导
说明:此部分会列出各类中间件面临的通用型安全配置指导,每种中间件存在其特性的安全配置,可以在通用配置的基础上进行填充。
可补充的安全配置参考:CIS benchmark(https://www.cisecurity.org/)/中间件官网/cve漏洞来源搜索
1. 中间件版本及漏洞检查
1.1漏洞核查与补丁升级
确认中间件类型和版本是否属于高危中间件(见高危中间件清单表),如果是,请首先完成升级和补丁安装。
也可从CVE网站、CNNVD网站,各类中间件的官方网站确认该本版的安全性。根据各类中间件检索是否存在高危漏洞。
CVE: http://cve.mitre.org/cve/search_cve_list.html
CNNVD:http://www.cnnvd.org.cn/web/vulnerability/queryLds.tag
1.2 配置组件版本更新
关注官方发布的公告,在不影响业务的情况下,定期将版本更新到最新稳定版。例:Tomcat的安全漏洞可以关注官方发布的安全公告:http://tomcat.apache.org/security.html。
2.最小化部署
2.1删除或禁用不必要的模块
组件以默认安装的方式安装后,出于便捷性保留了许多不必要的模块和功能,需要安装后卸载或禁用,以降低安全风险。
例:NGINX卸载HTTP WebDAV、gzip等不必要的模块。Tomcat应从server.xml中删除将不使用的连接器。
2.2 删除示例程序文稿
组件安装后需要删除默认的演示程序或文稿。
例:tomcat安装后需要删除/webapps下/docs、/examples、/ROOT、/host-manager、/manager内容。
3. 访问控制
3.1 白名单访问与设备绑定
原则上,中间件与应用系统及数据库之间在分开部署的情况下,应对各自部署的服务器上建立白名单访问机制,仅允许绑定的IP地址及MAC地址访问或调研中间件。
部署中间件的服务器应启用IP地址白名单,对中间件的配置维护操作,应绑定堡垒机,仅允许权限有效期内的授权用户通过特定堡垒机进行维护操作。对于非白名单范围内的IP地址应拒绝访问。
3.2 关闭中间件高危端口
检查当前开放的端口号,禁用或强化所有高风险和不必要的开放端口
- 部署中间件的服务器,对开放状态的所有高危端口和非必要端口应做关闭处理。
- 原则上,数据库只向堡垒主机和相应的应用程序服务器提供有限的通信端口。
常见高危端口:
- ssh 22 SSH远程管理服务 (启用白名单访问的情况下可使用)
- ftp 21 文件传输服务
- telnet 23 telnet远程管理服务
- Smb 445 shared folder
- Rsync 873 data synchronization backup management
- LDAP 389 Lightweight Directory Access
- snmp 161 snmp网络管理服务
- ms-wbt-server 3389 远程桌面管理服务
- vnc 5900-5909 vnc管理服务
- smb 445 共享文件夹
- rsync 873 数据同步备份管理
- LDAP 389 轻量级目录访问
- Coucchdb 5984 couchdb 数据库
- Weblogic 7001 weblogic 控制台
- Zabbix 8096 zabbix 控制台
- ElasticSearch 9200
- Mongodb 2701
- Hadoop 50070
- Zookeeper 2181 distributed open source code distributed application coordination service
3.3 设置端口认证
端口矩阵中列出该中间件开放的端口,应均启用强密码策略身份认证功能,只有通过身份认证的情况下才允许接口通讯。
3.4 输出端口矩阵
基于中间件端口检查及接口认证设置后的端口信息,输出至端口矩阵表中。端口矩阵表包含中间件名称及版本、端口号、端口状态、服务、认证功能。
4. 认证鉴权
4.1 账号管理
梳理并建立中间件账号清单,账号清单包括中间件信息及账号名称,账号对应的业务应用,同事中间件账号生命管理遵循以下要求:
1) 原则上,不能使用root或admin账号起中间件应用。
例:nginx配置nginx用户和用户组:(1) 创建nginx组:groupadd nginx (2) 创建nginx用户并加入nginx组:useradd nginx–g nginx (3) 配置httpd.conf文件以apache身份启动服务
2) 禁止账号登录操作系统
应在系统层面对中间件账号登录进行限制,禁止中间件账号登录至操作系统。
3) 账号清理
梳理所有中间件账户,对照中间件账户申请单,清理过期账号、未知账号,离职员工及调岗员工账号。并保留账户清理操作记录。
清理有效期为长期的账号,原则不允许设置有效期为长期的账号。中间件维护账户最长时限应不超过1年。中间件账户应每月进行一次梳理,以及时发现异常账户。
4) 账户开通管理
严格执行账号审批流程。除DBA外,原则上不允许为其他人开通账户。如因特殊原因需开通的,账号权限有效期应少于3天。对于因处理系统故障或系统变更而临时申请的账号权限,应在系统变更单或故障单关闭后进行权限自动关闭。
4.2 口令管理
对所有中间件的账户口令进行梳理,禁止弱密码、空密码及初始密码,所有密码必须符合强密码策略:
1) 密码须包含大小写字母,数字,特殊符号四类字符;
2) 密码长度不得小于8位;
3) 密码不能包含他人容易猜测或获得的与使用人相关的信息,如名字、电话号码和生日等;
4) 密码须避免连续相同的,全数字的或全字母的字符;
5) 首次使用密码须修改符合强密码策略;
6) 密码须定期90天内修改;
7) 最近10次密码不能相同;
8) 两次修改密码时间间隔必须大于30分钟;
9) 严禁共享个人的用户密码;
10) 禁止在纸上、软件文件中或手持设备中保留密码的记录。
5. 建立安全配置
通过对中间件进行安全配置以达到以下安全要求:
5.1 防止敏感信息泄露
不同的中间件有不同的安全配置以限制服务器平台信息泄露,从而使攻击者更难确定哪些漏洞会影响服务器平台。
例:NGINX 设置server_tokens off以防版本信息泄露。
5.2 传输安全
1) 禁用不安全的SSL/TSL协议
禁止使用SSLV1.0、SSLV2.0,SSLV3.0不安全协议,建议也不要使用TLSv1.0协议
例:在nginx作为web服务器可在配置文件中的ssl_protocols配置:
server { … ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; … }
2) 禁用不安全的HTTP方法如PUT、DELETE、TRACE、TRACK等
例:在tomcat作为web服务器,可编辑 conf/web.xml 文件搜 readonly//若没有,则不需配置(本身默认为true)
<init-param> <param-name>readyonly</param-name> <param-value>true</param-value> </init-param> 编辑conf/server.xml,配置allowTrace为false <Connector port="8080" allowTrace="false"> 编辑conf/web.xml,增加以下内容 <security-constraint> <web-resource-collection> <url-partten>/*</url-partten> <http-method>OPTIONS</http-method> <http-method>HEAD</http-method> <http-method>PUT</http-method> <http-method>DELETE</http-method> <http-method>TRACE</http-method> </web-resource-collection> <auth-constraint></auth-constraint> </sercuity-constraint>
说明:如果产品基于spring框架开发的标准restful接口,已对HTTP方法进行了重新定义并对使用场景进行了限制,不会执行原生http方法,所以不需要禁用
3) 在HTTP响应消息的Header中设置X-Frame-Options、X-XSS-Protection、Content-Security-Policy、Strict-Transport-Security等安全头字段,以增强Web应用的安全防护能力。
例:nginx配置add_header X-Xss-Protection "1; mode=block";
请登录/注册后在FreeBuf发布内容哦