
malloc 등).
메모리의 [중요]스택과 힙은 서로 마주 보고 자라나는 구조입니다. 스택이 너무 많이 자라나면Stack Overflow, 힙이 너무 많이 자라나면Out of Memory가 발생합니다.
BUF의 크기가 10바이트인데, 사용자가 100바이트의 데이터를 입력하면 어떻게 될까요?BUF를 가득 채웁니다.SFP를 덮어씁니다.return)되는 순간, CPU는 조작된 #include <stdio.h>
#include <string.h>
void vulnerable_function(char *str) {
char buffer[50]; // 50바이트 공간 할당
// [취약점] 입력받은 str의 길이를 검사하지 않고 복사함
strcpy(buffer, str);
}
int main(int argc, char *argv[]) {
vulnerable_function(argv[1]); // argv[1]에 공격용 긴 문자열 전달 가능
return 0;
}argv[1]로 100바이트 이상의 문자열을 넣으면 strcpy 함수는 경계 검사를 하지 않고 그대로 복사하여 
strcpy(dst, src): 문자열 복사.strcat(dst, src): 문자열 이어 붙이기.gets(buf): 문자열 입력 (가장 위험, 표준에서 퇴출됨).scanf("%s", buf): 공백 전까지 입력.sprintf(buf, ...): 포맷팅 문자열 출력.strncpy(dst, src, n): n바이트만큼만 복사.strncat(dst, src, n): n바이트만큼만 이어 붙이기.fgets(buf, n, stream): n바이트만큼만 입력받음.snprintf(buf, n, ...): n바이트만큼만 출력.#include <stdio.h>
#include <string.h>
void secure_function(char *str) {
char buffer[50];
// [안전] buffer의 크기 - 1 만큼만 복사 (널 문자 고려)
strncpy(buffer, str, sizeof(buffer) - 1);
buffer[sizeof(buffer) - 1] = '\0'; // 문자열 끝 보장
}strcpy 대신 strncpy 같은 안전한 함수를 사용하는 다음 시간에는1.7 레이스 컨디션과 포맷 스트링 공격 원리에 대해 알아봅니다. 파일 접근 타이밍을 노리는 공격과printf함수의 기능을 악용한 메모리 조작 기법을 깊이 있게 다뤄보겠습니다.