浅析安全自动化编排平台Phantom

编排可将多个安全应用按照一定的逻辑配合,实现多种安全业务功能,自动化编排进而提高安全运营效率,减少企业各项成本。
本文详细地介绍了RSA2016创新沙盒产品Phantom,如何实现安全服务的自动化编排,展示简单的应用操作实例,最后分析如何实现用户友好的安全服务自动化平台。

作者: 江国龙,赵瑞,刘文懋

引言

近年来,随着信息技术以及移动互联网的发展,人们通过互联网交友、购物、学习和工作,催生了众多移动互联网和互联网应用,背后都需要强大的云计算系统和企业IT基础设施支撑。在一个大规模数据中心中,通常会部署上万甚至是超过十万台服务器,为了保护这些数据中心计算、存储等资源,会采用大量多种多样的安全产品和服务,比如防火墙、负载均衡、IDS、IPS等。

众所周知,传统数据中心中,网络的配置无疑是繁琐而易错的,随着数据中心规模的不断增大,网络以及安全服务数量也随之不断的增长,安全运维更是难上加难。不管多么先进的技术,最终面向的都是用户,对网络安全技术知之甚少的网络服务使用者来讲,如何能够以最简单的方式来实现网络安全服务,这是用户所希望实现的。从运维的角度来看,无论是网络、安全运维,还是其它IT基础设施的运维,都正在从劳动密集型向技术密集型转变,运维管理人员将会从重复、简单、枯燥的工作中解脱出来,去推动新的工作。因此网络、安全服务自动化运维是众多数据中心追求的解决方案。

面对越来越复杂的网络和安全场景,运维人员往往不能只借助一种手段解决问题,而是需要多个设备或者服务协调,来完成一系列的安全功能。因此如何有效的管理这些服务,就是编排(Orchestration)要做的事情。

编排,在网络管理领域可以理解为:以用户的需求为目的,将各种网络服务单元进行有序的组织和安排,使各种服务平衡协调的完成用户的某个要求。
本文针对Phantom平台,详细介绍了其如何实现自动化服务编排,这对于实现高效自动化运维有着重要的指导意义。本文的组织结构如下:第一章对自动化编排进行介绍;第二章分别对Phantom的各个组件进行分析;第三章对本文进行总结。

1.概述

Phantom是Phantom Cyber公司推出的一款专门进行安全自动化和服务编排的平台。它可以连接诸如Splunk、QRadar等安全数据分析工具,根据数据分析工具提供的大量安全事件数据,通过自动化的脚本,采取一系列的方法进行安全事件的响应。

 Phantom 整体结构图

Phantom 整体结构图

Phantom各组成模块

Phantom各组成模块

从Phantom的体系结构中看,平台自动化编排体现在Playbooks上,通过Playbooks脚本,将平台的其它各功能组件联系起来。Playbooks通过获取数据源的数据,然后根据一定策略选择合适的设备来执行特定的操作。

可以看出,通过一个脚本,就实现了所有服务的自动化的编排,这也正是其在RSA 2016创新沙盒上摘得桂冠的原因。在本文的后续章节中,将会对这几个主要的模块逐一的进行介绍,并且针对主要模块选取简单示例介绍如何使用。

2. 主要组件

2.1 数据源(Data Sources)

2.1.1 概述

数据源是Phantom平台进行安全自动化编排的基础,是进行规则、策略制定的量化依据。在整个平台架构中,数据源体现为可以为Phantom用户提供信息的一种资产(Asset)。这些数据信息的存储形式为容器(Containers),其中比较常见的容器类型是事件(Incidents)。目前Phantom支持包括Splunk、QRadar、CrowdStrike等在内的多种安全数据分析平台。用户的日志、告警、邮件等信息,可以实时上传到这些数据处理平台,Phantom会从这些平台获取数据,作为自动化编排依据。

2.1.2 Splunk数据源

下面本文以Splunk作为例子,简要介绍其如何获取源数据信息。

Splunk是一个针对IT数据的引擎软件,这些数据来源于组成IT基础架构设施的应用程序、服务器、网络设备等。Splunk是一个强大灵活的搜索与分析引擎,通过收集和索引各种来源的数据,可以实时的对基础架构设施中任何地方发生的问题进行调查分析、故障排查、监控告警以及可视化报表展现等。作为Phantom平台的数据源,主要利用Splunk强大的数据收集与检索功能。

