Terrance DeJesusEric Forte

Google Cloud 用于网络数据分析

使用 Google Cloud 导航网络威胁数据之海

阅读时长 42 分钟安全研究
Google Cloud for Cyber Data Analytics

简介

在当今的数字时代,设备和系统产生的大量数据对于安全从业人员来说既是挑战也是机遇。分析大量数据以制定关于网络攻击趋势的有价值或可操作的见解,需要精确的工具和方法。

在您深入进行数据分析任务之前,您可能会发现自己在问

  • 我旨在回答的具体问题是什么?我是否拥有必要的数据?
  • 所有相关数据都位于何处?
  • 如何访问这些数据?
  • 访问数据后,理解和组织数据涉及哪些步骤?
  • 哪些工具最适合提取、解释或可视化数据?
  • 我应该立即分析原始数据还是等到它被处理之后再进行?
  • 最关键的是,可以从数据中得出哪些可操作的见解?

如果这些问题与您产生共鸣,那么您就走对了路。欢迎来到 Google Cloud 的世界,我们将在这里解决这些疑问,并指导您完成创建综合报告的过程。

我们的方法将按以下顺序包括几个步骤

探索:我们首先彻底了解我们拥有的数据。此阶段包括识别我们旨在发现的潜在见解,并验证所需数据的可用性。

提取:在这里,我们收集必要的数据,重点关注最相关和最新的信息,以进行分析。

预处理和转换:在此阶段,我们准备要分析的数据。这包括对数据进行规范化(清理、组织和结构化),以确保数据为进一步处理做好准备。

趋势分析:我们的大部分威胁发现和观察结果都来自这项工作。我们分析经过处理的数据,以寻找模式、趋势和异常情况。采用诸如时间序列分析和聚合等技术来了解威胁随时间的演变,并突出显示各个平台上的重大网络攻击。

简化:在此步骤中,我们将数据提炼为最相关的元素,重点关注最重要和最有见地的方面。

演示:最后一步是展示我们的发现。我们旨在利用 Google Workspace 中的工具,以清晰、简洁且视觉上吸引人的方式展示我们的见解。

结论:回顾这段旅程,我们将讨论拥有正确分析工具的重要性。我们将重点介绍 Google Cloud Platform (GCP) 如何为分析网络威胁数据提供理想的环境,使我们能够将原始数据转化为有意义的见解。

探索:确定可用数据

在深入进行任何复杂的分析之前,有必要通过建立对我们打算研究的数据格局的理解来进行准备。

以下是我们的方法

  1. 识别可用数据:第一步是确定可以访问哪些数据。这可能包括恶意软件现象、端点异常、云信号等。确认这些数据类型的可用性至关重要。
  2. 定位数据存储:确定数据的确切位置。了解我们的数据存储在哪里(无论是在数据库、数据湖还是其他存储解决方案中)有助于简化后续的分析过程。
  3. 访问数据:确保我们拥有访问所需数据集的必要权限或凭据非常重要。如果我们没有,则必须尝试识别资源所有者并请求访问权限。
  4. 了解数据架构:理解我们数据的结构至关重要。了解架构有助于有效地规划分析过程。
  5. 评估数据质量:就像任何彻底的分析一样,评估数据的质量至关重要。我们检查数据是否足够细分和详细,以进行有意义的趋势分析。

此阶段旨在确保我们的分析基于坚实而现实的基础。对于像全球威胁报告这样的报告,我们依赖于丰富且相关的数据集,例如

  • 云信号数据:这包括来自全球安全信息和事件管理 (SIEM) 警报的数据,尤其侧重于 AWS、GCP 和 Azure 等云平台。此数据通常来自公共检测规则
  • 端点警报数据:从全球Elastic Defend警报收集的数据,其中包含各种公共端点行为规则
  • 恶意软件数据:这涉及来自全球 Elastic Defend 警报的数据,其中包含MalwareScore 和公共 YARA 规则

每个数据集都使用诸如MITRE ATT&CK、Elastic Stack 详细信息和客户见解等框架进行分类和丰富以提供上下文。Google Cloud Platform 的存储解决方案(如 BigQuery 和 Google Cloud Storage (GCS) 存储桶)为我们的分析提供了强大的基础设施。

设置数据“新鲜度”阈值也很重要,对于年度报告,排除早于 365 天的数据,以确保相关性和准确性。

最后,请记住选择能够提供公正视角的数据。排除或包含内部数据应是基于其与您的可见性的相关性的有意战略决策。

总而言之,选择正确的工具和数据集是创建全面且富有洞察力的分析的基础。每个选择都对数据分析的整体有效性做出独特的贡献,确保最终的见解既有价值又有影响力。

提取:数据分析的第一步

在识别并定位必要数据后,我们分析过程的下一步是从我们的存储解决方案中提取此数据。此阶段至关重要,因为它为后续的深入分析奠定了基础。

数据提取工具和技术

可以使用各种工具和编程语言进行数据提取,包括 Python、R、Go、Jupyter Notebooks 和 Looker Studio。每个工具都具有独特的优势,选择取决于您分析的特定需求。

在我们的数据提取工作中,我们发现从BigQueryColab Notebooks存储桶Google Workspace的组合中最成功,以提取所需的数据。Colab Notebooks 类似于 Jupyter Notebooks,在 Google 的云环境中运行,与 Google Cloud 的其他服务无缝集成。

用于数据暂存和查询的 BigQuery

在分析过程中,一个关键步骤是使用 BigQuery“暂存”我们的数据集。这涉及使用 BigQuery 查询来创建和保存对象,从而使它们可重用并在我们的团队中共享。我们通过使用CREATE TABLE语句来实现这一点,该语句允许我们将多个数据集(如端点行为警报、客户数据和规则数据)合并到一个综合数据集中。

