strcpy 오버플로 취약점 대응

반응형

C 언어 strcpy()로 인해 발생하는 메모리 오버플로 취약점의 원리와 보안적 위험, 그리고 strncpy() 등 안전한 대응 방법을 보안 관점에서 설명합니다

strcpy 오버플로 취약점 대응

C 언어 strcpy 오버플로 취약점

C 언어에서 가장 오래되고 위험한 보안 취약점 중 하나가 strcpy() 기반 버퍼 오버플로입니다.

1️⃣ strcpy()가 왜 위험한가

strcpy()는 문자열을 복사할 때 대상 버퍼의 크기를 전혀 확인하지 않습니다.
소스 문자열이 대상 버퍼보다 크면, 메모리는 제한 없이 덮어쓰이게 됩니다.

char buf[16];
strcpy(buf, user_input);

이 상황에서 user_input이 16바이트를 초과하면, 버퍼 경계를 넘어 인접한 메모리 영역까지 침범하게 됩니다.

2️⃣ “마지막 return 전에 덮어버리면” 왜 치명적인가

함수 스택 구조상, 지역 변수 뒤에는 다음과 같은 정보들이 위치합니다.

  • 저장된 프레임 포인터(Frame Pointer)
  • 리턴 주소(Return Address)
공격 핵심
- strcpy()로 스택을 넘쳐쓰면
- 리턴 주소를 공격자가 원하는 값으로 덮을 수 있음
- 함수가 return 되는 순간, 공격자가 지정한 코드로 점프

즉, “마지막 return 전에 메모리를 덮는다”는 것은 제어 흐름(Control Flow)을 탈취할 수 있다는 의미이며, 이는 단순 크래시가 아니라 원격 코드 실행(RCE)으로 이어질 수 있습니다.

3️⃣ 보안적으로 어떤 위협이 되는가

  • 임의 코드 실행(Shellcode 실행)
  • 권한 상승(프로세스 권한 탈취)
  • 서비스 거부(DoS)
  • 백도어 설치

실제로 과거 수많은 웜·익스플로잇이 strcpy()/gets()/sprintf() 계열 함수에서 출발했습니다.

4️⃣ 그래서 strncpy()를 쓰는 이유

strncpy()는 복사할 최대 길이를 지정할 수 있어 버퍼 크기 초과를 방지하는 목적의 함수입니다.

strncpy(buf, user_input, sizeof(buf) - 1);
buf[sizeof(buf) - 1] = '\0';
보안적 의미
- 지정한 길이 이상 복사하지 않음
- 스택/힙 경계 침범 차단
- 리턴 주소 덮어쓰기 원천 봉쇄

단, strncpy()는 자동으로 NULL 종료를 보장하지 않기 때문에 마지막에 명시적 종료 처리가 필요합니다.

5️⃣ strncpy()도 만능은 아니다

strncpy() 역시 오용되면 문제가 됩니다.

  • NULL 종료 누락 시 문자열 처리 오류
  • 불필요한 zero padding으로 성능 저하

그래서 현대 보안 코딩에서는 다음 계열을 더 권장합니다.

권장 대안
- strlcpy() (BSD 계열, 길이+NULL 종료 보장)
- snprintf() (형식 문자열 포함 안전 복사)
- memcpy() + 길이 검증(바이너리 데이터)

6️⃣ 보안 대응 전략 정리

① 위험 함수 제거
- strcpy, strcat, gets, sprintf 사용 금지
② 길이 기반 API 사용
- strncpy, snprintf, strlcpy 사용
③ 컴파일러 보호 기법 활성화
- Stack Canary
- ASLR
- NX(DEP)
④ 정적·동적 분석
- 정적 분석으로 위험 함수 탐지
- Fuzzing으로 오버플로 경로 검증

7️⃣ 결론

strcpy() 취약점의 본질은 “문자열 복사”가 아니라 메모리 경계 검증 부재에 있습니다.
마지막 return 전에 메모리를 덮을 수 있다면, 이는 단순 버그가 아니라 치명적인 보안 취약점입니다.

따라서 보안 관점에서의 대응은 “strcpy를 strncpy로 바꾼다” 수준이 아니라,
안전한 API 선택 + 컴파일러 보호 + 코드 리뷰가 함께 이루어져야 합니다.

반응형

'IT 소식 뉴스 > IT 소식' 카테고리의 다른 글

클로드 코드 밋업 서울  (0) 2025.12.23
하이퍼스레딩 기술 정리  (0) 2025.12.22
XSS CSRF 차이와 보안 비교  (1) 2025.12.21
개인정보보호법과 전당포법  (0) 2025.12.21
AI 백틱 설명과 사용 가능 AI  (0) 2025.12.21