C언어 포맷 스트링 취약점이 어떤 원리인지 설명해주세요.
포맷 스트링 취약점은 printf 등 포맷 함수에 사용자 입력이 직접 들어갈 때 발생합니다.
// 취약한 코드printf(user_input); // BAD// 안전한 코드printf("%s", user_input); // GOOD
공격:
%x
%s
%n
%n으로 GOT 테이블을 덮어써서 코드 실행이 가능합니다.
방어: 포맷 문자열에 사용자 입력을 넣지 마세요. 컴파일러 경고(-Wformat-security)를 활성화하면 탐지 가능합니다.
댓글 1
포맷 스트링 취약점은 printf 등 포맷 함수에 사용자 입력이 직접 들어갈 때 발생합니다.
공격:
%x— 스택 메모리 읽기%s— 메모리의 문자열 읽기%n— 메모리에 값 쓰기 (가장 위험)%n으로 GOT 테이블을 덮어써서 코드 실행이 가능합니다.
방어: 포맷 문자열에 사용자 입력을 넣지 마세요. 컴파일러 경고(-Wformat-security)를 활성화하면 탐지 가능합니다.