'한빛아카데미 - 시스템 해킹과 보안' 교재에 관한 내용입니다.


• 운영체제 개념

- 사용자가 컴퓨터 시스템을 손쉽게 사용하도록 하고, 시스템 자원(기억 장치, CPU, 입출력 장치, 정보, 네트워크 등)을 효율적으로 관리할 수 있도록 하는 프로그램 집합

 

운영체제의 역할

 운영체제의 기능

- 일반 PC는 단일 사용자 운영체제 구성 모델을 기반으로 하여 메모리 관리자, 프로세서 관리자, 장치 관리자, 파일 관리자 등 서브 시스템 관리자로 구성

단일 사용자 운영체제 구성 모델

 사용자 명령 인터페이스

- 사용자와 시스템 간의 대화 수단(DOS, GUI)

 

서브 시스템 관리자

 메모리 관리자

- 프로그램의 메모리 요청의 적합성 점검

- 적합한 경우 할당된 메모리를 다른 프로그램이 접근하지 못하게 관리

- 보호 프로그램 종료 시 할당된 메모리를 회수

 

 프로세서 관리자

- 명령어들이 체계적이고 효율적으로 실행되도록 작업 스케줄링 - 사용자의 작업 요청 수용 또는 거부

 

 장치 관리자

- 프린터, 디스크 드라이버, 모뎀, 모니터 등, 시스템 내의 모든 장치(Device)를 프로그램에 할당 또는 회수

 

 파일 관리자

- 사용자별로 파일 접근(Access) 권한을 부여 접근 권한에 따라 파일을 할당(Open)하고 해제(Close)

 

 네트워크 관리자

- CPU, 메모리, 프린터, 디스크 드라이버, 모뎀, 모니터 같은 자원을 관리

 

 Window의 역사

윈도우 발전 과정

 

 과거 MS 계열 운영체제

MS DOS 2.0, Windows NT

 

Windows Server 2012

 

 Window의 구조

- 커널은 인터럽트 (Interrupt) 처리, 프로세스 관리, 메모리 관리, 파일 시스템 관리, 프로그래밍 인터페이스 제공 등 운영체제의 기본 기능을 제공

 

- 윈도우 커널 구조

윈도우 링 구조
윈도우 시스템 구조

 

• 커널 모드

- 기본적으로 사용자가 접근할 수 없는 영역

- 프로그램을 실행하는 기본 관리 시스템

 

• HAL(Hardware Abstraction Layer)

- 컴퓨터 하드웨어와 소프트웨어 사이의 추상화 계층

- 하드웨어 부품에 따라 해야 할 복잡한 과정을 일관성 있고, 간략한 인터페이스로 제공하기 위해 같은 류의 하드웨어를 공통 명령어 집합으로 묶음

- 소프트웨어와 하드웨어 사이에서 소프트웨어가 PC의 시스템 메모리, CPU, 또는 기타 하드웨어 장치에 직접적으로 접근하는 것을 막음

- 소프트웨어는 HAL을 통해 하드웨어의 종류에 관계없이 컴퓨터 자원을 사용하여 일관된 작업을 수행

 

• 마이크로 커널 - 커널은 프로세스의 스케쥴링이나 메모리 관리, 데이터 입출력, 하드웨어 제어 등을 수행 - 그러나 윈도우는 이 작업들을 여러 관리자에게 분담시키고, 마이크로 커널은 하드웨어와 하는 통신만 제어하는 최소한의 커널 - 소스코드 측면에서 10,000줄 이하의 코드를 지니는 경향이 있음

 

• 사용자 모드

- 사용자 모드에는 다양한 응용 프로그램이 있을 수 있고, 이러한 응용 프로그램을 실행하는 서브 시스템이 있음 이러한 서브시스템을 컨테이너(Container)라고도 함

- 윈도우 10부터 윈도우 리눅스 서브시스템(WSL, Windows Subsystem for Linux) 적용

- 윈도우에서 리눅스 OS 설치 및 실행 가능

 

• 윈도우 관리자의 역할

- 입출력 관리자(I/O Manager) : 시스템의 입출력을 제어

- 객체 관리자(Object Manager) : 파일, 포트, 프로세스, 스레드 등의 객체들에 대한 정보를 제공

- 보안 참조 관리자(Security Reference Monitor Manager) : 각 데이터나 시스템 자원의 제어를 허가 하거나 거부함

- 프로세스 관리자(Process Manager) : 스레드를 생성하고 요청에 따라 처리

- 로컬 프로시저 호출 관리자(Local Procedure Call Manager) : 프로세스 간 장치

- 가상 메모리 관리자(Virtual Memory Manager) : RAM의 메모리를 할당하고, 가상 메모리의 페이징 (Paging)을 제어

- 그래픽 장치 관리자(Graphics Device Interface Manager) : 화면에 선이나 곡선을 그리거나 폰트 등을 관리

- 기타 관리자 : 캐시(Cache) 관리자, PNP(Plug and Play) 관리자, 전원 관리자 등이 있다.

 

