서버 부팅과정
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 |
댓글