반응형
https://www.kisa.or.kr/public/laws/laws3.jsp
구현 단계 시큐어코딩 가이드 - 입력 데이터 검증 및 표현 - 포맷 스트링 삽입
가. 개요
- 외부로부터 입력된 값을 검증하지 않고 입·출력 함수의 포맷 문자열로 그대로 사용하는 경우 발생할 수 있는 보안약점이다. 공격자는 포맷 문자열을 이용하여 취약한 프로세스를 공격하거나 메모리 내용을 읽거나 쓸 수 있다. 그 결과, 공격자는 취약한 프로세스의 권한을 취득하여 임의의 코드를 실행할 수 있다
나. 보안대책
- printf(), snprintf() 등 포맷 문자열을 사용하는 함수를 사용할 때는 사용자 입력값을 직접적으로 포맷 문자열로 사용하거나 포맷 문자열 생성에 포함시키지 않는다. 포맷문자열을 사용하는 함수에 사용자 입력값을 사용할 때는 사용자가 포맷 스트링을 변경할 수 있는 구조로 쓰지 않는다. 특히, %n, %hn은 공격자가 이를 이용해 특정 메모리 위치에 특정값을 변경할 수 있으므로 포맷 스트링 매개변수로 사용하지 않는다. 사용자 입력값을 포맷 문자열을 사용하는 함수에 사용할 때는 가능하면 %s 포맷 문자열을 지정하고, 사용자 입력값은 2번째 이후의 파라미터로 사용한다.
다. 코드예제
C#
더보기
포맷 스트링 보안약점은 C 언어에 국한된 것은 아니다. 아래 예제 코드는 입력 자료의 유효성을 검증하지 않은 Java 프로그램에서도 발생할 수 있음을 보여준다. 이 프로그램에서 공격자는 %1$tm, %1$te, 또는 %1$tY과 같은 문자열을 입력하여 포맷 문자열에 포함시킴으로써, 실제 유효기간 validDate가 출력되도록 할 수 있다.
C
더보기
이 예제의 msg는 신뢰할 수 없는 사용자 입력을 포함하고 있고 fprintf() 호출에서 포맷 문자열 인자로 전달되기 때문에 포맷 스트링 삽입에 취약하다.
이 예제는 fprintf() 대신에 fputs()를 사용하여, msg를 포맷 문자열처럼 취급하지 않고 그대로 stderr로 출력한다.
참고자료
- CWE-134 Uncontrolled Format String, MITRE,
http://cwe.mitre.org/data/definitions/134.html - Exclude user input from format strings, CERT,
http://www.securecoding.cert.org/confluence/display/c/FIO30-C.+Exclude+user+input+from+format+stringsb - Use valid format strings, CERT,
http://www.securecoding.cert.org/confluence/display/c/FIO47-C.+Use+valid+format+strings - Format string attack, OWASP,
https://www.owasp.org/index.php/Format_string_attack
반응형
'공부 > KISA' 카테고리의 다른 글
부적절한 인가 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.20 |
---|---|
적절한 인증 없는 중요기능 허용 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.20 |
메모리 버퍼 오버플로우 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.20 |
보안기능 결정에 사용되는 부적절한 입력값 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.20 |
정수형 오버플로우 - KISA 소프트웨어 개발 보안 가이드 (0) | 2020.07.20 |
댓글