← 회차 전체 문제편집복원자동 검사 완료2023년 정보보안기사 4회 필기 · 시스템 보안 · 포맷 문자열 취약점 · 16번
다음 C 코드의 보안 문제와 수정으로 옳은 것은?
```c
printf(user_input);
```
ASLR 적용 상태
로그에 특정 공유 라이브러리 함수의 실제 주소 출력
가젯 오프셋은 공격자가 알고 있음
- 1
입력 길이와 무관하게 항상 안전하다.
오답 이유짧은 `%n` 같은 입력도 위험할 수 있다. - 2
printf를 두 번 연속 호출하면 해결된다.
오답 이유취약한 호출 횟수만 늘어나며 해석 방식은 같다. - 3
user_input을 전역으로 바꾸면 해결된다.
오답 이유변수 저장 위치는 포맷 지정자 해석을 막지 않는다. - 4
입력이 포맷으로 해석되므로 `printf("%s", user_input)`처럼 고정 포맷을 사용한다.
정답 근거데이터와 포맷 제어 문자열을 분리하는 직접 수정이다.
정답·상세해설정답 4번
공격자가 `%x`, `%s`, `%n` 같은 지정자를 넣으면 메모리를 읽거나 쓸 수 있다. 사용자 데이터는 포맷 문자열이 아니라 고정된 `%s`의 인수로 전달하고 길이와 출력 대상도 제한해야 한다.
콘텐츠 기록콘텐츠 정보
- 자료 유형
- 편집복원
- 검수 상태
- 자동 검사 완료
- 최종 검수
- 2026-08-23