목차
1. 잘못된 메모리 해제 방법
2、 错误的内存释放方法的危害
3、示例代码
3.1缺陷代码
3.2 修复代码
3.1 코드 불량
🎜3.2 복구 코드🎜
운영 및 유지보수 안전 [Defect Weekly] Issue 31: 잘못된 메모리 릴리스

[Defect Weekly] Issue 31: 잘못된 메모리 릴리스

May 23, 2023 pm 11:07 PM
코드 감사

1. 잘못된 메모리 해제 방법

C 언어의 일반적인 메모리 응용 기능에는 malloc(), realloc(), calloc(), 비록 기능은 다르지만 모두 동일한 메모리 해제 기능에 해당합니다. free(), C++의 메모리 애플리케이션 및 릴리스는 신규/삭제, 신규 []/delete[] 메소드를 채택합니다. C 언어이든 C++ 언어이든 상관없이 소스 코드를 작성할 때 잘못된 메모리 해제를 사용하지 않으려면 다양한 메모리 적용 방법에 따라 메모리 해제 방법을 선택해야 합니다. 예: C/C++ 메모리 할당/해제 혼합 사용 또는 스칼라 및 벡터 메모리 할당/해제 혼합 사용. malloc()realloc()calloc(),它们虽然功能不同,但都对应同一个内存释放函数 free(),C++中对内存的申请和释放采用new/delete、new []/delete[] 方式。不管是 C 语言还是 C++ 语言,当编写源代码时要根据内存申请的方法不同来对应地选择内存释放方法,避免使用错误的内存释放。例如:混合使用C/C++的内存申请/释放,或混合使用标量和矢量的内存申请/释放。

2、 错误的内存释放方法的危害

错误地释放内存可能会导致程序出现意料之外的错误行为,甚至导致程序崩溃。在《effective C++(第二版)》条目5“对应的 new 和 delete 要采用相同形式”中指出:“如果错误地释放对象中的元素,可能造成整个对象、甚至整个堆上的内存结构都发生损坏,从而发生内存泄漏,甚至导致程序崩溃”。

在CVE数据库中,也有与此相关的漏洞信息。自2018年1月至2019年4月,CVE数据库中共有3条相关漏洞信息。漏洞信息如下:

CVE 漏洞概况
CVE-2018-14948 dilawar sound2017-11-27 及之前版本中的 wav-file.cc文件存在错误的内存释放方法漏洞 (new[]/delete)。
CVE-2018-14947 PDF2JSON 0.69 版本中的 XmlFonts.cc 文件的‘XmlFontAccu::CSStyle’函数存在错误的内存释放漏洞(new[]/delete)。
CVE-2018-14946 PDF2JSON 0.69 版本中的 ImgOutputDev.cc 文件的 HtmlString 类存在错误的内存方法漏洞 (malloc/delete)。

3、示例代码

