图形语义支持将数据建模和查询为互连网络。 此方法擅长表示具有多对多关系、分层结构和网络系统(包括社交网络、建议引擎、连接资产和知识图)的复杂数据。
本文探讨以下使用 KQL 图形语义的常见方案:
社交网络分析
社交网络分析表示一种基本图形用例,其中节点是用户,边缘表示关系或交互。 考虑一个数据模型,其中包含 用户 属性(名称、组织)和 “了解 ”表,记录用户之间的关系:
传统方法挑战
如果没有图形语义,查找“好友好友”需要多个复杂的联接:
let Users = datatable (UserId: string, name: string, org: string)[]; // nodes
let Knows = datatable (FirstUser: string, SecondUser: string)[]; // edges
Users
| where org == "Contoso"
| join kind=inner (Knows) on $left.UserId == $right.FirstUser
| join kind=innerunique(Users) on $left.SecondUser == $right.UserId
| join kind=inner (Knows) on $left.SecondUser == $right.FirstUser
| join kind=innerunique(Users) on $left.SecondUser1 == $right.UserId
| where UserId != UserId1
| project name, name1, name2
图形语义解决方案
KQL 图形语义大大简化了这一点。 make-graph 运算符创建定向图,而图形匹配运算符简明地表示模式:
let Users = datatable (UserId:string , name:string , org:string)[]; // nodes
let Knows = datatable (FirstUser:string , SecondUser:string)[]; // edges
Knows
| make-graph FirstUser --> SecondUser with Users on UserId
| graph-match (user)-->(middle_man)-->(friendOfAFriend)
where user.org == "Contoso" and user.UserId != friendOfAFriend.UserId
project contoso_person = user.name, middle_man = middle_man.name, kusto_friend_of_friend = friendOfAFriend.name
日志数据见解
日志数据分析通常需要从包含时序信息的平面表中提取见解。 将此数据转换为图形结构需要标识相关的实体和关系。 请考虑名为 rawLogs 的 表,其中包含 Web 服务器请求信息:
let rawLogs = datatable (rawLog: string) [
"31.56.96.51 - - [2019-01-22 03:54:16 +0330] \"GET /product/27 HTTP/1.1\" 200 5379 \"https://www.contoso.com/m/filter/b113\" \"some client\" \"-\"",
"31.56.96.51 - - [2019-01-22 03:55:17 +0330] \"GET /product/42 HTTP/1.1\" 200 5667 \"https://www.contoso.com/m/filter/b113\" \"some client\" \"-\"",
"54.36.149.41 - - [2019-01-22 03:56:14 +0330] \"GET /product/27 HTTP/1.1\" 200 30577 \"-\" \"some client\" \"-\""
];
从日志数据创建图形
通过将源 IP 地址视为节点,并将对资源的 Web 请求视为边缘来为图形建模。 使用 分析运算符 提取所需的列:
let parsedLogs = rawLogs
| parse rawLog with ipAddress: string " - - [" timestamp: datetime "] \"" httpVerb: string " " resource: string " " *
| project-away rawLog;
let edges = parsedLogs;
let nodes =
union
(parsedLogs
| distinct ipAddress
| project nodeId = ipAddress, label = "IP address"),
(parsedLogs | distinct resource | project nodeId = resource, label = "resource");
let graph = edges
| make-graph ipAddress --> resource with nodes on nodeId;
这会创建一个定向图,其中节点是 IP 地址或资源,边缘表示具有时间戳和 HTTP 谓词属性的请求:
建议的查询模式
使用 图形匹配 根据其他 IP 地址请求的资源创建简单建议:
graph
| graph-match (startIp)-[request]->(resource)<--(otherIP)-[otherRequest]->(otherResource)
where startIp.label == "IP address" and //start with an IP address
resource.nodeId != otherResource.nodeId and //recommending a different resource
startIp.nodeId != otherIP.nodeId and //only other IP addresses are interesting
(request.timestamp - otherRequest.timestamp < 5m) //filter on recommendations based on the last 5 minutes
project Recommendation=otherResource.nodeId
输出:
建议 |
---|
/product/42 |
这演示了图形语义如何从原始日志数据中提取有意义的见解。
资源图探索
利用资源图,可以大规模高效探索和查询资源,支持治理、管理和安全要求。 随着资源更改,这些图会持续更新,从而提供对资源清单的动态跟踪。
企业资源管理挑战
考虑具有包含以下复杂云基础结构的企业:
- 虚拟机、数据库、存储帐户和网络组件
- 跨多个环境具有不同权限的用户标识
- 跨不同组织单位的复杂资源层次结构
关键挑战在于有效管理和查询此广泛的资源清单,以便实现安全合规性和访问控制。
基于图形的解决方案
KQL 图形语义使安全管理员能够将复杂的资源层次结构和权限结构建模为图形。 此方法支持功能强大的查询,这些查询可以:
- 通过组跟踪用户到资源的访问路径
- 识别过度特权帐户和潜在的安全漏洞
- 检测资源权限中的配置问题
- 验证遵循组织政策
对于企业规模资源图,具体化视图可以表示节点和边缘的当前状态,从而实时分析和历史查询资源与权限随时间变化的方式。
有关详细示例和示例代码,请参阅 GitHub 上的 Resource Graph 示例。
多域安全分析
安全作通常需要同时分析多个域之间的关系。 “图形图”方法通过组合单独的图形域(标识、网络和资产图)来对互连的数据结构进行建模和分析。
多域分析方法
此方法在保持领域特定图之间分离的同时,通过查询组合启用复杂的跨域分析。 假设组织需要使用以下方案检测复杂的攻击:
- 标识图 - 对用户、组和权限进行建模,以理解访问权限
- 网络图 - 表示用于检测异常网络模式的设备和连接
- 资产图 - 对资源和敏感度级别进行编录以评估潜在影响
高级安全见解
通过遍历这些域之间的关系,安全分析师可以在单独检查每个域时识别不可见的攻击路径。 此方法擅长以下方面:
- 检测网络分段中的横向移动
- 识别通过组成员身份更改而进行的特权提升尝试
- 发现高敏感度资源中的数据外泄
- 将身份验证模式 与资源访问相关联
有关详细示例和实现指南,请参阅 GitHub 上的 Graph 示例图。
时序和图形分析
将图形分析与时序分析相结合,可创建一个强大的框架,用于检测时态异常,同时了解它们在互连系统中的影响。 此集成为安全分析、IoT 监视和运营智能提供了重要的价值。
使用上下文进行时间异常检测
时序数据通常包含指示正常或异常行为的临时模式。 与图形结构结合使用时,这些模式通过关系和访问路径分析获得有意义的上下文。
安全应用程序
在安全上下文中,此集成通过以下方法识别潜在的恶意活动:
- 身份验证异常检测 - 标记偏离常规模式(时间、地点、频率)的登录
- 访问路径分析 - 确定异常用户可以通过权限链访问哪些敏感资源
- 影响评估 - 评估异常活动的潜在爆炸半径
更广泛的应用程序
除了安全性之外,此方法适用于:
- IoT 系统 - 将设备异常与连接的基础结构相关联
- 业务运营 - 将事务异常与组织结构链接
- IT 基础结构 - 将性能异常与服务依赖项连接
通过结合时序和图形分析,KQL 使分析人员能够了解异常的性质及其跨互连系统的上下文影响。
有关实现示例和详细的代码示例,请参阅 GitHub 上的时序和图形示例。
数字孪生体和图形历史化
数字孪生体提供物理对象或系统的虚拟表示形式,可实现真实实体的精确建模和模拟。 KQL 中的图形语义在数字孪生方案中表现出色,因为实体(设施、设备、传感器和人员)之间的关系自然形成图形结构。
KQL 的数字孪生功能
图形语义通过以下方法实现全面的数字孪生建模:
- 分层建模 - 表示复杂的设施和设备层次结构
- 多实体关系 - 连接物理资产、虚拟表示形式和人工运算符
- 实时状态跟踪 - 监视占用情况、设备状态和环境条件
- 跨域分析 - 将物理空间利用率与作指标相关联
用于时态分析的图形历史记录化
数字孪生管理的关键方面是捕获和分析临时更改。 通过对图形更改进行历史记录化,组织可以:
- 跟踪随时间变化的演变 - 监视物理空间和系统的变化情况
- 进行历史分析 - 确定利用率和性能的模式和趋势
- 比较历史状态 - 检测异常或测量时间段的改进
- 开发预测模型 - 使用历史利用率模式进行未来的规划和优化
实施效益
此方法使组织能够:
- 监视空间利用率模式并优化设施管理
- 跟踪设备性能和预测维护需求
- 分析环境条件及其对作的影响
- 将人类行为模式与物理基础结构使用情况相关联
有关详细的实现示例和代码示例,请参阅 GitHub 上的数字孪生示例。