注意:在2013年10月,本文已更新以反映推荐的新S-TAP配置。
本系列文章的第一部分介绍了MongoDB和InfoSphere Guardium。 它提供了一些背景知识,说明InfoSphere Guardium可以彻底监视和审计数据活动,从而可以帮助您在更多应用程序中使用MongoDB感到安全。 您了解了该解决方案的体系结构以及有关使用MongoDB的本机功能保护MongoDB的一些建议,以及InfoSphere Guardium带来的好处。
第二篇文章详细介绍了两个主要主题:
- 在MongoDB节点上配置S-TAP
- 为各种典型用例创建安全策略
第3部分将深入研究一些其他功能,例如阻止用户,如何编写报告和访问审核数据以及如何自动化合规性审查。
安装与配置
本部分描述了启动和运行并将活动从MongoDB开始记录到InfoSphere Guardium收集器中所需的步骤。
- 在MongoDB节点上安装S-TAP代理。
- 使用正确的MongoDB端口配置S-TAP检查引擎。 重要说明:如果在客户端和服务器之间使用SSL加密,则还必须按照本技术说明中的说明配置Guardium A-TAP 。
- 验证您是否正在查看MongoDB流量。
在你开始之前
本文假定您已经在网络上安装并配置了InfoSphere Guardium收集器。 用于MongoDB的InfoSphere Guardium活动监视需要V9 GPU 50或更高版本。 如果您是InfoSphere Guardium的客户并且有权使用V9.0,则可以先从Passport Advantage下载Guardium,然后再安装GPU(可从Fix Central获得)。
支持的MongoDB版本是2.0、2.2和2.4。 从数据安全性的角度来看,建议您迁移到MongoDB 2.4或更高版本,它提供了简介中介绍的安全性增强功能。 (Kerberos需要企业版。)
记下以下信息,您将需要这些信息来完成解决方案的安装和配置:
- InfoSphere Guardium收集器的IP地址以及用于与其连接的端口(16016)
- 分片服务器上mongod使用的端口(默认为27018)和IP地址
- 路由服务器使用的端口(mongos)(默认为27017)和IP地址
在MongoDB节点上安装S-TAP代理
如图1所示,我们建议在mongod碎片以及路由服务器上安装S-TAP,以监视mongod碎片上可能发生的任何管理员活动。
图1. S-TAPS配置为侦听MongoDB端口
S-TAP是特定于操作系统的,因此您需要为每个适当的节点安装Linux®S-TAP。 有两种不同的方法可以做到这一点:
- 使用Guardium安装管理器(GIM)。 使用GIM,您实际上是在与S-TAP一起安装GIM代理。 通过使用GIM,可以从Web控制台控制S-TAP升级和将来的安装,而无需再次访问服务器。 这是大多数企业使用的,因为管理和更新很简单。 有关GIM的更多信息,请参阅InfoSphere Guardium信息中心。 请参阅相关信息中的链接。
- 使用从Fix Central下载的S-TAP Shell安装程序。 可以非交互方式完成此操作,这使您可以使用同一命令将其安装在许多节点上。
此过程的详细信息不在本文讨论的范围之内,但是请参阅InfoSphere Guardium信息中心以获取更多信息。
如果正确配置了S-TAP以连接到InfoSphere Guardium收集器,那么管理控制台中的“系统视图”将显示绿色,如图2所示。
图2.系统视图显示S-TAP正在与收集器通信
配置检查引擎
接下来,您需要为每个S-TAP配置检查引擎。 检查引擎是您如何向S-TAP定义要用于监视的协议(MongoDB)和要监视的端口。 默认情况下, 如图1所示,mongos的端口为27017,mongod(碎片)的端口为27018。您的端口可能有所不同。
要配置检查引擎,请以管理员身份登录到InfoSphere Guardium,然后导航到管理控制台。 在左侧菜单窗格中,选择“ 本地水龙头”。 S-TAP控制 。 找到Mongos服务器的S-TAP,单击“ 修改” ,然后选择“ 添加检查”引擎下拉列表。
输入所需的端口信息。 您的mongos检查引擎配置应如图3所示。
图3. Mongos(查询路由器服务器)检查引擎配置
您可能知道,在分片群集中,大多数查询活动是通过mongos路由的,然后再路由到分片上的mongods。 如果您监视所有节点上的所有流量,那么Guardium收集器将从mongos和该命令路由到的所有分片上接收相同的消息。 为了避免这种“重复计算”,并且仍然能够捕获来自mongos上本地连接的流量,请在mongos上配置STAP以仅捕获本地流量(图3),并在shard上配置STAP以捕获所有流量(图4)。
图4. Mongod(碎片)检查引擎配置
使用API配置检查引擎
如果您有许多节点,则需要使用Guardium API将检查引擎添加到指定的S-TAP。 只能从活动的Guardium主机修改该S-TAP的S-TAP配置,并且只能在S-TAP联机时进行修改(在“系统概述”中显示为绿色)。
对于蒙古人:
grdapi create_stap_inspection_engine client=<ip address of mongos server>/255.255.255.255 protocol=MongoDB ktapDbPort=27017 portMax=27017 portMin=27017 stapHost=<ip of Mongos server where associated STAP is installed>
对于mongod:
grdapi create_stap_inspection_engine protocol=MongoDB ktapDbPort=27018 portMax=27018 portMin=27018 stapHost=<ip of mongod server where STAP is installed>
验证是否捕获了流量
有几种方法可以确定流量是否正在发送到Guardium收集器。 经验丰富的Guardium用户可以确保安装了可捕获所有流量并查看报告的策略。
- 如果您以用户身份登录,则在“视图”选项卡上,将看到名为“每个类型的数据库数量”的条形图。 您可以双击该报告并向下钻取以查看是否有活动。
图5.报告深化
- 如果您是在新安装的Guardium 9.0.0.50上安装或升级并安装了名为“默认-忽略未知连接的数据活动”的新默认策略,则不会看到详细的活动。 相反,您需要转到“连接配置文件列表”报告,该报告将仅显示任何未知连接(包括来自MongoDB的连接)的高级会话信息,这些信息此时都应该是未知的。 作为用户,您将在DB Activities下的View选项卡上找到此报告,如图6所示。
图6.连接配置文件列表
作为管理员,您将在“每日监视器”选项卡上找到此报告。
该报告看起来类似于图7。它包括数据库用户名,客户端IP以及标识连接的整个连接信息“元组”,例如客户端IP,源应用程序,数据库用户名,服务器IP和服务名。 。
图7.连接配置文件列表
如果确定策略配置正确,并且仍然看不到流量,请确保您具有正确的报告日期和时间范围。 如果这不是问题,则您的S-TAP或检查引擎中可能有一些错误的配置,例如错误的端口号。
创建要在策略和报告中使用的组
一个重要的计划活动和生产力增强器是创建小组。 例如,您可以创建一组管理员(特权)用户,一组敏感数据对象以及某些命令组,例如分配用户和特权的命令,以及几乎所有其他内容。 在本文中,我们将研究一些监视用例以及如何创建策略规则来处理这些用例。 几乎所有这些规则都需要使用组。 表1总结了我们将要创建的规则以及每个规则中使用的组。
表1.用于创建样本策略规则的规则和组
规则顺序 | 规则说明 | 规则中使用的组 |
---|---|---|
1个 | 在3分钟内提醒每个数据库每个用户的登录失败次数过多 | 不需要。 请参阅有关过多身份验证失败的实时警报 。 |
2 | 忽略功能用户ID的详细活动 | 在策略规则编辑器中为ClientIP / Src App./DB用户/服务器IP / Svc.Name字段使用“元组”组构建器。 有关详细信息,请参见忽略功能用户的活动 。 |
3 | SkipMongoDB内部命令 | MongoDBSkipCommands(预填充的组,您可以根据观察到的流量根据需要添加更多组)。 有关详细信息,请参见过滤噪声命令 。 |
4 | 记录管理员用户活动的完整详细信息 | 管理员用户-创建您自己的或修改现有的“管理员用户”组。 在本文中,我们创建了自己的。 请参阅特权用户的详细监视 。 |
5 | 在特权用户访问敏感数据时发出警报。 | 管理员用户 MongoDB敏感对象–创建自己的对象 可选:添加一组要在其上发出警报的特定命令。 我们创建了一个名为MongoDB WatchCommands See 实时警报的特权用户访问敏感数据时 。 |
6 | 对MongoDB访问控制命令的警报 | 无需小组。 记录对system.users集合的访问。 请参阅有关数据控制命令的实时警报 。 |
7 | 记录更改违反日志策略 | MongoDB更改命令-创建自己的 可选:添加一组正在生产或即将生产的对象(集合),对于这些对象(集合)的更改或删除集合可能会影响应用程序。 请参阅日志策略违规以获取可能影响应用程序的集合更改 。 |
8 | 读取的敏感文件数量过多 | MongoDB敏感对象–创建自己的对象 请参阅实时警报:对敏感数据的读取访问超出阈值 。 |
在本系列文章的第3部分中,我们将介绍一个附加的高级功能,您可以在其中使用策略规则来实时阻止访问。 此功能确实需要高级活动监视的许可证。
要创建组,请访问“组构建器”。 如果您以管理员身份登录,请单击“ 工具”选项卡,然后从左侧菜单窗格中选择“ 配置和配置”。 控制 &gt; 集团建设者 。 我们的策略规则示例之一描述了Group Builder界面的更多详细信息。
配置安全策略
基于规则的安全策略是InfoSphere Guardium工作方式的核心。 通过这些规则,您可以为InfoSphere Guardium指定要记录的流量,要发出警报的条件以及要阻止的连接。
新安装的InfoSphere Guardium 9.0.0.50将包含一个默认策略,该策略将忽略所有流量。 当激活S-TAP并开始监视数据库时,此默认值有助于防止网络过载。
本文无法涵盖所有不同类型的策略规则及其行为。 相反,我们选择做的是选择一些常见的监视用例,并说明如何为这些用例配置策略规则。 我们将在本文的下一部分中介绍这些用例。
现在,让我们创建一个可用于开始添加规则的新策略。
- 单击“ 工具”选项卡,然后从左侧菜单窗格中选择“ 配置和配置”。 控制 &gt; 政策制定者 。
- 在“策略查找器”中,单击“ 新建” 。
图8.创建一个新策略
- 提供说明,然后单击“ 应用” 。
图9.对策略进行描述
可选 :单击角色以关联哪些角色可以使用此新策略。 例如,如果您选择管理员,则具有管理员角色的任何人都可以在系统中使用此策略。
- 单击返回 。
现在,您可以通过添加所需的规则来编辑策略。 在下一节中,我们将描述一些“典型”规则。 仅当准备好验证新规则或一组规则的行为时,才应安装此新策略。
监控用例
在本节中,我们将包含一些其他策略规则,这些规则涵盖了可能适用于您组织或可能不适合您组织的其他用例,但是这些用法使您对如何开始有了一些了解。
如果您以前从未使用过InfoSphere Guardium,那么一个关键概念就是要了解一个策略可以包含任意数量的规则。 每个规则都有一个描述,标准(针对监视的活动进行评估)以及在触发规则时发生的操作。
规则分为三种:
- 访问 :用于数据库客户端和服务器之间的交互。
- 异常 :用于数据库服务器返回给客户端的任何异常。 请注意,如果您对MongoDB连接使用写入关注度= 0或-1(不安全),则将无法记录和报告任何插入,更新或删除(删除)所返回的错误情况。
- 挤出 :应用于返回的数据集。 这是一项高级功能,我们不在本文中讨论。
过多的身份验证失败的实时警报
防范可能通过算法生成密码的黑客的常见要求是,在会话中失败尝试次数超过您定义的阈值(例如3分钟内超过5次尝试)时发出警报。
对于此规则,您将定义一个例外规则。
- 从“策略查找器”中选择新策略,然后单击“ 编辑规则” 。
图10.编辑新策略的规则
- 在“策略规则”页面的底部,单击“ 添加例外规则”。 。
- 填写策略标准,以从Excpt中的下拉菜单中指定LOGIN_FAILED。 类型字段。 包括最小计数(在这种情况下为5)和重置间隔(在这种情况下为3分钟)。
图11.指定触发登录失败规则的条件
- 在页面底部,点击添加操作 ,然后从下拉菜单中选择每次警报一次 。 当某人在3分钟内未能成功通过5次以上的身份验证时,此操作将为每个会话生成一个警报。
图12.每个会话选择一次
- 选择通知类型。 在本例中,我们选择了SYSLOG和默认的消息模板。 单击添加 ,然后单击应用 。
图13.选择通知类型
警报示例:图14显示了以管理员身份登录时“事件管理”选项卡上警报的示例。
图14.登录失败的警报(部分输出)
忽略功能用户或连接的活动
一些组织具有定期授权的工作,这些工作可以在晚上或在指定的批处理窗口中进行批处理更新或加载。 这些应用程序通常经过仔细审查,并在功能用户ID下运行。 为了避免用与审核无关的活动来充斥InfoSphere Guardium收集器,某些组织将使用称为“忽略S-TAP会话”的访问规则操作。
请注意,会话开始和结束信息仍然会被记录(即时间戳,客户端IP,服务器IP,用户名等)。 该规则仅意味着详细的命令活动将被忽略。
建议:您可以创建一组功能用户并忽略这些用户的活动,但是,如果要减少丢失可疑活动的可能性,可以使用连接信息来指定规则。 例如,您可能希望忽略来自客户端IP 1.22.222.222的功能用户FUNC1234的活动,但是,如果该用户ID正在从任何其他IP访问系统,则您要记录该活动。
因此,我们将创建一个名为“ Functional MongoDB User Connections”的组,并将其用于我们的策略规则中。 通过使用“ 连接配置文件列表”报告,我们展示了手动填充组和自动填充组的方法。
该策略中的访问规则字段的名称适当地是客户端IP / SrcApp / DB用户/服务器IP / Svc.Name。 这个具有多个组件的特定字段在Guardium中称为“元组”。
您可以将通配符用于该连接信息的任何部分。 让我们看看它是如何工作的。
- 从策略查找器中选择新策略,然后点击编辑规则 。
- 在“策略规则”页面的底部,点击添加访问规则 。
图15.添加访问规则
- 为您的新规则命名,然后单击tuple字段的组构建器图标(客户端IP / SrcApp / DB用户/服务器IP / Svc.Name),如图16所示。
图16.单击组构建器以获取策略规则的连接元组字段
- 填写元组每个组成部分的属性。 您可以使用通配符指示一切符合条件。 在这种情况下,我们为功能用户ID命名了一个约定,因此我们正在使用它。 此外,我们知道这些用户ID所做的工作始终来自特定的客户端IP,因此我们也将其添加进来。
图17.添加一个元组作为组成员
- 填写一个成员的属性后,单击“ 添加” 。 该组应如图18所示。
图18.元组已添加到组中
- 完成添加成员后,点击返回 。
- 从策略规则的元组字段中选择此组。
- 单击添加操作,然后从下拉菜单中选择IGNORE S-TAP SESSION 。 点击应用 。 现在,该规则如图19所示。
图19.忽略功能用户(可信)连接的S-TAP会话
- 点击保存 。
提示:自动化填充“功能用户连接”组的过程
如果您的MongoDB流量已经受到监视,则可以使用内置的“连接配置文件列表”报告自动执行此过程。 如果您以管理员身份登录,请转到“每日监视器”选项卡,然后从左侧菜单窗格中单击“ 连接配置文件列表 ”。
您将看到一个类似于图20的报告。
图20.示例连接配置文件列表
在报告底部,点击“ 调用”图标 (
图21.示例连接配置文件列表
过滤掉噪音命令
此规则将过滤掉MongoDB内部发出的一些“噪音”命令,例如运行状况检查和服务器之间的通信。 它使用一个称为MongoDB跳过命令的内置组。
- 从“策略查找器”中选择策略,然后单击“ 编辑规则” 。
- 在“策略规则”页面的底部,点击添加访问规则 。
- 在策略规则的标为Command的部分中,从组下拉菜单中选择MongoDB Skip Commands组,如图22所示。
图22.从Group下拉列表中选择MongoDB Skip Commands
- 取消选中续。 到下一个规则框(如果尚未打开)。 (这节省了处理,因为该组中的任何命令都不会发生进一步的动作。)
- 在策略规则的底部,选择“ 跳过日志记录”作为操作,然后单击“ 应用” 。
- 保存规则。
详细监视特权用户
在2.4中,MongoDB支持许多新角色,其作用范围可以大致分为服务器级角色和数据库级角色。 在这两种情况下,都有一些角色专注于用户管理,集群管理和应用程序访问。
由于这些角色中的某些角色基本上等同于超级用户,因此确保仔细分配和监视这些角色非常重要。
一些组织要求对管理(特权)用户的任何活动进行详细监视。 为此的策略规则操作是LOG FULL DETAILS。 每当需要使用LOG FULL DETAILS时,您将捕获每个操作的确切时间戳和完整详细信息。 请确保您已适当调整内部InfoSphere Guardium存储库的大小和设备上的缓冲区大小来处理此工作负载,尤其是在特权用户正在读取或编写许多文档的情况下。
先决条件:如上所述,创建一组MongoDB管理员用户(包括您认为“特权”的任何人)。
访问您的MongoDB策略,然后单击添加访问规则 。
添加描述,并将您的管理员用户组添加到规则中的DB User字段中,如图23所示。
图23.针对DB用户条件的策略规则摘要
因为我们将在某些管理员用户活动中添加一条警报作为下一条规则,所以请确保选中“ 继续到下一条规则”复选框,并选择操作LOG FULL DETAILS ,如图24所示。
图24.继续执行下一个规则可确保Guardium将处理下一个规则,即使该规则被触发
如果要测试策略规则,则必须安装它。 转到工具 &gt; 政策制定者 &gt; 安装并覆盖 。
特权用户访问敏感数据时的实时警报
警报是获取有关可疑或不合规活动的近实时警报的绝佳方法。 警报将写入UI的“事件管理”选项卡(其他违反策略的情况),但是也可以发送到电子邮件或写入Syslog。 如果写入Syslog,则可以将警报转发到安全情报和事件管理系统,例如IBM QRadar或HP Arcsight,以便您的安全团队可以适当地进行处理和调查。
先决条件 :此策略规则取决于两个组的存在,我们分别将其命名为“ MongoDBAdmins”和“ MongoDB Sensitive对象”。 如果要将警报限制为某些命令,则还可以添加一个包含特定命令(例如find和CopyCollection)的组。 我们将创建并使用此可选组,我们将其称为“ MongoDB WatchCommands”。 它包含一些我们要注意的命令,例如查找,更新,插入,删除,cloneCollection和mapreduce。
图25.敏感对象组。 对于MongoDB,集合是一个对象
图26.与敏感数据一起使用时,我们要监视的一组特定命令
要创建策略规则,请从“策略查找器”中选择策略,单击“ 编辑规则” ,然后单击“ 添加访问规则” 。
我们的样子如图27所示。
图27.当特权用户使用特定命令访问敏感数据时,此策略将发出警报
要测试新规则,请确保重新安装该策略。
图28显示了警报的外观。
图28.当特权用户使用禁止的命令之一访问敏感数据时,警报将触发(警报的摘录)
数据控制命令实时警报
一个普遍的要求是监视任何授予用户访问权限和特权的命令。 在MongoDB中,管理员可以创建和添加用户,在MongoDB 2.4中,可以为用户分配其他角色。 请参阅相关信息的链接,有关MongoDB的安全性和角色的详细信息。
凭据和用户特权信息存储在收集system.users中。
因此,例如,假设有人创建了一个新用户,如下所示: db.addUser({user:"sundari",pwd:"guardium",roles:["readWrite"]})
。
如图29中的报告所示,InfoSphere Guardium会将此活动记录为插入到collection system.users上。 该活动将具有两个对象:新用户的名称和system.users集合。
图29.审计报告的摘录,显示对system.users集合的访问
对于我们的策略规则,我们可能希望轻松查看system.users集合上的任何活动。 为此,您可以在策略中添加新的访问规则,以记录对system.users集合的访问。 图30是我们的策略规则,在该规则中,我们仅将system.users添加为对象,将Only Log添加为操作,这也将其添加到UI的Incident Management选项卡。
图30.用于记录对system.user的更改的策略规则,以便它们在事件管理选项卡上可见
图31显示了事件的部分输出。
图31.管理员已将Sundari添加为用户,它显示在Guardium UI的事件管理选项卡上
注意:登录到事件管理有助于获得事件的实时记录。 但是,如果这是一项需要定期检查的活动,则可能要创建此活动的报告并将其发送给审阅者。
记录违反政策的可能影响应用程序的集合更改
在某些组织中,管理员和应用程序所有者可能希望记录数据库中的更改,这些更改可能会影响应用程序逻辑或性能,例如删除或重命名集合,删除索引或数据库。 您可以创建一个包含要跟踪的命令的组。 请注意,辅助方法可能会以不同的方式跨越导线。 我们要跟踪的命令包括:
-
deleteIndexes
-
drop
(捕捉掉落的收藏) -
dropDatabase
-
renameCollection
如果要避免对任何可能产生大量丢弃和重命名的测试或QA活动触发此规则,则可能还需要添加一组“冻结”对象。
图32.我们要记录的命令组
然后,您可以添加包括该组的访问策略规则,并选择触发该规则时要执行的操作。 在我们的情况下,我们正在记录违反策略的情况,但未生成警报。
图33.“事件管理”选项卡上的change命令出现的摘录
实时警报:对敏感数据的读取访问超出阈值
许多组织禁止其员工(和黑客)检索过多的潜在敏感数据,并希望在发生这种情况时得到警告,以便他们可以Swift进行调查并确定是否发生了严重的违规行为。
一种方法是在MongoDB策略的访问规则中基于“受影响的记录”创建阈值。
先决条件:
- 创建一组要在其上发出警报的敏感数据对象。
- 确保您的系统配置为所有检查引擎启用了“受影响的日志记录” 。 要在9.5中执行此操作,请转到管理控制台标签,然后选择配置 &gt; 检查引擎并选中相应的复选框。 在V10中,转到管理&gt; 活动监控&gt; 检查引擎 ,如图34所示。
图34.配置Guardium以报告已读取的文档数
图35显示了我们创建的策略规则,该规则将在任何数据库用户在敏感数据对象上读取的记录数大于200时发出警报。请确保在DB User字段中添加句点(点)以计算受影响的记录数每个数据库用户,而不是所有数据库用户。
图35.过多查找警报规则定义
注意:每当特定用户为此会话在组中所有集合中累计访问200多个文档时,此规则将生成警报。 如果要为每个集合设置特定的限制,请为每个集合使用不同的规则。
图36中的警报显示,一个身份不明的用户已经从信用卡集中下载了200多个文档。
图36.过多的发现警报
摘要和下一步
在由三部分组成的文章系列的第二部分中,我们提供了有关如何配置解决方案的一些详细信息,包括如何为查询路由器和分片配置特定的检查引擎。 我们提供了一些有关如何验证S-TAP是否正在捕获MongoDB流量并将其发送到收集器的建议。 最后,我们提供了一些示例策略规则,您可以考虑将其用于自己的环境中,具体取决于组织中的安全性和法规要求。
在第3部分中,我们将介绍高级功能,阻止以及报告,审计浏览以及如何自动签署和查看审计报告。
翻译自: https://www.ibm.com/developerworks/data/library/techarticle/dm-1306mongodb2/index.html