IT评测·应用市场-qidao123.com

标题: GDsmith:Detecting Bugs in Graph Database Engines 论文笔记 [打印本页]

作者: tsx81428    时间: 2024-12-26 07:27
标题: GDsmith:Detecting Bugs in Graph Database Engines 论文笔记
一、引言

二、背景

1. 测试的图数据库引擎


2. Cypher 语言

Cypher 是最广泛采用的、完全指定的、开放的图数据库查询语言。它是一种声明式查询语言,让用户只需表达要检索的数据,底层引擎完成任务,无需了解实现细节。Cypher 允许用户简单地表达要检索的数据,而无需理解数据库的底层实现。它可以轻松地表达复杂的数据库查询,而且是创建尺度图查询语言(GQL)的关键灵感泉源。此外,另有从 Cypher 到其他图查询语言的翻译工具。在每个 Cypher 查询中,子句相互链接,并在它们之间转达中心结果集。比方,一个 MATCH 子句中的匹配变量将成为下一个子句存在的上下文。
3. 历史漏洞统计

为了更好地了解图数据库引擎中的漏洞,作者分析了官方 Neo4j、RedisGraph 和 Memgraph GitHub 存储库中的问题和拉取请求。作者将带有漏洞标签的问题和拉取请求视为已陈诉的漏洞,因为这三个图数据库引擎的官方存储库恰好包含漏洞标签。经过统计,这些引擎中带有漏洞标签的问题和拉取请求约占全部问题和拉取请求的 15%。
作者起首按月份统计了 Neo4j、RedisGraph 和 Memgraph 中带有漏洞标签的问题和拉取请求的数目,并绘制了增长曲线。Neo4j、RedisGraph 和 Memgraph 分别有 920、218 和 5 个带有漏洞标签的问题。此外,Neo4j、RedisGraph 和 Memgraph 分别有 937、268 和 15 个带有漏洞标签的拉取请求。Neo4j 最早的问题出现在 2012 年 11 月,对应 Neo4j 版本 1.85。自发布以来,带有漏洞标签的问题数目渐渐增加。第一个带有漏洞标签的拉取请求出现在 2013 年 12 月,此后带有漏洞标签的拉取请求数目开始增长。拉取请求的增长趋势一直持续到 2018 年,之后没有新的漏洞标签添加。
然后,作者统计了有多少带有漏洞标签的问题包含 Cypher 查询。作者搜刮问题内容中的 Markdown 代码片段,并确定今世码片段包含特定的 Cypher 语法关键字(如 MATCH 和 UNWIND)时,代码片段包含 Cypher 查询。经过统计,Neo4j、RedisGraph 和 Memgraph 分别有 358、133 和 3 个带有漏洞标签的问题包含 Cypher 查询。这表明很多图数据库引擎中的漏洞可以通过执行 Cypher 查询触发。在全部已关闭的问题中,包含 Cypher 查询的问题的均匀漏洞存在时间为 192 天,而其他问题的均匀漏洞存在时间为 298 天(少 36%)。进一步分析发现,在 25% 的中位数上没有差异,但在 50% 和 75% 的中位数上分别少 48% 和 57%。这些结果表明,在问题中提供揭示漏洞的 Cypher 查询对于在调试过程中加快办理困难漏洞具有潜在的重要性。
三、方法

1. 总体算法

GDsmith 通过四步迭代天生测试输入,详细如下:

2. 模式和图天生


3. 骨架及其完成

GDsmith 采用基于骨架的完成技能天生 Cypher 查询,以确保满意变量作用域正确性、利用数范例安全和属性键安全三个语义要求:

为了确保这三个语义要求,GDsmith 在添补未实例化部分时采用了特定的计谋。如果当前子句需要一个模式元组,GDsmith 会动态天生一系列模式。每个模式由实体变量描述的子图构建而成。起首,GDsmith 天生子图的形状,比方一个带有指向另一个节点的关系的节点。对于形状中所需的每个变量,GDsmith 要么选择前一个子句局部环境中已界说的变量,要么为其界说一个新变量。然后,GDsmith 随机为这些变量添加新标签或范例。最后,根据属性图模式和相关事实,GDsmith 随机为这些变量添加属性。
如果当前子句需要一个具有特定命据范例的表达式,GDsmith 使用自顶向下的计谋天生表达式。表达式是一个树结构,每个树节点是一个子表达式。对于需要子表达式的每个利用数,GDsmith 随机选择一个满意范例要求的表达式,并递归地天生整个子树。对于需要字面量值的每个利用数,GDsmith 随机天生所需范例的字面量值。对于需要变量引用的每个利用数,GDsmith 从上下文中搜刮具有所需范例的变量。如果找不到符合的变量,GDsmith 将扬弃当前子树并重新天生。表达式天生过程会一直持续,直到当前表达式树的全部利用数都被添补或到达最大深度。
在添补完一个子句中的全部未实例化部分后,GDsmith 会根据该子句的界说计算上下文,以指导下一个子句的完成。
4. 结构变异计谋