• 윈도우 부팅 순서 (윈도우 XP, 윈도우 서버200/2003)

1 | POST(Power On Self Test)의 실행

- BIOS(Basic Input/Output system)에서 POST(Power On Self Test) 실행

- 컴퓨터 전원 인가 시 BIOS가 주변장치에 이상은 없는지 검사

 

2 | 기본 부팅 관련 설정사항 로드

- BIOS는 CMOS에 설정되어 있는 시스템 설정사항 및 부팅과 관련된 여러 가지 정보를 읽어 시스템에 적용

- CMOS(Complementary Metal-Oxide Semiconductor)

- CMOS는 비휘발성이기에 메인보드의 BIOS는 각종 설정 작업을 할 때 CMOS에 저장된 정보를 불러올 수 있음

 

3 | MBR(Master Boot Record, 마스터 부트 레코드) 로드

- MBR은 저장 매체의 첫 번째 섹터에 위치하는 512바이트의 영역으로, 부팅 매체에 대한 기본 파일 시스템 정보

- 부팅 가능한 파티션을 찾아 부팅 프로그램을 담고 있는 부트 섹터(Boot Sector) 호출

- ‘Missing operating system’은 운영체제가 설치되지 않았거나 CMOS에서 부팅 매체를 잘못 설정했을 때 확인

 

4 | NTLDR(NT Loader) 실행

- 하드 디스크의 부팅 파티션에 있는 프로그램으로, 윈도우 가 부팅될 수 있도록 파일 시스템을 실행하고 boot.ini 파일의 내용을 읽어 가능한 부팅 옵션을 보여줌

- 윈도우 비스타 이상 버전부터는 boot.ini를 포함하지 않고 별도의 시동 로더 사용

- 시스템에 설치된 하드웨어 검사(CPU 유형, 버스 유형, 비디오 보드 유형, 키보드와 마우스 종류, 컴퓨터에 장착되어 있는 직렬 포트와 병렬 포트, 플로피 드라이브)

- NTDETECT가 문제 없이 구동하면 레지스트리에 하드웨어 키 생성( HKEY_LOCAL_MACHINE, 재부팅마다 레지스트리에 해당 부분을 만들고 항상 현재 하드웨어 구성 반영)

 

5 | NTDETECT.com 실행

 

6 | ntoskrnl.exe(NT OS Kernel) 실행 HAL.DLL(Hardware Abstraction Layer) 로드 단계

- 커널 로드 : 시스템 설정을 로드하고, 이것을 HKEY_LOCAL_MACHINE\ System\CurrentControlset\Services에 저장

- 커널 초기화 : 드라이브에 대한 현재의 제어 설정을 검사하고 작업을 시작

- 서비스 로드 : 세션 관리자 서브 시스템(smss.exe)과 Win32 서브 시스템을 로드

- 서브 시스템 시작 : 윈도우 서브 시스템이 초기화, Win32 서브 시스템은로그인을 처리하고 Winlogon.exe를 시작

 

• 리눅스/유닉스의 역사

- 데니스 리치(Dennis Ritchie)는 파견지에서 돌아온 뒤 켄 톰슨(Ken Thomson)과 함께PDP- 7을 만들기 시작하며 멀틱스의 여러 개념 구현

1 | 파일 시스템 구성

2 | 사용자가 명령을 내려 바로 실행하는 명령어 인터프리터(command interpreter)

3 | 각 명령이 새로운 프로세스를 형성해서 실행하도록 하는 개념 모두 포함

 

PDP-7

- 버클리대학교 AT&T 연구소는 유닉스 소스 코드를 400달러에 구입

- 버클리대학교의 학생 빌 조이(Bill Joy)와 척 핼리(Chuck Haley)는 소스 코드를 수정하여 발전

- BSD(Berkeley Software Distribution)라는 이름을 붙여 당시50달러 가격으로 판매

- 리눅스 시초는 1983년부터 리처드 스톨만이 개발한 GNU 운영체제

- 리눅스 정식 버전은 1991년 10월에 발표 ‘Copy Left’ 원칙에 의해 배포했고, 해커를 포함한 여러 사람들에 의해 발전

- POSIX(Portable Operating System Interface)

- 이식 가능 운영 체제 인터페이스

- 서로 다른 UNIX OS의 공통 API를 정리하여 이식성이 높은 유닉스 응용 프로그램을 개발하기 위한 목적으로 IEEE가 책정한 애플리케이션 인터페이스 규격

 

• 유닉스의 표준 인터페이스 POSIX

- POSIX.1(핵심부, 운영체제 인터페이스)

- POSIX.2(셸과 툴, 사용자 명령 등)

- POSIX.3(표준 규격의 적합성 검증법)

- POSIX.4(실시간 POSIX 확장)

- POSIX.5(Ada 언어)

- POSIX.6(보안 기능) 등

 

유닉스 시스템 발전 과정

 

리눅스/유닉스의 구조

• 유닉스 링 구조

- 하드웨어, 커널, 셸, 응용 프로그램으로 구성

유닉스 링 구조