Phantom从Splunk获取数据主要有两种方式:一种是Phantom被动的接受Splunk推送来的数据,我们可以把它叫做“PUSH”方法;一种是Phantom主动从Splunk拉取数据,我们可以称它为“PULL”方法。

在“PUSH”方法中,Splunk被当作是一种“输入资产(Ingestion Asset)”,它可以创建容器,并且将Artifacts填充进去。这些数据主要供用户、PLAYBOOK等模块来使用。Phantom提供一个Splunk的应用,这个应用像Splunk其它的应用一样,通过配置应用的数据模型,可以对数据进行选择、过滤解析等,得到符合某种条件的数据。然后这个Splunk的APP会主动和Phantom server连接,将数据推送给Phantom。

在“PULL”方法中,Phantom会创建一个secondary asset,它会主动的去Splunk拉取数据。和PUSH方法不同的是,这个“PULL”方法获取来的数据都是元数据(raw data),必须经过独立的解析才可以使用,通常这个步骤由PLAYBOOK去完成。另一点就是,通常通过PULL方法获取来的数据,既不会创建“Containers”也不会创建“Artifacts”。

这两种Asset在资产管理上的区别在于,PUSH方法Splunk资产的供应商(vendor)一般选择Generic,而PULL方法的供应商通常会选取Splunk。
之所以会选择这两种方法来进行Splunk资产的管理,主要是考虑到:一方面,通过PUSH方法可以定义Phantom能够使用的一种或者多种的数据模型的容器;另一方面,如果你的PLAYBOOK还需要一些其它信息的话,可以通过PULL方法去获取并且自己独立的进行解析使用。这样的数据源管理方法,使得平台在数据获取上更加的机动灵活。

2.1.3 Splunk示例

1. 安装Splunk

Splunk的安装程序可以在其官网免费下载到一个每天500M数据量、60天的试用版本。可以参照其安装教程进行安装,安装完毕后登陆。

2. 在Splunk安装Phantom APP

在Splunk里,各种功能模块、内容是以“应用”(APPS)的方式呈现的,一个“应用”就是一类内容、资源的集合。Splunk公司默认提供了很多APPS可供用户下载使用。这里我们使用Phantom提供的APP,该APP可以在Phantom官网下载,然后添加到Splunk。这样数据源的基本环境就搭好了。

3. Phantom配置资产 前文提到,数据源在Phantom中体现为一种资产,因此登录Phantom平台,进入资产标签,进行数据源资产的创建。由于Phantom官网有详细的教程,这里就只提一些注意事项,不再逐条的解释如何配置了。

这里Phantom采用PUSH的方式来获取数据,在ASSET TYPE中,产品供应商(Product Vendor)根据前文的描述,应该选择“Generic”,产品名称(Product Name)选择REST Data Source(因为二者之间是通过REST API进行通信)。在INGEST SETTINGS中,将该资产触发的事件选择为Incident,同时会产生REST API使用的认证token。

Phantom新建数据源资产配置

Phantom新建数据源资产配置

4. Splunk配置

Splunk的配置主要分为两个部分,一部分是基础配置,一部分是输出配置。
基础配置主要配置Splunk与Phantom之间通信的认证关系。将上步中在Phantom平台创建资产时生成的token填入这个配置,如图4所示。

Splunk配置Phantom认证

Splunk配置Phantom认证

接下来是输出配置,也是Splunk配置的核心内容。输出配置主要是设置数据模型以及模型映射。Splunk会根据预设的符合某些条件的数据模型,将数据定期的推送给Phantom平台。如图5所示。

用户可以通过Schedule选择数据实时推送还是定时推送,用户还可以设置数据的严重性和敏感性相关内容,最后用户设置如何对数据进行映射。

Splunk数据输出配置

Splunk数据输出配置

2.2 资产(Assets)

2.2.1 概述

Phantom的资产主要指一些物理的或者是虚拟的服务实例,它可以是一个强制使用的设备,比如防火墙,也可以是SMTP邮件服务器,或者是提供分析服务的VirusTotal。默认的,Phantom平台资产中应至少有一种SIEM作为数据源,比如Splunk。

