0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

缓冲区溢出漏洞的原理、成因、类型及最佳防范实践(借助Perforce 的Klocwork/Hleix QAC等静态代码分析工具)

龙智DevSecOps 2025-03-04 16:39 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文来源perforce.com,由Perforce中国授权合作伙伴-龙智翻译整理。

缓冲区溢出(buffer overflow/overrun)是最常见的代码漏洞之一。如果缓冲区溢出漏洞未得到解决,不可信的代理可能会利用该漏洞并发起攻击。

本文将详细介绍什么是缓冲区溢出、如何防止缓冲区溢出并提供常见示例,帮助您更简单、更轻松地保护软件免受此类威胁。

什么是缓冲区溢出?

缓冲区溢出(buffer overflow/overrun)是一种常见的软件安全漏洞。这一软件安全问题非常严重,因为它会使系统面临潜在的网络威胁和攻击。

导致缓冲区溢出漏洞的原因是什么?

当缓冲区中存储的数据超出其容量时,就会发生缓冲区溢出漏洞。多余的数据会“溢出”到相邻的存储空间。缓冲区溢出问题一旦发生,可能会导致整个系统的崩溃。

缓冲区溢出攻击是如何运作的?

在常见漏洞枚举(CWE)和SANS最危险的软件错误列表Top25中,缓冲区溢出一直是排名前列的问题之一。
尽管缓冲区溢出是一个广为人知的问题,但在源代码中检测和防止缓冲区溢出仍然具有挑战性。这需要持续的检测和最佳实践培训,以正确处理这些溢出问题。此外,那些未被检测到的缓冲区溢出,可能会继续影响成千上万个易受攻击的系统。
网络攻击者可以利用程序内存分配过程中的特定漏洞,并通过操控输入来使系统溢出。通过发送大于缓冲区可以处理的数据输入的任意或恶意代码,攻击者可以更改程序的执行流程并控制程序。
C和C++是最易受到缓冲区溢出攻击的语言,因为它们没有内置机制来防止访问和覆盖内存的数据。现代语言如C#Java则不太可能受到攻击,因为它们减少了导致缓冲区溢出的编码错误。然而,只要允许内存操作,任何环境中都有可能发生缓冲区溢出。

缓冲区溢出攻击的类型

大多数的缓冲区溢出攻击可以分为两类:
1、基于栈的攻击:
在程序内存中,栈是一个用于存储局部变量和函数调用的空间。栈通常是空的,主要设计为“后进先出”的结构,因此不适合一次性存储大量数据。攻击者通过注入文件来触发过量的内存分配,或发送隐藏的恶意代码负载,来利用应用程序中基于栈的缓冲区溢出漏洞,从而获得系统的访问权限。
2、基于堆的攻击:
与栈不同,堆管理动态内存,并且是手动管理的。程序员可以在编译时未知大小的情况下将内存分配给堆。虽然基于堆的漏洞更难利用,但基于堆的溢出攻击对系统的破坏性更大,因此也会吸引攻击者。基于堆的溢出攻击会淹没程序预留的内存空间,超出当前运行时操作所需的内存。

以下是一些缓冲区溢出的常见示例:

  • ABV.ANY_SIZE_ARRAY
  • ABV.GENERAL
  • ABV.ITERATOR
  • ABV.MEMBER
  • ABV.STACK
  • ABV.TAINTED
  • ABV.UNICODE.BOUND_MAP
  • ABV.UNICODE.FAILED_MAP
  • ABV.UNICODE.NNTS_MAP
  • ABV.UNICODE.SELF_MAP
  • ABV.UNKNOWN_SIZE
  • NNTS.MIGHT
  • NNTS.MUST
  • NNTS.TAINTED
  • RABV.CHECK
  • RN.INDEX
  • SV.FMT_STR.BAD_SCAN_FORMAT
  • SV.STRBO.BOUND_COPY.OVERFLOW
  • SV.STRBO.BOUND_COPY.UNTERM
  • SV.STRBO.BOUND_SPRINTF
  • SV.STRBO.UNBOUND_COPY
  • SV.STRBO.UNBOUND_SPRINTF
  • SV.UNBOUND_STRING_INPUT.CIN
  • SV.UNBOUND_STRING_INPUT.FUNC