然后,这个整合后的数据集会被存储在专门为此目的而设的 BigQuery 表中——在本例中,我们将其称为“全球威胁报告”数据集。这种方法被一致地应用于不同类型的数据,包括云信号和恶意软件数据集。

例如,新创建的数据表可能会被命名为 elastic.global_threat_report.ep_behavior_raw。这种由 BigQuery 定义的命名约定有助于有效地组织和定位数据集,这对提取过程的后续阶段至关重要。

在此过程中使用的 BigQuery 查询示例如下:

CREATE TABLE elastic.global_threat_report.ep_behavior_raw AS
SELECT * FROM ...

用于 BigQuery 查询导出数据集表的图表

我们还在 BigQuery 中使用 EXPORT DATA 语句,将表传输到其他 GCP 服务,例如以 parquet 文件格式导出到 Google Cloud Storage (GCS) 存储桶。

EXPORT DATA
  OPTIONS (
    uri = 'gs://**/ep_behavior/*.parquet',
    format = 'parquet',
    overwrite = true
  )
AS (
SELECT * FROM `project.global_threat_report.2023_pre_norm_ep_behavior`
)

用于加载暂存数据集的 Colab Notebook

Colab Notebook 在组织我们的数据提取过程中发挥着重要作用。它们可以轻松访问和管理存储在 GitHub 和 Google Drive 等平台上的数据脚本。

对于身份验证和授权,我们使用 Google Workspace 凭据,从而简化了对各种 Google Cloud 服务(包括 BigQuery 和 Colab Notebook)的访问。以下是如何处理身份验证的基本示例:

Google Cloud 服务之间身份验证和授权的图表

对于刚接触 Jupyter Notebooks 或数据框的人来说,花时间熟悉这些工具是有益的。它们是任何数据分析师工具包的基础,可以实现高效的代码管理、数据分析和结构化。掌握这些工具是有效进行数据分析的关键。

在 Google Colab 中创建笔记本后,我们就可以从 BigQuery 中提取自定义表(例如 project.global_threat_report.ep_behavior_raw)。然后,这些数据被加载到 Pandas Dataframes 中,这是一个有助于数据操作和分析的 Python 库。虽然使用 Python 处理大型数据集可能具有挑战性,但 Google Colab 提供了强大的虚拟计算资源。如果需要,可以通过 Google Cloud Marketplace 或 Google Cloud Console 扩展这些资源,从而确保即使是大型数据集也可以得到高效处理。

用于数据分析的基本 Python 库

在数据分析过程中,我们使用了各种 Python 库,每个库都服务于特定的目的:

描述
datetime对于处理数据中与日期和时间相关的所有操作至关重要。它允许您操作和格式化日期和时间信息以进行分析。
google.auth管理身份验证和访问权限,确保安全访问 Google Cloud 服务。它对于控制谁可以访问您的数据和服务至关重要。
google.colab.auth提供用于在 Google Colab 笔记本中访问 Google Cloud 服务的身份验证,从而实现与云资源的的安全连接。
google.cloud.bigquery一个用于管理 Google Cloud BigQuery 服务中大型数据集的工具。它允许对海量数据进行高效处理和分析。
google.cloud.storage用于在 Google Cloud Storage 中存储和检索数据。它是处理云中各种数据文件的理想解决方案。
gspread促进与 Google Spreadsheets 的交互,从而可以轻松地操作和分析电子表格数据。
gspread.dataframe.set_with_dataframe在 Pandas 数据框和 Google Spreadsheets 之间同步数据,从而实现这些格式之间无缝的数据传输和更新。
matplotlib.pyplot.pltMatplotlib 库中用于创建图表和图形的模块。它有助于以图形格式可视化数据,从而更容易理解模式和趋势。
pandasPython 中用于数据操作和分析的基本工具。它提供了用于操作数值表和时间序列的数据结构和操作。
pandas.gbq.to_gbq可以将数据直接从 Pandas 数据框传输到 Google BigQuery,从而简化了将数据移动到此基于云的分析平台的过程。
pyarrow.parquet.pq允许以 Parquet 格式高效地存储和检索数据,Parquet 是一种为大型数据集优化使用的列式存储文件格式。
seaborn一个基于 Matplotlib 的 Python 可视化库,它提供了一个高级界面,用于绘制有吸引力且信息丰富的统计图形。

接下来,我们使用 BigQuery 进行身份验证,并获得访问我们数据集的授权,如前所述。通过使用 Google Workspace 凭据,我们可以轻松访问 BigQuery 和其他 Google Cloud 服务。该过程通常涉及用于身份验证的简单代码片段:

from google.colab import auth
from google.cloud import bigquery

auth.authenticate_user()
project_id = "PROJECT_FROM_GCP"
client = bigquery.Client(project=project_id)

完成身份验证后,我们就可以继续访问和操作我们的数据。Google Colab 与 Google Cloud 服务的集成简化了这一过程,使其高效且安全。

分析前组织 Colab Notebook

使用 Jupyter Notebook 时,最好提前组织您的笔记本。将需要处理和操作数据的各个阶段,保持组织性将帮助您创建一个可重复、全面的流程。

在我们的笔记本中,我们使用 Jupyter Notebook 标题来系统地组织代码。这种结构允许清晰地划分和创建可折叠的部分,这在处理需要多个步骤的复杂数据操作时尤其有益。这种有条理的组织有助于有效地浏览笔记本,确保数据提取和分析过程中的每个步骤都易于访问和管理。

