단답형
문제
독일어 원문
Was ist Fuzzing?
한국어 해석
fuzzing이란?
Fuzzing feedback loop
각 단계를 눌러 정의 답안에 필요한 동적 분석 흐름을 확인하세요.
단계별 힌트
막혔을 때만 한 단계씩 여세요. 정답을 바로 읽는 것보다 기억을 꺼내는 시간이 중요합니다.
- 첫 힌트: 수천 종류의 이상한 열쇠를 자동으로 자물쇠에 넣어 어디서 깨지거나 멈추는지 관찰하는 시험이다.
- 자동 입력 생성을 쓴다.
- 프로그램 실행을 쓴다.
- crash/oracle 관찰을 쓴다.
- 함정: random input만 뜻한다고 좁히지 않는다. mutation·coverage-guided도 있다.
- 후속 점검: coverage-guided fuzzer가 새로운 path를 선호하는 이유는?
채점 기준으로 내 답안 점검하기
- 자동 입력 생성을 쓴다.
- 프로그램 실행을 쓴다.
- crash/oracle 관찰을 쓴다.
답안 슬롯 자가 점검 — 실제로 말하거나 쓴 항목만 체크하세요.
0/3 slots
정답과 핵심 해설 확인하기
많은 비정상·경계·변형 입력을 자동 생성해 프로그램에 넣고 crash, hang, sanitizer 오류, 잘못된 결과를 oracle로 관찰해 bug를 찾는 동적 testing 기법이다.
- 자동 입력 생성을 쓴다.
- 프로그램 실행을 쓴다.
- crash/oracle 관찰을 쓴다.
개념부터 다시 보는 상세 풀이
BEGINNER LESSON
Fuzzing 전체 과정: Seed에서 최소 crash와 Regression Test까지
ZERO-BASE START
정말 아무것도 모른다고 가정하고 시작합니다
전문 용어를 알고 있다고 가정하지 않습니다. 먼저 일상적인 장면을 보고, 그 장면의 사람과 행동에 실제 보안 용어를 하나씩 붙인 뒤, 시스템에서 일어나는 순서를 따라갑니다.
기초 개념 01
Fuzzing: 이상한 입력을 자동으로 계속 넣어 보는 시험
1타 강사식 시작: 이름은 잠시 가리고 장면부터 봅시다
문 손잡이를 정상적으로 한 번 돌리는 대신 아주 빠르게, 반대로, 반쯤, 여러 번 돌려 어떤 조작에서 문이 망가지는지 자동 실험하는 것과 같다.
지금은 이 비유를 완벽히 외울 필요가 없습니다. 누가 무엇을 가지고 있고, 무엇을 하려 하며, 어느 지점에서 문제가 생기는지만 찾으면 됩니다.
이제 실제 용어를 하나씩 붙여 봅시다
Fuzzing은 프로그램에 매우 많은 비정상·경계·무작위 입력을 자동 생성해 넣고 crash, hang, sanitizer error, assertion failure 같은 이상 동작을 찾는 dynamic testing 기법이다. Seed corpus는 시작 입력 모음이고 mutation은 입력을 변형하는 과정이다. Coverage-guided fuzzer는 새 code path를 실행한 입력을 보존해 더 깊은 상태를 탐색한다.
TERMS FROM ZERO
전문 용어를 한 단어씩 풀기
아래 단어는 이미 안다고 가정하지 않습니다. 먼저 쉬운 뜻을 읽고, 본문에서 같은 단어가 나오면 이 정의로 다시 바꾸어 읽으세요.
Fuzzer
많은 test input을 자동 생성·변형하고 target program에 실행하는 도구입니다.
Seed corpus
Fuzzing을 시작할 때 기본 구조를 제공하는 초기 입력 모음입니다.
Mutation
기존 입력의 byte·길이·구조를 변경해 새 test case를 만드는 과정입니다.
Oracle
Crash, sanitizer report, output mismatch 등 실패 여부를 판정하는 관찰 기준입니다.
Coverage
특정 입력이 program code의 어느 부분을 실행했는지 나타내는 정보입니다.
프로그램이나 프로토콜 안에서는 다음 순서로 움직입니다.
- 정상적인 seed input을 준비한다.
- 입력을 반복해서 mutate하거나 grammar에 맞게 생성한다.
- Program을 실행하고 crash, timeout, coverage를 관찰한다.
- 실패 입력을 재현하고 가장 작은 testcase로 줄인다.
- 원인을 수정한 뒤 그 testcase를 regression test로 남긴다.
왜 여기서 많이 틀릴까요?
Fuzzing이 모든 입력을 증명하거나 취약점이 없음을 보장하지는 않는다. 좋은 oracle, instrumentation, corpus가 필요하다.
조건을 생략하거나 서로 다른 기능을 같은 것으로 취급했는지 확인하세요. 정답 문장을 외우는 것보다 틀린 이유를 말할 수 있어야 변형 문제를 풀 수 있습니다.
핵심부터 말하면 많은 비정상·경계·변형 입력을 자동 생성해 실제 프로그램에 실행하고, oracle로 crash나 이상 동작을 찾아내는 dynamic analysis 기법입니다.
이 글에서 익힐 것
seed, mutation, target, coverage, oracle, minimization을 순서대로 설명한다.
random fuzzing과 coverage-guided fuzzing을 구분한다.
fuzzing이 bug absence proof가 아님을 이해한다.
먼저 알아야 할 개념
문을 정상적으로 여는 동작만 시험하지 않고 손잡이를 반대로 돌리고, 동시에 밀고, 매우 빠르게 반복하는 수천 가지 행동을 로봇이 자동 수행하는 것과 같습니다.
예제로 확인하기
상황 설정
정상 이미지 3개로 image parser를 coverage-guided fuzzing합니다.
풀이 순서
정상 파일을 seed corpus로 준비해 parser가 기본 구조를 통과하게 합니다.
fuzzer가 byte 변경·삽입·삭제와 길이 필드 변형으로 새 입력을 만듭니다.
각 입력으로 실제 parser를 실행하고 code coverage를 측정합니다.
새 branch를 실행한 입력은 유용한 seed로 보존되어 다시 변형됩니다.
어떤 입력에서 crash나 sanitizer report가 나오면 oracle이 실패로 판정합니다.
crashing file을 재현하고 불필요한 부분을 제거해 최소 testcase로 만듭니다.
root cause를 수정하고 최소 testcase를 regression test에 추가합니다.
해설
정의만 묻더라도 자동 입력 생성, 실제 실행, oracle 관찰이라는 세 축은 반드시 포함합니다.
정답까지 사고 과정
무엇을 시험하는 target과 input interface를 말합니다.
입력을 자동 생성하거나 변형한다고 씁니다.
프로그램을 실제 실행하는 dynamic technique임을 씁니다.
crash·sanitizer·timeout·output mismatch 같은 oracle을 듭니다.
coverage-guided라면 새 path input을 보존하는 feedback loop를 덧붙입니다.
bug를 찾지만 없음을 증명하지 못한다고 한계를 씁니다.
시험장에서는 이렇게 쓰기
안전한 두 문장 답안
Fuzzing ist eine dynamische Analysetechnik, bei der viele automatisch erzeugte oder mutierte, insbesondere fehlerhafte und grenzwertige Eingaben am laufenden Programm getestet werden. Orakel wie Crashes, Sanitizer-Meldungen oder abweichendes Verhalten zeigen mögliche Fehler; das Ausbleiben eines Findings beweist jedoch keine Fehlerfreiheit.
자주 틀리는 지점
완전히 random한 byte만 넣는 기법이라고 좁히기
crash input을 찾는 순간 취약점 분석과 수정이 끝났다고 생각하기
오래 실행했으므로 모든 입력을 검사했다고 생각하기
한 줄로 기억하기
Seed → mutate → run → observe → keep/minimize → fix → regression.
스스로 확인하기
coverage-guided fuzzer가 새 path 입력을 보존하는 이유는?
fuzzing이 놓치기 쉬운 stateful logic의 예는?
이 문제가 어려운 이유
짧은 문제 문장 ‘fuzzing이란?’ 안에 정의, 조건, 처리 순서가 압축되어 있습니다. 아래 예시에서는 이를 한 단계씩 펼쳐 확인합니다.
AI 구두시험용 프롬프트
한 문항만 풀어라. 먼저 정답을 열지 말고 90초 안에 답안을 말한 뒤, css-ws2025-26-misc-fuzzing-001의 채점 프레임으로 스스로 채점하라. 문제: fuzzing이란?
학습 기록