[System] 운영체제 이해

 

시스템 해킹


(1) 운영체제 개념

 

1-1. 운영체제

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

  • 프로그램의 프로세스 생성과 메모리 접근 등 서로 충돌 없이 요구를 잘 실행하도록 도와주는 역할 

 

[그림 1] 운영체제 개념

 

1-2. 운영체제 기능

  • 사용자 명령 인터페이스(UCI)를 중심으로 메모리 관리자, 프로세서 관리자, 장치 관리자, 파일 관리자 등 네 가지 서브 시스템 관리자로 기본 구성

[그림 2] 단일 사용자 운영체제 구성 모델

 

1-3. 사용자 명령 인터페이스 (User Command Interface)

  • 사용자와 시스템의 대화 수단

  • 많은 운영체제에서 GUI를 적용하기에 아이콘과 메뉴, 마우스라는 인터페이스를 이용, 시스템과 대화


(2) 서브시스템 관리자

2-1. 메모리 관리자

  • 프로그램이 메모리를 요청하면 적합성 점검 & 적합하다면 메모리 할당

  • 할당된 메모리를 다른 프로그램이 접근하지 못하게 관리 & 보호

  • 프로그램이 종료할 떄는 할당된 메모리 회수

 

2-2. 프로세서 관리자

  • 명령어들을 쳬계적이고 효율적으로 실행할 수 있도록 작업 스케줄링

  • 사용자의 작업 요청을 수용 & 거부

 

2-3. 장치 관리자

  • 프린터, 디스크 드라이버, 모뎀, 모니터 등 시스템 안의 모든 장치를 프로그램에 할당 & 회수

  • 이런 장치들은 흔히 입출력(Input/Output)장치라고 부름

 

2-4. 파일 관리자

  • 시스템 안의 데이터, 응용 프로그램 등 모든 파일에 사용자별로 파일 접근 권한 부여

  • 접근 권한에 따라 파일을 할당 & 해제

 

2-5. 네트워크 관리자

  • 네트워크에서 접근 가능한 CPU, 메모리, 프린터, 디스크 드라이버, 모뎀, 모니터 자원 관리


(3) 윈도우 역사

[그림 3] 윈도우 발전 과정


(4) 윈도우 구조

 

4-1. 커널(Kernel)

  • 운영체제 중심에 위치

  • 운영체제에서 어떤 작업을 시작하더라도 커널 동작으로 제어

  • 인터럽트 처리, 프로세스 관리, 메모리 관리, 파일 시스템 관리, 프로그래밍 인터페이스 제공 등 운영체제 기본 기능을 제공하는 핵심

 

4-1-1. 인터럽트

  • 작동 중인 컴퓨터에 예기치 않은 문제 발생 경우 CPU가 하드웨어적으로 상태를 체크하여 변화 대응

  • 발생 시, 운영체제 제어 프로그램에 있는 인터럽트 처리 루틴 작동하여 인터럽트를 해결하고, 인터럽트가 생기기 이전 상태로 복귀

 

4-1-2. 인터럽트 발생 원인

  • 갑작스런 정전

  • 기계적 문제 발생

  • 오퍼레이터나 타이머가 프로그램 의도적 중단

  • 입출력 종료나 입출력 오류로 CPU 기능 요청 시

  • 프로그램 실행 중 보호된 기억 공간 접근 & 불법적인 명령 수행으로 프로그램 문제 발생 시


(5) 윈도우 커널 구조

[그림 4] 윈도우 링 구조

  • 1. 하드웨어

  • 2. HAL (하드웨어 제어)

  • 3. 마이크로 커널

  • 4. 각종 관리자

  • 5. 응용 프로그램

 

[그림 5] 윈도우 시스템 구조

  • 하드웨어부터 각종 관리자까지 커널 모드로 구분하고, 응용 프로그램은 사용자 모드로 구분

  • 커널 모드는 기본적으로 사용자가 접근할 수 없는 영역, 프로그램을 실행하는 기본 관리 시스템이 위치

  • HAL은 하드웨어와 개발된 소프트웨어가 원활히 통신할 수 있도록 도와주는 번역자 역할

  • 마이크로 커널은 하드웨어와 하는 통신만 제어하는 최소한 커널(system32 폴더의 ntoskrnl.exe파일)


(6) 윈도우 관리자 역할

 

6-1. 입출력 관리자

  • 시스템 입출력 제어

  • 장치 드라이버 사이에서 메시지를 전달, 응용 프로그램이 하드웨어와 바로 통신할 수 있는 통로 제공

 

6-2. 개체 관리자

  • 파일, 포트, 프로세스, 스레드 등 모든 것을 개체로 정의

  • 이런 각 개체 정보를 제공

 

