현대의 소프트웨어 보안 위협 중 상당수는 ‘메모리 관리의 실패’에서 비롯됩니다. 이 글에서는 대표적인 메모리 관련 취약점인 **OOB(Out-of-Bounds)**와 **BOF(Buffer Overflow)**에 대해 소개하고, 두 취약점이 어떻게 발생하며 어떤 보안 위협을 초래하는지 살펴보겠습니다.
**OOB(Out-of-Bounds)**는 말 그대로 배열의 범위를 벗어난 접근입니다. 일반적으로 배열이나 버퍼에 데이터를 저장하거나 읽을 때, 허용된 인덱스 범위를 초과해서 접근하면 발생합니다.
int arr[5] = {1, 2, 3, 4, 5};
printf("%d\n", arr[7]); // OOB 발생!
위 코드에서 arr[7]은 정의되지 않은 메모리 영역을 참조하게 되며, 이는 프로그램의 예기치 않은 동작이나 심각한 보안 취약점으로 이어질 수 있습니다.
OOB는 **읽기(Read)**와 **쓰기(Write)**로 나눌 수 있으며, 특히 쓰기 OOB는 임의 코드 실행로 이어질 가능성이 높아 매우 위험합니다.
**BOF(Buffer Overflow)**는 버퍼의 크기보다 더 많은 데이터를 입력하여 인접한 메모리 공간을 침범하는 취약점입니다.
char buffer[10];
strcpy(buffer, "This string is too long!");
이 예시에서는 buffer가 10바이트 크기인데, strcpy 함수는 길이 제한 없이 데이터를 복사합니다. 이로 인해 인접 메모리가 덮어써지고, 프로그램 흐름이 손상될 수 있습니다.
이 두 취약점은 단순한 실수처럼 보이지만, 취약한 코드 한 줄이 시스템 전체를 위협할 수 있습니다. 실제로 유명한 해킹 사례들 중 많은 수가 OOB 또는 BOF 취약점을 이용한 것이며, 특히 C/C++과 같은 언어는 메모리 관리를 개발자에게 전적으로 맡기기 때문에 더 주의가 필요합니다.
| 취약점 | 방지 방법 |
|---|---|
| OOB | 배열 접근 시 경계 검사(bound checking) 수행 |
| BOF | 안전한 함수 사용 (strncpy, snprintf 등), 스택 보호 기법 적용 (Canary, ASLR 등) |
메모리 취약점은 단순한 코드 실수로 발생하지만, 그 결과는 매우 치명적입니다. OOB와 BOF는 보안의 기초이자 핵심이므로, 이 두 취약점의 원리를 정확히 이해하고 안전한 코드를 작성하는 습관이 중요합니다.
앞으로 다양한 취약점 분석과 보안 실습을 통해 실제 예제를 다루며 이해를 넓혀보는 것도 좋습니다. 다음 글에서는 BOF를 활용한 간단한 Exploit 코드 예제를 소개해드릴 예정입니다. 관심 있다면 구독과 댓글로 알려주세요! 😉