devRenio

II. 시스템 보안

인터넷보안(황승연) 3주차 강의내용

1. 운영 체제 보안

시스템 보안 :

  • 네트워크에 연결된 시스템의 취약점을 이용해 해커들이 침입해서 정보시스템을 이용하는 것을 방지.
    데이터 유출, 시스템 변조, 서비스 중단
  • 허가되지 않은 시스템 접근을 막아 시스템에 저장된 정보와 정상적인 운용을 보호.
  • 정보시스템은 크게 네트워크, 시스템, 어플리케이션 3개의 계층으로 구성.
  • 공격이 여러 단계에서 발생하기 때문에 계층으로 나누어 보안을 수행.
    네트워크 공격 → 시스템 침입 → 어플리케이션 데이터 탈취.

정보시스템은 하드웨어와 소프트웨어, 시스템 요소로 구성

  • 하드웨어 보안: 시스템을 구성하는 물리적 장치가 손상되거나 무단으로 접근되는 것을 방지하는 것
    • 모니터, 키보드, 메인 보드, 하드 디스크, 램 메모리
  • 소프트웨어 보안: 프로그램의 취약점을 이용한 공격으로부터 시스템을 보호하는 것
    • 운영체제, 데이터베이스, 웹 서비스
  • 시스템 보안: 사용자 계정 관리, 접근 권한 통제, 로그 기록 등을 통해 시스템의 안전한 운영을 보장하는 관리적·기술적 보안 활동
    • 계정 및 패스워드 관리, 접근 제어 및 권한 관리, 로그 관리

시스템을 공격하는 방법 : 버퍼 오버플로우, 패스워드 크래킹, 백도어

1) 운영 체제
응용 소프트웨어와 하드웨어의 중간에 위치하는 프로그램의 집합

2) 운영 체제의 기능

  • 프로세스 관리
    • 프로세스의 생성, 실행, 종료 등을 관리하며 CPU를 여러 프로세스가 효율적으로 사용할 수 있도록 스케줄링을 수행.
  • 주 기억장치의 관리
    • 메인 메모리(RAM)의 할당과 해제를 관리하며, 여러 프로그램이 메모리를 효율적으로 사용할 수 있도록 제어.
  • 보조 기억장치의 관리
    • 하드디스크나 SSD와 같은 보조 저장장치의 공간을 관리하고 데이터 저장 및 접근을 효율적으로 수행하도록 관리.
  • 입출력 시스템의 관리
    • 키보드, 마우스, 프린터, 디스크 등의 입출력 장치와 프로그램 사이의 데이터 전달을 관리
  • 파일 시스템 관리
    • 파일과 디렉토리를 생성, 삭제, 저장, 검색할 수 있도록 관리하며 데이터의 체계적인 저장 구조를 제공
  • 보호 및 보안 시스템
    • 사용자 인증과 접근 권한을 관리하여 허가되지 않은 사용자나 프로그램이 시스템 자원에 접근하지 못하도록 보호
  • 프로세스 (실행 중인 프로그램)
    • 운영체제가 CPU와 메모리 등의 자원을 할당하여 실행되는 작업 -** 병행처리**
    • 여러 개의 프로세스나 작업을 동시에 실행하는 것처럼 처리하여 시스템 자원을 효율적으로 활용하는 방식
  • 프로세스 스케줄링
    • 여러 프로세스 중 어떤 프로세스가 CPU를 사용할 것인지 결정하고 실행 순서를 관리하는 기능
    • 대표적으로 FCFS, SJF, Round Robin 등의 알고리즘
  • 교착상태
    • 두 개 이상의 프로세스가 서로가 가진 자원을 기다리면서 작업이 진행되지 못하고 무한히 대기하는 상태
    • 조건
      상호배제, 점유대기, 비선점, 순환대기