此外,虽然笔记本中的工作流程可能看起来是线性的,但它通常更具动态性。数据分析师经常会进行多任务处理,根据他们遇到的数据或结果,在不同的部分之间跳转。此外,在某一步骤中发现的新见解可能会影响另一步骤的过程,从而在完成笔记本之前导致一些反复的操作。 |

将我们的 BigQuery 数据集提取到数据框中

在建立笔记本的结构并成功使用 BigQuery 进行身份验证后,我们的下一步是检索所需的数据集。此过程为报告的其余部分奠定了基础,因为来自这些来源的信息将构成我们分析的基础,类似于选择全面研究所需的关键组件。

以下是我们如何从 BigQuery 获取数据的示例:

import datetime

current_year = datetime.datetime.now().year
reb_dataset_id = f'project.global_threat_report.{current_year}_raw_ep_behavior'
reb_table = client.list_rows(reb_dataset_id)
reb_df = reb_table.to_dataframe()

此代码段演示了典型的数据检索过程。我们首先定义我们感兴趣的数据集(对于当前年份,使用全球威胁报告,project.global_threat_report.ep_behavior_raw)。然后,我们使用 BigQuery 查询从此数据集中选择数据,并将其加载到 Pandas DataFrame 中。此 DataFrame 将作为我们后续数据分析步骤的基础。

用于将数据从 BigQuery 提取到 Pandas 数据框的 Colab Notebook 代码段

此过程标志着提取阶段的完成。我们已成功浏览 BigQuery 以选择和检索必要的数据集,并将它们加载到笔记本中的数据框中。提取阶段至关重要,因为它不仅涉及收集数据,还涉及为更深入的分析奠定基础。这是迈向更大发现之旅的初始步骤,将我们引向转换阶段,在该阶段,我们将从数据中发现更详细的见解。

总之,我们数据之旅的这一部分不仅仅是收集数据集;它还在于为后续的深入分析结构化地准备它们。这种组织和执行提取阶段的严谨方法为我们旨在在数据分析的后续阶段中获得的变革性见解奠定了基础。

预处理和转换:数据分析的关键阶段

从原始数据到可操作见解的过渡涉及数据处理中的一系列关键步骤。提取数据后,我们的重点将转移到优化数据以进行分析。网络安全数据集通常包含各种形式的噪声,例如误报和异常,必须解决这些噪声以确保分析的准确性和相关性。

数据预处理和转换的关键阶段:

  • 数据清理: 此阶段涉及填充 NULL 值、纠正数据错位以及验证数据类型,以确保数据集的完整性。
  • 数据丰富: 在此步骤中,向数据集中添加了其他上下文。例如,合并来自 VirusTotal 等来源的第三方数据(如恶意软件信誉)可增强分析的深度。
  • 规范化: 此过程对数据进行标准化以确保一致性,这对于端点恶意软件警报等各种数据集尤其重要。
  • 异常检测: 识别和纠正离群值或误报对于维护数据集的准确性至关重要。
  • 特征提取: 识别有意义的、一致的数据点的过程,这些数据点可以进一步提取以进行分析。

接受数据清理的艺术

数据清理是准备数据集进行全面分析(尤其是在网络安全领域)的基本步骤。此过程涉及一系列技术检查,以确保数据的完整性和可靠性。以下是具体步骤:

  • 映射到 MITRE ATT&CK 框架: 验证数据集中的所有检测和响应规则是否准确映射到 MITRE ATT&CK 框架中相应的策略和技术。此检查包括查找 NULL 值或数据与框架对齐方式中的任何不一致之处。

  • 数据类型验证: 确认数据集中的数据类型是否适当且一致。例如,时间戳应采用标准化的日期时间格式。此步骤可能涉及将字符串格式转换为日期时间对象,或验证数值是否采用正确的格式。

  • 关键数据的完整性: 确保数据集中没有遗漏任何重要信息。这包括检查端点行为日志中是否存在诸如 SHA256 哈希或可执行名称等基本元素。缺少此类数据可能会导致分析不完整或有偏差。

  • 跨数据格式的标准化: 评估并实施跨数据集的数据格式标准化,以确保统一性。这可能涉及规范化文本格式、确保大小写一致或标准化日期和时间表示。

  • 重复条目识别: 通过检查 XDR 代理 ID 或群集 ID 等唯一标识符来识别和删除重复条目。此过程可能涉及使用函数来检测和删除重复项,以确保每个数据条目的唯一性。

  • 排除不相关的内部数据: 查找并删除可能无意中包含在数据集中的任何内部数据。此步骤对于防止内部偏差或不相关的信息影响分析至关重要。

请务必注意,数据清理或“清理数据”是我们整个工作流程中的持续工作。当我们继续剥离数据的层并为各种见解而处理数据时,预计我们会发现其他变化。

利用 Pandas 进行数据清理

Python 中的 Pandas 库提供了多种功能,这些功能对于网络安全环境中的数据清理特别有用。其中一些方法包括:

  • DataFrame.isnull()DataFrame.notnull() 来识别缺失值。
  • DataFrame.drop_duplicates() 用于删除重复的行。
  • 数据类型转换方法,例如 pd.to_datetime() 用于标准化时间戳格式。
  • 利用布尔索引,根据特定标准过滤掉不相关的数据。

深入了解数据集对于确定正确的清理方法至关重要。可能需要初步探索数据集,以识别需要清理或转换的特定区域。其他有用的方法和工作流程可以在这篇 Real Python 博客中找到:此链接

特征提取和增强

特征提取和增强是数据分析中的核心步骤,尤其是在网络安全领域。这些过程涉及转换和增强数据集,以提高其在分析中的可用性。

  • 从现有数据创建新数据: 在这里,我们会修改或使用现有数据来添加额外的列或行。
  • 从第三方添加新数据: 在这里,我们使用现有数据作为第三方 RESTful API 的查询参考,这些 API 会返回我们可以添加到数据集中的其他数据。