在Phantom中,你可以创建什么样的资产,取决于你拥有什么样的APP。通常来讲,Phantom只有安装了特定的APP,才可以访问相对应的设备服务。其实这里的所提到的设备并不是创建一个真的设备或者服务,而是设备的一个配置实例,包括ip地址、名字、密码等通信必须的内容。这样相关的APP才可以通过网络访问这些实际的设备服务。

2.2.2 vSphere Server 资产

比如,Phantom中默认提供了VMware vSphere APP,那么我们可以在Phantom中创建一个VMware vSphere资产,这个APP将允许Phantom平台从vSphere主机获取信息并且采取一定的操作,比如,可以启动或者停止虚拟机、制作快照、下载内存快照来进行分析等。

在IT基础设施中,可能存在多个ESXi hosts,这些hosts可能集中在一个vCenter Server上,那么如果想要告诉Phantom一个指定的vSphere Server,就需要在Phantom中创建一个vSphere Asset,并且为其配置相应的ip地址、认证信息等内容,如果需要其它的vSphere Server,就需要再创建一个Asset,当需要对某个vSphere Server进行操作时,直接选取对应的Asset即可。

在Phantom平台中,默认只安装了很少的几个资产,其它需要使用的资产,需要用户自己手动去创建,并且进行相关的配置。

2.2.3 资产创建示例

在上文数据源创建的例子中已经介绍了资产的创建方式,这里将不再赘述。具体细节可以参考Phantom官方教程。本小节只介绍一些创建资产中可能遇到的问题。

由于不同的资产其对应的属性存在差异,因此有些资产在创建过程中,除了需要配置名称、供应商之类的信息外,还需要进行一些额外的配置。这些额外配置选项,会根据新建资产类型自动进行展现或者隐藏。比如像IBM的QRadar和上文提到的Splunk,除了基础的配置之外,还会有Asset Settings和Ingest Settings的配置。每个Asset的配置需求一般会不一样,这个由对应的APP来决定。一般情况下,大部分的资产都需要用户名、密码等认证信息,如图6所示。

资产配置

资产配置

像QRadar这种设备,它其实是一种SIEM,因此会有Ingest Settings这一配置选项。通过这一选项来配置获取数据的频率以及数据获取后将存放在何处,如图7。前文已经有所介绍,通常这种信息会存放在容器中,当前Phantom中默认有三种类型的容器,当然用户也可以根据自己的需求进行定制添加。

数据源Asset Ingest设置

数据源Asset Ingest设置

2.3 脚本(PlayBooks)

2.3.1 Playbooks概述

Phantom平台最有特色、最强大的组件无疑就是Playbooks。顾名思义,一个Playbook是一个“剧本”,“剧本”记录了安全工程师的工作流程。Playbooks使安全运维工作自动化,与人工相比,具有反映敏捷、判断精准和持续性高等优势。

从技术角度来看,Playbook基于 Python语言开发,通过官方的GitHub知识库更新。Phantom平台提供了一套强大的SDK,Playbook用较少的代码就可以实现复杂的编排场景。一般来说,Playbooks的输入是Containers,Phantom会按照“剧本”挖掘出Containers中关键数据,然后调用安全应用对数据进行分析。根据分析结果,Phantom调用Action执行应对措施。Playbooks和Phantom平台其它组件协同工作,实现安全操作的自动化和编排。图8给出了一个Playbook实现的编排场景,用于将数据中关键信息提取生成Incidents:

自动化生成Incident

自动化生成Incident

2.3.2 Playbooks获取

Playbooks有两种获取方式:一种是从官方的github下载;另一种是自己手动编写。
如何根据实际需求编写一个Playbook呢?Phantom为开发者提供了一个强大的IDE,用户只需图形拖拽就可以完成大部分代码编写。Visual Playbook Editor界面如图9所示:

Visual Playbook Editor

Visual Playbook Editor

Visual Playbook Editor界面大致分为左右两块面板:左边是一块空白区域,用于拖拽编辑编排逻辑;右边是Python代码,可以根据左侧编排逻辑自动填充代码,也可手动编写。初始时只有两行代码,用于导入Phantom和Json函数库:

Import phatom.rules as phantom
Import json