3) 파일 시스템

  • 파일과 디렉토리
    • 파일: 데이터를 저장하는 단위
    • 디렉토리: 파일을 모아 관리하는 폴더
  • 디렉토리 구조
    • 파일을 계층적으로 관리하는 방식
  • Windows 파일 시스템 - NTFS
  • Unix 파일시스템 – EXT4

  • 파일 권한 공격
    • 파일에 대한 읽기/쓰기/실행 권한 설정 오류를 악용
  • 파일 업로드 공격
    • 정상 파일처럼 보이지만 실제로는 악성코드
    • Image.jpg → 실제로는 webshell.php → 서버에서 실행되어 권한 탈취
  • TOCTOU 공격 (Time-of-check to Time-of-use)
    • 파일 검사 시점과 사용 시점 사이의 틈을 이용하여 공격자가 파일을 바꾸는 공격 기법

4) UNIX System의 특징

  • 대화식 운영체제
    • 사용자와 명령어 기반으로 직접 소통
  • 멀티태스킹
  • 높은 이식성
    • 다양한 하드웨어에서 동작 가능
  • 계층적 파일 시스템 (트리구조)
  • 다양한 개발도구
  • 이기종간의 통신능력 우수
    • ssh, ftp, http etc.

5) Linux System의 특징(추가사항)

  • 다중 사용자 시스템
    • 여러 사용자가 동시 접속 가능 → 사용자 권한 관리 중요
  • 오픈소스
    • 신속한 개발 / 자유로운 변형
  • 운영체제 표준(POSIX) 준수
    • 높은 이식성 및 호환성
  • 가상 메모리 사용
  • Virtual Console
    • 기본 6개의 콘솔 제공(Alt + F1 ~ F6)
  • 다양한 파일 시스템 지원

6) 윈도우의 특징

  • GUI 환경
  • Plug & Play (PnP)
    • 장치를 연결하면 자동으로 인식하고 사용
  • 멀티태스킹
  • OLE(Object Linking & Embedding)
    • 한 프로그램의 데이터를 다른 프로그램에서 사용
    • ex) 엑셀 데이터를 파워포인트에서 사용 가능
  • 멀티미디어

7) 계정 및 패스워드 관리

  • 윈도우: 운영체제에 대한 관리자 권한을 가진 계정을 administrator라고 칭하는데, 이는 시스템에 가장 기본으로 설치되는 계정
  • 유닉스 : 기본 관리자 계정으로 root가 존재
  • 계정 생성과 삭제시 적절한 승인 절차가 마련되어 있어야 하고, 불필요한 계정이 존재하는지와 불필요하게 관리자 권한 등이 부여되어 있지 않은지를 주기적으로 확인해야 함

8) 로그 관리

  • Authentication (인증)
    ✓ 자신의 신원(Identity)을 시스템에 증명하는 과정. 가장 일반적인 경우가 아이디와 패스워드를 입력하는 과정
    ✓ 아이디가 신원을 나타내고 패스워드가 정상이면 인증
  • Authorization (인가)
    ✓ 인증된 사용자에게 권한(permission)을 부여하는 것
  • Accounting (계정/추적/로그)
    ✓ 사용자의 행동을 기록
    ✓ 문제 발생 시 추적 가능 (책임추적성, Accountability)

9) 취약점 관리

  • 버퍼 오버플로우 같은 응용 프로그램 자체에 있는 취약점에 패치를 적용해 이를 제거 (코드 수정)
  • 시스템 내부로 침투하지 못하도록 경로를 차단
  • 응용 프로그램의 취약점을 통해 운영체제에 접근할 경우에도 영향력을 최소화하기 위해 응용 프로그램에 최소 권한만 부여 (최소 권한 원칙)
  • 시스템에 존재하는 불필요한 서비스나 악성 프로그램을 확인하기 위해 시스템의 서비스 포트 및 프로세스를 주기적으로 검사

2. 윈도우 시스템 보안

1) NTFS 권한

  • 윈도우즈에서 사용 가능한 파일 시스템에는 FAT 16(32), NTFS
  • 퍼미션을 부여하기 위해선 특정 퍼미션이 있어야 함
    • 소유자 또는 관리자
  • NTFS는 퍼미션을 보관함
  • 퍼미션은 Allow와 Deny가 있음
    • Deny가 우선

