버퍼 오버플로우

justugi·2024년 5월 21일

웹 취약점 진단

목록 보기
12/19

주의사항 : 이 포스팅은 개인 학습 및 교육적 목적으로 작성되었으며, 제공하는 정보를 악용하여 불법적인 행위를 하는 것은 엄격히 금지되어 있습니다. 웹 취약점 진단은 해당 웹사이트의 소유자의 명시적인 허가 없이는 수행해서는 안되며, 웹 취약점을 발견하였을 경우 즉시 해당 웹사이트의 소유자나 관리자에게 알려야 합니다.

버퍼

: 데이터가 한 곳에서 다른 곳으로 전송되는 동안 데이터를 임시로 저장하는 데 사용되는 물리적 메모리의 저장소이다.

버퍼 오버플로우

: 버퍼에 버퍼의 크기를 초과하는 데이터를 넣어서 데이터가 메모리영역을 넘어서 실행 코드나 데이터 등 다른 메모리 영역을 덮어쓰게 되는 결함을 발생시키는 것을 말한다.

  1. 스택 버퍼 오버플로우 (Stack Buffer Overflow)
    • 함수 내에서 지역 변수가 위치하는 스택 메모리 영역을 공격한다.
    • 프로그램에서 특정 함수를 실행시키면 스택 이전 함수로 돌아가기 위한 주소가 기록된다. (함수에서 return이 호출되면 그 값과 함께 돌아갈 주소)
    • 버퍼에 버퍼 크기보다 큰 값을 넣게 되면 이 스택 영역을 침범하게 된다.
    • 리턴 주소가 들어갈 곳에 쉘 코드나 다른 프로그램의 주소를 넣으면 그것이 실행된다.
  2. 힙 버퍼 오버플로우 (Heap Buffer Overflow)
    • 동적으로 할당되는 힙 메모리 영역을 공격한다.

점검 절차

  1. 웹 페이지의 입력란과 URL 파라미터에 대량의 문자열을 입력하여 오류가 발생하는지 확인한다.
  2. 입력 값 필터가 설정된 경우 웹 프록시를 사용하여 대량의 문자열을 입력하여 우회 시도한다.

보안 대책

  1. 입력 데이터의 크기를 제한한다.
  2. 스택 가드, 스택 쉴드 등을 사용하여 스택의 오버플로우를 탐지하고 방지한다.
  3. 사용자 권한 및 접근을 제한하여 악의적인 코드가 시스템 또는 애플리케이션에 침입하지 못하도록 한다.
  4. 안전한 문자열 복사 함수(예: strncpy)를 사용한다.
  5. 버퍼 오버플로우를 방어하기 위한 특별한 라이브러리(예: libsafe, StackGuard, Buffer Overflow Protection)를 사용한다.
  6. 컴파일러에서 제공하는 보안 옵션을 활용한다.
  7. DEP(데이터 실행 방지)를 활성화하여 실행 가능한 메모리 영역을 제한하여 악성 코드 실행을 방지한다.

스택 가드 : 메모리상에서 프로그램의 복귀 주소와 변수 사이에 특정 값(주로 '카나리'라는 무결성 체크용 값)을 저장해 두었다가 그 값이 변경되었을 경우를 오버플로우로 가정하여 프로그램 실행을 중단하는 메커니즘
스택 쉴드 : 함수 시작 시 복귀 주소를 Global RET라는 특수 스택에 저장 후, 함수 종료 시 저장된 값과 스택의 RET값을 비교해 다를 경우 오버플로우로 가정하여 프로그램 실행을 중단시키는 메커니즘

출처
https://developer.mozilla.org/ko/docs/Glossary/buffer
https://blog.naver.com/luexr/223152980304
https://motie.tistory.com/83
https://itwiki.kr/w/%eb%b2%84%ed%8d%bc_%ec%98%a4%eb%b2%84%ed%94%8c%eb%a1%9c%ec%9a%b0
https://blog.naver.com/PostView.naver?blogId=luexr&logNo=223155451155

profile
IT 보안, 관심 있는 것을 공부합니다.

0개의 댓글