使用Guardium离群值检测来检测隐藏的威胁

编者注:有关V10.1.2增强功能请参考文章“新的和增强的Guardium离群值检测”

过多的信息

一家大型零售商臭名昭著的2013年数据泄露事件表明,其监控软件发出的安全警报通常被忽略,或者至少被认为不值得进一步调查。 这不足为奇。 安全分析人员遭到误报,没有任何相对风险的迹象,因此无法对分析进行优先排序。

攻击者进入网络内部后,更糟糕的是,他们通常能够窃取其他凭据并获得对组织数据库服务器中驻留的“皇冠上的宝石”的不受限制的访问权限。 然后,攻击者可以花费自己的时间,并在很长一段时间内执行此操作,而不会被发现。 同样,在应用程序特权下发生SQL注入攻击也可能能够在正常状态下伪装访问敏感数据。

本文介绍了一种通过增强智能来扩展传统数据库监视的方法,以帮助您了解基于行为相对变化的风险。

异常值如何提供帮助:方案

例如,如果观察到乔DBA所访问的表比过去多得多,则可能是随着时间的推移他正在缓慢下载少量数据。 如果应用程序产生SQL错误数量超过过去,则可能正在发生SQL注入攻击。

考虑一个有效的银行转账交易,该交易可以转换为数十或数百个SQL语句,以确保进行正确的验证和授权,获取帐号,计算余额明细等。 攻击者或恶意内部人员极有可能会绕过“正常”方式访问数据。 通过绕过这数百条SQL语句,可以将攻击者标记为异常,即“异常值”。

心怀不满的DBA决定将整个联系人列表提取为CSV文件或他们可以随身携带的其他格式,或者将所有敏感数据转储到数据库中。 离群值检测算法可以检测到对该特定源的访问来自不应从操作数据中提取的DBA。 随着用户绕过访问控制机制并尝试学习所需的结构和特权,异常(错误)也可能会增加。 在时间窗口内通过下载创建的卷也可能是例外。 这些事件中的任何一个或全部都可能触发异常值指示。

DBA尝试将一些错误代码放入存储过程中,这些代码在消失后将证明需要的代码数量“增加”。 该算法可以识别出异常数量的错误,因为不应假定DBA访问存储过程对象。 它还可以检测是否临时授予了DBA特权以入侵存储过程。

离群值检测如何工作

IBM Guardium数据活动监视包括先进的机器学习算法,可帮助及早发现操作过程中可能发生的攻击。 该算法自动建模用户活动的正常模式,而无需任何监督。 也就是说,它主要基于无监督学习技术。 根据行为对用户进行聚类可以捕获真正有效的组,这与依赖于预定义组的基于规则的安全系统不同。

该过程不仅检查用户活动以查看它们是否与该用户的先前活动一致,而且还会针对相似用户的活动对该用户的活动进行建模。 例如,与一组类似用户相比,用户的新行为对于该类型的用户可能是一致且正常的。 这种两管齐下的方法减少了误报的数量。

出于安全和合规性原因,异常检测算法使用正常收集的数据。 如果尚未通过Guardium安全策略对数据进行审核,那么Guardium将无法对其进行分析。

请参阅图1,以快速了解Guardium在其正常运行期间如何收集审核数据。

图1. Guardium如何收集和记录数据库事件数据
下面的文字描述了图中的流程
  1. 数据库用户登录并输入数据库命令。
  2. 数据库服务器上的Guardium软件分接头(S-TAP)捕获活动,并将副本发送到Guardium收集器,该收集器是经过加固的硬件或软件设备。
  3. 收集器上的分析引擎解析该命令,并将其分解为组成部分以进行报告或其他分析。 记录的活动包括用户,他们发出命令的时间,他们从(客户端IP)登录的位置,他们使用了什么源程序(例如JDBC),他们访问了哪个数据库服务器以及访问了什么数据。

如图2所示,离群值检测对审计数据的一个子集进行操作,该子集定期从收集的审计数据中透明地提取到单独的数据集市中。 (此提取每小时进行一次,但将来可能会进行配置。)异常值检测分为两个阶段:训练和分析。

图2.离群值检测依赖于训练阶段和分析阶段
上下文本描述了图中的流程

假设已对模型进行了训练且分析处于活动状态,则将新活动与代表正常行为的现有模型进行比较。 属于已建立聚类之外的事件将被分配一个异常分数和该分数的原因。

下一节将更详细地介绍培训和分析阶段。

训练阶段

在培训阶段,学习分析的系统使用用户活动的以下方面:

  • 谁:数据库用户,操作系统用户和客户端主机名。
  • 内容:对象(表,存储过程,视图或同义词)以及命令(例如选择,更新,删除或插入)。
  • 时间:静态确定的工作时间(上午9点至下午5点)以及周末(星期六和星期日)和下班时间。
  • 其中:源程序,数据库名称和数据库服务器。

从上述各个方面的角度对数据库活动和数据库用户(角色)的正常行为进行了建模。 该模型还根据用户的行为进行用户分析。

初始培训需要10天的学习数据,并且培训每周在周日进行。 因此,取决于何时开始异常值检测,将需要10天加上下一个星期日直到开始看到异常值的天数。 但是,基于正常行为的动态集群创建改进的模型需要3-4周的数据。 (您可以通过使用Guardium API命令来缩短初始训练时间,但是期望在模型有足够的时间进行训练之前会有更多的误报。)

示例:图3是用户'assange'及其每周使用临时表的每周异常值模型的输出的高度简化表示。 它提供了他在工作时间内使用临时表(18)的平均值和标准差(3)。

图3.每周培训生成了正常行为的增强模型
上面的文字描述了你的身影

重要说明:临时表的过去使用只是用户行为的许多方面之一,该行为经过训练和建模以能够与新观察到的行为进行比较。 其他方面包括,例如,临时应用程序的使用,活动量,一天中的时间/周的活动,活动的稀有性等。 这些方面中的每一个都与上面显示的处理类似,以创建单独的依存或独立分数。 将分数合并并加权以产生最终分数。

重新训练默认情况下,在构建模型后,每周在星期日重新执行训练阶段。 确定此频率是为了避免正常模型中的噪声,该噪声可能是由于过于频繁的训练而引起的。 如果反复收到错误警报,则可以使用GUI或Guardium API告诉系统忽略某些事件。

分析阶段

分析阶段是将学习到的典型历史行为模型与Guardium捕获的新活动进行运行时比较。 对模型进行适当的训练后,将对传入的数据活动进行分析,并且异常数据开始出现在Guardium界面和报告中。

示例:图4显示,在正常工作时间里,用户'assange'增加了对临时表的使用,超出了每周培训期间的模型。 该增加足够显着以产生异常信号。

图4.每小时运行时分析触发一个异常事件
上面的文字描述了你的身影

请记住,将根据您的安全策略不断向数据集市提供新的活动数据,因此,可以根据配置的1小时检测间隔来检测新的异常值。

您可以通过指示何时可以忽略特定事件来影响分析算法的准确性。 有关更多信息,请参阅从异常检测中排除事件

重要提示:任何敏感数据对象(敏感对象组中的那些)或admin用户(例如,可以访问敏感数据的特权用户组中的用户)的得分都会提高。 这些是默认情况下得分较高的组。 要添加其他组,请参阅定制离群值检测

表1.得分提高的默认组
Guardium组ID 描述
1个 管理员用户
5 敏感物体

配置离群值检测

先决条件

异常检测是在9.1版(版本9,GPU 100)中引入的。 但是,本文涵盖了V9.5(带有GPU 530的版本9)中包含的功能,这是使用离群值的推荐版本。 以下先决条件和建议适用:

  • 可以从IBM FixCentral获得9.5版补丁530
  • 强烈建议您仅在具有至少24GB RAM的64位收集器上启用离群值。 (请注意,异常值检测在聚合器或中央管理器上不可用。)

快速搜索中包含了本文中描述的异常结果的表示。 因此,您必须确保启用了快速搜索。 在新安装的64位系统上,默认情况下启用搜索,或者可以使用命令grdapi enable_quick_search 。 您还可以在“分析异常值列表”报告中查看异常值。

CLI命令启用和禁用离群值检测

以具有CLI角色的用户或管理员身份登录到收集器。 使用以下GuardAPI命令启用异常值检测功能。

grdapi enable_outliers_detection schedule_interval=1 schedule_units=HOUR

离群值将在每小时的当前日期开始提取到数据集市中。

如果要延迟异常值检测,可以在命令中添加计划的开始日期:

grdapi enable_outliers_detection schedule_interval=1 schedule_units=HOUR schedule_start="2015-06-10 00:00:00"

要禁用异常值检测(禁用数据集市提取,训练和分析),请输入以下命令:

grdapi disable_outliers_detection

解释异常结果

在分析阶段变为活动状态之后,异常数据将通过其实时事件分析结果填充到Guardium系统中。 您可以在“快速搜索”用户界面顶部的摘要表上查看此信息。

要进入快速搜索,请在Guardium标语中单击显微镜。

图5.单击搜索以打开快速搜索UI
搜索窗口和显微镜的图片

摘要表(图6)包括一条蓝线(带圆圈),用于指示所选特定选项卡的活动量(活动,错误或违反)。

离群值显示为红色和黄色指示符,可反映一段时间内的严重性或离群值总得分。 红色指示符表示高度异常事件,需要立即关注。 黄色指示器代表不太严重的异常现象,值得其他研究或相关研究的一部分。 离群值是基于离群量与一天中给定时间的离群值的预测量,单个离群值的严重性和其他因素相比的计算得出的合计值。

例如,在通常会在工作日中识别出凌晨1点为零的异常值和下午1点为5-10的异常值的系统上,另外两个异常值(凌晨1点的两个异常值或下午1点的12个异常值)的存在更为重要-并且比每小时的总重量更重。

图6.异常值在快速搜索UI上的显示方式
单击“异常值”选项卡,其中包括本文本节中描述的详细信息。

通过将鼠标悬停在一个异常值图标上,您可以查看该时间段内的活动量,并直接链接到相关时间段内的详细异常值或活动。

图7.悬停在异常警报上
红色异常值之一悬停了。显示详细信息以及显示活动和异常值的链接。

为什么此活动是异常值?

“异常值原因”列列出了将特定活动称为异常值的原因:

原因 描述
罕见 很少见的情况
高音量 异常高发病率
第一次出现的情况
错误 错误情况的发生率异常高

需要时,将异常原因组合在一起进行分配。 例如,如果很少见的情况突然发生很多次,则异常值可能会被标记为稀有和大量。

自定义离群值检测

尽管Guardium异常检测功能的设计要求运行时需要最少的干预,但是您可以做一些事情来优化您的环境的功能,例如添加其他特权用户或敏感对象组,或者告诉系统忽略某些事件。

另外,尽管它有点高级,但是您可以调整与该算法有关的其他内容,例如异常分数阈值。

提升用户和对象的分数

如本文开头所述,有两个默认组获得得分“提升”:管理员用户和敏感对象。 但是,您可能已经在正常操作过程中设置了其他组,这对于检测异常值也很有用。 例如,您可能正在维护一组可疑用户,或者您可能具有与不同应用程序对齐的几组不同的敏感对象。

您可以使用grdapi命令将其他组添加到异常值检测算法中。

先决条件:此命令要求您知道Guardium组ID。 要获取组ID,可以使用命令grdapi list_group_by_desc 。 例如,如果您有一个名为BadGuys的组,则可以输入以下命令以获取其Guardium组ID:

grdapi list_group_by_desc desc="BadGuys"

拥有ID(假设它是1234)后,可以将其添加到异常检测中,如下所示:

grdapi set_outliers_detection_parameter parameter_name="privUsersGroupIds" parameter_value=1234

您可以对敏感对象执行相同的操作:

set_outliers_detection_parameter parameter_name="sensitiveObjectGroupIds" parameter_value=333,156

从异常值检测中排除事件

如果要从异常值检测中排除事件,例如测试应用程序中的活动,则可以右键单击特定的异常值,然后选择“ 忽略”

图8.右键单击一个异常值以调用操作
菜单包括显示相关活动,显示相关错误,显示相关违规,添加为过滤器,忽略和追溯报告。

您可以按原样忽略整个事件,如图9所示:

图9.所有事件条件
条件包括时间,日期,数据库用户,客户端ip,服务器程序,源程序,数据库,对象动词和实例数。

或者,您可以通过删除特定的事件参数来扩大范围。 例如,如果要在特定数据库服务器主机上针对SYBASE运行时忽略源程序MIPGE001,则应删除所有其他参数,然后单击OK

图10.单击红色X删除条件
现在,条件仅包括nclude源程序,服务器和数据库。

注意:日期,时间和实例的值将被忽略,并且不会影响排除标准。

记录了此反馈,并可以在“分析用户反馈”报告中报告该反馈,如图11所示。报告的第一行显示了如果您选择没有排除条件的活动,会是什么样子。 第二行显示了如果您选择字段的子集作为条件会是什么样子。

图11.分析用户反馈报告
报告包含事件条件列和包含忽略的反馈类型列。

如果您的用户反馈包括单个条件(用户,服务器IP,数据库等),它也会自动填充现有的分析排除组之一:

  • 分析排除数据库用户
  • 分析排除OS用户
  • 解析排除服务器IP
  • 解析排除服务名称
  • 解析排除源程序

例如,如果您从“异常值响应”窗口中删除除“应用程序源程序”之外的所有条件,则可以转到“组构建器”,编辑“分析排除源程序”组,然后查看在此输入的项目,如图12所示。

图12. Guardium Group Builder
组名是Analytics(分析),不包括源程序,并且包含MIPGE001作为组的成员。

当然,您还可以使用组构建器的所有功能来批量填充组,包括从查询中填充。

您还可以使用Guardium API使用单个排除条件填充组:

grdapi create create_member_to_group_by_desc desc="Analytic Exclude Source Program" member="MIPGE001"

要包含以前忽略的事件,请查看“分析用户反馈”报告,双击以前忽略的事件,然后选择“ 调用”>“ delete_analytic_user_feedback”

图13.从忽略的事件中删除事件
如上所述。

您可以选择立即调用删除操作,也可以将生成的命令添加到脚本中以稍后运行。

其他配置和自定义

我们已经为几种不同的情况建议了Guardium API set_outliers_detection_parameter的用户,例如添加其他用户组或敏感对象以进行离群值检测。 可以使用此API修改异常值检测的其他方面,包括增加或减少训练时间,警报阈值等。 您可以通过输入以下内容查看当前设置:

grdapi get_outliers_detection_info

参数包括:

参数 描述
cleanupKeepDays 这是将模型数据保留在收集器上的天数。 默认值为90天。 这不是训练数据,它每周收集一次,然后删除。 这是从以前的培训中创建的模型数据。
sensitiveObjectGroupIds 对象(表,视图等)的Guardium组ID,以提高得分。
privUsersGroupIds 数据库用户的Guardium组ID可获得更高的评分。
minimalRequiredTrainPeriod 这是构建初始模型的默认培训时间。 默认值为10天,但是如果您将时间段设置为更长的时间(例如30天),则会获得更准确的模型和更少的误报。
自定义评分行为(仅限高级用户)

以下API参数与评分有关。 我们建议您仅在有经验的采矿人员的指导下修改离群得分的行为。

  • intervalThreshold
  • alertThreshold
  • alertRarityThreshold
  • alertVolumeThreshold
  • minNumOfIntervalsForAlerts

在详细介绍这些参数中的每一个之前,让我们先详细介绍计分的工作原理。

间隔表示某个用户或数据库的活动时间 。 我们将这些称为用户间隔和数据库间隔 。 每个时间间隔都会根据该时间间隔内用户或数据库行为的异常程度来获得异常分数。

离群值检测的GUI仅显示得分高于intervalThreshold用户和数据库intervalThreshold 。 将该时间间隔视为异常的原因是该小时内用户或数据库的活动。 还对组成此每小时活动的特定操作进行了评分。 当GUI指示间隔异常时(这称为“警报”,与Guardium实时警报或阈值警报不同),它还会列出该间隔内得分最高的活动。 仅显示得分高于alertThreshold活动。

通常,如果某个间隔的分数足够高而会引起警报,则该间隔中会有一些较高的得分活动,也会显示出来。 但这并非总是如此。 例如,即使每个活动本身都是正常的,由于活动量异常大,间隔也可能是异常的。

为何此活动是异常值中所述? ,GUI还显示了活动被视为异常的非互斥原因:稀有,大量,新增和错误。 最终活动分数受几个分数影响,包括与这四个原因相关的分数。 如果相应的稀有度分数高于alertRarityThreshold “稀有”指示为原因。 如果相应的音量得分高于alertVolumeThreshold ,则GUI会指示“高音量”原因。

异常检测基于将当前活动与用户/数据库的历史活动进行比较。 为了使这种检测具有重要的统计价值,有必要学习足够的历史行为。 minNumOfIntervalsForAlerts定义在给出相应警报之前,用户/数据库的活动间隔(即小时)是否足够。

您可以使用API​​动态更改默认值。 默认值为:

默认 描述
intervalThreshold 间隔的异常分数阈值。 有效值为0到1。默认值为0.999。
alertThreshold 异常间隔中活动的异常分数阈值。 有效值介于0和1之间。默认值为0.99。
alertRarityThreshold 确定异常活动何时显示为“罕见”的阈值。 有效值为0到1。默认值为0.98。
alertVolumeThreshold 确定异常活动何时显示为“高音量”的阈值。 有效值为0到1。默认值为0.9998。
minNumOfIntervalsForAlerts 如果训练中的时间间隔数小于此数目,则不会生成警报。 默认值为100个间隔(小时)。 有效值是一个大于或等于0的整数。

操作上的考虑

本节详细介绍如何结合使用Guardium功能,以将异常检测与操作过程集成在一起。

使用分布式报告查看多个收集器的异常值

要查看来自所有收集器或一组收集器的合并的离群值数据,您可以基于现有的“分析离群值列表”报告创建分布式报告,如图14所示。

分布式报告如图14所示。基本上,每个收集器都按计划将其数据发送到Central Manager。 (还有一个选项可以创建一个在线版本,允许您临时查看集中的报告数据。)

作为输入,您需要包含异常数据的收集器组。 有关创建分布式报告的详细信息,请参阅中央管理上的产品文档。 直接链接包含在“ 相关主题”中

注意:如果您使用的是Guardium V10,则已经使用Quick Search for Enterprise在收集器之间合并了异常值。

使用工作流自动化分发报告数据

与Guardium中的任何报告一样,您可以设置一个自动过程来分发和查看异常报告数据。 这有时称为合规性工作流自动化 。 使用Guardium UI中的“审核流程构建器”来创建此流程(包括适当的接收者),并将异常值报告添加为任务。 有关创建审计过程的详细信息,请参阅链接相关主题

注意保留期

由于异常值警报(算法输出数据)与也写入到Guardium存储库中的两个快速搜索索引相关联,因此异常值警报会受到两个快速搜索索引文件(默认为3天)以及存储在其中的Analytics(分析)异常值信息的保留期的影响。 Guardium数据库(默认为60天)。 另请注意,快速搜索受包括磁盘空间在内的单位利用率阈值的影响,并且可能会更频繁地清除数据,或者如果磁盘空间存在问题,则快速搜索将完全停止索引编制。

设置相关(阈值)警报

由于异常检测是与安全策略规则和执行分开的过程,因此无法在它们上设置实时警报。 但是,由于报告中包含异常数据,因此您可以创建关联警报。 相关警报由查询触发,该查询在指定时间段内进行回溯以确定是否已达到警报阈值。 前提条件是确保已在Guardium管理控制台中启用了“异常检测”。

例如,您可以基于“按日期分类的异常值摘要”报告中使用的查询来创建警报。

图14.分析异常值列表报告
如上所述。

假设您希望将警报写入系统日志或使用电子邮件发送。 您可以创建一个警报,该警报定期运行此报告查询,并将警报设置为在过去四个小时中,当报告中有一个或多个行的异常得分大于或等于99时将被触发。 产品文档中提供了创建关联警报的说明(请参阅参考资料 )。

结论

我们希望您能像我们一样在Guardium中发现这种新的数据挖掘用途。 随着我们从客户那里获得更多反馈,产品和研究团队将继续紧密合作,以增强算法,并且随着时间的推移,改进将继续推出。


翻译自: https://www.ibm.com/developerworks/security/library/se-guardium-outlier-hidden-threats-trs/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值