주요정보통신기반 시설 가이드

포맷 스트링이란?

만보만보잠만보 2024. 3. 17. 13:46

포맷 스트링

(Format string)

 

개념

C언어로 만든 프로그램 중 입력 값을 조작하여 프로그램의 메모리 위치를 반환 받아 메모리 주소를 변조하는 취약점입니다.

 

발생 원인

이 취약점은 프로그램에 입력된 문자열 데이터가 명령으로 해석될 떄 발생합니다. printf등의 함수에서 발생되는 취약점으로 공격자는 코드를 실행하거나 메모리 일부를 읽을 수 있습니다.

프로그래머가 아래와 같이 작성하였으면 안전한 코드입니다.

printf('%s',argv[1]);

그러나 아래와 같이 작성하였으면 포맷 스트링에 취약한 코드입니다.

printf(argv[1]);

 

위험한 이유

위와 같은 코드가 위험한 이유는 만약 사용자가 %s%s%s%s%s%s라는 값을 입력하면 모든 %s를 문자열에 대한 포인터로 해석해 잘못된 주소로 도달하여 액세스 시도를 하게되면 프로그램이 중단됩니다.

 

조치 방법

- 컴파일러(ex. gcc)에서 문자열 입력 포맷에 대한 자체적인 검사를 내장하고있으므로 문자열 입력 포맷 검증 후 소스 코드에 적용합니다.

- 웹 서버 프로그램 최신 보안패치를 적용합니다.

- 웹 사이트에서 사용자가 입력한 파라미터 값 처리 중에 발생한 경우 사용자 입력 값의 유효성에 대한 검증 로직을 구현합니다.

'주요정보통신기반 시설 가이드' 카테고리의 다른 글

SSI 인젝션이란?  (0) 2024.03.17
SQL 인젝션이란?  (0) 2024.03.17
운영체제 명령 실행 공격이란?  (0) 2024.03.17
LDAP 인젝션이란?  (0) 2024.03.17
버퍼 오버플로우 공격이란?  (0) 2024.03.17