>  기사  >  운영 및 유지보수  >  C 언어의 오염된 메모리 할당 함수 사례 분석

C 언어의 오염된 메모리 할당 함수 사례 분석

WBOY
WBOY앞으로
2023-05-15 11:13:051034검색

1. 오염된 메모리 할당

C 언어 메모리 할당 함수에는 malloc(), kmalloc, smalloc(), xmalloc() , realloc(), calloc(), GlobalAlloc(), HeapAlloc() 등, malloc()는 예입니다. malloc() 함수의 프로토타입은 다음과 같습니다. malloc()kmallocsmalloc()xmalloc()realloc()calloc()GlobalAlloc()HeapAlloc()等等,以 malloc()为例, malloc() 函数的原型为:

extern void*malloc (unsignedintnum_bytes);

malloc() 函数分配了 num_bytes

extern void *malloc (unsignedintnum_bytes);

malloc() 함수는 num_bytes를 할당합니다. >bytes 메모리이고 이 메모리에 대한 포인터를 반환합니다. 메모리 할당 길이의 정수가 오염될 수 있는 신뢰할 수 없는 소스에서 나온 경우 외부 입력 데이터를 효과적으로 판단하지 못하면 매우 큰 메모리 할당이 발생합니다. 오염될 수 있는 신뢰할 수 없는 소스에는 명령줄 매개변수, 구성 파일, 네트워크 통신, 데이터베이스, 환경 변수, 레지스트리 값 및 애플리케이션 외부의 기타 입력이 포함됩니다.

2. 오염된 메모리 할당의 폐단

오염된 데이터를 메모리 할당 함수의 길이 매개변수로 직접 사용하면 프로그램이 그에 따라 매우 큰 메모리를 할당하게 됩니다. 따라서 시스템에 막대한 메모리 오버헤드가 발생하고 심지어 서비스 거부 공격이 발생하기도 합니다.

CVE에도 관련 취약점 정보가 있습니다. 2018년 1월부터 2019년 3월까지 CVE에는 관련 취약점 정보가 4개 있었습니다. 취약점 정보는 다음과 같습니다. CVEOverviewCVE-2018-6869ZZIPlib 버전 0.13의 zzip/zip.c 파일의 '__ .68 zzip_parse_root_directory' 함수는 안전한 허점입니다. 원격 공격자는 이 취약점을 악용하여 특별히 제작된 zip 파일을 사용하여 서비스 거부(제어되지 않은 메모리 할당 및 충돌)를 일으킬 수 있습니다. CVE-2018-5783 PoDoFo 버전 0.9.5의 base/PdfVecObjects.h 파일의 'PoDoFo::PdfVecObjects::Reserve' 기능에 보안 취약점이 있습니다. 원격 공격자는 이 취약점을 악용하여 특별히 제작된 PDF 파일을 사용하여 서비스 거부(제어되지 않은 메모리 할당)를 유발할 수 있습니다. CVE-2018-5296PoDoFo 0.9.5 버전에서는 base/PdfParser.cpp 파일의 'PdfParser::ReadXRefSubsection' 기능에 보안 취약점이 있습니다. 해당 취약점은 프로그램이 할당을 제어하지 못하기 때문에 발생합니다. 메모리. 원격 공격자는 이 취약점을 악용하여 특별히 제작된 PDF 파일을 사용하여 서비스 거부를 일으킬 수 있습니다.
🎜🎜🎜


3. 샘플 코드

이 섹션에 사용된 예제는 CWE-789: 제어되지 않은 메모리 할당(http://cwe.mitre.org/data/definitions/789.html)에서 제공되는 코드 샘플을 참조합니다. GetUntrustedInt() 함수가 정의되어 있습니다. GetUntrustedInt() 函数进行了定义。

3.1缺陷代码

C 언어의 오염된 메모리 할당 함수 사례 분석

在上述示例代码中,在第9行使用 malloc() 函数进行长度为 totBytes 字节的内存分配,通过跟踪路径可以看出, totBytes 在第6行通过 size*sizeof(char); 计算结果进行赋值,而 size 的值是第7行使用 scanf() 函数获取的用户键盘输入,为被污染的数据源,从而导致内存分配长度 totBytes 被污染,存在“被污染的内存分配”问题。

使用360代码卫士对上述示例代码进行检测,可以检出“被污染的内存分配”缺陷,显示等级为高。如图1所示:


C 언어의 오염된 메모리 할당 함수 사례 분석

图1:被污染的内存分配的检测示例

3.2 修复代码

C 언어의 오염된 메모리 할당 함수 사례 분석

在上述修复代码中,虽然 totBytes 的来源为被污染的数据,但在第10行对 totBytes

3.1 결함 코드

C 언어 메모리 할당 오염된 함수의 예 분석


위의 예제 코드에서 malloc() 함수는 9행에서 다음 길이의 작업을 수행하는 데 사용됩니다. totBytes 경로를 추적하여 확인할 수 있는 메모리 할당 바이트, totBytes code>는 6번째 줄에 <code class="prettyprint code-in-text Prettyprinted">size*sizeof(char);의 계산 결과를 통해 값을 할당하고 size의 값은 7행의 <code class="prettyprint code-in-text Prettyprinted">scanf() 함수를 사용하여 얻은 사용자 키보드 입력입니다. 오염된 데이터 소스로 인해 메모리 할당 길이 totBytes가 오염되었으며 "오염된 메모리 할당" 문제가 있습니다. C 언어의 오염된 메모리 할당 함수 사례 분석

360 코드 가드를 사용하면 위의 샘플 코드를 감지할 수 있으며 "오염된 메모리 할당" 결함을 감지할 수 있으며 표시 수준이 높습니다. 그림 1과 같이:

C 언어에서 오염된 메모리 할당 함수의 예 분석그림 1: 오염된 메모리 할당 감지 예

3.2 복구 코드

C 언어의 오염된 메모리 할당 함수 분석 예

위 복구 코드에서는 totBytes가 의 소스는 오염된 데이터이지만 totBytes의 길이는 10행에서 효과적으로 제한되어 오염된 데이터 할당을 방지합니다. 🎜🎜360 코드가드를 이용해 복구된 코드를 검출해 보면 '오염된 메모리 할당' 결함이 없는 것을 확인할 수 있습니다. 그림 2와 같이: 🎜🎜🎜🎜🎜🎜그림 2: 복구 후 감지 결과🎜🎜🎜4. 오염된 메모리 할당을 방지하는 방법🎜🎜🎜 (1) 오염된 데이터를 메모리 할당 함수의 길이 매개변수로 직접 사용하지 마십시오. , 피할 수 없다면 오염된 데이터를 효과적으로 제한해야 합니다. 🎜🎜🎜 (2) 소스 코드 정적 분석 도구를 사용하면 이러한 문제를 효과적으로 발견할 수 있습니다. 🎜

위 내용은 C 언어의 오염된 메모리 할당 함수 사례 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제