6-3. 보안 참조 관리자

  • 각 데이터나 시스템 자원의 제어를 허가 & 거부

  • 시스템 강제 보안 설정을 책임

 

6-4. 프로세스 관리자 

  • 스레드 생성 & 요청에 따라 처리

 

6-5. 로컬 프로시저 호출 관리자

  • 각 프로세스는 서로 메모리 공간을 침범하지 못해 프로세스 간 통신이 필요할 때 대신할 수 있는 장치

 

6-6. 가상 메모리 관리자 

  • 응용 프로그램의 요청에 따라 RAM 메모리 할당 & 가상 메모리 페이징 제어

 

6-7. 그래픽 장치 관리자

  • 화면에 선이나 곡선을 그리거나 폰트 등을 관리

 

6-8. 기타 관리자

  • 캐시 관리자, Plug and Play 관리자, 전원 관리자 등이 있음

 


(7) 서브 시스템

  • 윈도우에서 여러 응용 프로그램을 실행하는 컨테이너

  • 사용자가 로그인할 때 데이터를 보호하고, 운영체제가 이를 제어할 수 있도록 함

 

7-1. Win32

  • 기본 서브시스템으로 32비트 응용 프로그램이 동작할 수 있게 해준다.

  • 기본 윈도우 사용자 인터페이스 제공

  • 비디오 디스플레이, 키보드, 마우스 등을 지원

 

7-2. POSIX

  • 보안 서브 시스템과 유닉스 운영체제에 기반을 둔 일련의 표준 운영체제 인터페이스

 

7-3. 윈도우 리눅스 서브 시스템

  • 윈도우 10부터 도입된 특이한 서브 시스템

  • 윈도우에서 리눅스 운영체제를 설치해서 쓸 수 있게 하고, 리눅스 프로그램도 그 안에서 실행 가능


(8) 윈도우 파일 시스템

8-1. FAT

  • 기본적으로 2GB까지를 한 파티션으로 설정 가능

  • FAT 테이블 기본 크기는 16비트, 이는 하드 디스크에 파일을 담는 최소 단위인 클러스터가 32KB이기 때문

  • 전체 가능 용량은 2GB

 

8-2. FAT32

  • FAT와는 비교할 수 없을 만큼 용량이 커서 클러스터를 총 32비트개 가질 수 있음

  • 호환성이 좋아 리눅스나 다른 운영체제에 정보를 옮길 때 유용

  • 접근 제어를 설정할 수 없다는 문제점이 있음

 

8-3. NTFS

  • HPFS의 장점을 모아 만든 것

  • 현재 윈도우에 적용

  • 파일 시스템 결함을 관리하는 데 FAT나 FAT32보다 훨씬 좋은 성능을 보여줌

  • 보완 관점에서도 비교적 훌륭하며, 개별 폴더와 파일에 사용 권한 설정 가능

  • 각 파일과 폴더에 해당 계정만 접근하여 읽을 수 있게 암호화가 가능하며 폴더를 암호화하면 안에 있는 파일도 모두 암호화가 됨

  • 암호화된 폴더나 파일은 복사나 이동을 해도 암호화 속성을 잃지 않으며 감사 기능을 제공


(9) 윈도우 부팅 순서

9-1. POST 실행

  • 하드웨어 스스로 시스템에 문제가 없는지 기본 사항을 검사하는 과정

  • BIOS가 POST를 실행하고, 라우터나 스위치 등 장비에서도 처음 스위치를 켤 때 POST를 실행

  • POST 도중 하드웨어에서 문제 발견 시 여러 방법으로 알림

 

9-2. 기본 부팅 관련 설정 사항 로드

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

 

9-3. MBR 로드

  • MBR은 저장 매체 첫 번째 섹터(LBA 0)에 위치하는 512바이트 영역

  • 부팅 매체의 기본 파일 시스템 정보가 들어 있음

  • 운영체제를 부팅할 때 저장 매체의 첫 번째 섹터를 호출하면 해당 부트 코드를 수행

  • 부트 코드의 주 역할은 파티션 테이블에서 부팅 가능한 파티션을 찾아 해당 파티션의 부트 섹터에 호출

  • 부팅 가능한 파티션이 없으면 오류 메시지를 출력

 

9-4. NTLDR 실행

  • NTLDR은 하드 디스크의 부팅 파티션에 있는 프로그램

  • 윈도우를 부팅할 수 있도록 간단한 파일 시스템을 실행

  • boot.ini 파일 내용을 읽어 가능한 부팅 옵션을 보여 줌

 