特征提取

让我们深入探讨一个实际的例子。假设我们收到大量 Elastic 与其社区共享的公开可用的 YARA 签名。这些签名会触发我们数据集中某些端点恶意软件警报。根据规则名称,我们观察到了一致的命名约定,该规则名称当然会出现在原始数据中:OperationsSystem_MalwareCategory_MalwareFamily。这些名称可以被解构,以提供更具体的见解。利用 Pandas,我们可以熟练地对数据进行切片和切块。对于那些喜欢在 BigQuery 数据集暂存阶段执行此操作的人,SPLITOFFSET 子句的组合可以产生类似的结果。

df[['OperatingSystem', 'MalwareCategory', 'MalwareFamily']] = df['yara_rule_name'].str.split('_', expand=True)

使用我们的 YARA 数据进行特征提取

在数据分析中,还有其他方法、途径和流程用于特征提取。我们建议咨询您的利益相关者的需求,并探索您的数据,以帮助确定提取所需的要素以及提取方法。

数据增强

数据增强可以增强网络安全数据集的深度和上下文。一种有效的方法是集成外部数据源,以便为现有数据提供额外的视角。这在理解和解释网络安全警报方面尤其有价值。

数据增强示例:集成 VirusTotal 信誉数据 网络安全中一种常见的数据增强方法是整合来自外部威胁情报服务(如 VirusTotal (VT))的信誉评分。此过程通常包括

  1. 获取信誉数据: 使用来自 VT 的 API 密钥,我们可以根据我们数据集中的唯一标识符(例如二进制文件的 SHA256 哈希)查询信誉数据。
import requests

def get_reputation(sha256, API_KEY, URL):
    params = {'apikey': API_KEY, 'resource': sha256}
    response = requests.get(URL, params=params)
    json_response = response.json()
    
    if json_response.get("response_code") == 1:
        positives = json_response.get("positives", 0)
        return classify_positives(positives)
    else:
        return "unknown"

在此函数中,classify_positives 是一个自定义函数,该函数根据将文件标记为恶意的防病毒引擎的数量对信誉进行分类。

  1. 将信誉数据添加到数据集: 从 VirusTotal 获取的信誉数据然后被集成到现有数据集中。这是通过将 get_reputation 函数应用于 DataFrame 中的每个相关条目来完成的。
df['reputation'] = df['sha256'].apply(lambda x: get_reputation(x, API_KEY, URL))

在这里,一个名为 reputation 的新列被添加到数据框中,基于其在 VirusTotal 中的检测率,提供有关每个二进制文件的额外信息层。

这种数据增强方法只是增强网络安全威胁数据的众多方法之一。通过利用强大的辅助函数和访问外部数据存储库,分析人员可以显著增强其数据集。这种增强可以更全面地了解数据,从而进行更明智和细致的分析。此处演示的技术是更广泛的高级数据操作方法的一部分,这些方法可以进一步改进网络安全数据分析。

归一化

尤其是在处理网络安全中各种不同的数据集时,例如端点警报和云 SIEM 通知,可能需要进行归一化才能充分利用您的数据。

了解归一化: 归一化的核心是调整以不同尺度测量的数值到通用尺度,确保按比例表示这些数值,并减少冗余。在网络安全环境中,这意味着以一种不会无意中放大或降低其重要性的方式表示事件或警报。

考虑我们的端点恶意软件数据集。在分析趋势时,例如基于恶意软件家族或类别的感染,我们的目标是准确表示。但是,根据扩展检测和响应 (XDR) 系统,端点上的单个恶意软件感染可能会生成多个警报。如果不加以控制,这可能会严重歪曲我们对威胁形势的理解。为了抵消这种情况,我们考虑作为 XDR 解决方案一部分部署的 Elastic 代理。每个端点都有一个唯一代理,如果检测到恶意软件,则表示单个感染实例。因此,为了归一化此数据集,我们将基于唯一的代理 ID“展平”或调整它。这意味着,对于我们的分析,我们将考虑受特定恶意软件家族或类别影响的唯一代理 ID 的数量,而不是原始警报数量。

按唯一代理对恶意软件警报进行归一化的示例可视化

如上图所示,如果我们选择在准备趋势分析时不对恶意软件数据进行归一化,则我们的主要发现将显示不准确的信息。这种不准确可能源于大量数据不一致性,例如通用 YARA 规则、在单个端点上重复标记的程序化操作等等。

多样化的方法: 另一方面,在处理端点行为警报或云警报(来自 AWS、GCP、Azure、Google Workspace 和 O365 等平台)时,我们的归一化方法可能会有所不同。这些数据集可能具有其自身的细微差别,并且可能不需要用于恶意软件警报的相同“展平”技术。

归一化选项的概念化: 请记住,归一化的目标是减少数据中的冗余。确保尽可能保持您的操作原子化,以防您以后需要返回并进行调整。在执行归一化和标准化时尤其如此。有时这些操作可能难以分离,您可能需要在两者之间来回切换。分析人员有很多选择。从 Min-Max 缩放,其中值被移动并重新缩放到 0 到 1 的范围内,到 Z 分数归一化(或标准化),其中值以零为中心,与平均值的标准偏差。技术的选择取决于数据的性质和分析的特定要求。

本质上,归一化可确保我们的网络安全分析基于公平的竞争环境,为利益相关者提供准确的威胁环境视图,而不会产生不必要的失真。这是趋势分析之前的关键步骤。

异常检测:改进数据分析过程

