2017年6月1日,《中华人民共和国网络安全法》正式颁布实施,其中明确提出对关键信息基础设施保护,避免其受攻击、侵入、干扰和破坏,维护网络空间安全和秩序。在网络空间中,最直接受到影响也是最容易攻击的就是各类Web站点。针对该项法律法规,很多高校采取了各类措施,如严格按照等保制度来定级测评整改、在网络拓扑结构中增加Web应用防火墙、安装防篡改软件以及部署站群系统等,但是其中最根本的核心在于站点和站群系统本身是否有漏洞,是否安全有缺陷,这一点因为不是通过购买系统或服务就可以解决的,也就在各类整改措施中很少提及。本文以Drupal为例来讲解一个安全的内容管理系统应该具备的几个特性,供高校同行参考。
Drupal与安全
根据维基百科的描述,Drupal是一个由DriesBuytaert创立的自由开源的内容管理系统,用PHP语言写成。在业界,Drupal常被视为内容管理框架(CMF),而非一般意义上的内容管理系统(CMS)。整套平台把所有内容视为一个“节点”(node),背后由大量“模块”(module)控制其显示、修改、排列、分类等方式。这种设计令Drupal不只可以创建普通的博客网站,只要配合适当组件,控制内容显示及处理权限的方式,它马上能变成论坛、Wiki、社区网络。迄今,Drupal的社区已编写了超过24,000个模块(module)。至2017年6月,全球约有2.3%的网站均由Drupal制作,在内容管理系统中约占7%。Drupal在政府组织、教育机构、开源社区中得到广泛应用。
安全是Drupal社区非常关注的一个方面。Drupal社区有一个安全工作小组,该小组会发布安全公告,并对现有Drupal核心和模块进行安全审计,若是代码有安全问题,则会提醒系统用户进行更新。大部分模块都会被安全公告覆盖,在下载模块时,Drupal会提醒用户该模块是否已经被列入安全公告范围。
Drupal的更新分为两类:普通更新和安全更新。如果是不涉及安全问题的普通升级,则不会主动提醒用户系统有更新;若是涉及到安全更新,系统会对所有具有发布内容权限的用户在界面醒目的位置进行提醒,从而让管理员尽快升级该安全漏洞。
根据国家信息系统等级安全防护能力的要求,一个二级系统需要包含安全审计、边界完整性检查、入侵防范、资源控制以及通信保密性等控制点。身份鉴别则要求在系统的整个生命周期,每一个用户具有唯一标识,使用户对自己的行为负责,具有可查性。同时,要求访问控制具有更细的访问控制粒度等。管理方面,增加了审核和检查、管理制度的评审和修订、人员考核、密码管理、变更管理和应急预案管理等控制点。而三级系统的要求则重点在网络恶意代码防范、剩余信息保护等方面。
安全内容管理功能
一个安全内容管理系统应该具有以下几个方面功能:
1.提供编码标准。在互联网社区大环境下,一个优秀的CMS系统由很多开发者共同参与开发,这就需要有一个规范的代码编写标准。即便是商用公司产品,开发公司也需要在团队中普及编码标准,并严格要求代码工程师按照标准进行编写,从而在编码层面尽量杜绝安全漏洞。Drupal作为开源社区软件,参与者众多,为此提供了代码标准(https://drupal.org/coding-standards),编写安全代码(https://drupal.org/writing-secure-code)和可访问性代码编写最佳实践(https://drupal.org/node/1637990)。
2.源代码审计。开源软件在源代码审计方面具有先天优势,目前大部分开源软件在github.com上进行源代码托管,任何人都可以参与项目代码审计,可以对代码提出自己的建议和修改请求,这种通过人海战术进行的源代码复核是最有效的方式,但却因为没有固定的分工而容易对部分代码缺失众人复核。但是组织架构良好的开源项目,其代码本身是有复核的。另外,一个完善的项目中应该引入自动化代码审计工具,对于常见的SQL注入、跨站脚本攻击、CSRF、文件操作、代码命令执行、变量覆盖、会话认证以及逻辑处理等漏洞代码进行审计。Drupal作为开源软件,本身提供了模块代码编写指南,提供了防止低级漏洞错误的封装函数,防止开发人员任意编写代码造成漏洞。此外,Drupal提供了代码审计模块Coder来对用户开发的模块进行自动化审计,并给出修改建议。这个是目前国内CMS系统缺少的。
3.运行时安全审核。一个内容管理系统的正常运行需要操作系统、Web应用服务器、内容管理系统、文件、数据库的多方面支持。因此,内容管理系统的安全性不能只看内容管理系统,还需要严格审计操作系统、Web应用服务器以及其他多方面的安全加强。从纵向来说,内容管理系统建设部署时安全,后续运行一段时间后,需要持续保障安全,持续检查安全。这一点是很多内容管理系统缺失的,很多系统在部署后,通过各类漏洞扫描设备进行扫描,通过安全等级评定,即认为安全,后续只管内容维护。而Drupal系统认为安全是一个持续的过程,随时可能会因为各种操作而产生安全隐患,譬如临时文件目录具备了可执行权限,系统配置文件可写属性没有去掉,这些都是Drupal在运行时需要检查的,并及时在显著位置提醒管理员修改安全隐患。此外,Drupal还提供了多个安全监测模块以及安全指导建议模块,这些模块对于安全防范技术能力不强的管理者来说,提供了有力的指导和规范建议,从而确保普通管理员也可以提供一个安全的内容管理系统。
4.用户行为审计功能。一个完善的内容管理系统,还需要对用户所有操作进行审计,以便后续追踪事件的发生过程,定位事件责任人。目前市面上流行的内容管理系统已经具备该项审计功能。但是普通的内容管理系统的查询功能基本局限于系统内部,而Drupal的审计日志可以集成到其他日志服务器,譬如syslog服务器,便于在其他系统中集成监控分析。
5.有效的内容过滤机制。内容管理系统的安全不仅体现在系统的安全上,还体现在内容的安全上。根据国家涉密机密信息管理办法,涉密信息一律不准上网。另外,内容管理系统应当杜绝发布非法信息、不当言论以及敏感事件信息。因此内容管理系统需要添加必要的敏感词过滤机制。在过滤主体方面,一则信息所涉及的标题、正文和附件等可填写内容都应加入过滤功能,有效防止不当用户发布受限内容。Drupal提供了多个模块(如wordfilter、Profanity、BadWordFilter等)进行敏感词过滤。
6.及时的安全公告机制。无论软件开发商如何努力去完善修改系统,都不可避免产生安全漏洞。一旦出现安全漏洞,及时的告知是非常必要的。所以一个安全的内容管理系统应具备周期性检查安全通知公告的功能,官方应当提供安全公告列表和邮件列表,以便及时通知管理员升级系统。在这方面,部分软件供应商没有提供该项功能,仅仅是在被广而告之有漏洞时才对现有系统进行升级维护,修正漏洞。Drupal安全工作小组则采取了及时发布安全通知,系统自身周期性检查安全公告,以邮件和系统显著位置通知的形式提醒管理员尽快升级系统。
一个安全的内容管理系统不仅体现在开发部署阶段,也体现在系统运维阶段,完善的系统部署过程、优秀的规章制度、最佳的操作指南都是保障系统安全不可或缺的过程。本文针对内容管理系统在安全保障方面进行了探讨,提出了多个方面的建议,但随着技术的发展,破坏手段也层出不穷,内容管理系统应及时作出应用的调整和完善,这样才能持续保障一个内容管理系统的安全。
(作者单位为上海海事大学信息化办公室)
特别声明:本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。