※부팅과정(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\"에 등록된 프로그램 실행
※ 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는 다음의 레지스트리 값을 가지는 프로그램을 실행한다.
내용이 너무 두서없이 진행된것같군욥ㅠㅠ 이후 조금씩 수정하겠습니다. 또 틀린내용있으면 알려주세요~!!!
'Security > Windows System' 카테고리의 다른 글
※PEB(Process Environment Block)란? (0) | 2017.08.21 |
---|---|
※TLS(Thread Local Storage)란? (0) | 2017.08.21 |
MBR부팅과정 디버깅 (0) | 2017.08.08 |
IRQL(Interrupt Request Level)-동기화방법(2) (0) | 2017.08.03 |
IRQL(Interrupt Request Level)이란?(1) (0) | 2017.08.03 |
댓글