loading
본문으로 바로가기

Intro

*해당 내용은 웹 취약점 분석 및 점검 방법입니다.
*반드시 연습용으로 제공된 환경에서만 작업하는 것을 권고 드리며, 악용으로 일어난 사태에 대해서는 절대로 책임지지 않습니다.

포맷 스트링(format string)이란? 
일반적으로 사용로부터 입력을 받아들이거나 결과를 출력하기 위하여 사용하는 형식이며, 포맷스트링을 사용하는 함수에 대해 형식이나 형태를 지정해주는 문자열을 의미한다. printf() 같은 특정한 C 함수들에서 검사되지 않은 사용자 입력을 포맷 스트링 파라미터로 사용하는 것으로부터 나온다. 

 

포맷 스트링 그림

 

노란색의 정의된 공간에 'ABCD'가 들어있다고 정의한다. 'ABCD'가 들어있는 공간은 4라고 가정했을 때, 'abcde'인 데이터 크기 5인 값을 넣는다면 정상적으로는 오류가 일어나야한다. 하지만 노란색 공간 이외의 인접한 다른 공간(EFGH)에 덮어씌워지며, 해당 공간의 값을 변조(eFGH)시키고 있다.

 

취약점 점검

취약점 개요

점검내용 - 웹페이지 내 포맷스트링 취약점 존재 여부 점검
점검목적 - 포맷스트링 버그로 인한 위험으로부터 예방하기 위한 웹페이지 내 적절한 입력 값 검증 로직을 탑재하기 위함
보안위협 - C언어로 만드는 프로그램 중 변수의 값출력하거나 입력받을 때, 입력받은 값을 조작하여 프로그램의 메모리 위치를 반환받아 메모리 주소를 변조하여 시스템의 관리자 권한을 획득할 수 있음

 

기호 정리

%d 정수형 10진수 상수
%f 실수형 상수
%lf 실수형 상수
%c 문자값
%s 문자 스트링
%u 양의 정수(10진수)
%o 양의 정수(8진수)
%x 양의 정수(16진수)
%n 쓰인 총 바이트 수

'%n'은 이전까지 입력되었던 문자열의 길이(byte) 수만큼 해당 변수에 저장시키기 때문에 메모리의 내용도 변조 가능하다. 이를 이용해 문자열의 길이를 내가 변조시키고 싶은 값의 길이만큼 만든 후 '%n'을 써주게 되면 메모리상에 내가 원하는 값을 넣을 수 있게 된다.

 

점검대상 및 판단기준

대상 - Web Server, 소스코드
판단기준 양호 : 임의의 문자열 입력에 대한 검증이 이루어지는 경우
취약 : 임의의 문자열 입력에 대한 검증이 이루어지지 않으며, 오류가 발생하는 경우
조치방법 - 웹 서버 응용프로그램(Apache, Tomcat, IS 등)을 최신 버전으로 패치하고 임의의 문자열 입력에 대한 검증 로직 구현

 

점검 및 조치 사례

웹 사이트 인수 값에 아래와 같은 패턴 입력 후 전송하여 반환된 페이지가 다른 인수 값을 입력했을 때는 발생하지 않는 에러 반응이나 멈추는 등 이상반응을 보이는지 확인

패턴1 - %n%n%n%n%n%n%n%n%n%n,
패턴2 - %s%s%s%s%s%s%s%s%s%s,
패턴3 - %1!n!%2!n!%3!n!%4!n!%5!n!%6!n!%7!n!%8!n!% 9!n!%10!n!
패턴4 - %1!s!%2!s!%3!s!%4!s!%5!s!%6!s!%7!s!%8!s!%9!s!%10!s!

 

인수 값에 패턴을 기입하여 검증

 

점검에 대한 보안 설정방법

1. 컴파일러에서는 문자열 입력 포맷에 대한 자체적인 검사를 내장하고 있으므로 문자열 입력 포맷 검증 후 소스 코드에 적용

[*GCC에서는 문자열 입력 포맷과 실제 입력이 맞지 않는 경우에 대해 경고 옵션 존재하지만, 이 방식은 컴파일 시간에 문제를 발견할 수 있는 경우에 한해 검증 가능함.

런타임 상황에서는 퍼지 테스트를 이용하여 프로그램의 입력 값으로 임의의 값을 넣어서 프로그램을 예외 상황으로 빠뜨리는 경우가 있으므로 이러한 경우에 버그가 없는지 확인이 필요함]

2. 웹 서버 응용프로그램(Apache, Tomcat, IS 등)의 최신 보안패치 적용

3. 웹사이트 인수 값 처리 중에 발생할 경우 사용자가 입력하는 인수 값의 유효성에 대한 검증 로직을 구현

 

참고 사항

ko.wikipedia.org/

 

위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 위키백과 우리 모두가 만들어가는 자유 백과사전문서 504,523개와 2,496명의 최근 기여자 사랑방 다른 분들과 의견을 교환해봐요!

ko.wikipedia.org

wiki.hash.kr/

 

해시넷

해시넷 코인위키 사이트는 블록체인 및 암호화폐 관련 위키백과사전을 지향합니다. 해시넷 코인위키는 여러 사용자들의 집단지성을 모아 위키(wiki) 방식으로 운영됩니다. 누구나 자유롭게 해시

wiki.hash.kr

www.kisa.or.kr/

 

한국인터넷진흥원(KISA)

한국인터넷진흥원 기관 소개, 인터넷 산업경쟁력 강화, 개인정보보호, 정보보호 산업 지원, 사이버침해 대응, 관련 규정 제공

www.kisa.or.kr