2) 레지스트리(Registry)

  • 등기소 (registry) : 시스템 정보를 담고 있는 데이터베이스
    • 윈도우의 모든 설정 정보를 저장
    • 사용자와 시스템, 파일/디렉토리의 모든 정보를 분류해서 저장
    • 실시간으로 적용
  • 레지스트리의 내용을 보려면 레지스트리 편집기를 실행

3) 레지스트리 보안

  • 레지스트리가 손상되면 시스템 오류 발생, 프로그램 실행 불가, 부팅 불가
  • 공격 형태
    • 시작 프로그램 등록 → 보안 설정 변경 → 시스템 기능 비활성화
  • 대책
    • 인가되지 않은 사용자의 접근을 차단
    • 접근 통제, 권한 관리, 변경 감시, 백업

3. 시스템 보안 위협 유형

1) 버퍼 오버플로 공격

  • 데이터의 길이에 대한 불명확한 정의를 악용한 덮어쓰기로 인해 발생.
  • 정상적인 경우 사용되지 않아야 할 주소 공간, 덮어쓸 수 없는 부분에 해커가 임의 코드를 덮어쓰는 공격.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

struct Data {
	char buffer[10];
	int check;
};

int main() {
	struct Data data;
	data.check = 0;

	printf("Input : ");
	gets(data.buffer); // 취약점
    // gets는 개행 전까지의 모든 문자를 입력받음
    // 해커는 이를 통해 스택 내의 함수 복귀주소를 조작
    // fgets 등의 함수로 글자수 제한 필요

	printf("check = %d\n", data.check);

	if (data.check != 0) {
		printf("Hacked!\n");
	}
	else {
		printf("Normal\n");
	}

	return 0;
}

2) 포맷 스트링 공격

  • 사용자로부터 입력을 받아들이거나 결과를 출력하기 위하여 사용하는 형식.
  • 데이터의 형태와 길이에 대한 불명확한 정의로 인한 문제점 중 ‘데이터에 형태에 대한 불명확한 정의’로 인한 것.
    • 사용자 입력을 그대로 포맷 스트링으로 사용
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
	char input[100];

	printf("입력: ");
	scanf("%s", input);

	printf(input); // 취약점
    // 입력값으로 포맷(%x 등)을 집어넣는 등
    // 주지 않은 인자 값을 읽어냄
	printf("\n");

	return 0;
}

3) 백도어 공격

  • 백도어
    • 정상적인 인증 절차를 거치지 않고 시스템에 몰래 접근할 수 있는 통로
    • 다른 파일을 감염시키지 않음
  • 넷버스(NetBus)
    ✓ 파일 삭제, 키보드 입력 감시, 정보 탈취, 화면 제어
  • 백오리피스(Back Orifice)
    ✓ 악의적인 백도어 프로그램
    ✓ 시스템 명령어 실행, 네트워크 조작, 시스템 설정 변경
  • 스쿨버스(School Bus)
    ✓ 정상프로그램인 척하면서 사용자에게 실행을 유도하는 악성프로그램
  • 루트킷(Rootkit)
    ✓ 시스템에 침투한 뒤, 자신의 존재를 숨기면서 관리자 권한을 유지하는 악성 프로그램

4) 무차별 공격

  • 패스워드 사전 파일을 이용하여 미리 지정한 아이디에 대입하여 접속 계정을 알아내는 해킹 방법.
  • Brute Force 공격이 가능한 서비스 종류 - Telnet, FTP, pop3, www, NTNetBios, SQL Sever.

5) MITB 공격과 Web Injection

  • 브라우저 내부에 악성코드가 들어가서 사용자의 행동을 가로채는 공격
  • 메모리에 로딩된 웹 페이지의 내용을 도청하거나, 위/변조 할 수 있음
    • 사용자가 보는 화면과 서버에 전송되는 내용이 다르게 조작되는 것
  • MITB를 통해 웹 페이지를 위/변조하는 공격 - Web Injection.

2장 연습문제 답안

4 2 2 2 3 4 4 4 4 4