报表安全的自我检查

概述

信息安全,即保证各类信息的安全性。比如,保证信息的保密性、真实、完整、不被未授权拷贝等等。

信息安全本身涵盖的范围是很广的,比如防范未成年人浏览不良信息、个人信息的泄露、企事业单位机密信息泄露等。

当前互联网,尤其移动互联网在高速发展进程中,智能设备也已非常普及,再加上 AI 的加持。作为 80 后一代,就我个人身边而言,父辈们还有大量的文盲,对于他们来说,目前上网也已经不是什么难事儿,对着手机一句话基本都能搜到想要的信息,虽然对查询结果的辨认还有些许困难,但已经相当便捷(有语音,可以看视频等等)。要知道,在以前是很难想象的,基本没有太多信息来源。

方便快捷的同时,带来的新问题便是安全,信息来源多了,防范意识做不到位的话很容易受到诱惑,个人信息一旦泄露,各种诈骗、保健品洗脑广告、电话等随之而来。

早在 2014 年年底,公安部、国家发改委和财政部就联合印发通知,明确要求对 500 个国家级重要信息系统的所在单位每年开展一次网络安全执法检查,目的就是加强对国家级重要信息系统的安全保障。另外,在当年的全国国家安全机关总结表彰大会上,习大大也强调“当前,我国面临复杂多变的安全和发展环境,各种可以预见和难以预见的风险因素明显增多,维护国家安全和社会稳定任务繁重艰巨,要高度重视加强国家安全工作”。

几年过去了,国家对信息安全问题的防范从未停止,从公安部官网可以查询到,2018 年 10 月底就进行过一次信息网络安全检查工具的招投标,此次招标目的很明显,就是为了对信息系统做安全检查。就在前一两月时间,国家再次开始对国家级信息系统进行抽查,国家电网、中石油等也榜上有名,一旦检查发现系统有安全漏洞的,立即停止其服务器运行,并公示其系统漏洞信息。

哔哔了这么多,可能有人问:和你们报表软件有毛关系?

问题是还真有点毛关系,不管是国家电网还是中石油等项目巨多,很多项目都会涉及到报表,报表多且复杂,现在也不可能通过硬编码搞了(效率太低),而是招投标报表工具软件,也就是所谓的专业的事儿交给专业的人。所以不但是有关系,甚至关系还挺大,毕竟不管系统中用的报表的功能是是多是少,只要是有,一旦发现漏洞,就会导致整个系统停止上线运行。用“一颗老鼠屎坏了一锅汤”来形容,虽然不好听,但有理。 能做的,就是不要让你自己成为那颗老鼠屎,所以自我安全检查也是负责任的做法。

报表自检分析

对于润乾报表来说是如何自查的呢?

首先来认识下润乾报表。

润乾报表是用于报表制作的大型企业级报表软件中间件,它提供了高效的报表设计方案、强大的报表展现能力、方便的集成特性、灵活的部署机制,及其强大的计算能力,为企业级统计分析、展现提供了高性能、高效率的报表系统解决方案。

润乾报表软件的核心特点在于开创性地提出了非线性报表数学模型,采用了革命性的多源关联分片、不规则分组、自由格间运算、行列对称等技术,使得复杂报表的设计简单化,以往难以实现的报表可以轻松实现,避免了大量的复杂 SQL 编写与前期数据准备,报表设计的效率提高了一个数量级。

是一个纯 Java 报表工具,提供了全面的 API 接口,是开发 Web 报表软件的理想选择。Java 报表工具的跨平台特性,使得它能很好地支持大型系统的需要。

功能上包括报表模块(特指统计类的表格及统计图)、填报模块及后期增加的报表中心(供终端用户独立使用的报表管理系统)。

当我们做自检的时候,需要根据已有的功能,可以把可能存在的问题分析一遍。

1、报表模块

(1) 报表文件本身没有安全性问题,即便被攻击者拿到文件,没有授权也打不开文件、没有数据源没拿不到数据,除非服务器被攻克,报表给删了,这种概念还是很低的,并且与报表软件本身也没关系。

(2) 报表资源的访问权限:每个人都有访问不同报表的权限,不可能完全放开,不然就可能泄露了数据,比如普通员工不能看到所有人的工资表。当然,报表模块是要和用户系统做集成的,报表也就成了其系统的资源,能被谁访问有系统分配对应权限就好了,所以这个访问权限也大可不必担心,本身和报表软件也没有关系。

(3) 报表文件内部:涉及到信息泄露的部分是数据集,我们都知道报表取数肯定是有来源的,目前多数还是通过 sql 读数据库方式获得。普通 sql 一般不会有安全漏洞问题,但目前的报表工具为了使报表更灵活,比如筛选条件可任意组合,就开发了动态 sql 的功能,可以拼 sql 串,这里就存在 sql 植入的风险了,这个是和报表工具有关系的。

总结来看,涉及报表模块的就这三个方面的问题,其中和报表软件有安全风险的只有第 3 条。

2、填报模块

报表文件和对填报表资源的访问问题如同报表模块。

另外,填报的功能允许终端用户在前端增删改数据,同时支持上传附件。增删改数据不会有被利用的漏洞问题,但上传附件就比较危险,很可能被攻击者上传 shell 文件,导致 webshell 风险。

3、报表中心

报表中心是润乾报表近一两年增加的专门提供给终端用户独立使用的报表管理平台,高效的用户与权限管理机制, 可以对用户、 机构组进行管理,建立多层次的报表分类管理体系,并且可以控制不同用户、 机构组的权限,从而保证用户只能看到与自己相关的、被授权的报表和查询分析内容,可靠地保证了企业的数据和信息安全。

