SystemHack

윈도우 운영체제 구조

윈도우 운영체제 구조

윈도우 NT 아키텍쳐

  • 커널모드와 유저모드의 두 가지 메인 구성요소로 설계
  • 자원낭비를 줄이기 위해 여러 부분으로 쪼개어 설계됨


윈도우 Ring 구조

  • 각 계층을 구분하여 운영, 시스템의 보안수준을 높은 상태로 유지하기 위해 고안됨.

커널모드

  • 하드웨어 ~ 각종관리자
  • 사용자가 "직접" 접근이 불가능한 영역. 프로그램을 실행하는 기본 관리 시스템이 위치함.
  • 커널 : 운영체제의 중심에 위치함으로써, 운영체제의 핵심 기능들을 제공하고, 하드웨어를 비롯한 각종 장치들의 제어를 담당함.
  • 하드웨어
  • HAL (Hardware Abstraction Layer) : 하드웨어 - 소프트웨어간 원할한 통신을 위한 역할. 윈도우의 기본 표준역할을 하기때문에 새로운 하드웨어가 시스템에 추가되어도 HAL 표준만 지키면 된다.
  • 마이크로 커널 : 스케쥴링, 메모리 관리, 데이터 입출력, 하드웨어 제어 등의 작업들을 여러 관리자로 넘기고 최소한의 기능만 남긴 커널.
  • 각종 관리자 : 커널이 담당하던 다양한 기능들을 각각의 관리자들이 나누어서 담당.

사용자 모드

  • 응용 프로그램
  • 사용자가 접근이 가능한 영역
  • 필수 서브시스템과 환경 서브시스템으로 구성, Ring 3 모드에서 동작함.
    • 필수 서브시스템 (Integral Subsystem) : DLL로 구현된 서비스 구성
      • 보안 : 보안과 관련된 내용들
      • 워크스테이션 서비스 : SMB 프로토콜을 사용하여 원격 서버에 대한 클라이언트 네트워크 연결을 만들고 유지함
      • 서버 서비스 : 파일, 인쇄 및 명시된 파이프들을 네트워크를 통해 공유할 수 있게 지원
    • 환경 서브시스템 (Environment Subsystem) : 여러 환경에 맞는 어플리케이션을 운용할 수 있도록 지원
      • win32 서브시스템 : 32비트 으용프로그램 동작을 위한 사용자 인터페이스를 제공.
      • OS/2 서브시스템 : 현재는 지원X. OS/2 전용 응용프로그램에서 사용
      • POSIX 서브시스템 : 유닉스 운영체제에 쓰였던 인터페이스 규격
      • NTVDM - NT Virtual DOS Machine : 32비트 운영체제에서 16비트 응용프로그램을 실행

리눅스의 구조와 비교

  • 하드웨어 : 물리적인 장치
  • 커널 : 운영체제 핵심 기능들이 실행됨, 쉘에서 전달된 명령을 통해 하드웨어장치를 조작/제어함.
  • 쉘 : 사용자의 명령을 커널에 전달하는 역할
  • 유저 : 응용프로그램들이 실행되는 영역

커널 오브젝트

커널이 실행될 때 커널이 제어할 부분에 대한 정보를 담을 메모리 블록이 필요한데, 이때 사용되는게 커널 오브젝트이다.

  • 커널에 의해 관리되는 리소스 정보를 남고있는 데이터 블록
  • OS가 하드웨어를 제어할 때 , 제어에 사용되는 리소스에 대한 커널의 제어 단위
  • 프로세스 실행 → 해당 프로세스에 대한 커널 오브젝트 생성 → 커널 오브젝트를 통해 응용프로그램이 커널이 관리하는 리소스에 접근 가능.
  • 시스템의 핵심기능인 프로세스, 스레드, 동기화, 드라이버, 메모리 관리등의 기능을 제공
  • 응용프로그램은 커널 내부구조로 접근할 수 없음 → API를 이용하여 커널 오브젝트를 사용함

커널 오브젝트의 종류

  1. 파이프 커널 오브젝트
  2. 프로세스 커널 오브젝트
    • CreateProcess 함수 호출로 프로세스의 생성이 요청 → OS가 요청 수락 → 프로세스가 생성→ 프로세스 정보를 포함하는 커널 오브젝트 생성
  3. 쓰레드 커널 오브젝트

핸들

  • 커널 오브젝트를 응용프로그램으로 조작하기 위해 사용됨

커널오브젝트의 생성

  • Create ~ 로 시작되는 API함수로 각종 커널 오브젝트를 생성
  • 대부분의 경우 성공적으로 수행시 생성된 오브젝트에 대한 HANDLE을 반환함.
  • 유효한 HANDLE을 사용해야 커널 오브젝트를 사용할 수 있음

커널 오브젝트의 소멸

  • CloseHandle API를 호출하여 운영체제에 커널 오브젝트의 사용이 끝났음을 통보

정리

  • 프로그램이 운영체제에 실행 요청 시 프로세스가 실행되며 커널 오브젝트가 생성됨
  • 새로 실행되는 프로세스에 생성된 커널 오브젝트의 핸들 정보가 전달됨
  • 프로세스가 가지고 있는 핸들 정보를 통해 커널 오브젝트에 접근/조작이 가능함.
  • 운영체제 위에서 프로세스가 실행됨 → 운영체제와 커널 오브젝트가 동일한 메모리 공간을 사용함 → 핸들을 이용해 프로세스(응용프로그램)이 메모리에 접근할 수 있음.

참고 자료

https://m.blog.naver.com/lastime1650/221967604976

https://dr4g0n.tistory.com/entry/윈도우의-이해

https://wiserloner.tistory.com/668 - 커널 오브젝트

https://debugjung.tistory.com/entry/Windows-Kernel윈도우즈-커널 - 커널 오브젝트