ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 버퍼 오버플로우(Buffer Overflow)
    Web Vulnerability 2019. 3. 27. 14:41

    버퍼 오버플로우(Buffer Overflow)


    1. 정의

    1) 버퍼(Buffer) 란?

    - 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리 영역임

    - 컴퓨터 안의 프로세스 사이에서 데이터를 이동시킬 때 사용됨

    - 키보드와 같은 입력 장치로부터 받거나 프린터와 같은 출력 장치로 내보낼 때 버퍼 안에 저장됨


    2) 버퍼 오버플로우(Buffer Overflow) 란?

    - 메모리를 다루는 데에 오류가 발생하여 잘못된 동작을 하는 프로그램의 취약점임

    - 선언된 크기보다 더 큰 데이터를 기록함으로써 발생되는 현상임

    - 운영체제가 스택이나 힙 영역에 임의의 데이터 기록 및 실행을 허용함으로써 발생되는 현상임

    - 프로세스가 데이터를 버퍼에 저장할 때 프로그래머가 지정한 영역 외에 공간에 저장하는 것을 의미함

    - 버퍼 오버플로우가 발생하면 인접 메모리를 덮어쓰게 되며, 메모리 접근 오류, 프로그램 종료 또는 시스템 정보 노출 등이 발생할 수 있음


    2. 발생 원인

    보통 데이터를 저장하는 과정에서 그 데이터를 저장할 메모리 위치가 유효한지를 검사하지 않아 발생함


    3. 점검 방법

    파라미터 입력 값에 대량의 인수를 전달하여 에러 페이지가 발생되는지 확인함

    - 로그인 창의 ID/PW 입력란에 많은 문자열 전달

    - 회원 가입 및 수정 페이지에 많은 문자열 전달

    - 사이트 검색란에 많은 문자열 전달

    - 게시물 작성 시 허용된 문자보다 많은 문자열 입력

    - 웹 애플리케이션에 많은 인수 값 전달


    4. 대응 방안

    - 버퍼의 경계검사[각주:1]를 수행함

    - 변수에 입력된 입력 값 범위를 검사하여 외부 파라미터 입력 값이 허용 범위를 벗어나는 경우 에러 페이지가 반환되지 않도록 조치함


    5. 예제

    1) 버퍼 오버플로우 발생 소스코드

    - 10자 이상의 문자들은 버퍼 오버플로우가 발생함

    #include <stdio.h>

    #include <string.h> int main(int argc, char *argv[]) { char buffer[10]; if (argc < 2) { fprintf(stderr, "사용법: %s 문자열\n", argv[0]); return 1; } strcpy(buffer, argv[1]); return 0; }


    - 실행화면

    추후 추가 필요



    2) 버퍼 오버플로우 조치한 소스코드

    - strncpy를 이용하여 버퍼에 쓰일 문자의 개수를 제한함

    #include <stdio.h>

    #include <string.h>

    int main(int argc, char *argv[]) { char buffer[10]; if (argc < 2) { fprintf(stderr, "사용법: %s 문자열\n", argv[0]); return 1; } strncpy(buffer, argv[1], sizeof(buffer)); buffer[sizeof(buffer) - 1] = '\0'; /* 문자열의 끝을 분명히 맺는다 */ return 0; }


    - 실행화면

    추후 추가 필요



    ※ 참고자료

    - https://ko.wikipedia.org/wiki/%EB%B2%84%ED%8D%BC_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)

    - https://ko.wikipedia.org/wiki/%EB%B2%84%ED%8D%BC_%EC%98%A4%EB%B2%84%ED%94%8C%EB%A1%9C

    1. 경계 검사(bounds checking)는 변수가 사용되기 전에 어떤 경계 내에 위치하는지를 검사하는 기법으로, 주로 숫자 데이터가 특정 범위 내에 존재하는지 여부나 (범위 검사), 배열 인덱스가 배열의 경계 안에 있는지 여부를 검사하는데 사용된다. (인덱스 검사) [본문으로]

    'Web Vulnerability' 카테고리의 다른 글

    MIME 타입 정리  (0) 2020.02.28
    HTTP 상태코드 정리  (0) 2020.02.28
    SQL Injection 취약점(2)_Error Based Injection  (0) 2020.01.27
    SQL Injection 취약점(1)_개요  (0) 2020.01.27
    클릭재킹(Clickjacking) 취약점  (0) 2020.01.27

    댓글

Designed by Tistory.