You are here

Drupal8安全

    编者:亚艾元软件

Drupal与安全

  根据维基百科的描述,Drupal是一个由DriesBuytaert创立的自由开源的内容管理系统,用PHP语言写成。在业界,Drupal常被视为内容管理框架(CMF),而非一般意义上的内容管理系统(CMS)。整套平台把所有内容视为一个“节点”(node),背后由大量“模块”(module)控制其显示、修改、排列、分类等方式。这种设计令Drupal不只可以创建普通的博客网站,只要配合适当组件,控制内容显示及处理权限的方式,它马上能变成论坛、Wiki、社区网络。迄今,Drupal的社区已编写了超过24000个模块。至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来对用户开发的模块进行自动化审计,并给出修改建议。

3.运行时安全审核。一个内容管理系统的正常运行需要操作系统、Web应用服务器、内容管理系统、文件、数据库的多方面支持。因此,内容管理系统的安全性不能只看内容管理系统,还需要严格审计操作系统、Web应用服务器以及其他多方面的安全加强。从纵向来说,内容管理系统建设部署时安全,后续运行一段时间后,需要持续保障安全,持续检查安全。这一点是很多内容管理系统缺失的,很多系统在部署后,通过各类漏洞扫描设备进行扫描,通过安全等级评定,即认为安全,后续只管内容维护。而Drupal系统认为安全是一个持续的过程,随时可能会因为各种操作而产生安全隐患,譬如临时文件目录具备了可执行权限,系统配置文件可写属性没有去掉,这些都是Drupal在运行时需要检查的。此外,Drupal还提供了多个安全监测模块以及安全指导建议模块,这些模块对于安全防范技术能力不强的管理者来说,提供了有力的指导和规范建议,从而确保普通管理员也可以提供一个安全的内容管理系统。

  4.用户行为审计功能。一个完善的内容管理系统,还需要对用户所有操作进行审计,以便后续追踪事件的发生过程,定位事件责任人。目前市面上流行的内容管理系统已经具备该项审计功能。但是普通的内容管理系统的查询功能基本局限于系统内部,而Drupal的审计日志可以集成到其他日志服务器,譬如syslog服务器,便于在其他系统中集成监控分析。

  5.有效的内容过滤机制。内容管理系统的安全不仅体现在系统的安全上,还体现在内容的安全上。根据国家涉密机密信息管理办法,涉密信息一律不准上网。另外,内容管理系统应当杜绝发布非法信息、不当言论以及敏感事件信息。因此内容管理系统需要添加必要的敏感词过滤机制。在过滤主体方面,一则信息所涉及的标题、正文和附件等可填写内容都应加入过滤功能,有效防止不当用户发布受限内容。Drupal提供了多个模块(如wordfilter、Profanity、BadWordFilter等)进行敏感词过滤。

  6.及时的安全公告机制。无论软件开发商如何努力去完善修改系统,都不可避免产生安全漏洞。一旦出现安全漏洞,及时的告知是非常必要的。所以一个安全的内容管理系统应具备周期性检查安全通知公告的功能,官方应当提供安全公告列表和邮件列表,以便及时通知管理员升级系统。在这方面,部分软件供应商没有提供该项功能,仅仅是在被广而告之有漏洞时才对现有系统进行升级维护,修正漏洞。Drupal安全工作小组则采取了及时发布安全通知,系统自身周期性检查安全公告,以邮件和系统显著位置通知的形式提醒管理员尽快升级系统。

  

防范

1. 加固linux tmp目录,基本上drupal网站部署在在linux系统之上,对于php的执行权限要严格把控,参考php 站点项目目录权限(安全)验收说明一文。

2. Linux系统加固包含:命令执行历史记录加固Crond调用黑白名单帐号加固,参考linux系统安全加固一文。

3. PHP 安全环境的定制:参考定制安全的php环境一文。

4. 关闭非部分服务端口只对内网或者某台主机有权限开放,除此之外所有拒绝所有的IP的访问。可通过iptables或者商业的waf来设置(阿里安全云盾,阿里安全宝,阿里waf),原则意义上对外暴露的端口只允许有80和443。

5. 加强代码编写规范,参考drupal官方https://drupal.org/writing-secure-code以及https://www.drupal.org/node/1637990

6. 初建的drupal站点,采用security review模块进行必要的安全复查,https://www.drupal.org/project/security_review

7. Drupal core漏洞和各服务的安全漏洞持续关注,安全是个长期的工作不是一时,所以要持续关注drupal core和各服务发布的版本漏洞drupal:https://www.drupal.org/security nginx:http://nginx.org/en/security_advisories.html,,以nginx为例官方推出了patch以及diff后的代码,采用patch命令修复漏洞(参考diff和patch维护源码变更一文)。


Drupal版本: