来自 CC防护 2021-02-10 05:33 的文章

ddos过滤_有效的_网站防护工具

ddos过滤_有效的_网站防护工具

在上周关于探测工程的帖子中,我们解释了什么是"探测器",以及红金丝雀如何利用它们来猎杀和识别威胁。本文将深入探讨探测器产生后会发生什么,以及我们如何通过调谐来衡量其有效性。一般来说,我们的假阳性率很高。直到最近,我们才调整了一个检测器,如果它是如此明显的可怕,它正在影响我们的日常工作流程。思考的过程是我们宁愿撒一张大网也不愿错过什么。我们一直在跟踪转换率,这有助于识别从不捕捉任何东西的探测器,以及几乎总是在目标上的探测器。然而,这并不能说明哪些进程正在被检测,哪些进程被抑制或隐藏。为了解决这个问题,我们已经建立了一个系统,允许我们回顾过去的每一个事件和对它采取的行动,ddos防御规则,并包括在检测时作为事件一部分的大多数过程数据。既然我们有了所有这些数据,我们就可以对其进行切实的利用。本文将详细介绍:什么因素使探测器有效如何创建一个查询来提取数据并"评分"检测器的有效性应用检测器得分来评估性能调整探测器以优化效能什么因素使探测器有效?作为一个分析团队,我们的工作流程几乎完全集中在检测器生成的事件上。我们根据以下三个因素计算每个探测器的加权探测器分数:转换率:检测到的事件/检测器事件总数索赔时间:探测器产生的事件所花费的时间事件计数:按检测器分析处理的事件总数让我们深入了解每一个因素。转换率这是探测器指标之王。如果一个探测器100%的时间转换为检测,那就意味着它永远不会出错。例如,一个已知的Mimikatz二进制文件的成功执行总是需要我们报告的。由于我们努力创建基于行为模式和静态值的检测器,我们的大多数检测器的性能甚至都不接近100%。我们认为如果探测器的转换时间超过10%,那么它是相当合理的。我们确实有一些检测器的转换率非常接近100%,当它们在统计上非常准确时,我们会自动从这些事件中创建检测;因此,我们所说的"机器人"处理了我们所说的大部分事件。转换率是考虑自动化的三个指标中唯一一个。要求的时间红金丝雀并不是唯一的跟踪这一点,但我们很幸运有这个指标如此容易获得。因为分析员在调查某个事件的过程中,有一个特定的时间段"声称",我们可以测量从他们第一次开始观察到事件完成的时间,以确定哪些探测器比其他探测器花费的时间更长。如果一个检测器需要5分钟的时间让分析员进行调查,这通常是因为他们每次都要挖掘周围的过程数据。它比检测器创建的事件(在这里可以查看命令行(CLI)和5秒钟内做出的决定)的影响要大得多。这不能站在真空中,因为一些高保真探测器需要大量的时间投入,但我们不希望低保真度探测器也需要很长的时间来分析。我们的目标不是将我们看到的每一个事件都简化为一个快速的决定,什么软件可以防御ddos,而是让我们看到的事件值得花时间去调查。事件计数这是我们从探测器上看到的事件的总和。这并不是一个好的或坏的检测器的好的或坏的指示,因为有了端点数据,一些东西可能在一天内或在一个客户身上产生噪音,但并不是一个挥之不去的痛点。例如,脚本在整个环境中启动并运行很短的时间段,以后再也不会出现。这些类型的事件是一个很好的例子,不应该被忽视。我们还利用抑制,这样如果信誉服务对某个特定的文件哈希进行了错误分类,它可能会导致数百个事件,但分析员的一个抑制操作将同时处理所有这些事件。例如,psexec通常被信誉服务归类为恶意软件,尽管它是一个合法的SysInternals工具,DDOS攻击漏洞防御,有许多管理应用程序。我们对psexec的使用行为感兴趣,但对单独获取二进制哈希执行的事件不感兴趣。评估指标:如何创建查询为了评估上述三个指标,我们必须查看数据,从每个事件中提取关键信息,然后对它们进行数学运算。以下是创建查询以获取所需数据的过程分解。第一步:得到数字我们利用Splunk存储历史事件,用于研究、质量控制和度量。在启动这个项目时,第一个任务是在给定的时间段内收回所有事件,然后只提取我们需要的数据点。每个事件都包含大量与检测器性能没有直接关系的额外数据,因此我们只关注某些领域。作为参考,下面的代码示例是部分原始Red Canary事件的样子。这也说明了每一个事件如何与检测器以一对多的关系存在。在上面的屏幕截图中,engine_observations(detector)部分包含两个检测器的两个部分:WIN-POSSIBLE_MIMIKATZ_CLI和INTEL-RL-REPUTATION-MALICIOUS。这对于分析员确定潜在的恶意行为是很好的,但是对于单个检测器指标或Splunk的一些统计功能来说,这并不是一个好方法。我们目前使用mvzip和mvexpand来获取每个事件的可搜索检测器和相应的id。虽然这会导致重复事件,但对我们来说没问题。下图显示了在Splunk中使用stats时的结果。使用"expand"会产生以下结果,现在将单个事件计数为两个。我们的基本查询结果如下所示。从本质上讲,我们将获取所有不被自动化处理的事件,并按检测器名称将它们分开。我们用来识别每个唯一检测器的数字标识。index=客户数据源类型=客户事件分析师!=*机器人*|字段引擎{}观察{}。名称引擎}观察{}.id在终端}在终端阶段关联的检测{}。标题|eval zipped=mvzip('engine_observations{}.name','engine_observations{}.id',"##"")|mvexpand压缩|rex field=zipped"(?。*)##(?.*)"第二步:计算换算率为了得到每个检测器的转换率,快速防御ddos攻击服务器,我们需要两件事:检测到的事件的计数和按检测器的事件总数。此代码将添加到基查询:|eventstats计为"总事件数"|eventstats按检测器名称计数为"detector_event_count"|eventstats计数(eval(terminal_stage="hidden"或"terminal_stage="hidden"not_suppressed"))as not_detected,count(eval(terminal_stage="detected"))按检测器名称检测到的计数|eval percentage_detected=round(detected_count/detector_event_count*100,2)|表检测器_id检测器_名称百分比_检测到的事件数_计数未检测到的数量_计数总数_事件数|重复数据删除检测器_名称通过分段构建查询,可以更容易地与原始数据进行交叉检查,以查看结果是否正确。从技术上讲,我们不需要"未检测"计数来进行转换,但它可以是一个方便的度量。这也给出了每个检测器的总事件数和时间段内的总事件数,我们将在后面使用。第三步:计算索赔时间下一个指标是"每个探测器所占用的时间"。这个指标有助于确定哪些探测器比其他探测器需要更多的人力分析时间。我们跟踪分析师"声明"一个事件的时间戳到它"结束"的时间戳,即分析师采取行动之前所需的时间。由于基本查询中的重复事件,此计算可能很高,但总体准确度足以满足我们的目的。我们取事件被声明的时间和事件结束时的差值,然后求和得到每个事件花费的时间。总的总数给了我们所有活动的"实际"时间。这个数字被转换成小时,因为我们更容易理解。查询的下一部分如下所示:|eval work_started=strptime(声明时间:"%Y-%m-%dT%H:%m:%S.%3NZ")|eval work_end=strptime(终端位于"%Y-%m-%dT%H:%m:%S.%3NZ")|eval time_worked=(工作结束-工作开始)|eventstats sum(time_worked)as total_all_events_claided_time=事件统计总和(工作时间)|eventstats sum(time_worked)as total_detector_worktime by detector_name(按检测器名称列出的"工作时间")|在探测器上花费的评估小时数=轮数(探测器总工作时间/3600,2)|eval hours_total_claided_time=回合(总计_all_events_claided_time/3600,2)|表detector_id detector_name hours_在_detectorhours上花费的时间_总索赔时间|重复数据消除检测器_id这将导致此数据的返回:步骤4:确定可接受的阈值到目前为止,我们已经决定了我们要测量什么,以及如何通过探测器来计算出这些数字。现在我们需要确定什么是可接受的阈值。第一次迭代只需要根据估计的工作量进行一些计算。这里有一个例子来说明:假设有10个全职分析师100%的时间在调查事件(这是不现实的,但对我们的例子很有帮助)。这就产生了每周400小时的人类时间。平均而言,cc怎么防御,我们可以估计一个分析员每小时能处理大约30个事件。乘以400小时,这意味着我们要避免每周产生超过12000个分析师处理的事件。我们已经用了很多数学方法来计算人的时间,既包括我们实际花费在事件上的时间,也包括我们因人员配备原因可以处理多少事件。对于我们目前的团队,我们将考虑每周254小时的专门事件调查,这更实际地解释了非事件投资