随着越来越多的被盗数据被用于牟利,由此产生的数据破坏也在增多,这带来了大量的网络犯罪机会,NoSQL 和大数据系统的使用量也相应激增。尽管与关系系统相比,NoSQL 系统上的破坏相对较少,但我们预计随着更多宝贵的数据存储在这些新系统中,此类事故会越来越多。
对于已经熟悉 Guardium 的读者,大体了解它的架构和从何处安装 S-TAP®,就足以开始使用它了。如果您不熟悉 Guardium,本文可以帮助您开始使用它,但无法消除至少基本了解 Guardium 管理和配置的要求。
订阅 developerWorks Premium ,以便在我们的定制 Safari 在线图书馆中查阅 “使用 MongoDB 和 Node.js 执行 Web 开发” 和 “使用 MEAN 产品栈编写现代 Web 应用程序:Mongo、Express、AngularJS 和 Node.js”。
Apache Cassandra 属于 NoSQL 数据库系统类别;具体地讲,它是一种列式存储。它的架构不同于其他 NoSQL 系统,因为它不依赖于主从(比如 HBase)或分片架构(比如 MongoDB)。它采用一种 “环状” 架构,系统中的每个节点都可以与其他所有节点通信。该架构旨在提升性能,方便扩展和实现持续可用性。了解基本架构对了解如何部署 Guardium 监视代理很有帮助。
DataStax 是为 Cassandra 提供支持和额外的企业功能(比如增强的安全性和搜索)的公司。
本文的部分提供了一些很有帮助的参考资料,这些资料介绍了 Cassandra 的基本知识,以及 Apache Cassandra 与 DataStax 发行版之间的区别。
尽管底层存储模型是列式的,但 Cassandra 可以使用自己的查询语言 Cassandra Query Language (CQL) 来访问数据。您可以通过 3 种方式使用查询语言命令:shell (cqlsh)、一个称为 DevCenter 的图形化工具或各种驱动程序。
备注:有一个 Thrift API 仍然支持旧版应用程序。Guardium 还支持通过这个旧版 API 来访问监视。
表 1 是 Cassandra 结构与关系结构之间的对应关系。示例命令摘自 Cassandra Query Language 参考手册。
关系概念 | Cassandra | CQL 命令 | CQL 示例 |
---|---|---|---|
数据库 | 键空间 | CREATE KEYSPACE ALTER KEYSPACE | CREATE KEYSPACE Excelsior WITH REPLICATION = { 'class' :'SimpleStrategy', 'replication_factor' :3 }; |
表和物化视图 | 列族 | CREATE TABLE CREATE KEYSPACE | CREATE TABLE emp ( empID int, deptID int, first_name varchar, last_name varchar, PRIMARY KEY (empID, deptID)); CREATE MATERIALIZED VIEW cyclist_by_age AS SELECT age, birthday, name, country FROM cyclist_mv WHERE age IS NOT NULL AND cid IS NOT NULL PRIMARY KEY (age, cid); |
索引 | 索引 | CREATE INDEX | CREATE INDEX user_state ON myschema.users (state); |
列 | 列(也称为项集合) | INSERT INTO emp (empID, deptID, first_name, last_name) VALUES (104, 15, 'jane', 'smith'); |
订阅 developerWorks Premium ,以便查阅来自我们的定制 Safari 在线图书馆的 “通过 Hadoop 和 Solr 扩展大数据应用”。这本书介绍了 NoSQL、Cassandra、MongoDB 等。
随着 Cassandra 的不断成熟,它也在改进其身份验证和授权模型。因为 NoSQL 领域还很年轻,而且仍处于发展阶段,所以其安全机制也在不断快速演进,以便跟上时代需求。出于这个原因,通过研究 Cassandra 和 DataStax Enterprise 的最新文档来了解最新的信息就显得非常重要。
您可以在 Cassandra 内部设置用户(比如 CREATE USER、ALTER USER 等),从 2.2 版开始,您甚至可以使用基于角色的访问控制,比如 CREATE ROLE、ALTER ROLE 等。
对象(数据)的权限管理使用熟悉的 GRANT 和 REVOKE 语句来处理。默认情况下,Cassandra 已禁用身份验证。您可以设置密码验证。DataStax Enterprise 支持通过 Kerberos 和 LDAP 执行身份验证。
加密:DataStax Enterprise 支持在将数据写入磁盘时执行透明的数据加密,但这需要一个安全的本地文件系统。此外,如果您需要加密提交日志,则需要一种文件系统加密功能,比如 IBM Security Guardium Data Encryption 所提供的加密功能。
审计:这是 Guardium 带来巨大增值的一个领域。尽管 Cassandra 拥有一个一般性的日志工具(可用于故障排除和时间点恢复),但它要求企业投入大量工作来创建及时的审计报告。而且正如产品文档中所说,“提高日志水平可能在流量适中的集群上生成庞大的日志输出”。
DataStax Enterprise 提供了一个审计日志功能,必须在所有节点上启用它才能捕获所有想要捕获的事件。日志事件可写入文件系统(可能很快变得很大且难以分析)或 Cassandra 表中。
我们将在下一节中讨论以下内容:Guardium 可改进审计报告和传播,还能改进执行实时警报和近实时分析的能力。
如果您不熟悉 Guardium,本节会快速介绍 Guardium 的工作原理,以及它在补充或替代原生数据库安全审计控件方面所提供的价值。出于本文的目的,我们将重点介绍 Guardium Activity Monitoring。Guardium for Cassandra 中目前未提供数据库发现、数据分类和漏洞评估等功能。
如 图 1 所示,Guardium 使用轻量型的软件探针(称为 S-TAP )来监视数据活动,而不是依赖于日志。S-TAP 也不需要对 Cassandra 服务器或应用程序执行任何配置更改。Guardium 架构中的另一个主要组件是 收集器 ,它是一种防篡改的硬件、软件或虚拟设备。此架构已针对速度进行了优化,促进了职权分离。
为了保持非常低的数据库服务器上的处理器使用量,S-TAP 会直接在操作系统层面拦截消息,并将数据活动转发给收集器。根据您决定审计多少活动,集群上的处理器使用率应该不超过 2-4%。
收集器上的分析引擎(称为 嗅探器 )解析数据,并触发对策略规则定义的策略违规的警报。实时警报提供了可疑或异常事件的仅实时可视性。这些警报可在 Guardium 用户界面上看到,可通过电子邮件发送和/或直接与您的安全智能和事件管理系统相集成,比如 IBM QRadar®、Splunk 或其他类似系统。
经过审计的事件存储在收集器的防篡改存储库中,该存储库只能通过 Guardium 接口访问,而且无法删除。
为了支持各种不同的部署规模,Guardium 可使用一种连锁架构来水平和垂直扩展,该架构可由一个中央管理控制台来管理。企业负载平衡、更新和配置,以及整体系统健康等功能都可从 Central Manager 管理。
我们前面已经提到,Guardium 与操作系统内核集成来提供数据访问的深入、细粒度可视性。依赖于发生的访问的访问者、访问对象、位置、时间和方式,安全策略可执行许多操作;这些操作的一些例子包括将事件记录到其受保护的数据库中,将实时警报发送到安全信息和事件管理 (SIEM) 服务或软件,拦截访问,以及甚至编辑结果集数据。此外,同一个平台和安全策略可用于其他任何企业数据库,包括关系数据库和其他 NoSQL 系统,比如 MongoDB。
这些功能提供了依靠原生审计的巨大增值,包括:
了解如何指定它们。发生破坏时,快速检测和反应能力可能决定着遭受巨大损失还是轻微的不便。
您可以使用电子邮件或通过 SNMP 将警报发送给另一个监视系统。与 IBM QRadar 和 HP ArcSight 消息类型的内置集成,也可用于自动将警报条件从 syslog 转发到这些系统。也可以自定义要发送到其他系统(比如 Splunk)的警报消息。
证明合规性可能很耗时且很麻烦,因为这些工作通常需要一定量的定期评审和签署。Guardium 不仅允许您创建满足审计需求所需的报告,还将一个可靠的工作流功能集成到您的业务流程中,将所有签署和审核信息都保存为审计线索的一部分。在本文后面会看到更多相关信息。
Guardium 包含数百篇预先构建的报告,包括设计来为 SOX、HIPAA、PCI-DSS 和 Data Privacy 快速创建合规性报告的报告。请参见,获取有关使用加速器的 developerWorks 文章的链接。
Guardium 包含对数据库活动、错误和违规行为的快速文本搜索和浏览功能。您可以使用常见的搜索技术,包括方面浏览和文本搜索,结合使用它们来快速临时调查审计数据。图 3 中的示例展示了如何轻松地找到最近发出 DROP TABLE 命令的人,方法是浏览到动词方面中的 DROP TABLE,单击它将会过滤搜索结果,从而筛选出所有 DROP TABLE 事件。
除了搜索,还有其他分析和可视化技术可帮助检测和分析,包括:
本文将重点介绍安装和配置一个捕获 Cassandra 活动的收集器系统的基本知识。对于企业部署,您需要考虑需要多少收集器来处理预期的负载,需要使用分布式报告或聚合器设备来对收集的流量执行报告,这些流量可能分散在多个收集器上。
本文的部分包含一篇有关 Guardium 部署的红皮书的链接。如果您不熟悉 Guardium,强烈推荐您寻求经验丰富的 Guardium 服务或业务合作伙伴来帮助执行初始部署,帮助您开发初始安全策略。
开始之前,收集以下信息:
下载适用于您的操作系统的最新 S-TAP,检查内核兼容性矩阵,确保 K-TAP(内核探针)与您的操作系统内核级别相匹配,或者它可以采用弹性加载 (flex loading)。
内核兼容性矩阵可在 FixCentral 上找到。在下载页面中找到 K-TAP Bundle 节,单击 KTAP_List_of_Modules_<version> 链接,如图 4 所示。
有关弹性加载的更多信息,请参阅中的技术说明。
在流量开始流到 Guardium 收集器之前,确保连同收集器一起安装了默认的收集概要策略(请参见图 5 中的屏幕截图)。
此策略记录一个唯一连接的每个实例,每个实例包含一个 5 元组(包括客户端 IP、来源应用程序、数据库用户、服务器 IP 和服务名称),以避免在收集器上增加大量的流量。
备注:Cassandra 不使用服务名称,所以此值是硬编码到 Guardium 中的。
因为可以使用 Cassandra 中的任何节点来访问数据,所以您必须在所有节点上安装 S-TAP。使用 Guardium Installation Manager 是安装 S-TAP 的推荐方式,但也可以使用 shell 安装程序。
当 S-TAP 成功安装并在 S-TAP 控制面板中显示为绿色时,就可以为 Guardium 检查引擎配置针对您的环境的正确 Cassandra 端口,从而明确告诉 Guardium 监听何种流量。
在我们的示例中,我们希望 Guardium 监听 Thrift 消息(默认端口为 9160)和 Cassandra Query Language 流量(默认端口为 9042)。为此,您可以从设备中配置检查引擎,使用 UI 或从命令行接口使用 Guardium API 命令来配置。
要使用 UI,可导航到 Manage>Activity Monitoring>S-TAP Control ,单击与相应 S-TAP 主机对应的蓝色铅笔图标。展开 Add Inspection Engine 。图 6 展示了 S-TAP 主机的外观。
一种替代方案是使用一个 CLI 用户 ID 登录到 Guardium 设备,并运行 Guardium API create_stap_inspection_engine
,如清单 1 所示。
grdapi create_stap_inspection_engine client=0.0.0.0/0.0.0.0 protocol=Cassandra ktapDbPort=9160 portMax=9160 portMin=9160 stapHost <ip of Cassandra server where associated STAP is installed> grdapi create_stap_inspection_engine client=0.0.0.0/0.0.0.0 protocol=Cassandra ktapDbPort=9042 portMax=9042 portMin=9042 stapHost <ip of Cassandra server where associated STAP is installed>
图 7 中的屏幕截图显示了安全策略摘要,我们将使用它来演示如何实现一些目标,比如屏蔽返回的数据中的敏感数据。
重要:不要 “按原样” 使用此策略。在添加拦截和编辑等高级功能之前,最好从基本的监视功能开始。具体地讲,拦截可能影响性能,而且实现过程必须小心。
策略规则具有执行顺序,而且需要一些背景知识。“参考资料” 部分包含 Guardium developerWorks 社区上一页的链接,该页包含一些更详细介绍策略规则的 YouTube 视频的链接。
前面已经提到,我们推荐您练习浏览连接概要,并根据需要过滤出受信任的连接。我们还推荐您练习确定哪些表是 “敏感的”,并使用 Guardium 分组构建器将这些表放入合适的组中。此外,拥有用户组(比如管理员、DBA 或应用程序用户)也有好处,这样您可以基于访问数据的角色来创建策略规则。
策略由不同的规则组成:
在规则中使用过滤条件来确定何时应触发该规则,比如特定用户访问特定对象时。支持白名单和黑名单。
我们演示的策略将涵盖以下用例:
当无法在 S-TAP 上过滤出不感兴趣的项时,可使用此规则操作避免记录这些项。(使用 Ignore the S-TAP session 过滤出 S-TAP 上受信任的会话,这样做可以提高收集器的性能。)
在我们的例子中,我们希望能够更轻松关注报告中的相关结果。因此,我们过滤出对系统表的访问,因为 Cassandra 在每次查询时都会执行大量系统表检查。因为这些查询被附加到查询活动中,所以我们无法使用 Ignore the S-TAP Session 操作过滤掉这些项。我们使用了组构建器来创建一个名为 CassandraSystemObjects 的成员,并将成员 system%
添加到其中。您可以添加更多成员或添加您可以轻松过滤掉的特定系统对象。
备注:这个示例仅用于演示用途。 绝不 应将它用作过滤系统对象访问的推荐方法。作为替代方案,您可以继续记录系统访问,并在报告级别上过滤某些对象。
失败登录规则使您能够指定,在用户指定的时间段内发生多次失败登录时执行某项操作。规则非常简单:选择异常类型 LOGIN_FAILED 和重置计时器之前的尝试次数。下面的规则指定允许 5 分钟内出现 3 次失败登录。
图 10 中的屏幕截图演示了 Guardium 中的策略违规/事故管理报告中的累积失败:
PCI 等法规要求详细审计特权用户(比如 DBA 或系统管理员)的所有访问。您可以使用我们这里演示的白名单方法,该方法将数据库用户与您的特权用户组相对比。或者可以使用黑名单,它会对所有不是应用程序用户的用户开启详细监视。
我们的下一条规则是一条自然的后继规则。在此示例中,我们继续监视同一组特权用户,但添加了更多的条件:访问的对象(Cardholder 组中)和使用的命令。我们指定:如果触发此规则,则向我们的 SIEM 系统发送警报 (图 12)。我们还会将策略违规记录到 Guardium,以便展示策略违规/事故管理报告中的内容 (图 13)。
这是显示高严重性违规的策略违规/事故管理报告 ( Comply > Reports > Incident Management )。
如果您拥有 Guardium 的高级版,您可以考虑在某些情形下使用拦截功能。借助拦截(在 Guardium 中称为 S-GATE),会专门监视一些会话。此过程称为 “附加”。然后会针对策略规则检查该会话中的用户操作,查看它们是否在尝试访问您在该规则中制定的一些表。如果是,则会触发该规则并执行操作 S-GATE Terminate,还会在它们的请求到达数据库之前切断它们的连接。
由于需要针对策略规则来检查附加会话中的每个命令,所以您必须注意附加了哪些会话,否则会意外地影响应用程序的性能。请仅使用拦截来防御后门访问,或者预防拥有提升的凭证的用户访问敏感数据。
我们有两条规则来支持拦截:第一条规则附加到所有特权用户会话。第二条规则拦截特权用户对客户表的所有访问。
最后,我们看看最后一条规则 — 挤出 规则,我们希望通过该规则防止特权用户查看隐私数据。挤出规则要求您更改检查引擎的 “主” 配置,以启用对返回数据的检查。
导航到 Manage > Activity Monitoring > Inspection Engines 并单击 Inspect Returned Data ,如下图所示。然后单击 Restart Inspection Engines 。
现在您已准备好向您的策略中添加新的挤出规则了。编辑您的策略并添加另一个挤出规则。添加将触发结果集编辑的条件,比如特定用户和客户端 IP。(请注意,挤出规则无法按对象来指定。Guardium 会在针对指定连接的所有结果中寻找模式。)
接下来,您必须指定 Guardium 将用来检查匹配模式的结果集的正则表达式。Guardium 包含一些预先构建的正则表达式,您可以创建自己的正则表达式或修改现有的正则表达式来匹配您尝试编辑的对象。
要访问正则表达式构建器,可单击规则中的 Data pattern 字段旁边的 RE 图标。
选择一个内置标识符,或者使用内置测试程序创建和测试您自己的标识符,如图 17 所示。
保存并重新安装您的策略。
图 18 是将该策略规则应用于美国社会安全号码时的编辑结果的示例。
一项常见的 Guardium 功能是创建审计流程。您可以安排一个或多个任务(比如创建一个特定报告)按时间表运行,并按正确的工作流顺序将结果发送给一组合适的审核人员。
在本例中,我们希望为所有数据库 GRANT 语句创建每日报告。我们需要 PCI 审核人员获知该报告,然后需要审计主管对它进行签署。
为了支持此用例,我们的做法是克隆一个与我们想要的报告高度匹配的内置报告。在我们的例子中,我们选择了名为 Execution of Grant Commands 的报告。
提示:要找到可能的候选报告,可以导航到 My Dashboards 、 Create a new Dashboard 。单击 Add a new report 。在过滤器栏中,键入 “grant”,您会看到多个可能的候选报告。
要修改该报告,可以将它添加到您的仪表板,然后单击报告左上部分中的蓝色铅笔图标,这会调出对该报告的查询。在查询构建器中,单击 Clone 按钮,此刻您可以在查询构建器的上部分中为报告查询提供一个新名称。您可以在报告中添加或删除列(字段),并修改搜索条件。在我们的例子中,我们删除来源程序名称和服务名称,并添加 Full SQL 字段。
我们的报告现在类似于图 19 中的屏幕截图:
现在我们需要将此报告添加到审计流程中,制定它的时间表,并将它发送给合适的审核人员。
要创建新审计流程,可以导航到 Comply > Tools and Views > Audit Process Builder 。构建器将引导您完成该流程。下图显示了我们的审计流程 Daily Reports,其中使用 Privileges Daily Report 作为一个每天运行一次的任务。审核人员是具有 pci 和 audit 角色的用户
可通过电子邮件将报告发送给用户,但在我们的例子中,我们的审计用户将直接登录到 Guardium 来查看他们的活动。(您可以注意到,很容易针对不同角色来自定义 UI 和权限。请参见,获取一个介绍如何自定义的视频的链接。)
假设我们的 PCI 用户在审核该报告,然后将它添加到我们的审计主管 AuditMan 的待办事项列表中,该主管将在仪表板中的待办事项列表图标中看到一条提醒,如图 21 所示。
AuditMan 将查看报告结果,然后可发表评论、上报或签署。这些评论和状态将和审计流程结果存储在一起,可以将它们存档,并在您的组织需要为内部或外部审计人员检索它们时按需进行检索。
我们希望您会发现本文可以帮助您配置和使用 IBM Security Guardium,从而帮助保护 Cassandra 中的敏感数据免遭黑客攻击和内部威胁,并帮助您满足合规性需求。
下表重点介绍了用于 Cassandra 的 Guardium 平台中的特性和功能。
功能 | Guardium 产品 |
---|---|
Granular 监视和审计 | Data Activity Monitor |
实时和阈值警报 | Data Activity Monitor |
高级分析(异常值、威胁检测) | Data Activity Monitor |
搜索和浏览审计数据 | Data Activity Monitor |
基于 REST 的可靠的 API | Data Activity Monitor |
动态数据编辑 | Data Activity Monitor |
拦截 | Data Activity Monitor (Advanced) |
文件级数据加密 | Data Encryption |
文件活动监视和警报,比如数据库配置文件或数据文件 | Activity Monitor for Files |
拦截对文件的访问 | Activity Monitor for Files (Advanced) |
连接探查是一种总体了解数据库访问的方便方式,可帮助您确定是否有可被视为受信任并在 S-TAP 上过滤掉的连接,或者是否有其他可疑连接。连接探查列表报告显示每个唯一的连接,并提供在指定的报告期间内发起该连接的次数。下面的报告显示,本文中使用的 Cassandra 连接被使用了 36 次。
从此报告中,您可以调用 Guardium API 来向一些组(比如可疑连接或受信任连接)添加连接,以便在您的安全策略规则中进一步使用它们。
要从用户界面调用该 API:
如果您不想再在连接探查报告中看到此连接,可选择默认组 Connection Profile List 。