시스템 프로세스

By 01/11/2018Windows Internal

시스템 프로세스

  • Windows Server 2008

 

윈도우에는 여러 가지 시스템 프로세스들이 존재하며 다음 프로세스는 모든 윈도우 시스템에 존재 한다.

  • 유휴 프로세스 (유휴 CPU 시간을 계산하기 위해 CPU당 하나의 스레드를 보유)
  • 시스템 프로세스(대부분의 커널모드 시스템 스레드를 담고 있다.)
  • 세션 관리자(Smss.exe)
  • 로컬 세션 관리자(Lsm.exe)
  • 윈도우 서브 시스템(Csrss.exe)
  • 세션 0 초기화 (Wininit.exe)
  • 로그온 프로세스(Winlogon.exe)
  • 서비스 컨트롤 관리자(Services.exe)와 생성한 자식 서비스 프로세스(시스템이 제공하는 일반 서비스 호스트 프로세스.Svchost.exe와 같은 것.)
  • 로컬 보안 인증(Lsass.exe)

 

각 프로세스들이 어떤 작업을 하는지 알아 보자.

 

[유휴 프로세스]

시스템 유휴 프로세스는 유휴 CPU 시간을 계산하기 위해 CPU당 하나의 스레드를 가지고 있다. 프로세스는 이미지 이름으로 식별하지만 유휴 프로세스는 실제 유저 모드 이미지를 실행하지 않는다. 또한 이 프로세스의 이름은 유틸리티마다 다르게 보인다.

 

(작업 관리자)

 

유틸리티 프로세스 ID 0의 이름
작업 관리자 System Idle Process
Process Status(Pstat.exe) Idle Process
Process Explorer(Procexp.exe) System Idle Process
Task List(Tasklist.exe) System Idle Process

 

 

[인터럽트와 DPC]

Interrupts와 DPCs로 나타나며 서비스 인터럽트와 지연된 프로시저 호출로 소비된 시간을 나타낸다. 이들은 CPU 시간에 대한 설명을 하기 때문에 어떤 프로세스에 속해 있지는 않다. 작업관리자는 시스템 유휴 시간에 인터럽트와 DPC 시간을 포함시킨다는 점에 유의하자. 따라서 작업 관리자를 사용할 때 다량의 인터럽트 활동이 있는 시스템은 유휴로 나타날 것이다.

 

[시스템 프로세스와 시스템 스레드]

시스템 프로세스(프로세스 ID 4)는 커널 모드에서만 동작하는 특별한 스레드(커널모드 시스템 스레드)의 집과 같은 곳이다. 시스템 스레드는 일반 유저모드 스레드의 모든 속성과 컨텍스트를 가진다. 그러나 Ntoskrnl.exe나 다른 어떤 로드된 디바이스 드라이버에 있는 시스템 공간에 로드된 커널 모드 실행 코드만을 동작시킨다는 차이가 있다.

 

시스템 스레드는 커널모드에서만 호출 할 수 있는 PsCreateSystemThread 함수에 의해 생성된다. 윈도우는 다양한 디바이스 드라이버와 마찬가지로 시스템을 초기화 하는 동안 I/O나 객체를 발생하거나 대기하거나 디바이스 폴링 같은 스레드 컨텍스트가 요구되는 동작을 수행하기 위해 시스템 스레드를 생성한다.

 

기본적으로 시스템 스레드는 시스템 프로세스에 의해 소유된다. 그러나 디바이스 드라이버는 어떤 프로세스에라도 시스템 스레드를 생성할 수 있다. 개별 시스템 스레드의 실행을 드라이버나 코드를 담고 있는 서브루틴으로 맞출 수 있어 문제 해결이나 분석 시 매우 용이하다.

 

 

[세션 관리자(Smss)]

세션 관리자(%SystemRoot%\Smss.exe)는 시스템에서 생성되는 첫 번째 유저모드 프로세스다. 익스큐티브와 커널 초기화의 마지막 시기를 수행하는 커널모드 시스템 스레드는 실제 Smss 프로세스를 생성한다.

 

