C 언어 메모리 할당 함수에는 malloc()
, kmalloc
, smalloc()
, xmalloc()
, realloc()
, calloc()
, GlobalAlloc(), HeapAlloc()
등, malloc()
는 예입니다. malloc()
함수의 프로토타입은 다음과 같습니다. malloc()
、 kmalloc
、 smalloc()
、 xmalloc()
、realloc()
、 calloc()
、 GlobalAlloc()
、 HeapAlloc()
等等,以 malloc()
为例, malloc()
函数的原型为:
extern void*malloc (unsignedintnum_bytes);
malloc()
函数分配了 num_bytes
malloc()
함수는 num_bytes
를 할당합니다. >bytes 메모리이고 이 메모리에 대한 포인터를 반환합니다. 메모리 할당 길이의 정수가 오염될 수 있는 신뢰할 수 없는 소스에서 나온 경우 외부 입력 데이터를 효과적으로 판단하지 못하면 매우 큰 메모리 할당이 발생합니다. 오염될 수 있는 신뢰할 수 없는 소스에는 명령줄 매개변수, 구성 파일, 네트워크 통신, 데이터베이스, 환경 변수, 레지스트리 값 및 애플리케이션 외부의 기타 입력이 포함됩니다. 2. 오염된 메모리 할당의 폐단
오염된 데이터를 메모리 할당 함수의 길이 매개변수로 직접 사용하면 프로그램이 그에 따라 매우 큰 메모리를 할당하게 됩니다. 따라서 시스템에 막대한 메모리 오버헤드가 발생하고 심지어 서비스 거부 공격이 발생하기도 합니다.
CVE | |
---|---|
CVE-2018-6869 | |
CVE-2018-5783 | |
CVE-2018-5296 |
이 섹션에 사용된 예제는 CWE-789: 제어되지 않은 메모리 할당(http://cwe.mitre.org/data/definitions/789.html)에서 제공되는 코드 샘플을 참조합니다. GetUntrustedInt()
함수가 정의되어 있습니다. GetUntrustedInt()
函数进行了定义。
在上述示例代码中,在第9行使用 malloc()
函数进行长度为 totBytes
字节的内存分配,通过跟踪路径可以看出, totBytes
在第6行通过 size*sizeof(char);
计算结果进行赋值,而 size
的值是第7行使用 scanf()
函数获取的用户键盘输入,为被污染的数据源,从而导致内存分配长度 totBytes
被污染,存在“被污染的内存分配”问题。
使用360代码卫士对上述示例代码进行检测,可以检出“被污染的内存分配”缺陷,显示等级为高。如图1所示:
图1:被污染的内存分配的检测示例
在上述修复代码中,虽然 totBytes
的来源为被污染的数据,但在第10行对 totBytes
위의 예제 코드에서 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
가 오염되었으며 "오염된 메모리 할당" 문제가 있습니다.
3.2 복구 코드
totBytes가
의 소스는 오염된 데이터이지만 totBytes
의 길이는 10행에서 효과적으로 제한되어 오염된 데이터 할당을 방지합니다. 🎜🎜360 코드가드를 이용해 복구된 코드를 검출해 보면 '오염된 메모리 할당' 결함이 없는 것을 확인할 수 있습니다. 그림 2와 같이: 🎜🎜🎜🎜🎜🎜그림 2: 복구 후 감지 결과🎜🎜🎜4. 오염된 메모리 할당을 방지하는 방법🎜🎜🎜 (1) 오염된 데이터를 메모리 할당 함수의 길이 매개변수로 직접 사용하지 마십시오. , 피할 수 없다면 오염된 데이터를 효과적으로 제한해야 합니다. 🎜🎜🎜 (2) 소스 코드 정적 분석 도구를 사용하면 이러한 문제를 효과적으로 발견할 수 있습니다. 🎜위 내용은 C 언어의 오염된 메모리 할당 함수 사례 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!