Linux/서버 보안(CentOS)

서버 부팅과정

D4tai1 2018. 9. 9.

1. 부트로더

 - 부팅될 때 운영체제를 올리는 것을 말한다.(하드웨어와 운영체제를 연결하는 것)

1) 메인보드의 펌웨어

 - 펌웨어가 운영체제와 연결되기 위한 규약

 - 하드디스크 or SSD 등에서 부트로더를 메모리로 읽어와 실행시킨다.

 

 [1] BIOS란?

  - 운영체제에 포함되지 않고 운영체제를 올리기 위한 것이다.

 

 [2] BIOS의 발전사

  BIOS(Basic Input Output System) - EFI(Extensible Firmware Interface) - UEFI(Unified Extensible Firmware Interface)

  (a) BIOS : 회색 창에 글씨

  (b) EFI : 텍스트에 칼라

  (c) UEFI : 마우스 지원

 

 [3] Device Driver

  - 메인보드의 펌웨어는 Device Driver라고 부른다.

  - 메인보드 내에 특별한 칩에 존재한다.

 

2) 파티션

 - 물리디스크를 파티션이라는 논리적으로 나누는 것

 [1] MBR

  - 예전에 사용하던 방식으로 2TB이상 붙이기 어렵다.

  - OS의 설치 위치가 정해져있다.

 

 [2] GPT

  - 최근에 사용하는 방식으로 어디에든 OS설치가 가능하며, 여러 개의 OS를 설치가 가능하다.

  - GPT 파티션으로 만들어진 장치는 EFI와 UEFI 펌웨어만 지원이 가능하다.

   

 

 

 3) 부팅과정

  ROM BIOS - 1차 부트로더[MBR] - 2차 부트로더[NTLDR, BOOTMGR] - Windows OS Start

  ROM BIOS - 1차 부트로더[MBR] - 2차 부트로더[GRUB, SYSLINUX] - Linux OS Start[Kernel - Init - Runlevel]

  - 메인보드가 켜지고 하드디스크의 첫 번째 섹터[MBR(Master Boot Record)]를 불러온다.

  - MBR의 정보로 OS를 시작한다. (Kernel)

  - OS도 여러 개의 프로그램으로 되어있지만 첫 번째 실행되는 프로세서 0번 프로세서는 Init이다.

  - GRUB의 파라미터 정보로 해당하는 런레벨에 따라 부팅한다.

 

※ MBR은 운영체제가 어디에 있는지 식별하여 RAM에 적재될 수 있도록 하는 정보이다.

※ GRUB은 운영체제 이전에 실행되는 특별한 프로그램이며 이것을 부트로더라고 부른다.

※ GRUB은 파라미터로 런레벨을 전달한다.

 

 4) 부팅 시 취약점

  - MBR에 바이러스를 심허놓고 그 후 운영체제가 올라오면 백신이 켜지기 전에 이미 감염되었다.

  - 이러한 문제를 방지하기 위해 MBR의 해시값을 OS가 가지고 있고

    OS가 올라온 후 MBR의 해시값과 비교 후 변조되었는지 확인한다.

 

2. Run Level Mode

런레벨

이름

설명

특이사항

0

halt

시스템 종료

 

1

Single User Mode

시스템 복원모드

단일사용자모드

2

Multiuser Mode

네트워크 지원x

사용하지 않음

3

Full Multiuser Mode

텍스트 유저모드

 

4

Unused

임의로 정해서 사용가능모드

사용하지 않음

5

X11

그래픽 유저모드

 

6

reboot 

시스템 재부팅 

 

 

- root 사용자만 런레벨 변경이 가능하다.

- /etc/inittab에서 런레벨을 변경이 가능하다.

- 런레벨 3에서 [Art + (F1, F2, ...)] 키를 누르면 여러 창을 띄울 수 있다.

- 런레벨 1의 경우 패스워드 없이 접속이 가능하다.(부팅 시 파라미터가 전달된다.)

 

3. 시연

1) 2차부트로더 접근

 [1] 부팅 후 F2

 [2] 부팅할 운영체제를 선택하고 e[Edit]를 누른다.

 

 

 [3] 여기서 e[Edit]를 누르면 커널에 파라미터(런레벨)를 넣을 수 있는 창으로 이동한다.

 

 

 [4] 커널에 파라미터(런레벨)을 입력할 수 있는 창 맨 아래줄에 '1'이나 'single'을 넣고 Enter를 누른다.

 

 

 [5] 여기서 b[Boot]를 누르면 입력한 런레벨로 부팅이 된다.

 

 

 [6] 부팅이 완료되면 패스워드를 묻지 않고 root권한이 부여된다. (단, 콘솔에서만 가능)

  - [whoami] 명령어와 [runlevel] 명령어로 사용자가 root인지, 런레벨이 싱글모드인지 확인한다.

  - 여기서는 [Art + (F1, F2...)] 키가 동작하지 않는다. (Single모드이기 때문)

 

 

 [7] [6]과 같이 인증없이 root권한이 부여되는 것은 위험하기 때문에 ROM BIOS도 패스워드를 부여한다.

  - 패스워드 저장방법은 [grub-md5-crypt] 명령어 내에서 패스워드를 입력하고

    반환되는 md5해시함수의 결과값을 [/boot/grub/grub.conf] 내에 넣어놓는다.

  - 같은 비밀번호를 넣는데도 불구하고 매번 해시값이 달라지는 이유는 salt값을 더하기 때문이다.

  ※salt key란? 정수 값으로 md5에 8비트만큼 값을 더해 해시충돌을 최소화시키는데 목적이 있다.

 

 

 

 [8] [vi /boot/grub/grub.conf] 명령어로 편집기를 연 후 hiddenmenu 아래줄 --md5옆에 이전에 얻은 값을 적고 저장한다.

 

 

 [9] [reboot] 후 F2를 누른 후 p를 누르고 비밀번호를 입력하도록 되어있다.

  - 비밀번호가 일치하지 않으면 접속이 되지 않는다.  

 

 

 [10] 비밀번호 일치 시 원래대로 런레벨을 수정하거나 부팅할 수 있다.

 

 

 

 

※ 레인보우테이블 = 해시테이블

 + 서버의 비밀번호는 SHA-2이상을 사용하지 않으면 법에 위반된다.

 

 

'Linux > 서버 보안(CentOS)' 카테고리의 다른 글

프로세스와 명령어 모니터링  (0) 2018.09.16
패키지 설치  (0) 2018.09.15
서비스관리  (0) 2018.09.09
CentOS_6.6 설치  (0) 2018.08.31
정보보안 이론  (0) 2018.08.25

댓글