레지스트리에 있는 Smss의 초기화 절차를 조정하는 구성 정보 중 대부분은 HKLM\System\CurrentControlSet\Control\Session Manager 아래에서 찾을 수 있다.

 

Smss는 유저 세션도 생성한다. 첫 번째 대화식 유저 세션(콘솔 세션)을 생성할 때 또는 세션을 생성하라는 요청을 받았을 때 Smss는 세션 내에 자신의 사본을 생성한다. 자신에 대한 병렬 사본을 가짐에 따라 부트 업과 터미널 서비스 세션 생성이 되는 동안 Smss는 동시에 다중 세션을 생성할 수 있다. 이는 동시에 다중 사용자가 접속하는 터미널 서버 시스템에서 로그온 성능을 향상 시킨다. 세션이 초기화를 마치면 Smss의 사본은 종료되며 초기 Smss.exe 프로세스만 활성 상태로 남는다.

 

 

[Winlogon, LogonUI, LSASS, Userinit]

윈도우 로그온 프로세스(%SystemRoot%\Winlogon.exe)는 대화식 유저 로그온과 로그오프를 처리한다. 로그온 프로세스의 식별과 인증 부분은 자격 증명 제공자(credential providers)라고 부르는 DLL을 통해 구현된다.

 

Winlogon은 시스템이 의존하는 중대한 시스템 프로세스이므로 자격 증명 제공자와 로그온 대화상자를 나타내는 UI는 LogonUI라고 하는 Winlogon의 자식 프로세스 내부에서 실행 된다. Winlogon이 SAS를 탐지하면 자격증명 제공자를 초기화하는 이 프로세스를 실행한다. 사용자가 자격 증명을 입력하거나 로그온 인터페이스를 해제하면 LogonUI 프로세스는 종료 된다.

 

사용자 이름과 비밀번호가 캡처되고 나면 인증 받기 위해 로컬 보안 인증 서버 프로세스(%SystemRoot%\Lsass.exe)로 보내진다. LSASS는 액티브 디렉터리나 SAM에 저장되어 있는 것과 비밀번호가 일치하는지와 같은 실제 검증을 수행하기 위해 적절한 인증 패키지(DLL로 구현되어 있음)을 호출 한다.

 

인증이 성공하면 LSASS는 사용자의 보안 프로파일을 담고 있는 접근 토큰 객체를 생성하기 위해 보안 참조 모니터의 함수를 호출 한다. 유저 액세스 컨트롤(UAC)이 사용중 이라면 사용자가 관리자 그룹이거나 관리자 특권을 갖고 있다면 LSASS는 두 번째 토큰의 제한된 버전을 생성한다. 그리고 나서 이 접근 토큰은 사용자의 세션에 초기 프로세스를 생성하기 위해 Winlogon에 의해 사용 된다.

 

 

[서비스 컨트롤 관리자(SCM)]

서비스 컨트롤 관리자는 서비스 프로세스에 대한 시작과 중지, 상호작용에 대한 책임이 있는 %SystemRoot%\Services.exe 이미지를 실행하는 특별한 시스템 프로세스다.

 

서비스 프로그램은 실제로 서비스의 성공적인 시작이나 상태 요청에 대한 응답, 일시 중지, 서비스 종료 같은 동작을 수행하기 위해 서비스 컨트롤 관리자와 상호작용하는 특별한 윈도우 함수를 호출하는 단순한 윈도우 이미지다.

 

[제어판] – [관리도구]를 선택한 후 [서비스]를 선택하면 설치된 서비스를 확인 할 수 있다.

 

[참고자료]

Windows Internals

 

OS, Windows, 윈도우아키텍처, Windowsinternals, OS아키텍처, 윈도우서버, WindowsServer, 윈도우커널, 시스템프로세스, Winlogon, sqlmvp, SQL Angeles

Leave a Reply