在网络安全分析领域,不存在适用于所有情况的异常检测方法。该过程高度依赖于手头数据的具体特征。主要目标是识别和解决可能歪曲分析的异常值。这需要一种动态且适应性强的方法,其中理解数据集的细微差别至关重要。

网络安全中的异常检测涉及探索各种技术和方法,每种技术和方法都适用于不同类型的数据不规则性。策略不是严格应用单一方法,而是利用对数据的深入了解来为每种情况选择最合适的技术。重点是灵活性和适应性,确保选择的方法能够提供对数据最清晰、最准确的见解。

统计方法 – 分析的支柱

统计分析始终是异常检测的一种可选方法,尤其适用于网络安全数据。通过了解数据的固有分布和中心趋势,我们可以突出显示偏离规范的值。一种简单但功能强大的方法是 Z 分数,它以标准偏差为单位衡量数据点与平均值的距离。

import numpy as np

# Derive Z-scores for data points in a feature
z_scores = np.abs((df['mitre_technique'] - df['mitre_technique'].mean()) / df['mitre_technique'].std())

outliers = df[z_scores > 3]  # Conventionally, a Z-score above 3 signals an outlier

为什么这很重要: 此方法允许我们定量衡量数据点偏差的显著性。此类异常值可能会严重歪曲平均值等聚合指标,甚至会对机器学习模型的训练产生不利影响。请记住,不应始终删除异常值;一切都取决于上下文!有时您甚至可能专门寻找异常值。

关键库: 虽然我们在上面使用了 NumPy,但 SciPy 也可用于复杂的统计操作。

聚合和排序 – 解开层

数据通常分层呈现。通过从高层视图开始,逐渐深入到细节,我们可以找到不一致或异常。当我们按 MITRE ATT&CK 战术等类别进行聚合,然后深入研究时,我们会从技术到规则逻辑和警报上下文逐渐发现更精细的细节和潜在异常。

# Aggregating by tactics first
tactic_agg = df.groupby('mitre_tactic').size().sort_values(ascending=False)

从这里,我们可以确定最常见的战术,并选择计数最高的战术。然后,我们为该战术过滤数据,以确定与最常见战术相关的最常见技术。技术通常比战术更具体,因此可以更详细地解释我们可能正在观察的内容。按照相同的方法,我们可以过滤此特定技术,按规则聚合,并查看该检测规则以获取更多上下文。此处的目的是找到可能歪曲我们数据集的“嘈杂”规则,因此需要删除相关的警报。可以重复此循环,直到删除异常值并且百分比看起来更准确。

为什么这很重要: 这种分层分析方法可确保不遗漏任何细节。通过从一般到具体的方式进行导航,我们有条不紊地消除不一致之处。

关键库: Pandas 仍然是英雄,能够以精准的方式处理数据整理工作。

可视化 – 清晰的镜头

有时,人眼在正确的视觉表示的帮助下,可以直观地检测到即使是最复杂的算法也可能遗漏的东西。例如,箱线图不仅显示数据的中心趋势和分布,而且还清楚地标记出异常值。

import seaborn as sns
import matplotlib.pyplot as plt

plt.figure(figsize=(12, 8))
sns.boxplot(x='Malware Family', y='Malware Score', data=df)
plt.title('Distribution of Malware Scores by Family')
plt.show()

来自示例数据集的按家族划分的恶意软件分布评分的示例可视化

为什么这很重要: 可视化将抽象数据转换为有形的见解。它根据需要提供整体和精细的视角。

关键库: Seaborn 构建在 Matplotlib 之上,擅长将数据转化为视觉故事。

机器学习 – 高级守卫

当传统方法不足时,机器学习会介入,为异常情况提供一个预测性的视角。虽然许多算法被设计用来分类已知的模式,但有些算法,例如深度学习中的自编码器,会学习重新创建“正常”数据,并将任何偏差标记为异常。

为什么这很重要: 随着数据复杂性的增长,构成异常的边界变得模糊不清。机器学习提供能够随着数据演变的自适应解决方案。

关键库: Scikit-learn 是用户友好的经典机器学习技术的宝库,而 PyTorch 则带来了深度学习的力量。

在数据分析中完善异常检测类似于通过实践和迭代来精炼一项复杂的技能。这个过程通常涉及反复试验,每次迭代都会增强分析师对数据集的熟悉程度。这种渐进式的理解是确保最终分析既稳健又有洞察力的关键。在数据分析中,探索和完善的过程与最终结果本身同样有价值。

在进行深入的趋势分析之前,确保数据经过彻底的预处理和转换非常重要。正如在任何细致的任务中精确和可靠性至关重要一样,它们在数据分析中也同样至关重要。 清理、标准化、丰富和去除异常的步骤为获得有意义的见解奠定了基础。 如果没有这些仔细的准备,分析结果可能会从轻微不准确到严重误导不等。 只有当数据经过适当的提炼且没有扭曲时,它才能揭示其真正的价值,从而在趋势分析中得出可靠且可操作的见解。

趋势分析:揭示数据中的模式

在网络安全的动态领域中,威胁行为者不断演变其策略、技术和程序 (TTP),因此,掌握新兴威胁是至关重要的。 趋势分析在这方面充当着重要的工具,提供了一种识别和理解网络威胁随时间推移的模式和行为的方式。

通过利用 MITRE ATT&CK 框架,网络安全专业人员可以使用结构化和标准化的方法来分析和分类这些不断演变的威胁。 此框架有助于系统地识别攻击方法中的模式,使防御者能够有效地预测和响应对手行为的变化。

通过 MITRE ATT&CK 框架的视角,趋势分析将原始的网络安全遥测数据转化为可操作的情报。 它使分析师能够跟踪攻击策略的演变,并相应地调整其防御机制,确保在网络安全管理中采取积极主动的姿态。

