【论文速读】| LLM4FUZZ:利用大语言模型指导智能合约的模糊测试

图片

本次分享论文:LLM4FUZZ: Guided Fuzzing of Smart Contracts with Large Language Models

基本信息

原文作者:Chaofan Shou, Jing Liu, Doudou Lu, Koushik Sen

作者单位:加州大学伯克利分校,加州大学欧文分校,Fuzzland公司

关键词:区块链,智能合约,Fuzzing,大语言模型

原文链接:

https://arxiv.org/pdf/2401.11108.pdf

开源代码:暂无

论文简介

随着区块链平台的迅速发展,智能合约在数字资产管理中的应用逐渐增多,同时也暴露出许多安全漏洞。本文介绍了一种名为“LLM4FUZZ”的创新方法,该方法利用大语言模型(LLMs)来智能地指导和优先处理模糊测试活动,从而优化智能合约的自动化安全分析。

传统的Fuzzing方法在探索庞大的状态空间时效率较低,但LLM4FUZZ通过使用LLM生成的指标来引导Fuzz工具,专注于那些更可能触发漏洞的代码区域和输入序列,从而显著提高测试的效率和覆盖率。

引言

随着区块链平台和去中心化应用的快速发展,管理数十亿美元数字资产的智能合约代码量急剧增加。不幸地,这些关键代码中的漏洞经常被黑客利用,导致了重大资产损失。因此,在部署前全面分析智能合约的安全性至关重要。

传统的人工审计大量的智能合约代码库容易出错,并且经常忽视边缘情况中的漏洞。为了克服这些限制,行业越来越倾向于使用自动化的方法,如测试、动态分析和形式验证。因此,开发能够有效指导Fuzz测试并提高其探索效率和安全性的新技术,对保障区块链生态系统的安全至关重要。

研究背景

区块链技术的快速进展使得智能合约成为管理大量数字资产的关键工具。尽管如此,智能合约中频繁出现的安全漏洞已导致巨大的资产损失。传统的安全审计方法主要依靠手动检查,而这种方法往往忽略了边缘案例中的漏洞。因此,业界已开始采用如动态分析和形式验证等自动化方法以提升审计效率。然而,目前的自动化Fuzz测试技术在理解代码的语义和状态依赖性方面表现不佳,难以高效地探索代码的复杂状态空间。因此,迫切需要开发更先进的解决方案以提高智能合约的安全测试效率。

相关工作

本论文综述了现有的智能合约Fuzzing技术,并指出它们主要依赖静态分析或动态执行跟踪来自动化地生成测试用例。然而,这些技术常局限于现有代码的API用法,难以探索新功能或深入挖掘潜在的复杂用例。

论文还讨论了大语言模型在程序代码生成中的应用,展示了这些模型为智能合约安全测试带来的新技术可能性。提出的LLM4FUZZ方法结合了大语言模型的分析能力与Fuzzing的动态测试优势,旨在显著提升智能合约测试的质量与效率。

实验设计

LLM4FUZZ首先把智能合约代码转换为抽象语法树(AST),进而执行深入的静态分析。接着,该系统利用大语言模型(LLMs)对代码进行分析,生成有关代码复杂度和潜在漏洞的度量指标。这些指标随后被用来指导Fuzz测试工具,优先针对那些更有可能触发漏洞的代码区域和输入序列进行测试。采用这种方法的LLM4FUZZ显著提升了测试的目标性和效率,有效减少了重复和无效的测试努力,加快了关键漏洞的发现和修复。这个流程的自动化和智能化显著增强了智能合约的安全验证过程。

实现方法

LLM4FUZZ实施了一个精细化的流程以优化智能合约的Fuzz测试。首先,该系统将智能合约代码转化为抽象语法树(AST),并执行静态分析来识别基本的代码特征。然后,通过大语言模型(LLMs)对这些特征进行详尽分析,产生关于代码区域的复杂性和潜在漏洞的度量指标。这些指标随后整合入Fuzzer的调度系统,以指导Fuzz测试工具优先针对那些潜在风险较高的区域。LLM4FUZZ通过这种方式显著提升了智能合约Fuzzing的效率和精确度,大幅减少了无目标探索的成本。

图片

研究评估

LLM4FUZZ已在多个去中心化金融(DeFi)项目中进行实际评估,并与传统Fuzzing技术相比表现出显著的性能提升。该技术在提升测试覆盖率、减少漏洞发现时间以及增强漏洞检测能力方面显示出优异的成效。

此外,在测试过程中,LLM4FUZZ成功识别了多个之前审计未发现的严重漏洞,这些漏洞涉及的潜在财务损失超过24万美元。这一成绩证明了LLM4FUZZ通过大语言模型优化智能合约Fuzzing流程的有效性,并凸显了其在智能合约安全领域的巨大应用潜力。

图片

论文结论

LLM4FUZZ通过结合大语言模型的深度语义分析功能,极大地提高了智能合约Fuzz测试的效率和成效。此方法智能地引导Fuzz测试工具专注于高风险的代码区域和输入序列,不仅提升了测试覆盖率,也在更短时间内识别出更多漏洞。随着区块链技术的广泛应用,LLM4FUZZ为智能合约的安全性验证提供了一种高效的新途径,有助于降低由漏洞引起的财务损失,并推动区块链生态系统的健康发展。

原作者:论文解读智能体

校对:小椰风

图片

图片

图片

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要实现在Unity2D中点击某个物体后,物体改变速度,并在一段时间后恢复原始速度,可以按照以下步骤进行: 1. 创建物体:首先创建一个物体,可以使用Unity的模型编辑器或导入自定义模型。 2. 添加组件:给物体添加刚体组件和碰撞器组件,以便进行物理模拟。 3. 编写脚本:创建一个脚本来控制物体的速度变化和复原。在脚本中,可以使用协程来延迟一段时间后恢复原始速度。 ```csharp using UnityEngine; public class ObjectController : MonoBehaviour { public float originalSpeed = 5f; // 物体的原始速度 public float changedSpeed = 10f; // 物体改变后的速度 public float restoreDelay = 2f; // 物体恢复原始速度的延迟时间 private Rigidbody2D objectRigidbody; private float currentSpeed; void Start() { objectRigidbody = GetComponent<Rigidbody2D>(); currentSpeed = originalSpeed; } void Update() { // 点击鼠标左键时改变物体速度 if (Input.GetMouseButtonDown(0)) { Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); Collider2D collider = Physics2D.OverlapPoint(mousePosition); if (collider != null && collider.gameObject == gameObject) { ChangeSpeed(changedSpeed); StartCoroutine(RestoreSpeed(restoreDelay)); } } // 应用物体速度 Vector2 velocity = transform.up * currentSpeed; objectRigidbody.velocity = velocity; } void ChangeSpeed(float newSpeed) { currentSpeed = newSpeed; } System.Collections.IEnumerator RestoreSpeed(float delay) { yield return new WaitForSeconds(delay); currentSpeed = originalSpeed; } } ``` 4. 在场景中放置物体实例:在场景中放置一个物体的实例,并将物体控制脚本(ObjectController)添加到物体的GameObject上。 通过以上步骤,当点击该物体时,物体的速度将改变为指定的速度,并在一段时间后恢复原始速度。你可以根据需要调整原始速度、改变后的速度和恢复延迟时间。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值