디지털 포렌식

부팅과 데이터 저장/전송 & 부팅 절차

kchabin 2022. 11. 8. 18:51

부팅 절차

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