CSS Tutor Study Hub 메인으로

Computersystemsicherheit 2025/26

실제 시험 문제 62

Wahr/Falsch · Security Engineering / 4.1 Multiple Choice

Wahr/Falsch

문제

근거 신뢰도 높음실제 시험지 대조 완료Wahr/Falsch2점

독일어 원문

Das NX bit kann die Ausführung von injiziertem Code verhindern.

한국어 해석

NX bit는 주입된 code 실행을 막을 수 있다.

Wahr/Falsch 즉시 채점

확신도

선택 후 즉시 개념 함정을 확인하세요.

단계별 힌트

막혔을 때만 한 단계씩 여세요. 정답을 바로 읽는 것보다 기억을 꺼내는 시간이 중요합니다.

0/5
채점 기준으로 내 답안 점검하기
  • Wahr로 표시한다.
  • data page를 non-executable로 표시해 stack/heap에 넣은 shellcode의 직접 실행을 차단한다.

답안 슬롯 자가 점검 — 실제로 말하거나 쓴 항목만 체크하세요.

0/2 slots

정답과 핵심 해설 확인하기
summary_ko

Wahr. data page를 non-executable로 표시해 stack/heap에 넣은 shellcode의 직접 실행을 차단한다.

exam_answer_frame
  • Wahr로 표시한다.
  • data page를 non-executable로 표시해 stack/heap에 넣은 shellcode의 직접 실행을 차단한다.
wahr_falsch

Wahr

개념부터 다시 보는 상세 풀이

BEGINNER LESSON

NX Bit: 데이터 칸에서 코드를 실행하지 못하게 하는 표지판

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를 손상시키는 오류입니다.

프로그램이나 프로토콜 안에서는 다음 순서로 움직입니다.

  1. 목적지 buffer 크기를 확인한다.
  2. 공격자가 제어하는 문자열의 최대 길이를 확인한다.
  3. Format 후 필요한 길이가 buffer보다 큰지 계산한다.
  4. Bounded API와 반환값 검사, 명시적 길이 검증을 적용한다.

왜 여기서 많이 틀릴까요?

sprintf의 format string이 고정되어 있어도 출력 전체 길이가 제한되지 않으면 overflow가 생길 수 있다.

조건을 생략하거나 서로 다른 기능을 같은 것으로 취급했는지 확인하세요. 정답 문장을 외우는 것보다 틀린 이유를 말할 수 있어야 변형 문제를 풀 수 있습니다.

핵심부터 말하면 Wahr. NX는 stack이나 heap 같은 data page를 non-executable로 표시해 그곳에 주입된 shellcode의 직접 실행을 차단할 수 있습니다.

이 글에서 익힐 것

  • memory page의 읽기·쓰기·실행 권한을 구분한다.

  • code injection의 저장 단계와 실행 단계를 나눈다.

  • NX가 ROP 같은 code-reuse 공격을 모두 막지 못함을 이해한다.

먼저 알아야 할 개념

창고에는 물건을 놓을 수 있지만 작업을 실행하는 무대로는 쓸 수 없다는 표지판과 같습니다. 쓰기 가능한 data 영역과 실행 가능한 code 영역을 분리하려는 방어입니다.

예제로 확인하기

상황 설정

공격자가 overflow로 stack에 machine-code bytes를 넣고 instruction pointer를 그 주소로 돌리려 합니다.

풀이 순서

  1. overflow 취약점 때문에 공격자 bytes가 stack에 저장될 수 있습니다.

  2. 공격자는 return address를 stack의 injected bytes 주소로 바꾸려 합니다.

  3. NX가 stack page를 non-executable로 표시했다면 CPU는 그 주소의 bytes를 instruction으로 실행하지 않습니다.

  4. 따라서 전통적인 injected shellcode 직접 실행 경로가 막힐 수 있습니다.

  5. 하지만 이미 executable로 표시된 기존 code 조각을 잇는 ROP는 별도의 위협이므로 ASLR·CFI 등 다른 완화책과 함께 사용합니다.

해설

문장은 ‘모든 공격을 막는다’가 아니라 ‘주입 code 실행을 막을 수 있다’고 했으므로 Wahr입니다.

정답까지 사고 과정

  1. 문장의 범위가 ‘injected code의 실행’인지 확인합니다.

  2. NX는 data page의 execute permission을 제거합니다.

  3. 직접 shellcode 실행을 막을 수 있으므로 Wahr입니다.

  4. ROP까지 전부 차단한다는 확대 해석은 하지 않습니다.

시험장에서는 이렇게 쓰기

최소 답안

Wahr.

안전한 두 문장 답안

Wahr. Das NX-Bit markiert Datenseiten wie Stack oder Heap als nicht ausführbar und kann dadurch die direkte Ausführung injizierten Codes verhindern. Code-Reuse-Angriffe wie ROP werden dadurch nicht vollständig verhindert.

자주 틀리는 지점

  • NX가 buffer overflow 자체를 고친다고 쓰기

  • NX가 memory write를 막는 기능이라고 쓰기

  • NX 하나로 모든 control-flow 공격이 사라진다고 쓰기

한 줄로 기억하기

NX = 쓸 수는 있어도 그 자리에서 실행은 금지.

스스로 확인하기

  • NX는 공격의 입력, 저장, 실행 중 어느 단계를 어렵게 하는가?

  • ROP가 NX를 우회할 수 있는 기본 이유는?

이 문제가 어려운 이유

짧은 문제 문장 ‘NX bit는 주입된 code 실행을 막을 수 있다.’ 안에 정의, 조건, 처리 순서가 압축되어 있습니다. 아래 예시에서는 이를 한 단계씩 펼쳐 확인합니다.

AI 구두시험용 프롬프트

한 문항만 풀어라. 먼저 정답을 열지 말고 90초 안에 답안을 말한 뒤, css-ws2025-26-seceng-mc-006의 채점 프레임으로 스스로 채점하라. 문제: NX bit는 주입된 code 실행을 막을 수 있다.

학습 기록

이 문항을 얼마나 이해했나요?