今天分享的论文是《Demystifying RCE Vulnerabilities in LLM-Integrated Apps》
原文链接:Demystifying RCE Vulnerabilities in LLM-Integrated Apps
Prompt模板:https://sites.google.com/view/llmsmith/
这是一篇关于LLM安全的论文,主要是对于LLM驱动APP的远程代码执行漏洞的检测和实施分析,针对的是python。(文章中表述了主流LLM APP很多都是python编写,保证了研究的有效性)
大型语言模型(LLMs)在变革软件开发方面展现出巨大潜力,将其集成到更智能应用中的兴趣日益浓厚。像LangChain这样的框架助力LLM集成应用的开发,为自定义操作提供代码执行工具/API。然而,这些功能从理论上引入了远程代码执行(RCE)漏洞,使攻击者能够通过提示注入实现远程代码执行。此前尚无研究系统地调查这些框架的RCE漏洞及其对应用程序和利用后果的影响。因此,该领域存在巨大的研究空白。
在本研究中,本文提出LLMSmith,用于检测、验证和利用LLM集成框架和应用程序中的RCE漏洞。为实现这一目标,本文开发了两项新技术,包括:1)轻量级静态分析,用于构建调用链以识别框架中的RCE漏洞;2)基于提示的系统性利用方法,用于验证和利用LLM集成应用中发现的漏洞。该技术涉及多种策略,以控制LLM输出、触发RCE漏洞并发起后续攻击。本文的研究在11个LLM集成框架中总共发现了20个漏洞,包括19个RCE漏洞和1个任意文件读/写漏洞。其中,17个已被框架开发者确认,13个漏洞被分配了CVE编号,6个的CVSS评分达到9.8,本文还获得了1350美元的漏洞赏金。对于51个可能受RCE影响的应用程序,本文成功对17个应用程序执行了攻击,其中16个存在RCE漏洞,1个存在SQL注入漏洞。此外,本文对这些漏洞进行了全面分析,并构建了实际攻击来演示现实中的危害,例如应用程序输出劫持、用户数据泄露,甚至可能完全控制系统。最后,本文为框架和应用程序开发者提出了几种缓解措施,以应对此类攻击。
先前的研究表明,某些LLM集成应用程序中存在SQL注入的潜在风险。攻击者可以通过提示注入远程利用这些应用程序中的SQL注入。针对SQL注入漏洞,研究人员提出了几种缓解措施,如SQL查询重写和数据库权限强化。但本文的研究表明,除了SQL注入之外,LLM集成应用程序还面临着更严重的威胁,即远程代码执行(RCE),它允许攻击者远程执行任意代码,甚至通过提示注入获得应用程序的完全控制权。除了WannaCry勒索软件和Log4J之外,这是一种通过利用LLM和应用程序的缺陷实现的新型RCE。更严重的是,攻击者只需一行自然语言即可实现RCE,而无需扎实的计算机安全背景。令人惊讶的是,正是LLM为攻击者提供了一个隐蔽的“通道”,使其能够远程访问并危害受害者,即应用程序。这种攻击的实现需要满足以下要求:
(1)LLM的不可控响应。由于LLM行为的固有不可预测性和随机性,开发者无法准确预测LLM会如何响应各种各样的提示。因此,有效约束LLM的行为变得具有挑战性。基于此,攻击者可能会通过精心设计的提示来操纵LLM的输出,绕过限制,并启用后续的恶意行为(例如越狱)。
(2)不可信代码的执行。大多数具有代码执行能力的LLM集成框架会接收LLM生成的不可信代码。然而,开发者通常不会为此类代码提供适当的检查或过滤,允许其在无保护的环境中执行。因此,攻击者可以通过提示操纵LLM生成的代码来实现RCE。
迄今为止,缺乏全面的研究来系统分析市场上可用的LLM集成框架和应用程序的安全性,尤其是RCE漏洞。因此,需要探索如何检测和验证RCE漏洞,并揭示其对不同利益相关者造成的后果。挑战。为此,本文必须解决以下挑战:
(1)从一开始就在大型代码库中有效检测漏洞并非易事,考虑到LLM集成框架和应用程序的代码库非常庞大。此外,LLM的参与使逻辑更加难以处理,检测必须将应用程序、框架和LLM链接起来进行精确分析。
(2)在测试现实世界的LLM集成应用程序以验证和利用RCE漏洞时,存在许多意想不到的障碍。更具体地说,LLM响应的随机性、针对恶意提示的安全机制、进程隔离甚至网络可访问性都会影响可利用性。
本文的方法。为了检测LLM集成框架中的RCE漏洞并评估其在现实世界应用程序中的可利用性,本文提出了一种名为LLMSmith的多步骤方法。首先,本文增强静态分析技术来扫描框架源代码,从用户级API到危险函数提取调用链,然后在本地验证其可利用性(第3.1节)。为了直接探索现实场景中的危害,本文开发了启发式方法,分别从代码托管平台和应用市场收集潜在受影响的LLM集成应用程序(第3.2节)。最后,本文为这些RCE漏洞提出了一种基于提示的系统性利用方法。通过结合幻觉测试和逃逸技术等多种策略,本文能够系统地验证和利用漏洞,从而简化应用程序的测试过程(第3.3节)。
本文在11个LLM集成框架上评估了LLMSmith,LLMSmith识别出20个漏洞,其中13个漏洞被分配了CVE编号,6个的CVSS评分达到9.8。值得注意的是,与Python静态分析框架PyCG相比,LLMSmith在调用链提取任务上的性能和准确性有了显著提高。结果,LLMSmith在20.332秒内从11个框架中成功提取了51条可能导致RCE的调用链,假阳性率为13.7%。此外,LLMSmith在现实场景中测试了51个潜在易受攻击的应用程序,并成功利用了17个应用程序,揭示了16个RCE漏洞和1个SQL注入漏洞。
本文的主要贡献:
- 一种用于检测LLM集成框架中RCE漏洞的高效轻量级方法。为了高效检测LLM集成框架内的RCE漏洞,本文提出了一种轻量级且高效的源代码分析方法。这使得能够快速从框架内的用户级API到危险函数提取调用链。本文在11个框架中成功发现了20个漏洞,其中17个都得到了框架开发者的认可,并分配了13个唯一的CVE。该方法使本文能够在论文提交时在LLM框架中发现最多的RCE漏洞。
- 一种针对LLM集成应用程序的基于提示的利用方法。本文提出了一种新颖的攻击策略组合,包括幻觉测试和LLM逃逸,可以绕过来自LLM和应用程序的困难和防御。它使本文能够对51个收集的应用程序中的17个现实世界应用程序成功发起攻击,其中16个易受RCE攻击,剩下的1个易受SQL注入攻击。
- 对这些新的RCE利用向量、漏洞和实际攻击的首次系统分析。基于LLMSmith和结果,本文有独特的机会从漏洞类型、触发机制、利用目标和防御方法等方面对这些漏洞进行表征。本文从应用程序主机和用户的角度进一步探索了遭受RCE攻击后的一些后利用场景,提出了实际的现实世界攻击。值得注意的是,这些实际的现实世界攻击通过在数据集中本地部署白盒受害者应用程序在现实场景中得到了验证。
如图所示为集成大型语言模型(LLM)且涉及代码执行的简单网页应用工作流程:
用户通过网页上的自然语言问题与应用程序交互。应用程序的前端将问题发送到后端框架(例如LangChain),该框架将传入的问题嵌入到其内置的为特定任务设计的提示模板(也称为系统提示)中。然后将这些提示发送到LLM(例如OpenAI GPT-3.5)以生成可以解决问题的代码。生成的代码返回给框架,框架执行代码并打包结果供前端显示给用户。整个过程完成了一次问答交互。值得注意的是,用户与LLM之间没有直接交互。相反,整个过程完全依赖于后端框架与LLM之间的交互。
提出了一种新颖的方法LLMSmith,用于识别LLM集成框架和应用程序中的漏洞。如图所示,总体流程由三个阶段组成:1)识别框架中的漏洞,2)查找构建在易受攻击框架上的潜在受影响应用程序,3)验证和利用漏洞。
❶基本用法测试。一些应用程序可能不允许用户输入自定义提示,或者由于缺乏维护而可能出现故障。因此,在整个过程开始时,有必要排除这些异常应用程序。因此,对于被测应用程序,LLMSmith首先测试其基本用法的可用性,例如简单的数学计算和打印函数。
❷幻觉测试。一旦应用程序通过了基本用法测试,就可以初步证明它是一个功能完整的应用程序,可以正常使用和交互。然而,在测试其代码执行能力之前存在一个问题:LLM幻觉问题。在本研究的早期阶段,本文发现一些应用程序存在幻觉问题(如图9所示),即它们生成一些看似合理的答案,这使得LLMSmith难以根据应用程序的输出来判断它们是否执行了代码。为了减轻LLM幻觉的潜在干扰并初步确认其是否可以执行代码,本文设计了这个幻觉测试。该预言机的灵感来自于这样一个事实,即一些复杂的计算对于缺乏代码执行能力的LLM来说是不可行的(例如随机字符串哈希、base85编码和解码、复杂的数学计算)。因此,LLMSmith涉及一个包含三个关于随机哈希、base85解码和复杂数学计算问题的小数据集,以确定幻觉现象。一旦应用程序正确回答了其中两个或更多问题,它就可以通过幻觉测试。如果在上述两个步骤中失败,则需要人工进行基本审查,例如优化攻击提示以使应用程序符合预期行为,或确定应用程序的正确用法。然后,应相应地更新攻击提示集。
❸无逃逸的RCE测试。在对应用程序的代码执行能力进行初步评估后,LLMSmith继续进行无逃逸技术的RCE测试。这些测试旨在诱导某些系统命令(例如ls、env、id、echo)的执行。如果命令输出产生预期结果,LLMSmith则进入后续的网络访问测试阶段。相反,如果命令执行未能产生预期结果,则表明普通提示可能无法触发系统命令的执行(可能是由于某些保护措施,如系统提示或代码执行沙箱等)。在这种情况下,必须诉诸逃逸技术。
❹有逃逸的RCE测试。一旦无逃逸技术的RCE测试失败,LLMSmith将尝试在测试提示中使用两种逃逸技术(即LLM逃逸和代码逃逸)。LLM逃逸旨在打破系统提示对LLM功能的约束或安全和审核功能,使其能够绕过这些限制并生成所需的输出。LLMSmith采用几种提示注入技术(例如忽略指令、上下文操作)和一些易于实现的轻量级越狱技术(例如前缀注入、有效载荷拆分、说服)来满足这一要求。代码逃逸旨在绕过框架代码执行组件固有的潜在预定义沙箱限制。受CTF(夺旗)挑战中针对SSTI沙箱和Python沙箱的绕过技术的启发,这使得能够逃避恶意代码结构检测,随后进行沙箱逃逸并成功执行。一些有效的技术包括:使用__subclass__在Python中绕过继承链;通过__import__手动导入;内置reload;从允许的第三方包导入链;通过sys.modules[‘__main__’]进行变量覆盖或函数篡改;以及审核钩子绕过。如果有逃逸的RCE测试成功,所有后续测试提示将转换为带有逃逸技术的提示,并进入网络访问测试阶段。
❺网络访问测试。执行环境的网络连接性直接影响这些RCE漏洞的影响。如果执行环境具有任意外部网络访问权限,攻击者可以通过反向 shell 获得对受害者服务器的持久控制,并执行更严重的攻击。否则,影响是有限的。因此,进行网络访问测试以评估可利用性级别和造成的危害。为此,LLMSmith在提示中引入curl命令,该命令将向攻击者发送请求。检测到来自远程机器的传入连接表明应用程序具有访问外部网络的能力,从而使LLMSmith进入后门测试阶段。
❻后门测试。后门测试作为结论性步骤,主要侧重于评估后门脚本的下载和执行。通过提示注入,LLMSmith迫使应用程序下载并执行准备好的后门脚本(例如反向 shell 脚本),等待接收反向 shell 等行为。一旦在应用程序服务器上注入后门脚本,攻击者就可以对服务器发起极具破坏性的攻击(例如通过获取 shell 来控制应用程序服务器)。
本文提出三个研究问题来评估LLMSmith的有效性:
RQ1. 易受攻击的LLM集成框架API的检测准确性如何?
RQ2. 应用程序收集的效果如何?
RQ3. 提示攻击的效果如何?
相关工作
最近关于LLM的大多数研究都集中在评估它们的能力和安全性。Chang等人对LLM的评估进行了全面调查。有效的评估在促进LLM的实质性改进方面发挥着关键作用。Yu等人提出了GPTFuzzer,一种黑盒模糊测试框架,用于评估LLM的鲁棒性。在代码生成任务中,Pearce等人评估了代码生成LLM(即Copilot)的安全性。Liu等人提出了EvalPlus,一个用于评估LLM生成的代码的正确性的基准框架。先前的研究主要集中在测试LLM的鲁棒性和安全性。然而,本文的工作旨在调查应用程序中的漏洞,尤其是由LLM参与引起的远程代码执行,这为渗透到受害者系统开辟了新的攻击面,因此任何具有LLM能力的应用程序都容易受到这种威胁。
另一方面,已经对针对LLM和LLM集成应用程序的对抗性提示进行了几项研究。Greshake等人提出了一种新的攻击向量,间接提示注入,它可以远程操纵LLM对用户的输出内容。Li等人提出了一种多步骤越狱提示,用于提取ChatGPT和New Bing中的用户私人信息。Liu等人提出了一种黑盒提示注入攻击,以访问十个商业LLM集成应用程序的无限制功能和系统提示。Shen等人对越狱提示进行了测量,旨在规避LLM的安全限制。Pedro等人提出了对LangChain中由提示注入引起的已知SQL注入漏洞的安全分析。Zou等人使用从白盒LLM训练的提示对多个LLM执行了可转移的对抗性攻击。与这些研究不同,LLMSmith对LLM集成应用程序执行对抗性提示攻击,例如提示注入和逃逸技术,尤其是在现实世界场景中,并发现了严重的RCE漏洞。据本文所知,LLMSmith首次尝试在现实世界场景中系统地检测、利用和测量各种LLM集成框架和应用程序中的RCE漏洞。
讨论与分析
开发者的回应。本文已将所有漏洞报告给框架维护者和应用程序开发者。经过多轮沟通,本文收到了几位开发者或供应商的确认和漏洞赏金,并总结了LLM生态系统中开发者对此类漏洞的当前态度。
11个易受攻击的框架中有8个(例如PandasAI)在GitHub上迅速响应本文提出的问题(≈1-2天)。在确认漏洞后,尽管开发者承诺及时解决漏洞,但修补周期往往很长。这凸显了开发者对RCE漏洞的关注,同时也突出了全面解决这些问题的固有复杂性。因此,可以预见,这种类型的RCE漏洞可能会在短期内继续存在。相比之下,考虑到参与者数量和活动,应用程序开发者的响应相对较慢。本文提交的七份漏洞报告尚未收到回复。对于已回复的漏洞报告,平均响应时间在两到三天内。值得一提的是,一些应用程序开发者在两小时内做出响应并实施了缓解措施。
在本文披露后,此类RCE漏洞受到LLM框架开发者的充分关注。一些框架(例如LangChain、LlamaIndex)和应用程序部署平台(例如Streamlit)已提醒用户谨慎使用这些代码执行API。
潜在的缓解措施。基于分析结果,本文提出了三项措施来降低风险。❶权限管理。框架和应用程序开发者应遵循最小特权原则,将用户权限设置为尽可能低的级别。例如,禁用读取和写入应用程序及其系统文件或分区的权限。还应禁用具有SUID和其他敏感命令的特权程序的执行。❷环境隔离。开发者可以通过使用“seccomp”和“setrlimit”等工具对执行LLM代码的进程施加适当的限制,以实现进程隔离和资源隔离。或者,他们可以利用Python解释器的安全增强版本,如Pypy和IronPython,这些版本提供进程级沙箱功能。同时,随着此类RCE漏洞的曝光,还开发了一些LLM生态系统特定的云沙箱(例如e2b)。这些沙箱在云环境中托管代码执行功能,从而防止恶意代码直接影响服务器。最后,如前所述,应用程序开发者可以利用Pyodide等工具将代码执行嵌入浏览器中,允许代码执行在客户端而不是服务器上运行。❸提示分析。一些研究还尝试了提示级别的可能防御。例如,Liu等人引入了基于检测的防御来检查提示的原始功能是否受到损害。其他工作提出了检查提示意图的方法,旨在过滤掉恶意提示。无论采用何种缓解措施,开发者都必须在可用性、效率和安全性之间取得平衡,以选择最合适的解决方案。因此,在不损害功能完整性的情况下确保安全性仍然是一个挑战。
未来的工作。❶多语言支持。目前,LLMSmith仅可用于检测用Python编写的LLM集成框架中的RCE漏洞。然而,还有一些用其他语言构建的开源框架,例如Rust中的Chidori和TypeScript中的Axflow。未来,本文打算让LLMSmith覆盖更多语言,揭示多语言LLM集成框架中的更多漏洞。❷多漏洞类型支持。目前,LLMSmith仅用于检测LLM集成框架中的RCE漏洞,并探索RCE造成的危害。未来,本文有兴趣扩展本文的检测能力,以涵盖更广泛的漏洞类型,并在现实世界场景中进行测试。
做个总结:
本文提出了一种高效的方法LLMSmith,用于检测和验证LLM集成框架和应用程序中的RCE漏洞。LLMSmith分三个步骤进行,首先采用静态分析来检测框架中存在的RCE漏洞,然后通过白盒和黑盒方法收集公共LLM集成应用程序,最后发起新颖的提示攻击以在这些应用程序中实现RCE。LLMSmith成功地在11个框架中识别出20个漏洞,获得了13个CVE。在自动化应用程序测试的背景下,LLMSmith检测到17个易受攻击的应用程序,其中16个实现了RCE。本文为上述漏洞提供了详细的测量。此外,本文从应用程序主机和良性应用程序用户的角度对RCE漏洞进行了详细的危害分析。通过利用这些RCE漏洞,本文进一步开发了危及应用程序主机和良性应用程序用户的新实际攻击。此外,本文还介绍了针对这些RCE攻击的实际缓解措施。