作者:恒丰银行 李顺达

行业现状:信息系统作为访问信息的重要通道,直接影响信息安全。然而大多组织对信息系统的防护较为片面,结果就是系统被攻陷或者数据泄露。

信息系统的安全背景和分层

信息系统对保护信息安全发挥着重要作用。信息系统安全等级保护基本要求首先从管理和技术方面进行了划分,并在技术方面划分了物理安全、网络安全、主机安全、应用安全、数据安全,并明确了各层的要求,但是对于如何提高信息系统的安全水平,很多从业人员还是比较茫然。开发人员眼中的安全就是SDL(Security Devel-opment Lifecycle),运维人员眼中的安全就是DDoS防护、漏洞的检测和修复,网络人员眼中就是网络隔离和防火墙策略。其实际上,还有很多安全关注点被忽略,比如中间件和第三方类库的安全漏洞,监控系统中的敏感数据泄露,来自内网对代码仓库的违规访问。另外,安全涉及很多跨专业的工作,在很多人眼中,缺少跨专业的全景安全视图。

另外,还有一些信息系统,虽然通过了等级保护评测的二级或三级,但依旧发生了很严重的信息安全事件。究其原因,就是没有以全面保障的方式来防护系统,而是基于某些安全设备或特定技术方面来保护系统。

在开展安全保障之前,首先要了解信息系统的特点:广泛使用开源框架或类库;所依赖的框架或第三方类库日益集中化;广泛使用各类消息中间件和缓存中间件;开展全方位的监测;对安全的需求日益增强。这些特点影响着信息系统的保障策略。

考虑到攻击者对不同层次所采取的攻击方式不同,本文提出了如下的分层方式。对于系统负责人,此划分方式也便于各专业人员开展逐层加固,并贯彻纵深防御原则。具体为:业务逻辑实现层;框架和第三方类库层;中间件层;数据库层;操作系统层;进程间通信和跨机器通信层;信息系统所在的网络。

信息系统自身之外,还存在“数据汇总和监测层”和“外围辅助系统”。前者用于搜集和汇总应用层、中间件和系统层数据,并通过数据分析来判断信息系统是否存在功能性、性能、可用性或安全问题。后者主要是配置管理、代码仓库、持续集成系统。

对信息系统的攻击分类和主要手段

攻击的目的主要是获取系统后端的数据,从而破坏数据的机密性和完整性。前文所列出的信息系统各层,均可能受到不同类型的攻击。除此之外,按照信息系统的攻击来源划分,可分为以下两种:一是来自于外部对信息系统所暴露接口的攻击;二是来自于内部对操作系统、数据库、数据传输和数据存储的攻击。

按照信息系统攻击的难易程度划分,可分为以下四种,按照由难到易排列。拥有程序发布包或源码,可极大减小攻击难度。即:只能调用外部接口的攻击;可控制软件运行的系统环境;拥有二进制程序的攻击;拥有源码的攻击。

对信息系统的主要攻击手段见表1。

表1 对信息系统的攻击手段

信息系统的安全保障

1.保障方式的分类

在充分了解各层次攻击的基础上,才能更好地开展信息系统的安全保障。

外部保障。通过在系统外部署各类安全设备(如Fire-wall、IPS、WAF、DDoS防护设备),或使用外部提供的安全服务来提升安全性。

系统自身的保障。通过系统自身的多个方面来构建安全能力,以抵御外部的各类攻击。比如引入安全开发生命周期、对中间件、数据库、操作系统的进行安全加固、加强代码仓库的防护。这使得在外部防护设备失效的情况下,信息系统依旧能够抵御外部攻击。

内部保障。通过内部的安全体系,加强访问控制,来防范来自组织内部的攻击,如暴力破解、搭线窃听。这种方式被很多组织所忽略,导致了内网安全事件高发。

2.保障的策略

信息系统的保障策略具体见表2。

表2 信息系统的保障策略

3.具体的保障措施

本节针对一些重点层次,给出具体可落地的安全措施。

