학습 정리/🦴 CS Study

11. 메모리 취약점, 버퍼 오버플로우

무딘붓 2022. 12. 13. 11:15

🧠 메모리 취약점

  • 메모리 정의
    • 컴퓨터가 가지고 있는 기억장치
    • 레지스터 : CPU의 일부로 CPU 동작 속도와 동기화되어 작동 (가장 빠르다)
    • 주 기억 장치 : CPU 에서 직접 접근이 가능한 메모리
    • 보조 기억장치 : CPU 에서 직접 접근이 불가능한 메모리 (주 기억장치를 위한 장치)
  • 메모리 관리
    • 메모리 위치, 메모리 주소 : 컴퓨터에서 저장된 정보 읽거나 쓸 때 필요하다
    • 일반적으로 각각의 메모리 위치는 8bit의 데이터를 저장
    • 각각의 주소는 특정 메모리 위치에 대한 고유한 식별자
    • 주소 지정 : 컴퓨터가 메모리의 위치를 식별하는 과정
    • 프로그램 실행 → 프로그램 수행에 필요한 데이터들이 메모리에 올려짐 → 프로그램 사용 가능
  • 프로그램이 메모리에 올려져 사용될 때 저장되는 값
    • 데이터 영역  : 전역 변수 할당 / 시작과 동시에 할당 / 종료와 함께 소멸
    • 스택 영역 : 함수 변수 저장 / 함수 호출시 생성 / 함수 완료시 소멸
    • 힙 영역 : 필요에 의해 동적으로 메모리 할당
    • 힙, 데이터, 텍스트 영역 : 낮은 주소부터 할당 / 스택 : 높은 주소에서부터 할당
      → 높은 숫자의 주소부터 나열 : STACK-HEAP-DATA-TEXT
  • 메모리 취약점
    • int a,b,c,d : 가장 늦게 선언된 d가 가장 낮은 주소에 할당, a가 가장 높은 주소에 할당
    • 4byte 할당된 변수에 4byte보다 큰 값을 입력  → 할당되지 않은 영역 사용 가능 
       = 다른 변수에 할당된 메모리 영역 침범 가능

📁 버퍼 오버플로우

  • 버퍼오버플로우 정의
    • 버퍼(buffer) : 데이터가 한곳에서 다른 곳으로 이동할 때, 그 데이터가 보관되는 임시 기억공간
    • 오버(over) : ‘과하다. 지나치다.’ / 플로우(flow) : 넘치다.
      → 사용자가 입력한 데이터 크기가 너무 과하여 제한된 버퍼 용량에서 넘치는 것
    • 기본개념 = 데이터 밀어쓰기 : 자기에게 할당된 영역뿐만 아니라 그 옆에 영역까지 쓰는 현상
    • 프로그래머가 취약한 특정 함수 사용 / 메모리 취약 부분 발견시 공격 가능 
    • 정상적인 경우에는 사용되지 않아야 할 주소 공간 부분에 해커가 임의의 코드를 덮어 쓴다.
  • 버퍼오버플로우 특징
    • 정상적, 제한적 입력 환경에서는 버퍼 오버플로우 발생 X
    • 사용자 입력 요구시 버퍼 오버플로우 발생 O (임의의 값을 입력 받는 경우)
    • 메모리 중 주로 STACK HEAP이 공격 대상으로 활용된다.

    • STACK 오버플로우
      • RET 값을 변조하여 관리자 권한을 획득하는 방식
      • Return(RET)값 : 함수 종료 뒤 수행을 위해 이동할 주소
      • 공격자가 [입력 값 조작] → RET 변조해서 [관리자 권한 획득] → [프로그램 조작] 
    • HEAP 오버플로우
      • 힙에서는 malloc, calloc으로 데이터 할당 → 공간이 늘었다 줄었다 과정 반복
        → 공격자는 이곳에 저장되는 데이터, 함수 변경 → 원하는 결과를 얻어내는 공격
  • 버퍼오버플로우의 이해
    • gets : 키보드로부터 문자열을 입력받아 → 지정된 버퍼에 저장하는 함수 (C)
    • 비정상적인 값을 입력하면, 비정상적인 결과가 발생한다.
    • 사용자의 입력에 따라 결과 값이 달라진다.
    • 기본 개념은 덮어쓰기다.

 

* 이 게시글은 K-MOOC 정보보호와 보안의 기초 (링크) 강의를 듣고 개인 학습용으로 정리한 내용입니다.