从广泛的概述开始:聚合和排序

首先从鸟瞰的角度开始分析至关重要。 这种全景视角使我们能够先确定正在使用的更广泛的策略,然后再深入研究更精细的技术和基本检测规则。

首要策略: 通过根据 MITRE ATT&CK 策略聚合我们的数据,我们可以辨别对手倾向于使用的总体策略。 这描绘了他们的主要目标,无论是初始访问、执行还是数据泄露。

top_tactics = df.groupby('mitre_tactic').size()
 .sort_values(ascending=False)

深入研究技术: 一旦我们确定了一个突出的策略,我们就可以将注意力集中在该策略链接的技术上。 这揭示了对手的具体作案手法。

chosen_tactic = 'Execution'

techniques_under_tactic = df[df['mitre_tactic'] == chosen_tactic]
top_techniques = techniques_under_tactic.groupby('mitre_technique').size()
 .sort_values(ascending=False)

检测规则和逻辑: 在我们将注意力集中在特定技术上时,就该深入研究,找出触发警报的检测规则。 这不仅展示了检测到的内容,而且通过审查检测逻辑,我们还可以了解被标记的确切行为和模式。

chosen_technique = 'Scripting'

rules_for_technique = techniques_under_tactic[techniques_under_tactic['mitre_technique'] == chosen_technique]

top_rules = rules_for_technique
 .groupby('detection_rule').size().sort_values(ascending=False)

这种分层的级联方法类似于剥洋葱。 随着每一层,我们都会暴露出更复杂的细节,从而完善我们的视角并磨砺我们的洞察力。

时间的力量:时间序列分析

在网络安全领域,时间不仅仅是一个指标,它还是一种叙事。 时间戳通常被忽视,但却是见解的金矿。 时间序列分析使我们能够绘制随时间推移的事件,从而揭示可能表明对手活动、特定攻击波或休眠期的模式、峰值或低谷。

例如,绘制随时间推移的端点恶意软件警报可以揭示对手的运行时间或突出显示同步的多向量攻击

import matplotlib.pyplot as plt

# Extract and plot endpoint alerts over time
df.set_index('timestamp')['endpoint_alert'].resample('D').count().plot()
plt.title('Endpoint Malware Alerts Over Time')
plt.xlabel('Time')
plt.ylabel('Alert Count')
plt.show()

时间序列分析不仅可以突出“何时”发生,还可以提供有关某些峰值或异常背后“原因”的见解。 它有助于将外部事件(如新漏洞的发布)与内部数据趋势相关联。

相关性分析

了解不同数据集之间的关系可以提供有价值的见解。 例如,一种类型的警报的激增可能与系统中另一种类型的活动相关,从而揭示多阶段攻击活动或转移策略。

# Finding correlation between an increase in login attempts and data exfiltration activities
correlation_value = df['login_attempts'].corr(df['data_exfil_activity'])

借助 pandas corr,此分析有助于辨别多个看似孤立的活动是否是协同攻击链的一部分。

相关性也不必是指标驱动的。 在分析威胁时,通过将旧的发现与新的发现进行比较,很容易找到价值和新的见解。

机器学习和异常检测

由于数据量巨大,手动分析变得不切实际。 机器学习可以帮助识别可能逃脱人眼视线的模式和异常。 隔离森林K 近邻 (KNN) 等算法通常用于发现偏差或常用相关数据的集群。

from sklearn.ensemble import IsolationForest

# Assuming 'feature_set' contains relevant metrics for analysis
clf = IsolationForest(contamination=0.05)
anomalies = clf.fit_predict(feature_set)

在这里,异常变量将标记偏离正常值的数据点,从而帮助分析师快速查明不寻常的行为。

行为模式和端点数据分析

分析从检测规则收集的端点行为数据使我们能够挖掘出可能表明更广泛威胁态势、网络活动或不断发展的攻击者 TTP 的总体模式和趋势。

策略进展模式: 通过监视随时间推移检测到的行为序列,我们可以发现对手在其攻击链中移动的模式。 例如,如果存在初始访问技术之后是执行,然后再是横向移动的持续趋势,则表明使用了常见的攻击者手册。

命令行趋势分析: 即使在恶意命令行参数中,也可能会出现某些模式或序列。 监视最常检测到的恶意参数可以深入了解首选的攻击工具或脚本。

示例

# Most frequently detected malicious command lines
top_malicious_commands = df.groupby('malicious_command_line').size()
 .sort_values(ascending=False).head(10)

进程交互趋势: 虽然单个父子进程关系可能是恶意的,但发现这些交互中的趋势可能暗示着广泛的恶意软件活动或攻击者 TTP。 例如,如果大量端点显示相同的异常进程交互,则可能表明存在共同威胁。

时间行为模式: 与其他类型的数据一样,端点行为数据的时间方面也可能具有启发性。 分析某些恶意行为的频率和时间可以暗示攻击者的运行时间或活动持续时间。

示例

# Analyzing frequency of a specific malicious behavior over time
monthly_data = df.pivot_table(index='timestamp', columns='tactic', values='count', aggfunc='sum').resample('M').sum()

ax = monthly_data[['execution', 'defense-evasion']].plot(kind='bar', stacked=False, figsize=(12,6))

plt.title("Frequency of 'execution' and 'defense-evasion' Tactics Over Time")

plt.ylabel("Count")
ax.set_xticklabels([x.strftime('%B-%Y') for x in monthly_data.index])
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

注意:此图像来自示例数据,而不是来自《全球威胁报告》