如何检测C语言中的缓冲区溢出漏洞并防止攻击?

除了遵循安全编码的最佳实践外,检测此类漏洞的最佳方法是使用静态代码分析工具,例如Perforce所提供的Klocwork和Helix QAC。
Klocwork拥有一套广泛的软件安全检查器,帮助确保安全漏洞不会被利用。每个检查器都提供违规描述、潜在漏洞和风险的解释以及代码示例。
Helix QAC 是一款专为 C 和 C++ 语言设计的高精度静态代码分析工具。它能够深入分析代码库,检测可能导致缓冲区溢出等安全漏洞的编码缺陷。Helix QAC 提供详细的诊断信息,包括问题的根本原因、修复建议以及合规性标准(如 MISRA、ISO 26262)的支持,从而帮助团队满足行业安全要求。此外,Helix QAC 的分析结果清晰易懂,支持团队快速定位和解决潜在的安全隐患。

如何在C和其他语言中防止缓冲区溢出?

以下是防止缓冲区溢出漏洞的方法。
使用不引发软件漏洞的编程语言
完全避免网络攻击的方法之一是使用不引发此类漏洞的编程语言。例如,C语言是缓冲区攻击的主要目标,该语言通过直接访问内存从而引发漏洞。而像Java、Python和.NET等语言,则对缓冲区漏洞免疫。
开发过程中注意缓冲区的使用情况
防止软件漏洞的另一种方法是在开发过程中注意缓冲区的使用情况。缓冲区被访问的地方就是漏洞可能发生的地方,尤其是当函数涉及用户生成的输入时。
遵循防止缓冲区溢出的最佳实践
以下是可遵循的5个最佳实践:

1.使用自动化的代码审查和测试。

2.对DevOps团队进行关于使用不安全函数的概念培训。

3.关注于安全函数,如使用strncpy而非strcpy、使用strncat而非strcat。

4.保持应用程序服务器的补丁更新。

5.使用代码分析工具定期检查应用程序是否存在软件安全漏洞。

使用Klocwork/Helix QAC防止缓冲区溢出漏洞