(1)对外的端口和协议。建议使用硬件防火墙,只开放web端口;使用防火墙的NAT(网络地址转换),将互联网地址转成web服务器的内网地址;减少私有协议的使用,防范设计和实现中的缺陷;禁用HTTP1.0;禁用HTTPS的不安全的算法,拒绝与低版本开展通信协商。

(2)信息系统所在网络的安全。网络在纵向上划分成若干个安全区,一般是DMZ、业务网、数据库网,每个网段有明确的IP地址范围,便于根据IP添加访问规则。例如,DMZ区域的机器只能通过8080等TCP端口访问业务网的服务,其余端口默认拒绝;数据库网只接受来自业务网对其数据库端口的访问。

DMZ只部署Web服务器,不部署应用服务器。Web服务器可以使用Nginx作为反向代理。这样,即使Web服务器被攻陷,攻击者也很难从DMZ向内网渗透。

业务网部署应用服务器,主要是处理动态请求。业务网可以在横向(东西向)上再划分出几个逻辑区域,可称为安全域或安全组。不同安全域之间启用访问控制策略。比如Redis上保存有敏感信息,Redis可以设为一个独立的安全域,限制不相关机器的访问。另外,不同信息系统之间,宜启用独立的安全域做横向的隔离。

(3)业务逻辑实现层的安全措施。这是信息系统中风险最高的一层。一般而言,开发小组会评估信息系统中的重要资产,排序并挑选出安全相关的部分,平衡安全投入与产出,最终确定安全措施。

对于安全需求强的项目,尽量按照SDL的流程开发,在开发的各个阶段强化安全特性;对于安全弱相关的项目,可挑选身份鉴别、访问控制、数据机密性和完整性、密码和密钥的存储和使用、密码找回等领域,开展安全设计和安全编码。

例如,在身份鉴别领域,要考虑账户安全、身份凭证安全、口令复杂度、口令存储、身份鉴别方式等方面。宜有独立的用户中心、使用单一的登录入口、不能留有后门账户和后门入口、口令需要用安全协议进行传输、支持多因素认证、安全可靠地找回密码。

这一层主要靠的是安全架构师的经验,没有“银弹”可言。

(4)框架和第三方类库的安全措施。框架的过多功能往往引入了新的安全漏洞。因此,不要使用框架的默认配置,通过其功能开关列表只开放所需的功能,减少未知功能可能导致的远程代码执行等风险。

可以订阅特定框架和类库的漏洞信息,及时更新安全补丁。

要格外关注XML、Json等数据解析组件,因其直接处理外部提交的数据,要防范外部实体注入漏洞以及数据解析的漏洞。

(5)中间件、数据库和操作系统层。中间件、数据库和操作系统要进行经常性的漏洞扫描和修复,还要开展安全基线的配置核查。组织要定义复合自身的安全配置规范,涵盖账户安全、口令策略、登录策略、系统审计日志、系统默认服务、sshd等重要服务的配置等领域。

中间件应使用专用账号启动,严格限制此账号的权限和能访问的目录。

在web服务器上,宜启用进程白名单,禁用tcpdump、ssh等敏感命令的执行,防范其成为攻击跳板。

总结

由于信息系统的多层结构以及多维度的攻击面,使得其安全保障是一个系统化的工作。任何一个疏漏,都可能导致信息系统被攻破。因此要贯彻保障的理念。

信息系统的自身保障是保障的核心。只有信息系统的各层、以及外部辅助系统均贯彻安全策略,并持续保持这种安全状态,才能提升整体安全性并保障后端数据的安全。内部保障是安全的灵魂,否则信息系统早晚会变成“行尸走肉”。而外部保障是辅助性的,因为大部分的安全设备都是被动的,无法应对千变万化的攻击。

如果信息系统自身的安全保障较差,可以借助外部保障来临时抵挡常见攻击。然而系统自身的保障才是安全的根本,它就像人体的免疫系统一样可防范外部病毒的入侵。

内部的安全保障要从人员、技术、流程抓起,通过安全管理来粘合各个要素,建立严格的安全体系,会在后续的文章中进行研究和总结。

本文节选自《金融电子化》2019年02月刊

声明:本文来自金融电子化,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。