[정보보안기사] 필기 정리 - 시스템 보안

.·2022년 7월 19일
0

각종 시스템 보안위협 및 대응책

버퍼 오버플로우 공격

프로세스 메모리 구조

  • Text 영역: 프로그램 코드와 상수가 정의되어 있고, 읽기만 가능한 메모리 영역
  • Data 영역: 전역 변수와 정적 변수가 저장되어 있는 영역
  • Heap 영역: 프로그래머의 필요에 따라 동적 메모리 호출에 의해 할당되는 메모리 영역
  • Stack 영역: 함수 인자 값, 함수 내의 지역 변수, 함수의 반환 주소 등이 저장되는 영역

버퍼 오버플로우 공격 기본 개념

  • 버퍼 또는 데이터 저장 영역에 할당된 용량보다 더 많은 입력이 위치하면 다른 정보를 변경할 수 있는 조건. 공격자는 이런 조건을 이용해 시스템 중지나 시스템의 제어를 갖기 위한 특별한 코드를 삽입한다.

스택 버퍼 오버플로우

개요

  • 보통 SetUID가 설정된 루트 권한의 프로그램을 공격대상으로 한다. 스택에 정해진 버퍼보다 큰 공격 코드를 삽입하여 반환주소를 변경함으로써 임의의 공격 코드를 루트 권한으로 실행하도록 하는 방법

버퍼 오버플로우 공격 대응책

컴파일 시간 방어

  • 새 프로그램 내에서 공격을 저지하도록 프로그램을 강화하는 것을 목표로 한다.
  • 스택 보호 메커니즘(Stack Guard)

    컴파일러가 프로그램의 함수 호출 시에 ret 앞에 canary 값을 주입하고, 종료 시에 canary 값이 변조되었는지의 여부를 확인하여 버퍼 오버플로우 공격을 탐지

  • 스택 쉴드(Stack Shield)

    함수 시작 시 복귀 주소를 Global RET라는 특수 스택에 저장해 두었다가 함수 종료 시 저장된 값과 스택의 RET값을 비교해 다를 경우 오버플로우로 가정하여 프로그램 실행을 중단시키는 기술

실행 시간 방어

  • 주소 공간의 임의 추출(ASLR)

    공격자는 셸코드로 제어를 넘기기 위해 공격에 사용할 적당한 반환주소를 결정하는데 예측된 주소를 사용한다. 이 예측을 어렵게 만드는 한 가지 기법은 각 프로세스 안의 스택이 임의의 다른 곳에 위치하도록 변경하는 것이다.

  • 실행가능 주소 공간의 보호

    스택과 힙을 실행불능으로 만듦으로써 기존 프로그램을 위한 여러 가지 유형의 버퍼 오버플로우 공격에 대한 방어를 제공


포맷 스트링 공격

  • printf(), fprintf(), sprintf()와 같이 포맷스트링을 사용하는 함수의 경우, 외부로부터 입력된 값을 검증하지 않고 입출력 함수의 포맷 문자열로 그대로 사용하는 경우 발생할 수 있는 취약점
  • 대책: printf(), snprintf() 등 포맷문자열을 사용하는 함수에 사용자 입력값을 사용할 때는 사용자가 포맷 스트링을 변경할 수 있는 구조로 쓰지 않기

레이스 컨디션 공격

  • 둘 이상의 프로세스나 스레드가 공유자원에 동시에 접근할 때 접근하는 순서에 따라 비정상적인 결과가 발생하는 조건/상황을 말한다.
  • 실행되는 프로세스가 임시파일을 만드는 경우 악의적인 프로그램을 통해 그 프로세스의 실행 중에 끼어들어 임시파일을 목적파일로 연결(심볼릭 링크)하여 악의적인 행위를 할 수 있는 공격

파일 링크

  • 하드 링크
    • 똑같이 복사된 파일을 만드는 것
    • 하드 링크된 파일을 수정하면 원래 파일도 똑같이 수정됨
  • 심볼릭 링크
    • 원본 파일 데이터를 가리키는 링크 정보만 가짐

대응책

  • 임시 파일에 접근하기 전에 임시 파일에 대한 심볼릭 링크 설정 여부와 권한에 대한 검사 과정 추가

0개의 댓글