要掌握白环境的相关内容,我们除了需要了解它的定义、适用场景外,还需要了解一些关于白环境的概念。
在白环境理念中,安全工作是基于白名单机制的,把不确定因素转化为确定因素也是通过白名单机制来实现的。这里先讨论一下白名单与黑名单机制。虽然已经存在很长时间了,但出于各种原因,这两种机制在真实环境以及安全防护实践中并没有完全用起来,或者常有使用不当的情况。
白名单机制指的是在默认拒绝的前提下,只允许特定个体的访问。从访问控制角度来说,它更为严苛。从允许的个体范围角度来说,它是可以被枚举的,也是有限的。从应用场景角度来说,它更适用于那些对安全要求较高的应用,例如关基系统、核心系统。
黑名单机制指的是在默认允许的前提下,只拒绝特定个体的访问。从访问控制角度来说,它更为宽松。从拒绝的个体范围角度来说,它是不确定的、难以被完全枚举的,也是无限的。从应用场景角度来说,它更适用于那些对安全要求不高的普通应用,例如办公和研发测试环境等。
黑、白名单这两种机制在理论上是互斥的,因为它们在默认情况下的授权结果是截然不同的,白名单机制是拒绝,黑名单机制是允许。换句话讲,在白名单机制中添加黑名单是没有实际意义的,在黑名单机制中添加白名单也同样是没有实际意义的,唯一的好处是在管理复杂度和性能方面会有些帮助。
举两个生活中的例子来了解黑、白名单机制的更多内容。第一个例子是买飞机票,这是一个非常典型的黑名单机制,默认大家都可以买飞机票,但那些上了“限制高消费名单”的人是买不了的。这个名单是不确定的,且有可能发生变化。第二个例子是买完机票后的机场登机过程,这是一个非常典型的白名单机制,每个航班只有那些非常有限的、买了票的乘客才能登机,默认其他人都不能登机。
迄今为止,在对很多应用系统的防护过程中,出于多种原因,还是以黑名单机制为主,例如IP地址封堵和恶意样本比对等。不得不说,单纯部署黑名单机制从安全角度来说是不够的,尤其是那些对安全要求较高的系统,即使配合大数据分析平台也还是不够,或者说效率不高。这也是笔者编写本书的一个主要原因,即提出以白名单机制为基础的白环境理念,主张在相对静态的生产环境或者对安全要求较高的系统中执行白名单机制,而在其他相对动态的环境(例如办公)中执行黑名单机制。
这里对一些常见的、不同方向的白名单也做下介绍,例如合法网站白名单、正版软件白名单等,以便读者更好地理解白名单机制。
❑ 合法网站白名单:企业在管理员工上网的时候,会通过梳理、定义与工作相关的合法网站白名单来限制员工的上网行为,防止员工在上班时间访问购物网站、娱乐网站等。这个白名单可以配置在企业办公网出口的安全We b网关(Secure Web Gateway,SWG)上,一旦配置成功,企业员工上网将会受到严格的限制。
❑ 正版软件白名单:企业为了保证员工所用终端的安全,会对员工所用电脑能够安装的软件进行控制,只有那些和工作相关的、在软件白名单上的正版软件才被允许安装,这种方式可以最大限度地避免病毒在企业内网的传播。这个白名单可以和企业的软件分发管理平台配合使用。
除此之外,企业还可以根据实际情况在操作系统上构建其他白名单,例如程序进程白名单、用户账号白名单、管理操作白名单、开放服务白名单、内核模块白名单、网络连接白名单等。
总之,我们可以把业务系统中的确定因素梳理出来,然后通过白名单机制进行定义和管理,从而达到精细化管理的目的。
在白环境理念中,安全工作的开展是面向应用系统的,是以应用系统为单位进行考虑的,这主要有以下三个原因。第一,安全的前提是不影响应用系统的正常运行,安全的目标是保障应用系统的可靠运行,既不能因噎废食,也不能过度保障,因此开展安全工作需要对被保护对象(即应用系统)有充分的了解。第二,以应用系统为单位,这个环境是相对封闭的、固定的、静态的。白环境的建立需要有一个范围,即可以梳理出确切的白名单范围并可以最终收敛,而不是漫无边际地发散,带入无穷无尽的不确定因素。第三,以应用系统为单位,场景相对简单清晰,因此白名单的梳理更容易,结果也更准确。
无论是梳理白名单,还是安全工作左移,或者是日常安全运营,我们都应该以应用系统为单位。现在很多安全项目和工作是以设备为核心的,认为只要看好各种安全设备、安全产品就可以解决所有安全问题了。其实不然,如果不了解应用系统,不是从应用系统出发,安全工作很难做好,防护效果也很难体现,这也是白环境要面向应用系统的主要原因。
举一个生活中的例子。我们每个人在采购衣服的时候,如果是去品牌店,所选购的都是成衣,即便是一线品牌,也只有几个可选的尺寸,未必合身。最好的方式是去裁缝店,量体裁衣,定制衣服,这样才能找到最适合自己的衣服。这和我们所讲的面向应用系统的理念是一样的,首先需要了解自己的身材,然后定制适合自己的衣服。
对于一些超大型企业、集团型企业,它们涉及的应用系统数目众多,有些甚至涉及几千个应用系统。针对如此大量的应用系统,可以根据应用系统的重要程度排定优先级,最为重要的系统,例如关基系统、靶心系统,可以先行实施白环境。还是以上面选衣服的场景为例,关基系统要去裁缝店定制,普通系统可以先去品牌店选成品,然后再考虑把普通系统逐步转向裁缝店。
除了应用系统数目众多,有些应用系统自身规模也非常庞大,针对这些超大型应用系统,可以根据业务逻辑和功能模块做拆分,把一个超大型应用系统拆解成多个小型应用系统,先对小型应用系统实施白环境,然后再结合业务逻辑,完成超大型应用系统的白环境实施。
要面向应用系统还有另外一个原因。我们的最终目的是在不影响应用系统正常业务的前提下,以最好的投入产出比(Return On Investment,ROI)来保障应用系统的可用性、机密性、完整性。也就是说,不能为了安全无休止地、不计成本地投入,或者大规模地修改应用系统的架构,这些都是不可取的,也是应该避免的。
安全左移(Shifting Security Left)通常指的是将安全工作(代码审查、分析、测试等)提前到软件开发生命周期(Software Development Life Cycle,SDLC)的早期阶段,从而防止缺陷产生并且尽早找出漏洞。通过在早期阶段修复问题,可以防止其演变为需花费巨资加以修复的灾难性漏洞,以达到节省时间和资金的目的。
在白环境理念中,要求提前考虑安全,提前对安全相关工作进行准备。这点和安全左移的理念类似,但范围更广、内涵更多。在之前的一些项目中,笔者曾经历过一些安全事件的应急处理。在安全事件发生后,安全人员和运维人员才开始对涉及的主机进行了解,对涉及的网络连接是否正常进行排查。所有这些临时抱佛脚的工作,既增加了对事件响应的时间,又增加了对事件研判的复杂度,而且效果通常都不会太好。
换个思路,如果我们尽可能地提前考虑安全,把业务系统中的资产梳理清楚,把主机之间符合业务需求的网络连接梳理清楚,尽可能地把安全运营工作左移到网络架构设计阶段或应用系统上线前,那我们应对安全事件的能力就会极大增强,整体防护效果也会显著提升。另外,无论是平均检测时间(Mean Time To Detect,MTTD)指标还是平均响应时间(Mean Time To Respond,MTTR)指标,也都会有明显的好转。
安全左移的概念最早起源于软件开发过程中,这非常好理解。理论上讲,所有的安全问题、安全隐患、安全漏洞,追根溯源都是开发人员在编码过程中造成的,而且是很难避免的。所以,现在很多企业才会从DevOps向DevSecOps转变,尽可能地把安全隐患扼杀在摇篮中。虽然这个转变过程比较艰难,但已经逐步成为大家的共识了。
本书也会借鉴安全左移的说法,但考虑的角度不仅有软件研发,还有安全体系、安全运营、安全管理。国内经常在讲的三同步原则,即“同步规划、同步建设、同步运营”,其实也是一种安全左移的体现,从规划阶段就要开始考虑安全问题。本书中的安全左移强调的是安全工作需要提前考虑、提前布局,是更全面、更体系化地左移。
我们在建设纵深防御体系时,需要充分了解被防护对象的特点、风险隐患、业务逻辑等;我们在进行常态化安全运营时,也同样需要了解网络拓扑、系统资产、业务逻辑等。在充分掌握这些信息后,就可以整理出一个满足不同层面安全需求的白名单,例如网络白名单、软件白名单、身份白名单等,从而帮助我们在安全建设阶段有的放矢,在安全运营阶段高效可靠。
在白环境理念中,更推荐使用应用系统中各个组件的原生安全能力。主要原因有三个:第一,大多数操作系统、中间件、数据库等都提供原生安全能力,它与被防护组件的耦合度高,防护效果好;第二,可以大大减少由于引入第三方软件造成的额外安全隐患,例如软件供应链安全;第三,减少采购第三方软件的费用,降低投入,以达到最好的投入产出比。
在本节中,我们仅以Ubuntu操作系统和MySQL数据库为例,简单介绍它们各自的原生安全能力。
1.Ubuntu操作系统的原生安全能力
无论是Windows操作系统还是Linux操作系统,它们本身就具备比较完善的安全防护能力,完全可以胜任操作系统层的防护工作。以Ubuntu操作系统为例,它的原生安全能力列举如下。
❑ 它可以通过NetFilter以及iptables控制入向和出向的网络连接。
❑ 它可以通过传统文件访问控制以及访问控制列表(Access Control List,ACL)控制操作系统账号对目录和文件的访问。
❑ 它可以通过可插拔认证模块(Pluggable Authentication Modules,PAM)控制账号登录系统时所需的认证方式,例如密码认证、证书认证或者多因素认证等。
❑ 它可以通过su和sudo控制普通管理员的权限提升。
❑ 它可以通过Linux安全模块(Linux Security Module,LSM)实现强制访问控制,例如AppArmor等。
❑ 它可以利用fapolicyd来检测、控制不可信软件的执行。
❑ 它可以利用高级入侵检测环境(Advanced Intrusion Detection Environment,AIDE)来检测敏感文件和重要目录的变化。
❑ 它可以利用auditd和rsyslogd来记录和管理审计日志。……
2.MySQL数据库的原生安全能力
现在主流的关系型数据库也具备多种安全能力,可以胜任数据库的防护工作。以MySQL数据库为例,它的原生安全能力列举如下:
❑ 它可以通过GRANT命令或者操作系统层面的iptables限制只有可信IP才能访问。
❑ 它可以通过修改配置禁止以超级管理员(root)身份运行MySQL。
❑ 它可以通过多种插件来实现不同的认证方式。
❑ 它可以通过GRANT命令对用户访问数据库进行授权。
❑ 它可以通过使用传输层安全(Transport Layer Security,TLS)协议对传输进行加密。
❑ 它可以通过命令mysqldump对数据进行备份和恢复。
❑ 它可以通过修改配置文件或参数,开启日志记录功能,记录所有数据库的运行状况和操作行为。
在MySQL企业版中,还可以通过MySQL Enterprise Firewall对SQL语句的执行进行控制。
在白环境理念中,我们通过白名单机制来生成应用系统的正常业务基线(安全基线),并基于这个基线来识别异常攻击行为,这恐怕是发现隐蔽性极强的高级持续威胁(Advanced Persistent Threat,APT)攻击最为有效的方法了,而且还不影响应用系统的正常运行。
众所周知,现在大多数的安全防护设备都是基于已知特征来识别威胁的,最为典型的当属杀毒软件、入侵检测系统以及入侵防御系统等,它们对攻击的检测基本都是基于已知特征、已知样本、已知地址的,这是非常典型的黑名单机制,也是国内大多数企业构建安全防护体系时的通用做法。
上述这种基于黑名单机制的做法对于那些常见的、已知的攻击行为是够用的,但对于那些未知的、首次出现的攻击行为或者攻击特征却是无能为力的,例如APT攻击、零日漏洞攻击等。如果想有效解决这个问题,就不能完全基于特征和样本,而需要换个视角,从行为异常的角度进行检测和分析,这种检测和分析的基础是构建正常的行为基线,而构建这种行为基线最高效、最直接的方式就是梳理不同层面的白名单,也就是我们所说的白名单机制,当然,这也是构建白环境的基础。
在这里需要强调的是,白环境理念并不需要抛弃现有基于已知样本和规则的防护手段,两种方式可以同时存在,并且进行有效的融合。