最近搞了一批国外资料,还在火速翻译和整理中,马上安排到手作资源群那边,有需要的可以加教父微信了解一下,买手工产品,送学习资源,先拿一部分资料机翻给大家试看一哈
后续更新方向有CISSP、工业安全、数据取证、情报分析、大模型网络安全....
扫码添加教父微信咨询
十一月的浪漫满屋
传统企业网络安全依赖于安全信息和事件管理( SIEM ) 系统收集检测和分类安全相关事件所需的数据。基于这些数据,安全专家利用他们对已知攻击者策略和技术的了解来制定规则。他们创建一个剧本,存储这些规则,并定义一系列步骤,以确定当发现符合这些规则的数据时要执行哪些操作。这种类型的防御系统可以检测到传统上影响 IT 系统的大多数威胁。然而,尤其是近年来,这种防御变得不足,因为攻击变得越来越复杂,威胁行为者找到了逃避防御的方法。
用户实体和行为分析(UEBA)是一个使我们能够提供解决方案的概念这些问题。在这个术语下,我们考虑一组技术来描述计算机网络中用户和实体(计算机、路由器、交换机、打印机等)的行为,以便捕获常规行为模式。这些模式将构成一个基线,我们可以将用户或实体的行为与之进行比较。这为我们提供了一个背景,可以更好地评估构成安全风险的行为异常。此外,当攻击者绕过基于规则的防御时,它使我们能够检测到攻击者的行为。这是因为攻击者的行为通常超出了特定用户或实体的正常行为。假设通过拥有足够的数据和背景,我们可以检测到这种异常行为并评估它对我们的计算机网络构成的风险。
在本章中,我们将讨论以下主题:
传统工具的缺点
利用 AI 实现 UEBA(理论部分)
练习 – UEBA 异常检测(实践部分)
技术要求
本章包含实践部分,需要以下Python 库:
numpy
pandas
scikit-learn
ipaddress
为了获得最佳学习效果,建议使用“笔记本”库和平台,例如:
Jupyter
Google Colab
Databricks
传统工具的缺点
传统基于签名的由于以下原因,防御措施变得不足:
攻击者技术的演变:安全规则本质上是静态的,随着软件的发展,新的漏洞不断被发现,新的攻击者技术也不断涌现,可用于绕过防御。这要求安全运营团队不断更改安全规则,以将误报率和漏报率保持在最低水平,而且通常需要使用有限的资源。
内部威胁:静态规则通常可以被了解情况且属于系统组织内部的人员(例如心怀不满的员工)或窃取凭证的攻击者规避。他们可以调整自己的行为,使其看起来类似于有效用户的行为,并在执行攻击活动时保持隐蔽。
需要上下文:很多时候,攻击者的行为可能看起来像正常行为,而无需完整的上下文。特别是如果攻击者获得服务帐户或特权帐户,他们的行为(即使它可能触发某些规则)可能会被忽略或列入白名单。这是因为,在 IT 系统中,通常有一些帐户具有更高的权限,使他们能够有效地执行管理任务。此外,横向移动等技术很难使用静态规则进行检测,因为它们需要与正常远程登录。
在以下章节中,我们将描述作为解决这些问题的替代方案的 AI 方法。
利用 AI 实现 UEBA
有多个启发式技术用于捕获用户和实体行为的模式。然而,人工智能( AI ) 在模式识别的其他问题上的成功促使其在计算机安全中的应用,特别是在 UEBA 中。这个想法是使用 SIEM 工具中收集的数据,对其进行矢量化,并定义我们将用于训练机器学习模型的特征。该模型可以以无监督的方式进行训练,或者我们也可以将专家的领域知识编码为标签,以便能够使用监督机器学习方法。
在下一节中,我们将描述UEBA的常见特征和特征提取技术。
UEBA 功能
的行为可以通过提取以下特征类别来表征用户或实体:
访问模式:通常,网络中的普通用户帐户用于登录物理或虚拟设备的子集。此外,特权的使用应受到监管,以使每个特权都有其用途,并将用于执行特定的工作或活动。因此,应该能够捕获此模式或此访问模式中的任何异常值。帐户或特权的异常使用可能表明这些帐户或特权被滥用或存在实际的攻击者活动。
网络连接:SIEM 软件允许我们集中记录特定主机上用户的网络连接。这意味着我们可以跟踪主机上的用户连接到特定服务器的频率、连接端口以及连接时间。
进程执行:端点代理应使我们能够捕获哪个进程生成了可能导致事故的显著事件。此进程可能源自恶意软件,也可能源自攻击者使用受害者机器上已存在的可执行文件。了解这方面的背景至关重要用于确定事件的风险并检测可能的攻击者活动。
数据流量:有多种工具可以跟踪网络中设备之间的数据传输方式。例如,端点代理可以检测往返设备的流量。网络安全设备(如防火墙或路由器)也可以捕获甚至检查设备之间的网络流量。此外,软件数据丢失防护( DLP )主动监控数据传输,以便能够检测敏感数据是否被泄露到公司网络之外。所有这些类别的软件都可以将日志传输到 SIEM 或数据仓库/数据湖中。这些日志可以用作UEBA 模型的输入数据。
时空特征:安全相关事件上下文中一个经常重要的方面是事件的地点和时间。例如,如果在完全不同的大陆登录事件中看到在某个地方工作的人拥有的设备,这表明存在潜在的安全风险。此外,如果登录事件发生在正常工作时间间隔之外的时间,这使得事件更加可疑。
特征提取
特征提取可以通过多种方式进行特征提取,以找到合适的数据数字表示。这样做是为了为机器学习模型创建输入。在某些情况下,数据最初是数字,例如网络连接数或传输的兆字节数。但是,有时,数据是文本或具有自定义结构。一些最常见的特征提取方法如下:
独热编码:特征提取方法是合适的,通常用于分类数据。如果数据具有来自N 个类别的值,我们将构建一个长度为N 的特征向量。对于每个数据点,我们构建一个向量,其中所有值都设置为零,除了特征向量第 i 个索引中的值,其中i是分配给此数据点的类别的索引。此索引的值设置为一,这意味着该点属于索引类别。
频率计数(词袋):此方法类似于独热编码,因为我们创建了一个长度为N的特征向量。但是,我们不仅在相应的索引中分配值1,而是计算每个类别中事件的发生次数,并在每个类别的索引中分配发生次数。例如,我们可以测量按端口分组的设备连接数。如果用于远程连接的端口是389、464和3389 ,那么我们就有三个类别( N =3)。
词频/逆文档频率(TF/IDF):方法很常见在自然语言处理( NLP ) 中,但它可以用于任何具有与文本文档类似结构的数据。例如,它可以用于任何自由文本字段,如网络数据包或源代码的内容。使用以下公式,我们计算每个术语 ( TF )的出现次数:
但是,我们还要考虑到有些术语在每个文档中都经常出现,所以我们实际上想计算相对频率来表征特征向量。因此,我们还计算了 IDF,它是包含特定术语的文档比例的倒数:
因此,TF/IDF 值由词项的 TF 和 IDF 的乘积决定。如果我们有N 个可能的那么我们就有一个长度为N的特征向量,类似于独热编码和频率计数。
时间序列特征:及时系列,特征需要考虑数据中的时间依赖性。有多种方法可以实现这一点;以下是一些常见的方法:
傅里叶变换:傅里叶变换用于将输入数据从时域转换为频域。我们认为控制数据变化的底层函数是不同频率的正弦分量的总和。傅里叶变换使我们能够发现这些频率并将多个频率上的强度表征为特征。
小波变换:小波变换是傅里叶变换的替代方法,更适合非平稳时间序列。这意味着它可以捕捉随时间变化的频率模式。
时间序列属性:作为特征,我们还可以使用时间戳值,例如时间纪元或滞后,或统计属性,例如平均值或标准差。此外,我们还可以使用时间序列的属性,例如自相关。
在本节中,我们简要描述了 UEBA 的 AI 方法。在下一节中,我们将尝试通过类似于真实 UEBA 问题的练习进行实际应用。
练习——UEBA 异常检测
在这个练习中,我们考虑网络中某个帐户和设备的网络活动数据集。我们从这个简化的网络日志中提取特征,并确定是否存在任何可能指向被盗凭证、违反政策或类似情况的异常流量。
我们使用一个数据集,该数据集代表可以在端点代理或网络设备的日志中看到的网络流量数据的简化版本。我们按如下方式加载它:
df_ueba = pd.read_csv('ueba.csv')
UEBA数据集内容如下图所示:
图 8.1 – 包含 UEBA 数据的 DataFrame
我们可以观察到,数据集包含名为John Doe的用户设备一天的网络流量片段。
从图中可以看出,各列代表以下内容:
用户名:设备用户的用户名
HostIP :主机设备的 IP 地址
RemoteIP :用户正在连接的设备的 IP 地址
RemotePort:用于连接远程设备的端口
日期/时间:网络连接的日期和时间
HostLocation:用户正在使用的主机的位置
RemoteIPLocation :远程主机的位置
ProcessImage :在主机设备上建立网络连接的可执行文件的名称
演习目标是探索这个数据集,定义特征,并检测是否存在我们应该关注的安全风险异常。现在,让我们更深入地研究这个表。
数据集由一张表组成,该表包含多个描述网络活动的列。我们可以注意到有多组列:
通信标识符与 IP 和端口列相关
时空是指日期/时间、主机位置和远程IP 位置
上下文是用户名 和进程图像
快速了解列中的值的一种简单方法是使用pandas库中的describe()函数:
df_ueba.describe(include='all')
此函数显示如下输出:
图 8.2 – 具有 UEBA 数据配置文件的 DataFrame
这表明有两个常量列 - Username和HostLocation。原因是此数据集跟踪一台主机上的活动,在本例中该主机仅由一名用户使用。此外,有一列只有两个可能的值 - HostIP。这是因为主机的 IP 在数据收集过程中发生了变化,如果 IP 地址未设置为静态,则可能会发生这种情况。但是,活动是在同一台主机上执行的。
我们有一个日期/时间列,如果我们有多天的数据,这将很有用,但要记住请注意,我们的数据集仅包含一天的数据,因此我们不会将其用于异常检测。如果我们有多天的数据,我们可以将其添加为特征,以检查事件是否发生在异常时间段(例如,在工作时间之外)。
现在,我们需要创建特征。在这里,我们主要使用数值特征选项(整数和分类特征),这些特征来自离散数量的类别。
以下列保留为潜在特征:
HostIP :数字特征
RemoteIP :数字特征
RemotePort:分类特征
HostLocation:分类特征
RemoteIPLocation:分类特征
ProcessImage:分类特征
我们决定用 IP 地址创建数字特征,因为使用现有的 Python 库(例如ipaddress)将 IP 地址转换为整数很简单。例如,我们使用以下函数:
import ipaddress
def iptointeger(ip):
return int(ipaddress.ip_address(ip))
其他特征(例如位置和ProcessImage)将是分类的,因为它们包含来自离散集合的值,并且可能值的数量不是很大,不足以使特征向量维数非常高。
我们创建一个新的 DataFrame 来存储特征:
ueba_features = pd.DataFrame() # creation of a dataframe
# creation of a HostIP numerical feature
ueba_features['HostIP'] = df_ueba['HostIP'].apply(iptointeger)
# creation of the RemoteIP numerical feature
ueba_features['RemoteIP'] = df_ueba['RemoteIP'].apply(iptointeger)
对于分类特征,我们使用scikit-learn 库中的OneHotEncoder函数:
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(
sparse_output=False).set_output(transform="pandas")
categorical_encoded = encoder.fit_transform(
df_ueba[['RemotePort', 'HostLocation',
'RemoteIPLocation', 'ProcessImage']])
我们将分类特征分配回特征DataFrame:
ueba_features[categorical_encoded.columns] = categorical_encoded
为了均衡特征的影响,我们将它们缩放到0到1之间的值。为此,我们可以使用scikit-learn 中的MinMaxScaler函数:
min_max_scaler = MinMaxScaler()
ueba_features_scaled = min_max_scaler.fit_transform(ueba_features)
一旦我们将数据转换为数字特征,特征矩阵就将是这样的:
图 8.3 – UEBA 数据集的特征矩阵显示
有多个人工智能我们可以使用的方法进行异常检测。由于我们的数据没有任何标签,因此我们从无监督异常检测子集中选择一种方法。这次,我们选择IsolationForest,因为它是一种强大的方法,并且可以在 scikit-learn 库中使用:
from sklearn.ensemble import IsolationForest
然后,我们实例化IsolationForest模型并在我们的数据集上对其进行训练:
isolationforest = IsolationForest(n_estimators=100, contamination=0.05)
anomaly_labels = isolationforest.fit_predict(ueba_features_scaled)
决策函数为我们提供了一种异常分数的形式。分数越低,数据点越异常:
anomaly_scores = isolationforest.decision_function(
ueba_features_scaled)
ueba_features['anomaly_labels'] = anomaly_labels
ueba_features['anomaly_scores'] = anomaly_scores
在训练模型并在我们的数据集上进行测试之后,我们可以绘制决策函数值,如下所示:
df_ueba.describe(include='all')
0
输出如下阴谋:
图 8.4 – UEBA 数据集中行的决策函数值
该图显示了两个具有负面决策函数的非常显著的异常值。这表明异常检测器对这两个数据点是异常的信心很强。事实上,我们可以显示所有异常标签为–1的点。请参阅以下屏幕截图,该屏幕截图是通过显示ueba_features DataFrame的内容创建的:
图 8.5 – 异常点特征集的第一部分
显示特征向量的最后一部分可以让我们了解某些点异常的原因。如果我们查看最后两个点,我们可以看到有一个自定义脚本正在建立网络连接,这是一种罕见事件。此外,看看下一部分:
图 8.6 – 异常点特征集的最后一部分
在这里,我们可以看到这些点的位置也不同。例如,在这里我们可以看到中国和葡萄牙作为目标 IP 的位置,这与该数据集中更常见的位置(例如英国或美国)不同。
除了真阳性之外,我们还可以看到另外两个看起来像异常值的点。这些是假阳性,就异常分数而言,它们几乎不超过零线。然而,它们被宣告为异常值,部分原因是污染超参数决定了数据集中预期的异常值百分比。
无监督异常检测的一个普遍问题是存在误报。原因在于,在每种异常值检测方法中,决策边界都取决于超参数,而很难提前知道这些超参数的值。例如,在IsolationForest中,污染就是这样一个超参数。我们可以根据有关数据的先前领域知识或基于统计测试(例如,交叉验证)来估计该值,以最大限度地降低误报率和假阴性率。但是,我们仍应准备好对数据进行后处理以检测和消除错误检测。
其他用例
UEBA 可用于多种其他用例,以检测攻击者活动。以下是一些示例:
检测横向移动:攻击者可能试图在不同的机器之间移动,以找到具有有价值信息的服务器
数据泄漏检测:攻击者可能试图从组织中窃取高度受限的数据
滥用特权访问:攻击者可能使用特权帐户访问敏感信息
攻击者的侦察活动:攻击者可能会调查网络,试图找到漏洞或包含有价值数据的服务器
检测安全配置错误:可能存在意外配置错误,可能被外部攻击者或内部威胁利用
这些是可以使用 UEBA 方法检测到的异常网络流量活动的示例,与组织中主机的基线网络活动相比。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...