可拖拽的Actions包含了五个结构体,可以分为两类:一类是For each循环体,用于遍历所有Containers;另一类是用于执行Actions,可配置具体Action类型和相关资产信息。Phantom把Actions分为四大类,分别是:Investigate、Contain、Correct、Generic。Actions结构体如图10所示:

Actions结构体

Actions结构体

结构体之间支持嵌套,用于实现编排逻辑。例如Investigate嵌套到For each循环体中,实现对遍历的Containers采取Investigate操作。如果两个Action之间嵌套,那么外层的Action通过callback方式调用下一个Action,实现Action之间的联动。图11是笔者拖拽结构体实现的一个编排场景,用于实现对Containers中IP的定位和详细信息查询:

拖拽编辑playbook脚本

拖拽编辑playbook脚本

一些简单的场景用拖拽方式就可以实现,并不需要手动写代码。在比较复杂的编排场景下,虽然无法完全用拖拽方式自动化生成代码,但可以生成一个代码框架,自己手动编写细节实现即可。

2.3.3 Playbooks类别

在Playbooks浏览界面,可以看到Playbook大体分为两个类型:App Samples和Use Case Samples。App Samples并未实现具体的安全编排场景,主要是某个App的用法展示。Use Case Samples则是实现特定的编排场景,往往有多个Apps参与编排。

2.3.4 Playbooks执行

每个Playbook都有两种状态:Active、Safe Mode。如果一个Playbook的状态是Active,则每当Containers中产生新数据时,该Playbook自动被Phantom调用执行。如果一个Playbook的状态是Safe Mode,则这个Playbook只能执行只读操作。其中,写操作是指会对资源更改的操作,读操作不会造成资源改变。例如, “list vms”是一个读操作,“block ip”则是一个写操作。
此外,所有的Playbooks都可以手动执行。

2.4 操作(Actions)

Actions是Phantom对安全产品能力的高度抽象。Phantom定义了100多种不同的actions,对用户环境进行操作,例如地理定位IP、搜索文件、拦截URL、隔离设备等。图12是一些支持actions例子:

Actions样例

Actions样例

Phantom支持第三方安全设备和服务接入,具备灵活的扩展能力。许多安全产品提供Rest APIs、命令行接口或者其它管理接口,Phantom App可以通过这些接口执行actions从而控制你的环境。

2.5 应用(APPs)

2.5.1 概述

Phantom通过接入第三方安全设备或服务实现平台的扩展性。安全设备或服务接入是通过定制Phantom App实现的。Phantom Apps 基于Python语言开发,允许社区内的任何人分享数据信息来扩展平台的能力,也允许在App store中分享自定义的Apps。

2.5.2 App架构

Phantom的App是基于Python开发的。在Phantom的体系中,Apps相当于Phantom平台和安全服务或设备的桥梁。图13是App架构图:

App架构图

App架构图

对于一个App来说,它有左右两个边界。在左边界,App接收Phantom平台的action指令;在右边界,App把action指令转化为安全设备或服务的具体实现。App从设备或服务获取action的执行结果并提交给Phantom平台。

Phantom为App开发制定了一个模板。图14是一个App包含的组件:

App组件

App组件

init.py:文件定义了包的属性和方法,允许为空文件。
sampleapp.json:用于描述App的元数据。
sampleapp_connector.py:连接Phantom平台,包含关联资产对action的具体实现。
sampleapp_view.py:可选组件。Phantom是基于Django开发的,此文件为MVC架构中的view。Phantom可以动态的根据你的JSON元数据文件加载view。
sampleapp_view.html:可选组件template。Template定义了view的信息如何显示。

2.5.3 App获取与安装

App可以从Phantom官网下载。App的安装文件是rpm格式,下载到本地后,上传到Phantom平台即可完成安装。

3. 总结

本文从Phantom的组件介绍和脚本操作等方面,介绍了如何实现自动化的服务编排。无论是对于网络运维人员还是安全运维人员来说,Phantom在如何整合各种资源、提高运维效率这一点给我们展示了一个很好的实例。

此外,我们相信在网络技术快速发展的今天,利用新型网络技术(尤其是SDN和NFV),可以给我们带来更加便捷网络资源和流量管理,来实现网络和安全的自动化运维将不再遥不可及。

如果您需要了解更多内容,可以
加入QQ群:486207500
直接询问:010-68438880-8669

发表评论