Web취약점 진단 - 버퍼 오버플로우

1. 버퍼 오버플로우(BO)

 

 
※ CVSS(Common Vulnerability Scoring System) 위험도 기준으로 평가하였고 이는 정보 시스템 취약점의 심각도를 평가하고 측정하기 위한 개방적이고 범용적인 표준 체계이며, 객관적인 우선순위를 설정할 수 있도록 돕는 것을 주 목적으로 한다.
 
 
2. 취약점 개요 
 
버퍼 오버플로우는 프로그램이 할당한 버퍼의 경계를 넘어서는 데이터를 쓰거나 읽을 때 발생하는 취약점입니다. 입력값의 길이를 적절히 검증하지 않으면, 예상보다 긴 문자열이나 데이터가 버퍼를 초과하여 인접한 메모리를 덮어쓰게 된다.
 
- 버퍼(buffer) : 일정 크키로 미리 할당된 임시 저장 공간
- 버퍼의 경계를 넘는다? : 버퍼의 경계를 넘는다는 것 프로그램에서 사용하는 버퍼는 프로그래머가 직접 고정된 크기(경계)를 지정한 메모리 공간을 의미한다. 예를 들어 16바이트 크기의 버퍼를 할당해 두었는데 여기에 20바이트 길이의 문자열을 그대로 집어넣으면, 처음 16바이트까지만 버퍼에 저장되고 나머지 4바이트는 버퍼의 경계를 넘어 그 뒤에 이어진 메모리 영역까지 덮어쓰게 된다. 이 상황을 버퍼의 경계를 넘었다. 즉 버퍼 오버플로우가 발생했다라고 표현한다.
- 입력값의 길이 검증 : 사용자가 입력한 데이터의 실제 길이가 할당한 버퍼 크기를 넘지 않는지 확인하는 과정이다.
- 인접한 메모리를 덮어쓴다: 버퍼의 경계를 넘어서는 데이터를 쓰거나 읽으면  단순히 메모리가 깨지는 수준이 아닌 프로그램의 제어 흐름을 공격자가 조작하기 때문에 위험하다. 쉽게 말해 프로그램이 버퍼를 일정 크키의 메모리 공간으로 정하는데 이 크키를 넘는 데이터를 집어 넣으면 그 버퍼 뒤에 이어져 있는 인접한 메모리 영역까지 덮어쓴다.
→ 인접한 메모리는 버퍼 바로 뒤에 이어져 있는 다른 데이터들(다른 변수값, 제어 정보, 반환 주소 등)의 메모리 영역이다.
→ 반환 주소 위치까지 덮어쓰면 버퍼 오버플로우를 통해서 임의 코드 실행까지 실행될 수 있다.
 
buf(8바이트)
[0] [1] [2] [3] [4] [6] [7] [8] [9] [10]
- [9][10]은 인접한 메모리 
- 10바이트 문자열을 입력하면 인접한 메모리 영역을까지 덮어 쓴다 → 버퍼의 경계를 넘음 → 버퍼 오버플로우 발생 
                                                                                                                                                  
3. 버퍼 오버플로우 공격 수행   

 

<Mesploit을 이용한 Payload 생성>

※ Payload : 전송되는 데이터를 말하며 , 공격에서의 Payload는 취약점을 통해 전달되어, 실제로 어떤 동작을 수행하는 코드나 데이터를 말한다. (공격에 사용되는 악의적인 데이터 : payload)

<Payload 16진수로 변환>
<Payload 배열을 위한 'test.py' 파일 생성>
<test.py 실행>
<반복 문자열(aaaaa) 입력 후 BurpSuite로 내용 확인>
<버퍼 오버플로우 공격 수행>

 

4. 점검 결과 

1) 검색어 입력 시 대량 문자열 및 반복 문자열(aaaaa)을 다양한 형태로 BurpSuite에 입력했을 때 페이지나 오류가 발생하는지 점검

<버퍼를 가득 채우는 반복 문자열 입력>

※ 반복 문자열 또는 비정상적으로 긴 입력이 서버 내부 로직을 깨뜨려 프로세스 리스트가 노출되는 동작을 확인함 이는 단순한 에러 메시지가 아니라 서버 내부 명령의 실행 결과가 외부로 노출된 심각한 취약점임을 알게되었다.

- 정상적인 시스템이라면 내부 정보 노출도 없고, 시스템 명령 결과가 출력되지 않는다.  

 

2) URL 쿼리 파라미터에 과도한 길이의 문자열을 입력했을 때 에러페이지나 내부 예외 노출 또는 서비스 장애가 발생하는지 점검http://192.168.113.131/bWAPP/bof_1.php?title=%27%41%41%41%41%41%41%41%41%41%41%41%41.....

※ URL에 긴 문자열을 넣었을 때 비정상 동작이 나타나는지 확인하는 점검

 

5. 권고사항

 

1) 웹 서버 및 웹 애플리케이션 서버의 버전을 안정성이 검증된 최신 버전으로 즉시 패치하여 알려진 취약점을 제거

2) 웹 애플리케이션에 전달되는 파라미터 값은 필요한 크기만큼만 받을 수 있도록 변경하고, 입력 값 범위를 초과한 경우에도 상세 정보가 포함된 에러 페이지를 반환하지 않도록 설정(파라미터 값 크기 제한 + 상세 에러 페이지 제한)

3) 버퍼 오버플로우를 점검하는 웹 스캐닝 툴 등 보안 도구를 활용하여 주기적으로 시스템을 점검하는 체계를 구축해야 함(정기적인 보안 스캐닝 수행)

4) 출력 인코딩(웹 페이지에서 그대로 실행되거나 해석되지 않도록, 특수문자 등을 무해한 문자열로 변환하는 과정) 적용으로 인해 정보 노출 및 스크립트 실행을 방지해야 함

5) 입력값 화이트리스트(허용된 값만 받는 입력 검증 기법) 기반 검증 도입