示例源于 Samate Juliet Test Suite for C/C++ v1.3 (https://samate.nist.gov/SARD/testsuite.php),源文件名:CWE762_Mismatched_Memory_Management_Routines__new_array_delete_char_01.cpp。

3.1缺陷代码

[Defect Weekly] Issue 31: 잘못된 메모리 릴리스

在上述示例代码中,第31行使用 new[] 创建对象数组,在第34行使用 delete 进行释放,由于在释放对象数组时,没有使用 new[] 对应的 delete[],因此存在“错误的内存释放方法”问题。

使用代码卫士对上述示例代码进行检测,可以检出“错误的内存释放方法”缺陷,显示等级为中。如图1所示:

[Defect Weekly] Issue 31: 잘못된 메모리 릴리스

图1:错误的内存释放方法的检测示例

3.2 修复代码

[Defect Weekly] Issue 31: 잘못된 메모리 릴리스

在上述修复代码中,Samate 给出的修复方式为:在第31行通过 new[] 创建对象数组,并在第33行使用 delete[]

2. 잘못된 메모리 해제 방법의 피해

[Defect Weekly] Issue 31: 잘못된 메모리 릴리스잘못된 메모리 해제는 프로그램에 예상치 못한 잘못된 동작을 일으키거나 프로그램이 중단될 수도 있습니다. "Effective C++ (Second Edition)"의 항목 5 "해당 new 및 delete는 동일한 형식을 채택해야 합니다"는 다음과 같이 지적합니다. "객체의 요소가 잘못 해제되면 전체 객체 또는 심지어 전체 메모리 구조가 힙이 손상되어 메모리 누수 또는 프로그램 충돌이 발생합니다."

CVE 데이터베이스에도 이와 관련된 취약점 정보가 있습니다. 2018년 1월부터 2019년 4월까지 CVE 데이터베이스에는 총 3개의 관련 취약점 정보가 있었습니다. 취약점 정보는 다음과 같습니다:

CVE 취약점 개요
CVE-2018-14948 dilawar sound2017-11의 wav-file.cc 파일에 오류가 있습니다. -27 및 이전 버전 메모리 해제 방법 취약점(new[]/delete).
CVE-2018-14947 PDF2JSON 버전 0.69에 있는 XmlFonts.cc 파일의 'XmlFontAccu::CSStyle' 함수에는 잘못된 메모리 릴리스 취약점이 있습니다. (새로 만들기[]/삭제).
CVE-2018-14946 PDF2JSON 버전 0.69의 ImgOutputDev.cc 파일에는 HtmlString 클래스에 잘못된 메모리 메서드 취약점(malloc/delete)이 있습니다. .

3. 샘플 코드

예제는 Samate Juliet Test Suite for C/C++ v1.3(https://samate.nist.gov)에서 가져온 것입니다. / SARD/testsuite.php), 소스 파일 이름: CWE762_Mismatched_Memory_Management_Routines__new_array_delete_char_01.cpp.

3.1 코드 불량

【결함 주간 토크

위 예제 코드에서 31행은 new[]를 사용하여 객체 배열을 생성합니다. 34행에서는 해제를 위해 delete를 사용합니다. 객체 배열을 해제할 때 new는 사용되지 않습니다. []삭제[]에 해당하므로 "잘못된 메모리 해제 방법" 문제가 있습니다. 🎜🎜Code Guard를 사용하여 위의 샘플 코드를 감지하면 "잘못된 메모리 해제 방법" 결함을 감지할 수 있으며 표시 수준은 중간입니다. 그림 1과 같이: 🎜🎜[Defects Weekly] 문제 31: 오류 🎜🎜🎜그림 1: 잘못된 메모리 해제 방법 감지 예🎜

🎜3.2 복구 코드🎜

🎜[Defects Weekly] Issue 31: Wrong memory release🎜🎜위 복구 코드에서 Samate가 제공한 복구 방법은 다음과 같습니다. 31행은 new[], delete[ on line 33 ]를 사용하여 해제합니다. 이렇게 하면 잘못된 메모리 해제 방법을 피할 수 있습니다. 🎜🎜Code Guard를 사용하여 복구된 코드를 감지하면 "잘못된 메모리 해제 방법" 결함이 더 이상 존재하지 않는 것을 확인할 수 있습니다. 그림 2에 표시된 대로: 🎜🎜🎜🎜🎜🎜그림 2: 수리 후 감지 결과🎜🎜🎜4. 잘못된 메모리 해제 방법을 방지하는 방법🎜🎜🎜잘못된 메모리 해제 방법을 방지하려면 다음 사항에 주의해야 합니다. :🎜🎜(1 ) 메모리를 해제할 때 복잡한 프로그램 구조와 인력부주의로 인해 잘못된 해제 방법을 사용하는 것을 방지하기 위해 메모리 적용에 사용되는 방법을 명확히 합니다. 🎜🎜(2) 소스 코드 정적 분석 도구를 사용하면 이러한 유형의 문제를 효과적으로 감지할 수 있습니다. 🎜

위 내용은 [Defect Weekly] Issue 31: 잘못된 메모리 릴리스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

[Defect Weekly] Issue 31: 잘못된 메모리 릴리스 [Defect Weekly] Issue 31: 잘못된 메모리 릴리스 May 23, 2023 pm 11:07 PM

1. 잘못된 메모리 해제 방법 C 언어의 일반적인 메모리 응용 함수에는 malloc(), realloc() 및 calloc()이 있지만 모두 동일한 메모리 해제 함수인 free()에 해당합니다. C++ 응용프로그램 및 릴리스의 메모리는 new/delete, new[]/delete[] 메소드를 채택합니다. C 언어이든 C++ 언어이든 상관없이 소스 코드를 작성할 때 잘못된 메모리 해제를 사용하지 않으려면 다양한 메모리 적용 방법에 따라 메모리 해제 방법을 선택해야 합니다. 예: C/C++ 메모리 할당/해제 혼합 사용 또는 스칼라 및 벡터 메모리 할당/해제 혼합 사용. 2. 잘못된 메모리 해제 방법의 피해 잘못된 메모리 해제 방법을 사용하면,

권장되는 PHP 코드 감사 기술 및 실용적인 도구 권장되는 PHP 코드 감사 기술 및 실용적인 도구 Aug 08, 2023 pm 02:15 PM

권장되는 PHP 코드 감사 기술 및 실용적인 도구 개요: 인터넷의 급속한 발전으로 인해 웹사이트 보안 문제가 점점 더 중요해지고 있습니다. 인터넷 개발에 널리 사용되는 언어로서 PHP의 코드 보안 감사는 매우 중요한 링크가 되었습니다. 이 기사에서는 PHP 코드 감사를 위한 몇 가지 기본 기술을 소개하고 몇 가지 실용적인 도구를 권장합니다. 1. 코드 감사 기술은 민감한 기능을 검사합니다. PHP 코드 감사에서 가장 먼저 주의해야 할 것은 민감한 기능의 사용입니다. 예를 들어, eval() 함수는 전달된 모든 코드를 실행할 수 있으므로

PHP로 기본 코드 감사를 수행하는 방법 PHP로 기본 코드 감사를 수행하는 방법 Jun 22, 2023 pm 02:06 PM

네트워크 보안 인식이 향상되고 해커 공격 방법이 지속적으로 업그레이드됨에 따라 웹 사이트 보안 문제는 기업과 개인에게 피할 수 없는 문제가 되었습니다. 특히 문제가 심각한 이 시대에 PHP는 인기 있는 웹 개발 언어이며, 점점 더 많은 기업이나 개인이 PHP를 통해 웹 사이트를 개발하고 있습니다. PHP 웹사이트의 보안을 보장하기 위해 코드 감사는 필수적인 링크입니다. 코드 감사란 무엇입니까? 코드 감사는 웹사이트 코드를 분석하여 보안 취약점을 찾는 프로세스입니다. 이는 체계적이고 심층적인

소프트웨어 코드 감사에 Python을 사용하는 방법 소프트웨어 코드 감사에 Python을 사용하는 방법 Jun 29, 2023 am 10:13 AM

소프트웨어 코드 감사에 Python을 사용하는 방법 소프트웨어 애플리케이션의 급속한 개발로 인해 코드 품질 및 보안 문제도 점점 더 많은 관심을 받고 있습니다. 코드 감사는 코드 품질을 평가 및 확인하고 잠재적인 취약점과 보안 문제를 발견하는 프로세스입니다. 유연하고 기능이 풍부한 프로그래밍 언어인 Python은 코드 감사 실무에 널리 사용됩니다. 이 기사에서는 소프트웨어 코드 감사에 Python을 사용하는 방법을 간략하게 소개합니다. 1. 코드 감사의 기본 개념을 이해하려면 먼저 코드 감사의 의미를 이해해야 합니다.

PHP 개발에서 코드 감사 및 버그 수정을 처리하는 방법 PHP 개발에서 코드 감사 및 버그 수정을 처리하는 방법 Oct 10, 2023 am 09:41 AM

PHP 개발에서 코드 감사 및 취약점 복구를 처리하는 방법 인터넷의 급속한 발전과 함께 널리 사용되는 프로그래밍 언어인 PHP는 웹 사이트 및 애플리케이션 개발에서 중요한 위치를 차지합니다. 그러나 PHP 코드는 오픈 소스 특성으로 인해 해커가 쉽게 악용하여 보안 취약점을 유발할 수도 있습니다. PHP 개발자에게 코드 감사 및 취약점 복구는 주의를 기울여야 할 문제입니다. 이 문서에서는 특정 코드 예제를 통해 PHP 개발 시 코드 감사 및 취약점 수정을 처리하는 방법을 자세히 설명합니다. 1. 코드 감사코드 감사

PHP 백엔드 기능 개발에서 보안 보호를 수행하는 방법은 무엇입니까? PHP 백엔드 기능 개발에서 보안 보호를 수행하는 방법은 무엇입니까? Aug 06, 2023 pm 09:30 PM

PHP 백엔드 기능 개발에서 보안 보호를 수행하는 방법은 무엇입니까? 인터넷의 대중화와 관련 기술의 급속한 발전으로 인해 PHP는 백엔드 개발 언어로 널리 채택되어 사용자가 점점 더 많아지고 있습니다. 그러나 그에 따른 보안 문제는 무시할 수 없습니다. 사용자 데이터를 보호하고 악의적인 공격을 방지하기 위해 개발자는 PHP 백엔드 기능 개발의 보안에 주의해야 합니다. 이 기사에서는 PHP 백엔드 기능 개발에서 몇 가지 일반적인 보안 보호 조치를 소개하고 해당 코드 예제를 제공합니다. 사용자 수신 및 처리 시 입력 검증 및 데이터 필터링

PHP 보안코드 감사 기술 분석 PHP 보안코드 감사 기술 분석 Jun 30, 2023 pm 10:25 PM

PHP는 웹 개발 및 동적 웹 사이트 구축에 널리 사용되는 서버 측 스크립팅 언어입니다. 그러나 인터넷의 급속한 발전과 네트워크 보안 위협의 증가로 인해 보안 문제는 점차 개발자에게 중요해지고 있습니다. PHP 개발에서 보안 코드 감사 기술은 중요한 역할을 합니다. 이 기사에서는 개발자가 애플리케이션을 더 잘 보호할 수 있도록 PHP의 보안 코드 감사 기술 분석을 자세히 살펴보겠습니다. 먼저 보안 코드 감사가 무엇인지 이해해야 합니다. 보안 코드 감사는 코드에 대한 전체 검토를 의미합니다.

PHP의 코드 감사 PHP의 코드 감사 May 24, 2023 am 08:04 AM

네트워크 기술의 지속적인 발전으로 다양한 애플리케이션은 점차 생활에 없어서는 안 될 부분이 되었습니다. 웹 개발에 널리 사용되는 프로그래밍 언어인 PHP는 많은 응용 프로그램에서도 중요한 역할을 합니다. 그러나 PHP 코드의 보안은 간과되거나 무시되는 경우가 많습니다. 해커와 공격자에게 PHP 애플리케이션은 공격의 대상이 되며, 공격을 방어하고 방지하려면 PHP 코드 감사가 필요합니다. PHP 코드 감사란 무엇입니까? PHP 코드 감사는 PHP 코드를 확인하는 것을 의미합니다.

See all articles