通过在宏观级别聚合和分析端点行为数据,我们不仅可以识别孤立的威胁,还可以发现波浪、趋势和新兴模式。 这种更广泛的视角使网络安全团队能够更有效地预测、准备和应对大规模网络威胁。

虽然这些是一些关于如何执行趋势分析的示例,但没有正确或错误的方法。 每个分析师都有自己的偏好或他们或利益相关者可能想要提出的问题。 以下是一些分析师在进行趋势分析时可能对网络安全数据提出的其他问题或查询。

  • 本季度对手正在利用的前三大策略是什么?
  • 哪些检测规则触发最多,是否存在共同点?
  • 端点警报中是否存在任何基于时间的模式,可能暗示对手的时区?
  • 随着更多服务迁移到云,云警报是如何演变的?
  • 哪些恶意软件系列变得越来越普遍,可能的原因是什么?
  • 数据模式是否暗示任何季节性,例如年底活动增加?
  • 外部事件与网络活动激增之间是否存在关联?
  • 在警报和攻击方面,工作日数据与周末数据有何不同?
  • 哪些组织资产最受攻击,它们的防御是否是最新的?
  • 特权帐户中是否存在内部威胁或异常行为的任何迹象?

网络安全中的趋势分析是一个动态过程。 虽然我们已经制定了一些基本的技术和问题,但有很多方法可以处理这个广阔的领域。 每个分析师可能都有自己的偏好、工具和方法,这完全没有问题。 其本质在于在有意识地意识到每个暴露于威胁的生态系统的不断变化的威胁态势的同时,不断发展和适应我们的方法。

缩减:简化以提高清晰度

在经历了数据分析的初始阶段后,我们现在进入下一阶段:缩减。 此步骤旨在将我们全面的数据提炼和集中为更易于理解和关注的格式。

到目前为止的分析旅程回顾

  • 提取: 初始阶段涉及设置我们的 Google Cloud 环境并选择用于分析的相关数据集。
  • 预处理和转换: 在此阶段,数据在我们的 Colab 笔记本中提取、处理和转换,为详细分析做好准备。
  • 趋势分析: 此阶段深入了解了网络攻击策略、技术和恶意软件,构成了我们分析的核心。

虽然我们在 Colab 笔记本中的详细数据对于分析师来说是广泛且信息丰富的,但对于更广泛的受众来说可能过于复杂。 因此,缩减阶段侧重于将此信息提炼成更简洁和易于访问的形式。 其目的是使发现结果清晰易懂,确保它们能够有效地在各个部门或利益相关者之间进行沟通和利用。

选择和聚合关键数据点

为了有效地传达我们的发现,我们必须根据受众的需求定制演示文稿。 并非每个利益相关者都需要收集的全部数据; 许多人更喜欢突出最可操作点的摘要版本。 这就是数据选择和聚合发挥作用的地方,专注于最重要的元素并以易于访问的格式呈现它们。

以下是如何使用 Pandas 来聚合和浓缩数据集的示例,重点关注端点行为的关键方面

required_endpoint_behavior_cols = ['rule_name','host_os_type','tactic_name','technique_name']


reduced_behavior_df = df.groupby(required_endpoint_behavior_cols).size()
 .reset_index(name='count')
 .sort_values(by="count", ascending=False)
 .reset_index(drop=True)

columns = {
    'rule_name': 'Rule Name', 
    'host_os_type': 'Host OS Type',
    'tactic_name': 'Tactic', 
    'technique_name': 'Technique', 
    'count': 'Alerts'
}

reduced_behavior_df = reduced_behavior_df.rename(columns=columns)

此代码和过程的一个显著方面是它提供的灵活性。 例如,我们可以根据满足我们需求的各种数据点对数据进行分组。 有兴趣识别对手使用的流行策略? 按 MITRE ATT&CK 策略分组。 想要揭示伪装的恶意二进制文件? 重新访问提取以添加更多弹性通用架构 (ECS) 字段,例如文件路径,在防御规避上进行筛选,并进行聚合以揭示常见的路径。 此方法可确保我们创建的数据集既有启发性,又不会过于丰富,专为希望了解我们分析来源的利益相关者量身定制。

此过程涉及按相关类别(例如规则名称、主机操作系统类型以及 MITRE ATT&CK 策略和技术)对数据进行分组,然后计算出现次数。 此方法有助于识别数据中最普遍的模式和趋势。

数据聚合以获得缩减数据集的图表示例

将缩减的数据导出到 Google 表格以方便访问

经过缩减的数据现在以数据框的形式存储在内存中,可以导出。我们选择 Google Sheets 作为分享这些见解的平台,因为它具有广泛的可访问性和用户友好的界面。得益于与 Google Cloud 服务的集成,将数据导出到 Google Sheets 的过程非常简单高效。

以下是如何使用 Python 从我们的 Colab 笔记本将数据上传到 Google Sheets 的示例

auth.authenticate_user()
credentials, project = google.auth.default()
gc = gspread.authorize(credentials)
workbook = gc.open_by_key("SHEET_ID")
behavior_sheet_name = 'NAME_OF_TARGET_SHEET'
endpoint_behavior_worksheet = workbook.worksheet(behavior_sheet_name)
set_with_dataframe(endpoint_behavior_worksheet, reduced_behavior_df)

只需几行简单的代码,我们就有效地将数据分析结果传输到了 Google Sheets。这种方法因其可访问性和易用性而被广泛使用。然而,还有其他多种呈现数据的方法,每种方法都适用于不同的需求和受众。例如,有些人可能会选择像 Looker 这样的平台,以更动态的仪表板格式呈现处理后的数据。这种方法特别适用于创建交互式且视觉上引人入胜的数据演示。它确保即使是不熟悉数据分析技术方面的利益相关者(例如在 Jupyter Notebook 中工作的人)也能轻松理解并从这些见解中获得价值。

