01
—
网络攻击多年来一直在上升,民族国家威胁行为者和外国黑客团体加入进来,投入更多的时间和资源进行攻击。为了有效降低网络安全风险,我们需要先进的数据解决方案,使我们能够在现实世界的规模上关联和分析连接。
将向您展示构建知识图谱如何在攻击的所有阶段为您提供支持 - 从攻击开始之前到结束以及随后的事件分析。
知识图谱作为数字孪生
知识图谱可创建环境的数字孪生体,使您能够在整体视图中表示全部或部分网络数据。此视图对于网络安全分析师进行查询和操作非常有用。此外,数据科学家可以分析知识图谱,他们构建模型来检测恶意活动。
自动化和系统化网络安全的任务依赖于处理组织的安全数据并将其纳入图表。数字足迹可能包括:
§哪些系统连接到哪些系统
§哪些系统对互联网开放
§用户及其所属的组
§向组成员授予哪些权限
§您的策略及其应用到的系统
§最重要的保护系统(皇冠上的宝石)
您的图表可能包含以下事件:
§用户访问事件
§应用程序资源使用情况
§连接的设备
§服务运行状况
创建网络基础结构的图形
网络本质上是由连接组成的图形。将此信息存储在图形数据库中可实现可操作的见解和分析。
创建网络图比您想象的要容易。例如,主要的云提供商提供元数据 API 服务来描述客户已有的基础架构。然后,这些数据可以很容易地被摄取到像Neo4j这样的图形数据库中。例如,基仕伯提供云资产清单;Azure有Azure Resource Management API和Microsoft Graph API;AWS 提供其 AWS Organizations API。
或者,某些工具会为您创建网络图,例如制图,这是一种基于Neo4j构建的开源工具,在本文的附录中进行了介绍。
对于本地平台,您可以使用供应商提供的 API 调查系统资源(例如VMWare 或 HyperV 中)。
一旦信息进入图形数据库,就可以直接运行查询并可视化网络结构。
此简单的 Cypher 查询返回 200 个节点,如以下屏幕截图所示。
-
MATCH (n) RETURN n LIMIT 200
您的网络结构加载到图表中后,您可以识别最需要保护的皇冠上的宝石。为节点提供特殊标签或属性,以获得有价值的资源。然后,您可以轻松查询它们并跟踪依赖项。添加标记关键访问路径的关系(例如,我们的示例图包括FIREWALL_INGRESS等关系)。
将软件信息添加到图表
如果已在使用配置管理工具,则可以使用其 API 引入它们监视的软件和操作系统的版本和运行状况报告。如果您没有使用配置管理工具,则可以从Nessus或Nmap开始,它们可以扫描网络和设备,并将该信息与软件活动日志相结合,以提供版本,库,它们使用的端口,谁在访问它们以及它们依赖哪些资源之类的信息。然后,将此信息引入到图形中。
利用威胁情报丰富图表
MITRE,NIST和其他公司创建了在全行业范围内使用的漏洞数据库。通过将此数据引入图表,您可以查看漏洞对关键资源的影响,并揭示这些资源的潜在攻击路径。
由MITRE开发的ATT&CK-D3FEND矩阵是攻击者已知使用的一套免费可用的策略和漏洞利用,以及用于对抗它们的相应防御措施。将基础架构可视化为图形后,您可以看到攻击路径集,包括来自ATT&CK的信息。然后,您可以从D3FEND链接到防御策略。GraphKer 是附录中讨论的开源工具,它简化了将威胁情报加载到 Neo4j 中的过程。
可视化漏洞和攻击路径
攻击路径从攻击者的角度出发,显示潜在多阶段攻击的路径以及每个阶段使用的漏洞。此过程超越了静态漏洞列表,并着眼于攻击者如何使用它们。
攻击路径分析可以识别攻击者可能通过您的基础架构访问这些资产的不同路径。网络上的所有攻击路径共同构成了攻击图。将路径可视化为图形是直观的,特别是使用图形数据可视化工具(如Neo4j Bloom)。
评估、规划和准备
IT 环境的数字孪生体具有战术优势。在实施更改之前,可以通过编程方式评估更改对环境的影响。
拥有用于检查更改的审批门对于保护系统至关重要。根据您实施的规则,您可以自动拒绝或回滚可疑更改,或者提出票证以手动查看它们。
使用图形算法分析数字孪生
一种安全方法是查找影响基础架构最大份额的漏洞类型。然后,评估这些资产被破坏的可能性将揭示将资源集中在何处以实现安全性的巨大提高。
一种更有远见的方法会查看网络中每个节点的上下文,以决定要关注的最重要节点。
Cypher 示例做了一些假设:
§已经创建了 IT 基础结构的图形,并将某些节点分类为面向外部的节点。
§知道您最有价值的资产(您的皇冠上的宝石)的节点ID。
§已经安装了Neo4j Graph Data Science,因此您可以运行图形算法来分析整个图形。
在此 Cypher 示例(在本白皮书的代码存储库中提供)中,我们调用最短路径算法来发现指向称为目标节点的有价值资源的最短路径。我们构建了一个图表,其中包含从互联网到特定皇冠上的宝石的所有路径,并添加了POSSIBLE_ATTACK关系。
-
# build a graph of all shortest attack paths to a specific crown jewel
MATCH (external:ExternalFacingNode)
CALL gds.shortestPath.dijkstra.stream(“attackPathGraph”,
{ sourceNode: id(external),
targetNode: targetId,
path: true})
YIELD sourceNode,targetNode,nodeIds
# create POSSIBLE_ATTACK relationships WITH nodeIds UNWIND apoc.coll.pairsMin(gds.util.asNodes(nodeIds)) AS pair WITH pair[0] AS toNode, pair[1] AS fromNode MERGE (toNode) <- [:POSSIBLE_ATTACK] - (fromNode)
然后,我们获取该攻击图中的所有节点对,并使用中间性中心性算法对它们进行评分。然后,我们将这些分数写回数据库:
CALL gds.graph.create(‘centralityGraph’, ‘*’,
{ relType: {
type: ‘*’,
orientation: ‘UNDIRECTED’,
properties: {} }}, {});
CALL gds.betweenness.stream(‘centralityGraph’, {})
YIELD nodeId, score
WITH gds.util.asNode(nodeId), score AS betweenness
RETURN n.name, betweenness ORDER BY betweenness DESC
每个节点都会根据通过它的攻击路径的数量返回一个分数。
通过将概率附加到攻击路径中的每个跃点,您可以将图形用作漏洞树,并预测哪些攻击最有可能成功。
结合我们计算的两个数字(节点的中心性和执行攻击的可能性)的分数将是确定工作优先级的有力指标。
威胁情报和预测
某些事件会增加攻击的可能性。例如,当一家公司在新闻中被提及时,它更有可能进入攻击者的雷达。
同样,随着新漏洞的披露,攻击者将对其进行测试。假设您已经设置了一个系统来自动从漏洞数据库中引入漏洞。然后,如前所述,您可以快速构建报告并创建有关对皇冠珠宝的潜在影响的警报,并采取主动安全措施来缓解这些威胁。
-
检波
不幸的是,不可能保证完全的安全性,因此如果要采取任何措施来限制攻击,检测违规行为至关重要。
将数据加载到图形数据库中后,您可以自动运行查询来标记网络上事件的特定模式。
您可以通过查找异常模式来检测可疑操作。例如,您可能希望监视 IP 地址登录一个或多个系统的尝试次数,或者您从人们通常不登录的国家/地区看到的登录次数。显示帐户和登录它们的IP的图表可能会使识别此类模式变得容易。
您可以通过监视对来自意外帐户和 IP 地址的文件的访问来发现数据泄漏。例如,假设用户很少查看网络上的文件,但突然使用他们以前从未使用过的 IP 地址或设备访问许多文件。此类事件可能表示帐户已泄露,您可以自动检测到此问题。
如果您检测到正在扫描和分析您的网络,这可能表示攻击已经开始。此外,如果您知道已扫描了哪些资源,则知道攻击最有可能击中的位置,并且可以采取其他措施来保护或混淆该目标。
如果您拾取以前见过的攻击指纹,这可能意味着正在遵循类似的攻击策略 - 甚至可能是同一个攻击者。
入侵检测系统 (IDS) 会监控您的网络是否存在入侵迹象。将IDS 数据加载到图表中,以查看攻击是否正在进行中。
无法解释的网络流量激增可能是DDoS攻击的开始。
检测到正在进行的攻击后,您可以使用该图表了解有关攻击者的更多信息,包括他们的IP地址。
关联这些信号,您可以更轻松地检测攻击并缓解任何未来的攻击。
-
调查与应对
一旦发现可疑事件,首要任务是发现它们是无害的还是代表实际攻击。
假设您可以在图表上一起整体查看可疑事件。然后,您可以找到它们之间的共性,并评估攻击的规模以及攻击可能来自网络的位置。图形进一步使您能够检查围绕这些事件的所有上下文信息,例如所涉及的用户帐户和设备。
图形可视化显示确定如何阻止攻击所需的关键信息 - 可能是通过阻止用户帐户或从特定 IP 地址范围进行访问。
网络攻击通常是一连串的系统妥协。如果您要对所看到的所有网络攻击及其妥协链进行建模,则该模型自然会采用图形的形式。当您遭受网络攻击时,预测攻击者的下一步行动是将最新攻击与图表上的节点进行匹配,并查看接下来最常发生的事件。
通过在网络图中建模系统依赖关系,您可以运行一个简单的查询,以找出当一个系统受到 DDoS 攻击或脱机时,哪些其他系统将受到影响,例如:
-
MATCH (compromisedSystem) <- [:DEPENDS_UPON*] - (system:System)
RETURN system
接下来,安全人员可以提醒负责受攻击系统的团队。若要查询维护依赖于受感染系统的系统的团队,可以运行如下查询
-
MATCH (compromisedSystem) <- [:DEPENDS_UPON*] - (system:System)
<- [:SUPPORTED_BY] - (team:Team)
RETURN team
在网络钓鱼攻击后查找受感染的系统
图形数据库的一大优势是能够深入探索连接。例如,如果我们从网络钓鱼电子邮件开始,我们可以找到用户在那段时间内发送的所有电子邮件,获取接收帐户,然后连接所有系统以查看网络钓鱼攻击的可能程度。此查询查找连接到受感染系统六个或更少跃点的所有可能受影响的实体。
-
MATCH (phishingEmail) - [:WAS_SENT_TO] - (user:User) -[message:SENT_EMAIL_TO|SENT_SLACK_MESSAGE_TO|SENT_IM_TO*0..6]
- (recipient) - [connection:CONNECTED_TO_SYSTEM]
- (potentiallyCompromisedSystem: System)
WHERE connection.date > phishingEmail.sentDate
RETURN potentiallyCompromisedSystem
-
使用社区检测对事件进行分组
安全事件可以加载到图形数据库中,并使用 Louvain等社区检测算法分组为社区。在许多情况下,警报可能是相关的。
-
它们可能表示:
-
相同的攻击,例如正在进行的DDoS攻击
-
由不同的检测机制拾取的相同事件
-
一次攻击的多个部分,例如同一台计算机探测多个主机或发送给多个收件人的网络钓鱼电子邮件
-
CALL gds.graph.create({ ‘communities’, ‘Alert’,
relType: {
type: ‘*’,
orientation: ‘UNDIRECTED’,
properties: {}
CALL gds.louvain.write(‘communities’,
writeProperty: ‘communityId’}
给定一个包含一组警报的图形数据库,此 Cypher 代码运行 Louvain 图形算法来查找社区。
在警报上运行 Louvain后,您可以进一步分析事件。我们可以创建一个表示每个社区的 AlertGroup 对象,并使用算法填充的 communityId 字段将警报链接到其社区:
-
MATCH (a:Alert)
MERGE (a) -> [:IN_GROUP] -> (ag:AlertGroup {name: a.communityId}
该图现在具有与运行以下 Cypher 相同的对象:
-
MERGE (g1:AlertGroup {name: ‘1’})
MERGE (g2:AlertGroup {name: ‘2’})
MERGE (:Alert {name: ‘a’, communityId: 2, from: ‘evilcorp’}) –
[:IN_GROUP] -> (g2)
MERGE (:Alert {name: ‘b’, communityId: 2}) - [:IN_GROUP] -> (g2)
MERGE (:Alert {name: ‘c’, communityId: 2}) - [:IN_GROUP] -> (g2)
MERGE (:Alert {name: ‘d’, communityId: 2}) - [:IN_GROUP] -> (g2)
MERGE (:Alert {name: ‘e’, communityId: 1, from: ‘nicecorp’})
- [:IN_GROUP] -> (g1)
现在,我们可以使用警报上的信息来决定我们对整个组的信任程度,并将该信息写入组:
-
MATCH (group:AlertGroup) - [:IN_GROUP] - (e:Alert {from: ‘nicecorp’})
SET group.trustworthy=’high’;
MATCH (group:AlertGroup) - [:IN_GROUP] - (e:Alert {from: ‘evilcorp’})
SET group.trustworthy=’low’;
要查看此信息,请执行以下操作:
-
MATCH (a:Alert) - [] - (ag:AlertGroup ) WHERE ag.trustworthy IS NOT NULL
RETURN a, ag
此示例的完整代码(以及本文中的所有示例)可在其 Github 存储库中找到。
正如我们所看到的,创建和分析基础设施(数字孪生体)的图形是您可以采取的最有效措施之一,以改善网络安全状况并管理网络安全漏洞和威胁的无休止的动态复杂性。
当然,当您创建基础架构的数字孪生体时,您会发现它具有许多其他用途。以下是一些:
-
Lending Tree试图创建其微服务和依赖关系的实时视图;很快,他们还使用
该工具来预测他们每月的云使用情况。
-
Vanguard将他们的应用程序从Java单体重构为微服务,将其全部映射到Neo4j中,以提高软件质量并实施最佳实践
-
英国教育部使用Neo4j AuraDB来映射和现代化其IT环境,整合软件许可并
用节省的费用支付订阅费用
图表增加了早餐的复杂性,没有比我们今天面临的不断变化的网络安全威胁更复杂的领域了。
02
—
原文始发于微信公众号(安技汇):网络安全图谱:作为数字孪生的知识图谱
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论