9-5. NTDETECT.com 실행

  • NTDETECT는 NTLDR에서 제어권을 위임받아 시스템에 설치 & 하드웨어 검사

  • PC의 CPU 유형 / 버스 유형 / 비디오 보드 유형 / 키보드와 마우스 종류 / 컴퓨터에 장착된 직렬 포트와 병렬 포트 / 플로피 드라이브

  • NTDETECT가 문제없이 작동 되면 레지스트리 하드웨어 키를 만들고, 이 키는 HKEY_LOCAL_MACHINE에 있음

  • 컴퓨터를 재부팅할 때마다 레지스트리의 해당 부분을 만들기에 항상 현재의 하드웨어 구성 반영

 

9-6. ntoskrnl.exe 실행

  • ntoskrnl은 HAL.DLL을 로드하며 네 가지가 있음

 

9-6-1. 커널 로드

  • 시스템 설정 로드

  • HKEY_LOCAL_MACHINE\System\Current Controlset\Services에 저장

  • 이 정보를 확인하여 로드할 드라이브와 그 순서를 결정

 

9-6-2. 커널 초기화

  • 드라이버에서 현재 제어 설정을 검사 & 작업 시작

 

9-6-3. 서비스 로드

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

 

9-6-4. 서브시스템 시작

  • 윈도우 서브 시스템을 초기화

  • Win32 서브시스템은 로그인을 처리하고 Winlogon.exe를 시작

  • 로그인 창을 활성화, 계정과 패스워드를 입력받아 로컬 보안 인증 서버(lsass.exe)에 보냄

  • 전달받은 로컬 보안 인증 서버는 보안 계정 관리자(SAM)에 저장된 정보와 비교하여 일치하면 Userinit.exe 프로세스가 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon의 셸 값에서 참조되는 셸을 실행


(10) 윈도우 비스타 이후 부팅 순서

1~3. POST 실행 및 기본 부팅 관련 설정 사항 로드, MBR 로드

 

4. 윈도우 부트 서브 시스템 실행

  • MBR에서는 NTLDR을 실행하지 않고 윈도우 부트 서브 시스템을 실행

  • 윈도우 부트 서브 시스템은 bootmgr.exe를 실행, 부트 설정 데이터를 읽어 실행 가능한 운영체제 목록을 보여줌

 

5. 윈도우 OS 로더(Winload.exe)실행

  • Winload는 NTDETECT처럼 각종 장치 드라이버를 로드하고 ntoskrnl.exe를 실행


(11) 리눅스 / 유닉스 역사

[그림 6] 리눅스 / 유닉스 시스템 발전 과정


(12) 리눅스 / 유닉스 구조

12-1. 모놀리식 커널

  • 커널이 모든 기능을 수행하도록 만들었으며, 안정적이지만 문제가 발생하면 부분 수정이 어려움

  • 일반 시스템보다 거대한 슈퍼컴퓨터에 많이 적용

 

12-2. 마이크로 커널

  • 최소한의 커널인 윈도우 마이크로 커널과 달리 모듈 여러 개가 모여 커널 하나를 이루는 개념

  • 개별 모듈의 업로드와 언로드가 가능

  • 각 모듈 권한이 동일하여 잘못된 모듈을 업로드하면 커널 전체가 망가질 수도 있음


(13) 유닉스 링 구조 

[그림 7] 유닉스 링 구조

  • 링 개수가 많을수록 보안 레벨은 높지만, 윈도우가 유닉스보다 보안 레벨이 높다고는 할 수 없음

  • 유닉스 링 구조가 윈도우보다 명확하게 구분되어 있어 링 개수는 적지만 일반적으로 유닉스가 조금 더 높은 보안 수준을 유지


(14) 유닉스 시스템 구조

[그림 8] 유닉스 시스템 구조

 

  • 유닉스 커널 구조는 크게 파일 서브시스템, 장치 드라이버, 프로세스 제어로 나뉨

 

14-1. 프로세스 제어

  • 전체 프로세스 간 통신과 스케줄링, 메모리 관리 구현

 

14-2. 장치 드라이버

  • 윈도우처럼 하드웨어와 소프트웨어를 연결하는 인터페이스 제공

 

14-3. 파일 서브시스템

  • 하드 디스크 같은 저장 공간에 유닉스 파일을 저장하고 있는 역할


(15) 셸

  • 커널과 함께 유닉스의 중요한 요소

  • 원도우는 GUI 환경이며, 명령 창 기능이 제한적이어서 모든 것을 실행할 수 없지만, 유닉스는 GUI 환경을 지원하면서 셸 기능도 막강함

  • 응용 프로그램에서 명령을 받아 커널에 전송하는 역할

  • 사용자 키보드 입력을 인식하고 해당 프로그램을 수행

 