这种简化的数据缩减和呈现过程可以应用于不同类型的数据集,例如云 SIEM 警报、端点行为警报或恶意软件警报。目标始终相同:简化和集中数据,以便获得清晰且可操作的见解。

演示:展示见解

在精心改进我们的数据集后,我们现在专注于最后阶段:演示。在这里,我们将数据集(现在整齐地组织在 Google Sheets 或 Looker 等平台上)转换为既信息丰富又引人入胜的格式。

用于深入分析的数据透视表

使用数据透视表,我们可以创建趋势分析结果的全面概述。这些表允许我们以多维度方式显示数据,从而深入了解网络安全的各个方面,例如常见的 MITRE ATT&CK 战术、所选技术和首选的恶意软件家族。

我们的数据可视化方法包括

  • 使用 MITRE ATT&CK 战术的广泛概述: 从一般角度开始,我们使用数据透视表概述网络威胁中使用的不同战术。
  • 详细分解: 从这个全景视图中,我们深入研究,为每种流行的战术创建单独的数据透视表,然后深入分析每种技术和具体的检测规则。

这种有条理的过程有助于揭示检测逻辑和警报的复杂性,有效地讲述网络威胁态势的故事。

图表展示了聚合如何汇集到上下文报告信息中

跨受众的可访问性: 我们的数据演示旨在满足广泛的受众,从精通数据科学的人到那些更喜欢直接理解的人。 Google Workspace 生态系统有助于共享这些见解,使数据透视表、缩减的数据集和其他元素可以轻松地供参与报告制作过程的所有人访问。

将可视化整合到报告中: 在制作报告时,例如在 Google Docs 中,Google Sheets 中的图表和表格的集成是无缝的。这种集成确保对数据集或数据透视表的任何修改都可以轻松地在报告中更新,从而保持演示的效率和一致性。

根据受众定制演示: 数据见解的演示不仅仅是传达信息;还要以视觉上吸引人且易于理解的方式进行。对于更精通技术的受众来说,带有动态图表和功能的交互式 Colab 笔记本可能是理想的选择。相反,对于营销或设计团队,Looker 中设计精良的仪表板可能更合适。关键是确保演示清晰、简洁、视觉上具有吸引力,并根据受众的特定偏好和需求进行定制。

结论:反思数据分析之旅

在总结时,反思我们在分析网络威胁数据中探索的领域是很有价值的。这个旅程包括几个关键阶段,每个阶段都对我们最终的见解做出了重大贡献。

穿越 Google 的云生态系统的旅程

我们的路径经历了多个 Google Cloud 服务,包括 GCP、GCE、Colab Notebook 和 Google Workspace。每个都发挥了关键作用

数据探索: 我们从一系列想要回答的与网络相关的问题开始,并探索了我们有哪些可用的庞大数据集。在本博客中,我们仅关注 BigQuery 中可用的遥测数据。 数据提取: 我们首先提取原始数据,利用 BigQuery 有效处理大量数据。提取发生在 BigQuery 中以及我们的 Colab 笔记本内。 数据整理和处理: Python 和 pandas 库的强大功能被用来清理、聚合和改进这些数据,就像厨师熟练地准备食材一样。 趋势分析: 然后,我们使用多种方法对我们改造后的数据集执行趋势分析,以便随着时间的推移深入了解对手的战术、技术和程序。 缩减: 在我们趋势分析的基础上,我们按目标数据点聚合不同的数据集,为向利益相关者和同行演示做好准备。 过渡到演示: 在 Web 浏览器中从数据分析到演示的轻松转换突出了我们工具的灵活性,促进了无缝的工作流程。

工作流程中的模块化和灵活性

我们方法的关键方面是我们工作流程的模块化性质。从数据提取到演示的每个阶段都具有 Google Cloud 生态系统中可互换的组件,使我们能够根据特定需求定制流程

多功能工具: Google Cloud Platform 提供了多种工具和选项,从而可以灵活地进行数据存储、分析和演示。 自定义分析路径: 根据我们分析的特定要求,我们可以调整和选择不同的工具和方法,从而确保为每个数据集采用定制的方法。 身份验证和授权: 由于我们的实体托管在 Google Cloud 生态系统中,因此对不同工具、站点、数据等的访问都非常轻松,确保了在服务之间的平稳过渡。

协调和工具同步

我们的技术技能与所选工具之间的协同作用至关重要。这种协调确保分析过程不仅对本项目有效,而且为未来更有效和更有洞察力的分析奠定了基础。这些工具用于增强我们的能力,使重点保持在获得有意义的见解上,而不是陷入技术复杂性。

总而言之,本次数据分析之旅强调了深思熟虑的方法、利用正确的工具和技术以及适应网络威胁数据分析需求的重要性。最终结果不仅是一系列发现,而且是一种改进的方法,可以应用于未来不断发展的网络安全领域中的数据分析工作。

行动号召:开始您自己的数据分析之旅

您的分析工作区已准备就绪!您可以使用 Google Cloud 或其他数据分析平台带来哪些创新方法或经验?数据分析领域广阔而多样,尽管每个分析师都带来了独特的风格,但基本方法和原则是通用的。

目标不仅是精通您当前的分析项目,而且是不断增强和调整您的技术。这种持续改进确保您未来在数据分析方面的努力将更富有成效、更具启发性和影响力。投入其中,用 Google Cloud 探索数据分析的世界!

我们鼓励对此主题提出任何反馈和参与!如果您愿意,请随时在 Elastic 的公共 #security Slack 频道中与我们互动。