작업 환경

  • VMware Workstation Pro (17.6.2 ver)
  • Server 
    • Web 서버 : Rocky_Linux(8.10 ver, VMnet 2, PHP로 구성)
    • DNS 서버 : Rocky_Linux(8.10 ver, VMnet 1)
  • Client
    • Kali Linux : Web 취약점 점검용 (VMnet 1)
  • GNS 구성

  • 해당 점검은 비밀번호 수정 페이지에 한해서 진행됨
FS (상) 2. 포맷 스트링
취약점 개요
점검 내용 웹 애플리케이션에 포맷 스트링 취약점 존재 여부 점검
점검 목적 공격자의 포맷 스트링 취약점을 통한 악의적인 행위를 차단하기 위함
 보안 위협 C언어로 만드는 프로그램 중 변수의 값을 출력하거나 입력받을 때 입력받은 값을 조작하여
프로그램의 메모리 위치를 반환받아 메모리 주소를 변조하여 시스템의 관리자 권한을 획득할 수 있음
판단 기준

양호 : 포맷 스트링 버그를 발생시키는 문자열 입력 시 검증 로직이 존재하여 오류가 발생하지 않는 경우
취약 : 포맷 스트링 버그를 발생시키는 문자열 입력 시 검증 로직이 미흡하여 오류가 발생하는 경우
참고 OWASP TOP 10 항목 중 
A03 : Vulnerable and Outdated Components
A05 : Security Misconfiguration
A06 : Vulnerable and Outdated Components

에 해당한다고 판단

 

 

점검 방법

  • Step 1) 웹 사이트에서 사용자가 입력한 파라미터 값에 아래와 같은 패턴 입력 후 전송 시 다른 값을 입력했을 때는 발생하지 않는 에러 반응이나 멈추는 등 이상 반응을 보이는지 확인
    • 패턴 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 ]

이상 없음


[ 패턴 2 ]

이상 없음


[ 패턴 3 ]

 

이상 없음


[ 패턴 4 ]

이상 없음


보안 설정 방법

  • 컴파일러에서 문자열 입력 포맷에 대한 자체적인 검사를 내장하고 있으므로 문자열 입력 포맷 검증 후 소스 코드에 적용
    • (예) GCC 컴파일러는 문자열 입력 포맷과 실제 입력이 맞지 않는 경우 경고 옵션이 존재하나 해당 방식은 컴파일 과정에서만 검증 가능하며, 런타임 상황에서는 Fuzz testing을 이용하여 포맷 스트링 버그가 존재하는지 검증이 필요함
  • 웹 서버 프로그램 최신 보안패치 적용
  • 웹 사이트에서 사용자가 입력한 파라미터 값 처리 중에 발생한 경우 사용자 입력 값의 유효성에 대한 검증 로직을 구현

 


참고

📌 포맷 스트링 취약점이란?

  • 공격자가 %x, %s, %n 등의 포맷 토큰을 이용해 메모리 조작이나 정보 유출을 유도하는 취약점

 

🔐 OWASP TOP 10(2021)과의 연관

