2. 포맷 스트링

2024. 11. 14. 17:22주통기/웹

728x90

점검내용

  • 웹 애플리케이션에 포맷 스트링 취약점 존재 여부 점검

점검목적

  • 공격자의 포맷 스트링 취약점을 통한 악의적인 행위를 차단하기 위함

보안위협

  • C언어로 만드는 프로그램 중 변수의 값을 출력하거나 입력받을 때 입력받은 값을 조작하여 프로그램의 메모리 위치를 반환받아 메모리 주소를 변조하여 시스템의 관리자 권한을 획득할 수 있음

💡

포맷 스트링 버그(format string bug)

printf 등의 함수에서 문자열 입력 포맷을 잘못된 형태로 입력하는 경우 나타나는 취약점. 루트 권한 획득도 가능

여러 종류가 있으며 C언어에서는 일반적으로 Data(변수)를 입,출력문에서 일정한 형태로 받아들이거나 출력하기 위하여 사용하는 기호로는 다음과 같은 것들이 있음(%d, %f, %c, %s, %x, %p, %n…)

%n은 이전까지 입력되었던 문자열의 길이(Byte)수 해당 변수에 저장시키기 때문에 메모리의 내용도 변조 가능하므로 Format String 취약점에서 핵심이기도 함. 문자열의 길이를 변조시키고 싶은 값의 길이만큼 만든 후 %n을 써주게 되면 메모리상에 공격자가 원하는 값을 넣을 수 있게 됨

 

판단기준

  • 포맷 스트링 버그를 발생시키는 문자열 입력 시 검증 로직이 존재하여 오류가 발생하지 않는 경우 양호

점검방법

웹 사이트에서 사용자가 입력한 파라미터 값에 아래와 같은 패턴 입력 후 전송 시 다른 값을 입력했을 때에는 발생하지 않는 에러 반응이나 멈추는 등 이상 반응을 보이는지 확인

패턴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!

보안설정방법

  • 컴파일러에서 문자열 입력 포맷에 대한 자체적인 검사를 내장하고 있으므로 문자열 입력 포맷 검증 후 소스 코드에 적용
  • 웹 서버 프로그램 최신 보안패치 적용
  • 웹 사이트에서 사용자가 입력한 파라미터 값 처리 중에 발생한 경우 사용자 입력 값의 유효성에 대한 검증 로직을 구현
728x90

'주통기 > ' 카테고리의 다른 글

1. 버퍼 오버플로우  (0) 2024.11.14