- 윈도우보다 훨씬 단순한 구조

- 크게 파일 서브 시스템, 장치 드라이버, 프로세스 제어로 나뉘며, 커널의 파일 크기 또한 윈도우의 1/3 정도

유닉스 시스템 구조

- 프로세스 제어: 전체 프로세스 간 통신, 스케줄링, 메모리 관리 구현

- 장치 드라이버: 윈도우에서 처럼 하드웨어와 소프트웨어를 연결해주는 인터페이스 제공

- 파일 서브 시스템: 하드 디스크와 같은 저장 공간에 유닉스의 파일을 저장하고 읽는 역할

 

• 셸(Shell)

- 응용 프로그램에서 명령을 받아 커널에 전송하는 역할, 사용자의 키보드 입력 인식 해당 프로그램을 수행

- 본 셸(Bourne Shell), 콘 셸(Korn Shell), C 셸(C Shell)

 

• 셸의 주요 기능

- 자체의 내장 명령어 제공

- 입력/출력/오류의 방향 변경(redirection)

- 와일드카드(wildcard)

- 파이프라인

- 조건부/무조건부 명령 열 작성

- 서브 셸 생성

- 백그라운드 처리(Background processing)

- 셸 스크립트(프로그램) 작성

 

• 리눅스/유닉스의 파일 시스템

- 일반 파일 : 데이터 파일이나 실행

- 디렉터리 : 유닉스에서는 디렉터리도 파일에 해당, 디렉터리가 담고 있는 여러 파일과 하위 디렉터리 정보가 담겨 있음

- 특수 파일 : 프린터나 터미널, 테이프 드라이버 같은 물리적인 장치를 특수 파일을 통해 접근, 특수 파일은 /dev(device)에 있음

- 파이프 파일 : | 문자를 말하며, 2개의 명령을 연결 시 사용, 임시 파일이 생성 되었다가 명령 수행을 마치면 사라지는 것으로, 이 파일을 파이프 파일이라고 함

유닉스의 디렉터리 구조

 

디렉터리 내용
/bin 기본적으로 실행 가능한 파일을 담고 있음
echo, mv, copy, pwd, who 등
/etc 시스템의 환경 설정 및 주요 설정 파일을 담고 있음
passwd, hosts, xined.conf 등
/tmp 프로그램 실행 및 설치 시 생성되는 임시 파일을 담고 있음
이 디렉터리에 파일을 저장하면 재부팅 시 임의로 삭제될 수 있음
/lib 기본 프로그램의 모듈을 담고 있음
/boot 커널을 위한 프로그램 파일을 담고 있으며, 부팅할 때 읽혀 수행 됨
/dev 프린터나 터미널 같은 물리적인 장치를 다루기 위한 특수 파일을 담고 있음
/home 각 사용자의 작업 디렉터리를 담고 있음
각 계정으로 로그인할 때 이 디렉터리 밑에 자신의 작업 디렉터리가 시작 디렉터리가 됨
/usr 사용자가 직접 쓰는 파일을 담고 있다. 다른 디렉터리에 있는 파일이 똑같이 위치하고 있는 것이 많은데, 이는 링크되어 있는 것
/usr/lib C언어나 포트란의 라이브러리를 담고 있음
/usr/include C언어에 사용되는 헤더 파일을 담고 있음


• 리눅스/유닉스의 부팅 순서

- 1단계 : POST(Power On Self Test) 수행

 

- 2단계 : 기본 부팅 관련 설정사항 로드

 

- 3단계 : MBR(Master Boot Record, 마스터 부트 레코드) 로드

 

- 4단계 : 부트 로더(Boot Loader) 실행

1 | LILO(Linux Loader)와 GRUB(GRand Unified Bootloader, GNU 프로젝트의 부트 로더) 사용

2 | LILO는 /etc/lilo.conf에 설정사항 저장

3 | GRUB은 /etc/grub.conf (=/boot/grub/grub.conf)에 설정사항 저장

4 | 부트 로더를 실행하면 OS 커널 이미지를 메모리에 로드

 

▪ 5단계 : 실행 레벨에 따른 서비스 실행

- inittab 파일은 부팅할 기본 모드를 선택하여 그에 따른 환경을 제공하는 분기점

- initttab 파일 : 실행 레벨(Run Level), 기본이 실행 레벨 7

실행 레벨 0  시스템을 종료할 때 사용
실행 레벨 1 단일 사용자 모드(Single User Mode)로, 기본적으로 관리자 권한의 셸을 얻는다. 그러나 대부분 데몬이 실행되지 않으므로 기능은 제약되어 있다.
실행 레벨 2 NFS(Network File System)를 지원하지 않는 다중 사용자 모드
실행 레벨 3 일반 셸 기반의 인터페이스를 가진 다중 사용자 모드
실행 레벨 4 기본적으로 사용되지 않지만 사용자가 임의로 정의하여 사용할 수 있음
실행 레벨 5 기본은 실행 레벨 3과 같으나 GUI 환경을 지원
실행 레벨 6 재부팅

+ Recent posts