作为平台,考虑的安全问题就会多的多,通过搜集,大致包括以下三方面:

(1) 账号安全(包括加密、登录验证、暴力破解等)

(2) jsp 页面是否有 xss 漏洞

(3) 上传功能是不是做了功能限制避免 webshell 风险。

针对自检可能存在问题的解决方式

针对自检中发现可能存在的问题,润乾报表的解决措施。

1、报表模块中的 sql 植入风险

润乾报表提供敏感词检查,当传进来的替换子句中包含某些特定词时将被拒绝,比如很少有人会用 select,from union 这些 SQL 关键字作为字段名,那么,我们可以首先判断一下替换子句中是否包含有 select,from 这些词,如果有就可以认为受到攻击并拒绝执行。这样做肯定会牺牲一点灵活性,例如有时传进来的子句万一真的会含有这些关键字,不过这种情况相对少见,在获得了较好的安全性的同时,损失的灵活性可以接受。

2、填报表上传附件

润乾报表在模板定义时已经由开发者规定了可以上传的文件类型,不在限定范围内的不允许提交服务器,从而保证类似 shell 脚本文件的上传,避免服务器被利用的风险。

1png

3、报表中心账号问题

报表中心对密码作为安全加密存储,登录验证增加验证码方式及限定次数的多次尝试登录,避免暴力破解。

4、报表中心 Jsp 页面

2png

如上图,攻击者在插入 XSS 恶意代码后可获取系统其他用户 Cookie 等敏感信息,危害其他用户账户安全。报表中心对于这种检测位置都绑定了敏感字符禁止,增加提交验证。

3png

5、报表中心上传功能

服务端设置白名单,仅允许白名单中的文件格式上传到服务器。

以上部分都是报表作为中间件或使用报表中心平台的安全性问题及解决措施。另外在润乾报表设计器中还内置了方便用户测试的 demo 应用,有较多用户可能考虑直接用来作为报表服务,其他应用跨系统方式调用报表的 url。但是,需要明确的是 DEMO 应用原本目的只是让用户来测试使用,是完全开放的应用,不包括账号管理、登录、权限管理等功能,所以一旦让攻击者知道了报表的 url,就完全暴露了。因此,不建议使用者使用 demo 应用作为报表服务,如果坚持用,也建议使用者对 demo 做一下封装,增加验证,用来检查访问者是否有访问权限,有则呈现报表,无则提示无权访问。

4png

为了方便跨系统调用用户方便封装,也有一个供参考的方案。

跨系统安全调用方案

实现机制及原理

客户应用系统(统称做 C 系统),报表系统(统称做 R 系统),两个应用彼此独立。

由 C 系统根据具体需求通过后台向 R 系统中发送请求获取临时或永久公钥,然后在 C 系统点击需要访问的报表的链接时,连同公钥、参数再次向 R 系统发送请求访问报表,密钥对匹配通过后进行报表访问权限验证,翻页、钻取等报表操作直接可在 R 系统中验证。

处理流程如下图:

5png

两次请求机制及原理:

第一次请求:密钥对生成原理:

R 系统采用非对称加密算法,R 系统提供一个接口,供 C 系统调用。

当 C 系统每次发送报表请求 R 系统时,R 系统自动生成一个密钥对(公钥 + 私钥)保存起来(出于安全性考虑,防止请求被重放,有些敏感内容可以使用单次有效的密钥加密,解密后密钥对即失效。其他情况下,一对密钥将一直有效),并将公钥发回。

第二次请求:验证密钥对访问报表:

通过第一次请求后,C 系统已经获取了 R 系统提供的公钥,并且在 R 系统中保存了此次访问的密钥对,第二次向 R 系统发送请求,需要将此公钥、需要访问的报表所用到的参数、以及其他参数统一传递到 R 系统中,通过匹配密钥对 R 系统进行验证,通过后进行报表展现。在第二次发送请求前,需要按规则将参数等进行加密处理连同公钥一起发送到 R 系统,R 系统再进行解密验证。

注意:每次展现报表时,会分成两种情况,第一种情况是之前已经获取到了永久的公钥,直接通过第二次请求进行密钥对验证;第二种情况出于用户安全性的考虑防止 url 被复制重新调用而生成的临时密钥对,每次请求都需要重新获取、生成新的密钥对,保证每次访问都是唯一密钥对,所以后台都会向 R 系统发送两次请求。

实现步骤

R 系统安全机制 servlet 部署,在 web.xml 中配置 SecurityKeyServlet 和 ShowReportServlet 用于处理两次报表请求。

C 系统报表展现 URL 调用,发送报表请求给 R 系统 SecurityKeyServlet 申请密钥对,接收报表系统返回的公钥对报表参数进行加密并再次发送请求给 R 系统 ShowReportServlet。

R 系统报表展现合法性校验,在报表展现前可增加报表展现页面访问权限校验。

另附 url 安全性调用解决方案的完整文档,供参考。![]

安全模块调用.zip

更多安全类问题请查看:集成部署相关问题分类导航
* 报表的 SQL 植入风险及规避方法
* 润乾报表权限管理机制
* 润乾报表数据权限控制方案

以下是广告时间

对润乾产品感兴趣的小伙伴,一定要知道软件还能这样卖哟性价比还不过瘾? 欢迎加入好多乾计划。
这里可以低价购买软件产品,让已经亲民的价格更加便宜!
这里可以销售产品获取佣金,赚满钱包成为土豪不再是梦!
这里还可以推荐分享抢红包,每次都是好几块钱的巨款哟!
来吧,现在就加入,拿起手机扫码,开始乾包之旅



嗯,还不太了解好多乾?
猛戳这里
玩转好多乾