1. A03:  Injection

  • 포맷 스트링은 일종의 인젝션(SQL 인젝션, 명령어 인젝션처럼 정의되지 않은 제어 구조 삽입을 통해 원래 코드 흐름을 깨트리는 방식
  • %x, %s, %n 등의 제어문자가 내부 메모리 접근을 유도
  • 애플리케이션이 사용자 입력을 직접적으로 처리하면 포맷 인젝션이 발생할 수 있음

2. A05 : Security Misconfiguration

  • 로깅, 출력, 메시지 템플릿 등을 잘못 구성하여 사용자 입력을 포맷 문자열로 그대로 전달
  • 특히 PHP에서 printf($_GET['msg']) 와 같이 사용 시 공격 가능성 존재
    • PHP에서도 printf, sprintf 사용 시 취약하게 설계할 경우 문제 발생

3. A06 : Vulnerable and Outdated Components

  • 오래된 C 기반 확장 모듈, 또는 외부 바이너리와 연동된 웹 애플리케이션에서는 여전히 format string 버그가 남아 있을 수 있음
  • PHP 내부는 안전하더라도, **확장 모듈(libc, openssl 등)**이 취약할 수 있음

작업 환경

  • VMware Workstation Pro (17.6.2 ver)
  • Server 
    • Web 서버 : Rocky_Linux(8.10 ver, VMnet 2, PHP로 구성)
    • DNS 서버 : Rocky_Linux(8.10 ver, VMnet 1)
  • Client
    • Kali Linux : Web 취약점 점검용 (VMnet 1)
  • GNS 구성

  • 해당 점검은 비밀번호 수정 페이지에 한해서 진행됨
BO (상) 1. 버퍼 오버플로우
취약점 개요
점검 내용 사용자가 입력한 파라미터 값의 문자열 길이 제한 확인
점검 목적 웹 사이트에서 사용자가 입력한 파라미터 값의 문자열 길이 제한 여부를 점검하여
비정상적 오류 발생을 차단하기 위함
 보안 위협 웹 사이트에서 사용자가 입력한 파라미터 값의 문자열 길이를 제한하지 않는 경우 개발 시에
할당된 저장 공간보다 더 큰 값의 입력이 가능하고 이로 인한 오류 발생 시 의도되지 않은 정보 노출,
프로그램에 대한 비인가 접근 및 사용 등이 발생할 수 있음
판단 기준

양호 : 파라미터 값에 다량의 다양한 포맷 문자열 입력 시 에러 페이지나 오류가 발생하지 않는 경우
취약 : 파라미터 값에 대한 검증 미흡으로 에러 페이지나 오류가 발생하는 경우
참고 OWASP TOP 10 항목 중 
A01 : Broken Access Control
A03 : Vulnerable and Outdated Components
A05 : Security Misconfiguration

에 해당한다고 판단

 

 

점검 방법

  • Step 1) 입력 필드에서 계정 정보 입력 시 대량의 문자열을 입력하여 에러 페이지나 오류가 발생하는지 점검

 

 


  • Step 2) URL 파라미터 값에 대량의 문자열 입력 시 에러 페이지나 오류가 발생하는지 점검


보안 설정 방법

  • 웹 서버, 웹 애플리케이션 서버 버전을 안정성이 검증된 최신 버전으로 패치
  • 웹 애플리케이션에 전달되는 파라미터 값을 필요한 크기만큼만 받을 수 있도록 변경하고 입력 값 범위를 초과한 경우에도 에러 페이지를 반환하지 않도록 설정
  • 동적 메모리 할당을 위해 크기를 사용하는 경우 그 값이 음수가 아닌지 검사하여 버퍼 오버플로우를 예방하는 형태로 소스 코드 변경
  • 버퍼 오버플로우를 점검하는 웹 스캐닝 툴을 이용하여 주기적으로 점검

 


참고

📌 버퍼 오버플로우란 ?

  • 버퍼(buffer) : 데이터를 임시로 저장하는 메모리 공간
  • 오버플로우(overflow) : 메모리를 넘는 데이터를 입력했을 때 발생
  • 결과 : 인접한 메모리를 덮어쓰게 되고, 실행 흐름이 공격자 의도대로 바뀔 수 있음

 

🔐 OWASP TOP 10(2021)과의 연관

1. A01:  Broken Access Control

  • 공격자가 버퍼 오버플로우를 통해 루트 권한 상승 등 권한 우회를 시도할 수 있음
  • PHP 자체는 이런 구조가 아니지만, PHP로 연동된 네이티브 애플리케이션이 존재할 경우 발생 가능

2. A05 : Security Misconfiguration

  • 애플리케이션이 적절한 입력 길이 제한이나 유효성 검증을 하지 않을 경우
  • 버퍼 오버플로우뿐만 아니라 DoS(서비스 거부) 등도 유발
    • 예) $_POST['pw'] 값에 수천 자 문자열을 넣어도 아무 검증 없이 처리 → 과부하 또는 라이브러리 오류 유발

3. A06 : Vulnerable and Outdated Components

  • 버퍼 오버플로우는 낡은 C 기반 컴포넌트나 네이티브 바이너리, 라이브러리에서 자주 발생
  • PHP 같은 고수준 언어에서는 직접적 영향은 적지만, PHP에서 사용하는 C 기반 확장(이미지 라이브러리)에서 발생가능