为了确保您的应用程序免受缓冲区溢出等破坏性的软件漏洞攻击,建议您使用静态代码分析工具。正如前面所提到的,C和C++特别容易受到缓冲区溢出的影响。为了保护C和C++应用程序,您可以使用Klocwork 或 Helix QAC 等静态代码分析工具,并运行MISRA 或 CERT 等编码标准来识别软件漏洞。
静态应用安全测试(SAST)工具对于检测软件应用中的安全漏洞至关重要。借助SAST工具,您可以在代码开发过程中发现安全漏洞问题。
如果您的组织希望主动防范安全威胁,请使用静态代码分析工具(如Klocwork或Helix QAC)!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码分析
    +关注

    关注

    0

    文章

    13

    浏览量

    5936
  • Klocwork
    +关注

    关注

    0

    文章

    10

    浏览量

    7220
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CC++源程序缓冲区溢出漏洞静态检测

    CC++源程序缓冲区溢出漏洞静态检测.
    发表于 08-16 00:43

    基于中间汇编的缓冲区溢出检测模型

    提出一种基于中间汇编的缓冲区溢出检测模型,用于对可执行代码进行静态分析和检测。采用中间汇编形式可以使算法对硬件平台透明,增强
    发表于 03-29 11:10 20次下载

    基于状态图的缓冲区溢出攻击分析

    结合缓冲区溢出攻击产生的原理,分析缓冲区溢出攻击代码的结构,论述Snort规则对
    发表于 04-10 08:46 32次下载

    二进制环境下的缓冲区溢出漏洞动态检测

    提出一种在二进制环境下挖掘缓冲区溢出漏洞的方法。结合动态与静态挖掘技术对二进制环境下的程序作进一步的漏洞查找。
    发表于 04-10 09:54 27次下载

    基于可执行代码缓冲区溢出检测模型

    根据缓冲区溢出原理,提出一种基于可执行代码缓冲区溢出检测模型,给出该模型的理论基础,描述模型构建的过程,提出新的
    发表于 04-20 09:26 31次下载

    二进制扫描的缓冲区溢出漏洞探测技术

    缓冲区溢出漏洞自从出现以来,一直引起许多严重的安全性问题,而且随着软件系统越做越大,越来越复杂,缓冲区溢出
    发表于 08-10 10:19 17次下载

    Windows缓冲区溢出攻击的实例研究

    本文首先详细分析了Windows 缓冲区溢出的基本原理和具体流程。在此基础上,通过对一个Windows 网络缓冲区溢出攻击实例的详细调试
    发表于 08-28 09:44 17次下载

    缓冲区溢出攻击的防护技术分析

    缓冲区溢出攻击已经成为网络攻击的主要方式。本文首先分析缓冲区溢出攻击的基本原理,然后分析了形成
    发表于 09-02 10:50 9次下载

    缓冲区溢出攻击的原理和防范技术分析

    基于解决缓冲区溢出这一普遍发生的网络安全漏洞的目的,通过软件、硬件技术层面的验证方法,结合人工检查、静态发现技术、动态防御技术实验手段,得
    发表于 05-27 16:20 17次下载

    为什么缓冲区溢出会带来危害?会带来哪些危害?

    在当前网络与分布式系统安全中,被广泛利用的50%以上都是缓冲区溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕虫。而缓冲区溢出
    发表于 11-28 14:46 1.3w次阅读
    为什么<b class='flag-5'>缓冲区</b><b class='flag-5'>溢出</b>会带来危害?会带来哪些危害?

    消除IoT上的缓冲区溢出漏洞

    黑客可以使用堆栈缓冲区溢出将可执行文件替换为恶意代码,从而允许他们利用堆内存或调用堆栈本身系统资源。例如,控制流劫持利用堆栈缓冲区
    的头像 发表于 10-12 15:25 1477次阅读
    消除IoT上的<b class='flag-5'>缓冲区</b><b class='flag-5'>溢出</b><b class='flag-5'>漏洞</b>

    消除物联网上的缓冲区溢出漏洞

      黑客可以使用堆栈缓冲区溢出将可执行文件替换为恶意代码,从而使他们能够利用堆内存或调用堆栈本身系统资源。例如,控制流劫持利用堆栈缓冲区
    的头像 发表于 12-02 11:57 1547次阅读

    WebP图像编解码库libwebp存在堆缓冲区溢出漏洞

    WebP图像编解码库libwebp存在堆缓冲区溢出漏洞(CVE-2023-4863),攻击者可以通过发送植入恶意代码的WebP图像获得设备的部分权限。
    的头像 发表于 09-25 09:48 5597次阅读
    WebP图像编解码库libwebp存在堆<b class='flag-5'>缓冲区</b><b class='flag-5'>溢出</b><b class='flag-5'>漏洞</b>

    汽车软件团队必看:基于静态代码分析工具Perforce QAC的ISO 26262合规实践

    ISO 26262合规指南,从ASIL分级到工具落地,手把手教你用静态代码分析Perforce QAC
    的头像 发表于 08-07 17:33 863次阅读
    汽车软件团队必看:基于<b class='flag-5'>静态</b><b class='flag-5'>代码</b><b class='flag-5'>分析</b><b class='flag-5'>工具</b><b class='flag-5'>Perforce</b> <b class='flag-5'>QAC</b>的ISO 26262合规<b class='flag-5'>实践</b>

    什么是CVE?如何通过SAST/静态分析工具Perforce QACKlocwork应对CVE?

    本文将为您详解什么是CVE、CVE标识符的作用,厘清CVE与CWE、CVSS的区别,介绍CVE清单内容,并说明如何借助合适的静态分析工具(如Perf
    的头像 发表于 10-31 14:24 276次阅读
    什么是CVE?如何通过SAST/<b class='flag-5'>静态</b><b class='flag-5'>分析</b><b class='flag-5'>工具</b><b class='flag-5'>Perforce</b> <b class='flag-5'>QAC</b> 和 <b class='flag-5'>Klocwork</b>应对CVE?