一、目的
本告主要是针对smartbi系统提供安全配置建议,提升smartbi系统的安全性。
二、V11的安全加固建议
1.安全加固类型
根据实际需求选择安全加固优先级
需求分类 | 风险特征 | 风险事件 |
数据权限加固 | 用于不同用户访问数据的范围是不一样的,如处理财务数据、客户信息、核心业务数据, | 数据越权访问、内部人员滥用权限、数据篡改或窃取 |
资源权限加固 | 如基于财务数据创建的报表,只有财务人员和领导层可看,主要控制基于系统创建的报表、数据模型等资源的查看/编辑权限,敏感报表建议设置用户访问权限 | 用户访问超出权限的目录 |
操作权限加固 | 敏感功能限制,如自定义计划任务、自助ETL、原生SQL等给用户很大灵活空间的功能同样会带来操作风险 | 功能包含敏感信息或开放风险较高 |
系统攻击防御 | 安全漏洞、界面暴力破解、 IP地址伪造 | 已存在的安全漏洞没有更新安全补丁、登录界面或配置界面被暴力破解 |
按场景进行区分攻击防御的手段
场景分类 | 场景示例 | 风险 | 必须加固措施 | 建议增强措施 |
外网暴露环境 |
|
|
|
|
外网仅浏览权限场景 |
|
|
|
|
内网场景 |
|
|
|
|
2.数据权限加固
【按需加固】数据权限设置
数据权限设置:数据权限
【建议加固】关闭DDL/DML语句执行权限
在系统选项-高级设置中,添加 SQLDDLDMLAUTHORITY_CONTROL_SWITCH=true
配置项,关闭在SQL 查询中执行 DDL/DML 语句的权限。
【可选加固】数据安全
强制启用导出规则控制数据导出,在系统选项-安全设置中配置
3.资源权限加固
【建议加固】限制config/chooser.jsp文件访问路径
在 运维设置>常用功能>系统选项>高级设置 中,设置JSP_CHOOSER_ROOT_PATH设置项可限制config/chooser.jsp页面文件访问路径,值为限制用户可选的最大可选择根目录。
Windows环境部署smartbi应用,注意路径斜杠的区别:
Linux环境部署smartbi应用,注意路径的反斜杠的区别:
注意: 展示的“文件位置”以高级系统选项中配置的目录为准,不允许用户选择超出的目录,或者弹出提示超出配置的目录的范围
4.操作权限加固
【必须加固】敏感功能的权限控制
功能 | 建议加固级别 | 权限建议 |
安全设置->定制任务 | 必须加固 | 只开放给管理用户 |
安全设置->系统监控 | 必须加固 | 只开放给管理用户 |
安全设置->错误详情 | 建议加固 | 只开放给管理用户 |
安全设置->系统日志 | 建议加固 | 只开放给管理用户 |
数据准备->数据集->数据模型->脚本查询 | 建议加固 | 只开放给管理用户 |
数据准备->数据集->数据模型->SQL查询 | 建议加固 | 只开放给管理用户 |
数据准备->数据集->数据模型->JAVA查询 | 建议加固 | 只开放给管理用户 |
数据准备->数据集->数据模型->存储过程查询 | 建议加固 | 只开放给管理用户 |
数据准备->自助 ETL->Python 脚本 | 建议加固 | 只开放给管理用户 |
数据挖掘->实验管理->Python 脚本 | 建议加固 | 只开放给管理用户 |
系统选项->不允许调用没有用权限的服务接口(越权访问) | 建议加固 | 手工修改为 true |
【外网-必须加固】数据挖掘安全配置
配置为只允许内部服务器的 IP 访问数据挖掘相关的服务,不开放外网访问。
2024-02-07 之后的版本,可以通过系统功能【绑定引擎】来配置,参考 wiki 文档:https://wiki.smartbi.com.cn/pages/viewpage.action?smt_poid=43&pageId=128131709
2024-02-07 之前的版本,可以通过配置访问白名单来控制,参考 wiki 文档配置:https://wiki.smartbi.com.cn/pages/viewpage.action?smt_poid=43&pageId=111887690
【外网-必须加固】导出引擎配置白名单
Smartbi导出引擎3003端口存在 SSRF 漏洞,建议配置白名单来预防此漏洞
https://wiki.smartbi.com.cn/pages/viewpage.action?smt_poid=43&pageId=119276762
5.系统攻击防御
【必须加固】及时更新系统安全补丁
关注smartbi官方的安全补丁通知,及时做好相关安全漏洞补丁更新。
官网安全补丁地址下载:https://www.smartbi.com.cn/patchinfo
【必须加固】限制 IP地址访问config、monitor、defender页面
通过smartbi.properties 文件新增配置项来限定ip访问,建议只对服务所在机器开放。
配置方法:
进入到实际应用服务器环境的bin目录找到 smartbi.properties 文件,以tomcat服务器为例子,如下图:
在文件中新增如下配置项目
配置方式如下:
设置config.jsp可以使用英文逗号分隔设置多个IP属性,例如smartbi.allowedConfigIps=10.10.23.11,10.10.201.1-10.10.201.254,10.10.202.0/24
设置monitor可以使用英文逗号分隔设置多个IP属性,例如smartbi.allowedMonitorIps=10.10.23.11,10.10.201.1-10.10.201.254,10.10.202.0/24
设置defender.jsp可以使用英文逗号分隔设置多个IP属性,例如smartbi.allowedDefenderConfigIps=10.10.23.11,10.10.201.1-10.10.201.254,10.10.202.0/24
每个属性的配置如下:
类别 | 方法 | 示例 |
允许所有IP | *号代表全部IP。 注:这里不支持10.10.202.* | smartbi.allowedConfigIps=* |
精确指定某个ip | 直接设置对应的ip地址即可。 | smartbi.allowedConfigIps=10.10.101.11 |
指定多个ip地址 | 各个ip地址以英文逗号分隔。 | smartbi.allowedConfigIps=10.10.101.11,10.10.101.21, 10.10.101.31 |
指定某个ip段地址 | 指定ip段地址区间,中间用减号(-)连接。 | smartbi.allowedConfigIps=10.10.101.0-10.10.101.255 |
指定ip支持标准的掩码 | 使用 标准CIDR 格式。计算方法可参考:计算方法 | smartbi.allowedConfigIps=10.10.23.0/24 |
验证是否配置成功
使用非开放ip的电脑访问config界面,提示没有权限,联系管理员则表示配置成功,反之则不成功。
下图表示是配置成功的提示内容
如果使用未配置IP访问,则显示如下截图:
详细说明可查看当前Wiki文档的【说明事项】章节:
https://wiki.smartbi.com.cn/pages/viewpage.action?smt_poid=43&pageId=111885305
其他注意事项:
登录config.jsp页面内的知识库的【密码】项要勾选【加密保存】
【必须加固】限制前端获取系统选项中的敏感信息
在系统选项-高级配置中新增如下配置。
OPEN_SYSTEM_CONFIG_SENSITIVE_FILTER=true
【建议加固】防止 index 登录界面暴力破解
通过安装登录验证码扩展包+登录错误多次锁定用户扩展包+增强用户复杂密码 来防止暴力破解
配置方式:
部署登录验证码扩展包
设置复杂的用户登录密码和密码有效期
对于系统安全来说,用户登录密码强度是一个系统安全检测点,如何提高用户密码的安全性,比如说进行口令复杂度校验以及定期更新密码:
1)密码位数要求8位以上(含8位);
2)密码需有一定的复杂度(有字母、数字的混合);
3)设置密码有效期;
可以通过【运维设置】>【常用功能】>【系统选项】>【用户管理】–>用户密码复杂度设置(正则表达式)以及密码有效周期(天)
正则表达式:^(?![^a-zA-Z]+$)(?!\D+$)[a-zA-Z0-9]{8,}$
PS:密码有效期周期(天):用于限制用户密码的有效时间,到使用期限前3天,消息中心中会提示用户联系管理员、修改密码。
效果验证:
当用户设置密码的时候,就会校验密码复杂度。对于之前已设置密码的,需要单独进行修改,登录界面不会进行密码复杂度设置校验。
更多详情请查看:https://wiki.smartbi.com.cn/pages/viewpage.action?pageId=76679302
【外网-必须加固】通过安全卫士设置内外网访问请求黑名单限制
如项目必须要开放外网访问smartbi系统的权限,为提升系统访问安全性,建议开启黑名单访问限制。对于功能权限以及接口权限进行外网限制调用,从而降低外网系统被攻击后所带来的系统风险。
1、 设置入口:http://ip:port/smartbi/vision/defender.jsp
2、进行黑名单限制,需要对外网流量入口进行识别,比如说可以通过代理将互联网流量转发到smartbi,这时候设置的就是代理的IP或者请求头标识。设置方式参考 wikihttps://wiki.smartbi.com.cn/pages/viewpage.action?smt_poid=43&pageId=119277439
3、设置启用安全卫士。
默认放行请求勾选浏览类别,只允许浏览类的操作;
默认限制请求勾选【高危类别】,拦截执行计划任务、java 查询等高危动作的请求;请务必勾选此选项。
还可以根据实际需要,自定义添加白名单/黑名单请求;
更多详情请查看:内外网隔离最小化
(wiki 文档还没更新新功能的说明)
【建议加固】防止会话固定攻击/会话劫持
【内部】会话劫持漏洞-可使用该url进行jsessionid用户直接登录后台
修复会话固定漏洞扩展包SessionFixationHandler【内部】
5.各组件安全推荐配置
中间件层面
以下以tomcat为例进行相关安全配置推荐说明。
【建议加固】数据加密传输
通过在tomcat或nginx开启https功能,注意涉及到的CA证书需要和CA厂商获取。
tomcat配置方式:Tomcat配置HTTPS访问
nginx配置方式:https://www.jianshu.com/p/602a70c1b04e
未启用cookie的secure属性
通过tomcat中进行配置启用或nginx代理启用
注:secure与https相关的,前提条件是开启了https
tomcat配置方式:
1、进入到Tomcat目录下的conf/web.xml文件中添加如下配置
<session-config> <cookie-config> <http-only>true</http-only> <secure>true</secure> </cookie-config> </session-config>
nginx配置方式:
1、进入到nginx目录下的conf/nginx.conf文件中的server location 添加如下配置
location / { proxy_cookie_path ~^/(.+)$ "/$1; HttpOnly; secure; SameSite=none"; }
目标主机可能存在缓慢的HTTP拒绝服务攻击
通过配置中间件或nginx的连接超时时间
tomcat配置方式:
1、进入到Tomcat目录下的conf/server.xml文件中修改如下配置
将 connectionTimeout 值修改为 8000
connectionTimeout="8000"
nginx配置方式:
进入到nginx目录下的conf/nginx.conf文件中的server location 修改如下配置
http host头攻击漏洞
通过配置中间件或nginx的 serviceName 属性
tomcat配置方式:
1、进入tomcat的配置目录下(%tomcatHome%\conf)修改server.xml文件中的Host的name属性为指定ip或域名。
nginx配置方式:
进入到nginx目录下的conf/nginx.conf文件中的server server_name 指定ip或域名。
注意:下面的1、2配置只选其一即可,不用两个都配置
这里的ip要根据需要进行替换 192.168.137.1 10.11.27.46 、 192.168.137.1|10.11.27.46
SSL弱密码支持
通过配置中间件或代理来排除不安全的加密方式。
注:前提条件是tomcat或代理开启了https。
tomcat配置方式:
1、进入tomcat的配置目录下(%tomcatHome%\conf)修改server.xml文件中的Connector节点内容。
sslProtocols="TLSv1" ciphers="TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA"
完整示例
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="true" sslProtocols="TLSv1" ciphers="TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA" keystoreFile="conf/tomcat.keystore" keystorePass="123456" truststoreFile="conf/tomcat.keystore" truststorePass="123456"/>
nginx配置方式:
1、进入到nginx目录下的conf/nginx.conf文件中的server 中加入以下配置。
前提是开启了https
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!3DES:!ADH:!RC4:!DH:!DHE;
Tomcat暴露异常堆栈信息
通过tomcat配置,隐藏版本号与相关堆栈信息。
配置方式:
1、进入tomcat的配置目录下(%tomcatHome%\conf) 在 server.xml文件中的Host节点添加如下配置。
<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" />
启用了没必要的 http 请求类型
通过配置中间件或代理来禁用相关http方法。
tomcat配置方式:
1、进入tomcat的配置目录下(%tomcatHome%\conf)修改web.xml文件中添加以下配置。
<security-constraint> <web-resource-collection> <web-resource-name>filter-http-method</web-resource-name> <url-pattern>/*</url-pattern> <http-method>PUT</http-method> <http-method>DELETE</http-method> <http-method>OPTIONS</http-method> <http-method>HEAD</http-method> </web-resource-collection> <auth-constraint></auth-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> </login-config>
这里禁用了PUT、DELETE、OPTIONS、HEAD,如果还需要禁用其它的则新增一行
<http-method>其它</http-method> 即可
注:
如果配置了http强制转https的,则只需要下面配置即可(会包含上面启用没必要的http请求类型)
<login-config> <!-- Authorization setting for SSL --> <auth-method>CLIENT-CERT</auth-method> <realm-name>Client Cert Users-only Area</realm-name> </login-config> <security-constraint> <!-- Authorization setting for SSL --> <web-resource-collection > <web-resource-name >SSL</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
nginx配置方式:
1、进入到nginx目录下的conf/nginx.conf文件中的server 或 location 中加入以下配置。
if ($request_method ~ ^(PUT|DELETE|OPTIONS|HEAD)$) { return 403; }
【必须加固】IP地址伪造
两种方式只能二选一,不能同时配置!!!
第一种方式:通过配置nginx来防止。
配置方式:
1、进入到nginx目录下的conf/nginx.conf文件中的server location 中加入以下配置。
proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr;
注意
$proxy_add_x_forwarded_for
会将和Nginx直接连接的客户端IP追加在请求原有X-Forwarded-For
值的右边。所以依然可以伪造 IP。检查 nginx 是否有proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
这个配置项,如果有要删除。
第二种方式:系统选项高级设置配置
如果无法配置前置代理,可以通过运维设置>常用功能>系统选项>高级设置进行配置:
# 是否开启防止IP伪造,如果有前置代理的情况下不能开启。
HAS_ENABLED_IP_PORGERY=true
【建议加固】删除tomcat/webapps目录下的多余应用
Tomcat自带很多应用,非项目需要情况下,建议可考虑移除相关文件夹,避免因这类多余应用造成安全问题。
其他组件
其他组件比如 mysql、redis、smartbimpp、跨库、proxy 的推荐配置。
http://10.10.109.93:8090/pages/viewpage.action?smt_poid=43&pageId=146441245