본문 바로가기
Security/Windows System

윈도우 부팅과정(Windows Boot Process)

by Winduck 2017. 8. 21.
반응형

 

※부팅과정(Windows Boot Process)

 

 : 부팅 전체적인 그림은 다음과 같습니다.

 

 

 

1. Run BootManager

 

BIOS Firmware

 

 - POST : 부팅시 가장 먼저 동작. 하드웨어를 점검합니다.

 

 - Load Boot Manager :  디스크의 첫번째 섹터인 MBR(Master Boot Record) 부터 파티션 테이블을 검색하여 부팅가능한 파티션의 VBR(Volume Boot Record) 읽습니다.

 

VBR 16bit Boot Manager(%System-Drive%\bootmgr) 프로그램을 읽습니다. 16bit코드는 (32bit/64bit)코드 앞에 붙어서 존재합니다.

 

 

 

EFI Firmware

 

 - POST : BIOS과정과 동일합니다.

 

 - Load BootCode : Boot Code 펌웨어 내부에 내장되어 있어 MBR VBR로드과정이 없습니다.

 

EFI Firmware Protected Mode 전환하여 32bit/64bit bootmgr.efi프로그램이 실행되도록합니다.

 

 

 

2. Windows Boot Manager : Read BCD(Boot Configuration Data) : 부팅구성에 필요한 Data 읽어옵니다.

 

BCD(Boot Configuration Data) :

 

하나의 Windows Boot Manager Object, 하나이상의 Windows Boot Loader Object 구성. ( 레지스트리 : HKLM/BCD00000000 , 파일(BIOS/EFI : %SystemDrive%\Boot\ %SystemDrive%\EFI\Microsoft\Boot\ )

 

 

 

Windows Boot Manager Object : Boot Manager화면의 설정값들(OS개수,부팅 도구 메뉴등) 의미합니다.

 

레지스트리 sub-key : {9dea862c-5cdd-4e70-acc1-f32b344d4795)

 

BCDEdit.exe : 실행시 identifier bootmgr에서 보여줍니다.

 

 

 

Windows Boot Loader Object : 설치된 OS 가지는 구성을 나타냅니다

 

 

 

3.Windows Boot Loader ( winload.exe,NTLDR, Winload.efi )

 

Load SYSTEM registry : HKLM/SYSTEM하위의 레지스트리를 로드

 

winload 무결성검사 로드된 이미지의 시그니쳐와 nt5.cat(%SystemRoot%\System32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\)과비교가 진행됩니다. 일치하지 않으면 종료, 디버깅활성화중이라면 경고메시지만을 보여줍니다.)

 

ntoskrnl.exe hal.dll 로드. 커널디버깅 활성화시, 다음의 kernel-mode driver 로드합니다.

 

 - kdcom.dll ( null moden cable)

 

 - kd1394.dll ( IEEE1394 cable )

 

 - kdusb.dll ( USB 2.0 debug cable )

 

 

 

 무결성검사 이후 다음의 dll들을 로드합니다.

 

 - pshed.dll

 

 - bootvid.dll

 

 - clfs.sys

 

 - ci.dll

 

 

 

로드이후 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\하위의 sub key들을 스캔하여 Start Value가 0x00000000(SERVICE_BOOT_START)를 가지는 디바이스 드라이버를 찾습니다.

 

Load Device Drvier

 

 

 

무결성 체크가 활성화 되어있다면 nt5.cat 검색된 드라이버의 디지털 서명 비교한다. 실패한다면 Boot Loader를 종료하고 디버깅활성화중이라면 경고 메시지만을 보여줍니다.

 

부트 로드가 언제 어디서 실행되는지 알고 싶다면 "Bcdedit.exe /set BOOTLOG TRUE" 통하여 확인할 수 있습니다

 

 

 

실행에 필요한 프로그램 구성요소 초기화

 

ntoskrnl.exe에서 KiSystem-Startup()실행 시, ntoskrnl.exe 주소공간에서 subsystem 구성하는 데이터들을 초기화 시킵니다.( SSDT구성,NTDLL.DLL로드등)

 

레지스트리(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\ Start == SERVICE_SYSTEM_START,Type)시스템 클래스드라이버 서비스에 대한 검사를 진행합니다.

 

드라이버 무결성 체크가 활성화 되어있다면 ci.dll에있는 무결성 루틴을 수행하여 디지털 서명을 체크한다. 실패하면 로드되지 않습니다.

 

 

 

 4. Session Manager   : Session Manager초기화

 

① "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\"에 등록된  프로그램 실행

② 환경변수 세팅 및 윈도우즈 SubSystem실행

 ※ Smss.exe로드 

  -> Win32k.sys 초기화 및 로드(VGA모드로 전환)

  ->"HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls\" Dll을 로컬 시스템 계정 하위에 로드

  -> Csrss.exe로드(Windows API를 사용가능하게 함)

  -> 세션 0(wininit.exe)과 1(winlogon.exe)을 실행

 

※Wininit.exe 실행시

 - lsass.exe실행 : local security authority subsystem

 - services.exe : Service Control Manager(레지스트리 : SERVICE_AUTO_START값을 가지는 모든 드라이버 로드)

 - lsm.exe : local session manager(원격 연결을 관리)


※Winlogon.exe 실행시

 - logonui.exe실행 : ctrl+alt+delete

 - "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\"하위 "Shell"(explorer.exe),"UserInit"(userinit.exe)값들을 실행

 - UserInit.exe는 다음의 레지스트리 값을 가지는 프로그램을  실행한다. 

 




내용이 너무 두서없이 진행된것같군욥ㅠㅠ 이후 조금씩 수정하겠습니다. 또 틀린내용있으면 알려주세요~!!!

반응형

댓글