15-1. 셸의 주요 기능

  • 자체 내장 명령어 제공

  • 입출력, 오류의 방향 변경

  • 와일드카드

  • 파이프라인

  • 조건부, 무조건부 명령 열 작성

  • 서브 셸 생성

  • 백그라운드 처리

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


(16) 리눅스 / 유닉스 파일 시스템

16-1. 일반 파일 

  • 일반적으로 생각하는 데이터 파일 / 실행 파일

  • 텍스트 파일, BMP 파일, EXE 파일 등 일반적인 파일

  • 반드시 디렉터리 하나에 포함되어야 함

 

16-2. 디렉터리

  • 유닉스에서는 디렉터리도 파일에 해당

  • 디렉터리가 담고 있는 여러 파일과 하위 디렉터리 정보가 담김

 

16-3. 특수 파일

  • 유닉스에서는 프린터, 터미널, 테이프 드라이버 같은 물리적인 장치를 특수 파일로 접근

  • /dev(device)에 있음

 

16-4. 파이프 파일

  • | 문자를 뜻함

  • 명령 두 개를 연결할 때 사용

  • 임시 파일을 생성했다가 명령 수행을 마치면 사라지는 것


(17) 유닉스 디렉터리 구조

 

[그림 9] 유닉스 디렉터리 구조

 

/bin

  • 기본적으로 실행 가능한 파일을 담고 있음

  • echo, mv, copy, pwd, who 등

 

 /etc

  • 시스템의 환경 설정 및 주요 설정 파일을 담고 있음

  • passwd, hosts, xined.conf 등

 

/tmp

  • 프로그램 실행 및 설치 시 생성하는 임시 파일을 담고 있음

  • 이 디렉터리에 파일 저장 시, 재부팅할 때 임의로 삭제될 수 있음

 

 /lib

  • 기본 프로그램의 모듈을 담고 있음

 

 /boot

  • 커널용 프로그램 파일을 담고 있음

  • 부팅할 때 읽어서 수행

 

 /dev

  • 프린터나 터미널 같은 물리적인 장치를 다루는 특수 파일을 담고 있음

 

/home

  • 각 사용자의 작업 디렉터리를 담고 있음

  • 각 계정으로 로그인할 때 이 디렉터리 아래에 있는 자신의 작업 디렉터리가 시작 디렉터리가 됨

 

 /usr

  • 사용자가 직접 쓰는 파일을 담고 있음

  • 다른 디렉터리에 있는 파일이 똑같이 위치할 때가 많은데, 이는 링크되어 있는 것

 

 /usr /lib

  • C언어나 포트란 라이브러리를 담고 있음

 

/usr /include

  • C언어에서 사용하는 헤더 파일을 담고 있음


(18) 리눅스 / 유닉스 부팅 순서

18-1. POST 실행

 

18-2. 기본 부팅 관련 설정 사항 로드

 

18-3. MBR(마스터 부트 레코드) 로드

 

18-4. 부트 로더 실행

  • 리눅스는 부트 로더로 LILO와 GRUB를 사용

  • LILO는 /etc/lilo.conf에 설정 사항을 저장

  • GRUB는 레드햇 7.x 버전부터 기본 부트 로더로 제공

  • 사용이 편리하고 윈도우 계열 외에 다른 OS와 멀티 부팅 가능

  • GRUB는 /etc/grub.conf에 설정 사항을 저장하며, 부트 로더를 실행하면 부팅하고자 하는 운영체제 커널 이미지가 메모리에 로드

 

18-5. 실행 레벨에 따른 서비스 실행

  • 부트 로더는 스와퍼라는 pid 0번 프로세스 실행하고, 스와퍼는 다시 pid 1번 init 프로세스를 실행

  • init 프로세스는 다시 /etc/inittab 파일을 읽음

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

  • inittab 파일에서는 프로그램 종류에 따라 다른 수준의 실행 레벨을 부여하여 부팅에 필요한 프로그램들을 실행, 일곱 개가 기본

 

[표 1] 실행 레벨

실행 레벨 0 시스템 종료 시에 사용
실행 레벨 1 단일 사용자 모드, 기본적으로 관리자 권한 셸을 얻음, 데몬을 실행하지 않아 기능 제약
실행 레벨 2 NFS를 지원하지 않는 다중 사용자 모드
실행 레벨 3 일반 셸 기반의 인터페이스를 가진 다중 사용자 모드
실행 레벨 4 기본적으로 사용하지 않지만, 사용자가 임의로 정의하여 사용 가능
실행 레벨 5 기본은 실행 레벨 3과 같으나, GUI 환경 지원
실행 레벨 6 재부팅

# Reference

 

https://www.hanbit.co.kr/store/books/look.php?p_code=B3283906872

+ Recent posts