为了办理非空结果挑战,GDsmith 利用三种结构变异计谋增加天生返回非空结果的 Cypher 查询的概率:

GDsmith 保存每个返回非空结果的天生查询,并将其用于在后续阶段通过这些结构变异计谋天生新的查询。同时,GDsmith 要求保存的查询中的子句数目在一个适当的范围内,以均衡查询的多样性和效率。
5. 行为多样性

为了办理行为多样性挑战,GDsmith 根据属性键的先前频率动态选择属性键,以提高天生的 Cypher 查询的行为多样性。GDsmith 维护一个属性键频率列表作为反馈。在每次天生属性图模式后,全部属性键的频率都被设置为零。当一个新查询在其子句中包含属性键并返回非空结果时,频率列表会自动更新。
属性键的选择概率公式为 ,此中 是第 个可用属性键的选择概率, 是第 个可用属性键的频率, 是可用属性键的总数。这个公式表明,在从全部可用属性键列表中指定属性键以添补未实例化部分时,GDsmith 优先选择频率较低的属性键,以使每个属性键在返回非空结果的 Cypher 查询集中的出现可能性均匀化。其目的是覆盖不同的属性值,从而提高随机天生查询的行为多样性。
与传统的反馈引导随机测试方法不同,GDsmith 不使用代码覆盖率作为反馈,因为代码覆盖率在测试图数据库引擎时存在一些问题。起首,即使执行了大量不同的查询,代码覆盖率也可能很低,因为 GDsmith 只关注与数据中央的 Cypher 查询相关的引擎组件,其他组件如交互式控制台不是测试的对象。其次,GDsmith 希望成为一个黑盒方法,以增强其兼容性。如果图数据库引擎的源代码不可用或存在语言肴杂,很难进行代码插桩以获取代码覆盖率等运行时信息。
四、评估

1. 用五个指标评估 GDsmith 的有效性和效率,结果表明 GDsmith 大幅优于基线。

GDsmith 的有效性和效率通过五个指标进行评估,包罗语义有效性率、焦点语法覆盖率、非空结果率、图变异分数和错误检测效率。

与基线方法(GDsmith_a)相比,GDsmith 在有效性和效率方面表现出色。GDsmith_a 天生的查询语义有效性率仅为 16%,且缺乏反馈指导,无法天生高质量的查询用于测试。而 GDsmith 可以或许有效地满意语义要求,增加返回非空结果的查询概率,提高天生查询的行为多样性,从而在检测图数据库引擎中的漏洞方面具有更高的有效性和效率。
2. 在三个流行的开源图数据库引擎中检测到 27 个先前未知的漏洞,得到了开发者的积极反馈。

GDsmith 在三个流行的开源图数据库引擎(Neo4j、RedisGraph 和 Memgraph)中检测到了 27 个先前未知的漏洞。此中,14 个漏洞已被相应引擎的开发者确认,7 个漏洞已被修复。

五、结论

GDsmith 作为首个黑盒方法用于测试图数据库引擎,乐成地办理了随机测试面临的语义有效性、非空结果和行为多样性挑战。通过骨架天生和补全技能、结构变异计谋以及根据属性键频率动态选择属性键等创新方法,GDsmith 在自动查询天生方面表现出了高效性和有效性,大大优于基线方法。同时,GDsmith 在三个流行的开源图数据库引擎中检测到了 27 个先前未知的漏洞,并收到了开发者的积极反馈,证明白其在现实应用中的实用性。
然而,就像其他漏洞检测方法一样,GDsmith 也有进一步改进和扩展的空间。比方,可以借鉴其他领域的漏洞检测技能,如软件测试学术顶会中提到的基于机器学习的漏洞检测、大型语言模型在软件安全中的应用等热门研究方向,探索将这些技能应用于图数据库引擎漏洞检测的可能性。另外,还可以进一步提高 GDsmith 的自动化水平,淘汰人工干预,提高漏洞检测的效率和准确性。同时,也可以加强对不同范例图数据库引擎的兼容性测试,扩大其应用范围。
总之,GDsmith 为图数据库引擎的测试提供了一个新的出发点,未来可以通过不停改进和扩展,为图数据库引擎的安全性和稳定性提供更有力的保障。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4