InQL v5技术深度解析:新一代GraphQL安全测试工具架构演进

本文深入解析InQL v5的技术架构升级,涵盖从Jython到Kotlin的重构过程、GQLSpection核心库设计、关键特性实现及未来路线图,为渗透测试人员提供全面的GraphQL安全测试解决方案。

InQL v5: 技术深度解析

2023年8月17日 - 作者:Andrew Konstantinov

我们非常高兴向大家展示我们广泛使用的Burp Suite扩展——InQL的最新版本。第五版引入了重大增强和升级,巩固了其作为渗透测试人员和漏洞赏金猎人不可或缺工具的地位。

目录

  • 引言
  • 演进历程:从Jython到Kotlin
  • 将Burp扩展转换为Kotlin的挑战
  • 规避stickytape需求
  • 介绍GQLSpection:InQL v5.x的核心
  • 新特性
  • 关注点扫描
  • 改进的日志记录
  • 行内注解
  • InQL与GraphQL安全的未来
  • InQL:学生和贡献者的绝佳项目
  • 结论

引言

网络安全格局处于不断变化中。随着GraphQL采用率的激增,对适应性强、弹性好的测试工具的需求变得至关重要。作为GraphQL安全领域的领导者,Doyensec自豪地发布我们开源测试工具的最新版本——InQL v5.x。这不仅仅是一次更新,而是一次全面的重构,旨在增强您的GraphQL测试能力。

演进历程:从Jython到Kotlin

我们的InQL之旅始于Jython平台。然而,随着时间的推移,我们开始体验到Jython的局限性——主要是缺乏对Python 3的支持,这使得寻找兼容的工具和库变得越来越困难。显然需要进行转型。经过仔细考虑,我们选择了Kotlin。它不仅与Java(Burp的编写语言)兼容,还提供了健壮性、灵活性和活跃的开发社区。

将Burp扩展转换为Kotlin的挑战

为了克服重用现有Jython代码的挑战,我们选择在Kotlin扩展中包含整个Jython运行时(超过40 MB)。虽然这不是理想的解决方案,但这种方法使我们能够以Kotlin启动扩展,启动Jython解释器,并将执行委托给旧的Jython代码。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
class BurpExtender: IBurpExtender, IExtensionStateListener, BurpExtension {

    private var legacyApi: IBurpExtenderCallbacks? = null
    private var montoya: MontoyaApi? = null

    private var jython: PythonInterpreter? = null
    private var pythonPlugin: PyObject? = null

    // 传统API首先实例化
    override fun registerExtenderCallbacks(callbacks: IBurpExtenderCallbacks) {

        // 保存传统API供仍依赖它的功能使用
        legacyApi = callbacks

        // 启动嵌入式Python解释器会话(Jython)
        jython = PythonInterpreter()
    }

    // Montoya API其次实例化
    override fun initialize(montoyaApi: MontoyaApi) {
        // 新的Montoya API应用于InQL中所有新功能
        montoya = montoyaApi

        // 设置扩展名称
        montoya!!.extension().setName("InQL")

        // 实例化传统Python插件
        pythonPlugin = legacyPythonPlugin()

        // 将执行传递给传统Python代码
        pythonPlugin!!.invoke("registerExtenderCallbacks")
    }

    private fun legacyPythonPlugin(): PyObject {
        // 确保默认使用UTF-8
        jython!!.exec("import sys; reload(sys); sys.setdefaultencoding('UTF8')")

        // 将从Burp接收的回调作为全局变量传递给Python插件
        jython!!.set("callbacks", legacyApi)
        jython!!.set("montoya", montoya)

        // 实例化传统Python插件
        jython!!.exec("from inql.extender import BurpExtenderPython")
        val legacyPlugin: PyObject = jython!!.eval("BurpExtenderPython(callbacks, montoya)")

        // 在消费后删除全局变量
        jython!!.exec("del callbacks, montoya")

        return legacyPlugin
    }
}

规避stickytape需求

我们转向Kotlin也解决了另一个问题。Burp Suite中的Jython扩展通常是单个.py文件,但InQL的复杂性需要多文件布局。以前,我们使用stickytape库将Python代码压缩成单个文件。然而,stickytape引入了细微的错误并禁止访问静态文件。通过将InQL变为Kotlin扩展,我们现在可以将所有文件捆绑到JAR中并正确访问它们。

介绍GQLSpection:InQL v5.x的核心

我们转型之旅的一个重要里程碑是重构了处理GraphQL模式解析的InQL核心部分。结果是GQLSpection——一个兼容Python 2/3和Jython的独立库,具有方便的CLI界面。我们在测试用例中包含了GraphQL规范中的所有GraphQL代码示例,确保全面覆盖。

作为一个额外的优势,它还取代了以前InQL版本的独立和CLI模式,这些模式已被移除以简化我们的代码库。

新特性

我们的客户严重依赖尖端技术。因此,我们在许多项目中经常有机会接触真实的GraphQL部署。这种丰富的接触使我们能够理解InQL用户面临的挑战和他们的需求,使我们能够决定实施哪些功能。基于这些见解,我们在InQL v5.0中引入了几个重要功能,以支持更有效和高效的审计和调查。

关注点扫描

此版本的一个突出功能是“关注点扫描”。由GQLSpection提供支持,并由@schoobydrew贡献初始实现,这本质上是一个关键字扫描,配备了几个可定制的预设。

当分析具有超过50个查询/变更和数千个字段的广泛模式时,关注点扫描证明特别有用。它以人类可读的文本和JSON格式生成报告,提供现代应用中常见 vast模式的宏观概述,并帮助渗透测试人员快速识别模式中的敏感数据或危险功能。

改进的日志记录

早期版本工具的一个令人沮丧之处是,当解析器在真实模式上中断时,缺乏有用的错误消息。因此,我引入了可配置的日志记录。这一点,加上解析功能现在由GQLSpection处理,使InQL v5.0更加可靠和用户友好。

行内注解

InQL的另一个重要添加是注解。在此之前,InQL只生成最基本的查询,需要使用其他工具来推断正确的输入格式、期望值等。然而,通过添加填充了GraphQL模式或类型注解中“description”字段内容的行内注释,InQL v5.0更像是一个独立工具。

这里有一个权衡:虽然广泛的注解使InQL更易用,但它们有时会使理解和导航变得困难。我们正在为未来版本寻找解决方案,以动态限制注解的显示。

InQL与GraphQL安全的未来

我们的InQL路线图是雄心勃勃的。话虽如此,我们致力于重新引入GraphiQL和循环关系检测等功能,实现与v4的完全功能对等。

随着GraphQL的持续增长,确保强大的安全性至关重要。InQL的未来涉及解决经常被忽视的利基GraphQL功能,并改进现有的渗透测试工具。我们期待与社区分享更多发展。

InQL:学生和贡献者的绝佳项目

InQL不仅仅是一个工具,它是一个项目——一个邀请那些对网络安全充满热情的人贡献的项目。我们积极寻找希望为InQL做出贡献或进行GraphQL相关安全研究的学生和开发人员。这是一个与GraphQL安全专家合作的机会,并参与塑造InQL的未来。

结论

InQL v5.x是持续工作和坚定承诺增强GraphQL安全的结果。我们敦促所有使用GraphQL的渗透测试人员、漏洞猎人和网络安全爱好者尝试这个新版本。如果您过去尝试过InQL并期待增强功能,v5.0不会让您失望。

在Doyensec,我们不仅仅是在开发一个工具,我们正在推动GraphQL安全可能性的边界。我们邀请您加入我们的旅程,无论是作为用户、贡献者还是实习生。

祝黑客愉快!

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计