부팅 절차
1. 전원 버튼 누름
- 버튼 누르면 전원 공급기는 외부 전압을 낮은 전압으로 변환해서 공급함.
- 메인보드의 클록 발생기는 전압이 전달되면 주기적으로 클록 발생
- 클록의 주기에 따라 컴퓨터 시스템 동작
2. ROM BIOS 로드
- 클록은 CPU로 전달
- CPU는 메인보드의 ROM BIOS를 메모리에 로드 후, ROM BIOS 실행함.
3. POST 작업 전 기본 테스트
- ROM BIOS의 부트 프로그램 실행
- POST 작업 수행을 위한 기본 테스트
- 테스트 결과 = ROM BIOS에 저장된 값. -> POST 작업 수행
4. POST 단계 (Cont'd)
1단계
- 시스템 버스에 특정 시그널을 보내 이상 유무 확인
2단계
- RTC(Real-Time Clock)/NVRAM 테스트
3단계
- 비디오 구성 요소 테스트
- 표준 출력을 통해 부팅 과정 확인 가능
4단계
- RAM 테스트
5단계
- 키보드 정상 연결 테스트
6단계
- 시스템에 연결된 모든 드라이브 테스트
7단계
- POST 결과가 RTC/NVRAM에 저장된 값과 일치하는지 확인
8단계
- 추가적인 BIOS(SCSI, VGA 등) 로드
5. MBR 로드
- 저장매체의 첫 번째 섹터인 MBR(Master Boot Record) 로드
MBR 역할
- 파티션 테이블에서 부팅 가능한 파티션 검색
- 부팅 가능 파티션 O : 해당 파티션의 VBR(Volume Boot Record)로 점프
- 부팅 가능 파티션 X : 오류 메시지 출력
6. VBR 로드
- MBR을 통해 부팅 가능한 볼륨을 찾으면 해당 볼륨의 첫 번째 섹터 로드
VBR의 역할
- 부트 로더를 메모리에 로드(윈도우 NTLDR)
- 부트 로더는 커널(NTOSKRNL)과 관련 컴포넌트를 로드
- 운영체제 부팅
데이터 저장
자기디스크
- 자기장의 자화반전 이용 기록
S -> N (N->S) : 0
N -> S (S->N) : 1
플래시 메모리
- 플로팅 게이트 트랜지스터로 구성된 각 셀에 데이터 저장
-플로팅 게이트가 전자를 갖고있을 때는 전류가 흐르지 않고 반대의 경우는 전류가 흐름
광학디스크
- 폴리카보네이트 색소 중에 레이저를 이용해 기록
데이터 전송
유선
무선
- 무선 신호(주파수)를 이용한다는 것만 바뀔 뿐 유선 방식과 동일함.
대역폭
AM
- 530~ 1600 KHz 주파수 대역을 채널 간격 10KHz의 108개 채널로 분할한 방송
- 사용 주파수 : 중파(MF)
- 대역폭 : 9 KHz
FM
- 88~108MHz 주파수 대역을 이용
- 사용 주파수 : 초단파
- 대역폭 200 KHz
Common Boot Process
1. ROM BIOS 부트 프로그램 (boot program, bootstrap) 로드
- 전원 버튼 클릭
- 전원공급기는 외부 전압을 시스템에서 사용 가능한 전압으로 변환
- 변환된 전기 흐름은 CPU로 전달, CPU의 이전 값들을 지우고 PC(Program Counter) 초기화 (보통 0xF000)
- 초기화 값 = 메인보드 ROM BIOS의 부트 프로그램 주소 값
2. POST(Power On Self-Test) 작업 수행을 위한 기본 테스트
- 부트 프로그램은 먼저 CPU 이상 유무 테스트
- POST 작업 수행을 위한 기본 테스트 수행
- 테스트 결과가 ROM BIOS 에 저장된 값과 일치하면 POST 작업 수행
3. POST - 1단계 : 시스템 버스 테스트
1. 시스템 버스가 정상적으로 동작하는지 확인하기 위해 시스템 버스에 특정 시그널을 보냄
2. 테스트가 이상 없다면 다음 단계
4. POST - 2단계 : RTC(Real Time Clock) 테스트
- RTC는 시스템의 전기적 신호를 동기화하기 위한 클럭
5. POST - 3단계 : 시스템 비디오 구성 요소(비디오 메모리 등) 테스트
- 과정이 완료되면 비로소 표준 출력을 이용해 부팅 과정 출력 확인 가능
6. POST - 4단계 : RAM 테스트
- RAM이 정상인가
7. POST - 5단계 : 키보드 테스트
- 정상 연결 / 눌린 키 없는지
8. POST - 6단계 : 드라이브 테스트
- 시스템에 연결된 모든 드라이브 (플로피, CD, 하드디스크 등)에 신호를 보내 정상적인지 테스트
9. POST - 7단계 : POST 결과 검사
- POST 결과가 RTC/NVRAM에 저장된 구성 값과 일치하는지
10. POST - 8단계 : 추가적인 BIOS 로드
- 추가적인 BIOS(SCSI BIOS 등)가 있을 경우, 해당 바이오스를 램으로 로드
11. MBR 로드 후 부팅 가능한 파티션 검색
- 부트 프로그램은 운영체제 로드를 위해 BIOS에 설정된 첫 번째 부팅 장치에서 MBR을 로드
- MBR의 파티션 테이블에서 검색
- 가능한 파티션의 VBR(Volume Boot Record)로 점프
12. VBR 로드
- MBR의 정보를 바탕으로 시스템 파티션(OS가 설치된)의 VBR을 메모리에 로드
- VBR에는 각 운영체제의 커널을 메모리에 로드하는 작업을 수행
DOS Boot Process
*vbr 로드 이후
1. IO.SYS 실행
- 루트 디렉토리에 존재하는 걸 메모리에 로드 한 후 실행
- IO.SYS의 서브 루틴인 SYSINT는 MSDOS.SYS 파일을 읽어 자신이 읽은 내용을 메모리에 복사함.
2. MSDOS.SYS 실행
- SYSINT가 실행시킴
- 기본 장치 드라이버 초기화, 시스템 장치들 상태 점검
- 기본적인 DOS 실행환경 설정 및 DOS 파일 시스템 수행
3. COMMAND.COM 실행
- SYSINT는 CONFIG.SYS 읽어 관련 내용을 수행함.(하드웨어 장치 드라이버/확장 메모리 관리자를 메모리에 로딩함)
- SHELL 상태가 이미 존재한다면 수행, 존재하지 않는다면 기본 매개변수를 가지는 기본 쉘(COMMAND.COM) 실행
- COMMAND.COM은 기존 SYSINT 메모리 영역에 덮어써지므로 SYSINT는 종료됨.
4. AUTOEXEC.BAT 수행
- 이 배치 파일이 존재한다면 COMMAND.COM에 의해 수행됨.
- 경로 설정, 사운드 카드 설정, 기타 환경변수 설정 등 부가적인 설정
- 만약 없다면 COMMAND.COM은 DATE, TIME 명령어를 실행하고 카피라이트 메시지를 출력
5. 깜빡이는 DOS 프롬프트 확인 가능
Windows NT/2000/XP Boot Process
1. NTLDR
- VBR 2번째 섹터의 NTLDR(NT Loader)의 위치 정보를 읽어 로드
- 파일 시스템 초기화
- BOOT.INI 파일을 읽어 부트 초기화 설정 및 부트 메뉴(F8) 설정
- SCSI 드라이버에 추가적인 파일 (NTBOOTD.SYS)이 있다면 수행
2. NTDETECT
- NTLDR은 하드웨어 탐지를 위해 NTDETECT.COM 로드
- 현재 설치된 하드웨어 구성요소들 정보 수집
- 수집된 정보를 HEKY_LOCAL_MACHINE\HARDWARE에 유지 (메모리에 존재)
- 하나 이상의 하드웨어 프로필이 존재할 경우, 현재 하드웨어와 프로필이 맞는지 확인한 후 프로필 수행 (프로필/구성 복구 메뉴)
3. NTOSKRNL
- 하드웨어 구성 선택이 완료되면 NTLDR에 의해 NTOSKRNL.EXE (NT OS Kernel) 로드
- 커널, Hardware Abstraction Layer(HAL.DLL), 시스템 레지스트리, 드라이버, TCP/IP 등 로드
- Phase 0
- Microkernel 자체 초기화, Executive subsystem 초기화
- Phase 1
- Object Manager, Executive, Microkernel, Security Reference Monitor, Memory Manager, LPCS, I/O Manager,
Process Manager 등 초기화
- 이 단게에서 그래픽 모드로 전환, 로딩 상태바 표시
4. SMSS
- 기본적인 초기화가 완료되면 Session Manager (SMSS.EXE) 로드
- 추가적인 레지스트리, Win32 subsystem(WIN32K.SYS)를 수행하기 위한 환경 구성 정보 로드
5. WINLOGON
- WINLOGON.EXE 파일을 로드 -> Local Security Authority (LASS.EXE) -> 로그인 화면
- 성공적으로 로그인할 경우 현재 상태를 HEKY_LOCAL_MACHINE\SYSTEM\LastknownGoodRecovery에 갱신
- 로그인을 수행하면 Plug and Play에 의해 새로운 장치 검사, DRIVER.CAB에서 드라이버 마운트
Windows Vista/7 부팅 절차
1. BOOT MANAGER
- NT Boot Sector의 BOOTMGR.EXE 위치 정보(system32, system32/boot)를 기반으로 로드
- 자신의 체크섬 계산 후 0x400000에 매핑
- 32비트 BmMain() 함수 수행
- 하이버네이션(Hibernation) 상태일 경우, WINRESUME.EXE 로드
- 64비트 시스템이라면 CPU를 64비트 모드로 전환
2. WINLOAD
- Boot Manager에 의해 부트 로더인 WINLOAD.EXE 로드 (NTLDR과 비슷한 기능)
- 부트 로더에 의해 NTOSKRNL.EXE, HAL.DLL, 부트 드라이버, 시스템 레지스트리 등이 로드
3. NTOSKRNL
- OslArchTransferToKernel을 사용하여 커널로 제어를 전환
- NTOSKRNL.EXE를 2단계의 시스템 초기화
- Phase 0
- 커널 자체를 초기화 -> HallInitializeBios 호출 -> 디스플레이 드라이버 초기화 -> 디버거 시작 -> KillInitializeKernel 호풀
- Phase 1
- Phase1InitializationDiscard -> HallInitSystem -> ObInitSystem -> ASLR set -> PsInitialiSystemProcess 호출 -> StartFirstUserProcess
- 이 단계에서 그래픽 모드로 전환, 로딩 상태바 표시
4. SMSS -> 위와 동일
5. WINLOGON
- SMSS.EXE에 의해 WINLOGON.EXE 로드
- 사용자 세션 프로세스 생성, 서비스 시작, 장치 드라이버 로드, Local Security Authority Subsystem(LSASS.EXE) 로드
Linux 부팅 절차
1. BOOT LOADER
- Linux Loader(LILO)와 Grand Unified Bootloader(GRUB) 부트 로더가 존재 -> GRUB이 대세
- /etc/grub.conf 또는 /boot/grub/grub.conf에서 부트 메뉴와 로드 과정 설정
- 초기 부트 메뉴를 보여 준 후 리눅스 커널 로드, 초기 RAM 디스크 로드
- 커널을 로드하는 역할이 주 목적이어서 커널 로드 라고도 불림
2. kernel & initrd LOAD
- 부트 로더에 의해 커널 이미지와 initrd 이미지가 로드
3. BSS(Block Started by Symbol) & Decompress
- 커널 이미지 앞 부분의 간단한 하드웨어 검사 루틴 실행
- 기본 환경을 설정하고 BSS 초기화
- 실제 커널 데이터 압축 해제
4. PID - sawpper process
- 프로세스 ID 0번인 swapper 프로세스가 실행되고 페이지 테이블을 초기화하여 메모리 페이징 수행
- CPU 유형과 FPU(Floating-Point Unit 검사)
5. PID 1 init process
- 사용자 공간 프로세스로 기본적인 사용자 환경 구성
- /etc/inittab 의 환경 설정 파일의 부팅 레벨에 따라 사용자 환경 구성
'디지털 포렌식' 카테고리의 다른 글
디지털 증거 획득, 증거 수집 방안 (0) | 2022.11.29 |
---|---|
[DFC 2021] 206 - Secret Message (0) | 2022.11.22 |
메모리 포렌식 (0) | 2022.11.18 |
DFC 2022 [101] shellcode payload (0) | 2022.11.08 |
디지털 포렌식 기초 1주차 (0) | 2022.11.01 |