단답형
문제
독일어 원문
Beschreiben Sie kurz die Funktionsweise eines Stack-based Buffer Overflow.
한국어 해석
stack-based buffer overflow의 작동을 설명하시오.
직접 답안 작성
답안 슬롯 자가 점검 — 실제로 말하거나 쓴 항목만 체크하세요.
0/3 slots
답안은 브라우저에만 임시 저장됩니다. 채점 프레임과 비교해 스스로 판정하세요.
단계별 힌트
막혔을 때만 한 단계씩 여세요. 정답을 바로 읽는 것보다 기억을 꺼내는 시간이 중요합니다.
- 첫 힌트: 작은 서랍에 물건을 계속 밀어 넣어 옆 서랍의 주소표까지 덮어쓰는 상황이다.
- 경계 밖 쓰기를 쓴다.
- stack의 인접 control data를 언급한다.
- crash/control-flow hijack 영향을 쓴다.
- 함정: 모든 overflow가 반드시 즉시 code execution으로 이어진다고 단정하지 않는다.
- 후속 점검: canary, NX, ASLR은 각각 어느 단계를 어렵게 하는가?
채점 기준으로 내 답안 점검하기
- 경계 밖 쓰기를 쓴다.
- stack의 인접 control data를 언급한다.
- crash/control-flow hijack 영향을 쓴다.
답안 슬롯 자가 점검 — 실제로 말하거나 쓴 항목만 체크하세요.
0/3 slots
정답과 핵심 해설 확인하기
고정 크기 local stack buffer보다 많은 데이터를 쓰면 인접한 local data, saved frame pointer, return address까지 덮을 수 있다. 공격자는 control flow를 바꾸거나 crash를 일으킬 수 있다.
- 경계 밖 쓰기를 쓴다.
- stack의 인접 control data를 언급한다.
- crash/control-flow hijack 영향을 쓴다.
개념부터 다시 보는 상세 풀이
BEGINNER LESSON
Stack-based Buffer Overflow: 작은 지역 배열에서 return address까지
ZERO-BASE START
정말 아무것도 모른다고 가정하고 시작합니다
전문 용어를 알고 있다고 가정하지 않습니다. 먼저 일상적인 장면을 보고, 그 장면의 사람과 행동에 실제 보안 용어를 하나씩 붙인 뒤, 시스템에서 일어나는 순서를 따라갑니다.
기초 개념 01
C의 buffer와 length 없는 sprintf
1타 강사식 시작: 이름은 잠시 가리고 장면부터 봅시다
10칸짜리 서랍에 30개 물건을 밀어 넣으면 옆 서랍의 물건까지 밀어내는 것과 같다. C는 자동으로 벽을 만들어 막아 주지 않는다.
지금은 이 비유를 완벽히 외울 필요가 없습니다. 누가 무엇을 가지고 있고, 무엇을 하려 하며, 어느 지점에서 문제가 생기는지만 찾으면 됩니다.
이제 실제 용어를 하나씩 붙여 봅시다
C의 char array는 정해진 크기의 연속된 memory 공간이다. Buffer에 들어갈 문자열 길이를 확인하지 않고 sprintf로 쓰면 경계를 넘어 인접 memory를 덮을 수 있다. 이를 buffer overflow라고 하며 crash, data corruption, 경우에 따라 code execution으로 이어질 수 있다. snprintf는 최대 길이를 받지만 반환값과 null termination 조건도 확인해야 한다.
TERMS FROM ZERO
전문 용어를 한 단어씩 풀기
아래 단어는 이미 안다고 가정하지 않습니다. 먼저 쉬운 뜻을 읽고, 본문에서 같은 단어가 나오면 이 정의로 다시 바꾸어 읽으세요.
Buffer
프로그램이 byte나 문자를 잠시 저장하도록 확보한 연속 memory 공간입니다.
Boundary / Bounds
Buffer가 합법적으로 사용할 수 있는 시작과 끝 범위입니다.
Null terminator
C 문자열의 끝을 표시하는 값 `\0`으로, 저장 공간 1바이트를 차지합니다.
Stack frame
한 함수 호출의 local variable, 저장된 register, return 관련 정보가 놓이는 stack 영역입니다.
Buffer overflow
확보한 buffer 범위를 넘어 write하여 인접 memory를 손상시키는 오류입니다.
프로그램이나 프로토콜 안에서는 다음 순서로 움직입니다.
- 목적지 buffer 크기를 확인한다.
- 공격자가 제어하는 문자열의 최대 길이를 확인한다.
- Format 후 필요한 길이가 buffer보다 큰지 계산한다.
- Bounded API와 반환값 검사, 명시적 길이 검증을 적용한다.
왜 여기서 많이 틀릴까요?
sprintf의 format string이 고정되어 있어도 출력 전체 길이가 제한되지 않으면 overflow가 생길 수 있다.
조건을 생략하거나 서로 다른 기능을 같은 것으로 취급했는지 확인하세요. 정답 문장을 외우는 것보다 틀린 이유를 말할 수 있어야 변형 문제를 풀 수 있습니다.
핵심부터 말하면 고정 크기 local stack buffer보다 많이 쓰면 배열 경계를 넘어 같은 stack frame의 인접 데이터와 control data가 손상될 수 있습니다.
이 글에서 익힐 것
stack frame을 단순한 칸 그림으로 이해한다.
overflow의 원인과 가능한 영향을 구분한다.
canary·NX·ASLR의 역할을 서로 구분한다.
먼저 알아야 할 개념
함수 호출마다 stack에 지역 변수와 되돌아갈 위치 같은 정보가 놓입니다. 실제 배치는 compiler마다 다르지만, 고정 크기 buffer 밖으로 쓰면 ‘옆에 있는 무엇인가’가 손상될 수 있다는 원리는 같습니다.
예제로 확인하기
상황 설정
`char name[8]`에 12글자와 문자열 끝 `\0`을 길이 검사 없이 복사한다고 합시다.
풀이 순서
처음 8바이트는 `name[0]..name[7]`에 들어갑니다.
아홉 번째 바이트부터 경계 밖 write가 시작됩니다.
추가 바이트는 인접 local variable, saved frame pointer, return address 등에 영향을 줄 수 있습니다.
중요하지 않은 값만 손상되면 잘못된 결과가, 주소가 손상되면 crash가 발생할 수 있습니다.
공격자가 값을 정밀하게 제어하면 control flow hijack 가능성도 생기지만 모든 overflow가 자동으로 code execution이 되는 것은 아닙니다.
근본 방어는 정확한 bounds check와 안전한 memory operation이며 canary·NX·ASLR은 추가 완화층입니다.
해설
정의에는 고정 buffer, 경계 밖 write, 인접 stack data/control data, crash 또는 control-flow 영향이 들어가야 합니다.
정답까지 사고 과정
buffer의 크기와 실제 write 길이를 비교합니다.
경계를 넘는 첫 byte를 찾습니다.
인접한 stack data가 손상될 수 있음을 말합니다.
영향을 crash부터 control-flow hijack까지 조건부로 설명합니다.
근본 수정과 완화책을 분리합니다.
시험장에서는 이렇게 쓰기
안전한 두 문장 답안
Bei einem stackbasierten Buffer Overflow werden mehr Daten in einen lokalen, fest dimensionierten Puffer geschrieben, als dieser aufnehmen kann. Dadurch können benachbarte Daten bis hin zu Kontrollinformationen wie einer Rücksprungadresse überschrieben werden, was einen Crash oder eine Kontrollflussmanipulation ermöglichen kann.
자주 틀리는 지점
긴 입력을 받기만 하면 overflow라고 부르기
read out-of-bounds와 write overflow를 구분하지 않기
항상 즉시 remote code execution이라고 단정하기
한 줄로 기억하기
원인: 경계 밖 write. 대상: 옆 stack data. 영향: crash에서 control flow까지.
스스로 확인하기
`char name[8]`에 일반 C 문자열을 넣을 때 `\0`까지 고려하면 몇 문자가 안전한가?
canary·NX·ASLR은 각각 무엇을 어렵게 하는가?
이 문제가 어려운 이유
짧은 문제 문장 ‘stack-based buffer overflow의 작동을 설명하시오.’ 안에 정의, 조건, 처리 순서가 압축되어 있습니다. 아래 예시에서는 이를 한 단계씩 펼쳐 확인합니다.
AI 구두시험용 프롬프트
한 문항만 풀어라. 먼저 정답을 열지 말고 90초 안에 답안을 말한 뒤, css-ws2025-26-software-stack-001의 채점 프레임으로 스스로 채점하라. 문제: stack-based buffer overflow의 작동을 설명하시오.
학습 기록