IT 그리고 정보보안/Knowledge base

윈도우 클라이언트-서버 런타임 서브시스템 (csrss.exe)

plummmm 2021. 4. 13. 06:53
반응형

이번에 할 내용은 Csrss.exe 이다. Smss.exe가 로드하는 3개의 서브시스템 중 하나.

Client - Server Runtime SubSystem 의 약자다이다. ss가 약자면 다 서브시스템인 모양이다.

윈도우 서브시스템 이라고도 불리며, 프로세스와 스레드를 관리하는 역할을 한다.

이것도 네이티브 어플리케이션이다.

 

Csrss는 실행시에 Basesrv.dll, Winsrv.dll, Csrsrv.dll을 로드하여

콘솔 윈도우 처리, 프로세스와 스레드 생성과 삭제, 16비트 가상 DOS머신 프로세스를 위한 기능 일부 및

SxS(Side by Side)를 지원한다.

 

Basesrv.dll : BaseServerApiDispatchTable

Winsrv.dll : ConsoleServerDispatchTable, UserServerApiDispatchTable

Csrsrv.dll : CsrServerApiDispatchTable

 

일단 또 그림을 보자. 프로세스 생성과정을 보면 csrss가 하는 역할을 좀더 이해할 수 있다.

 

 

쉽게 프로세스와 스레드 관리하는 프로세스라고보면됨..

Csrss에 관한 정보는 아래 그림에 있는 경로에서 확인가능함.

 

레지스트리에 저장된 값 데이터는 아래와 같음. 참고

%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,20480,768 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ServerDll=sxssrv,4 ProfileControl=Off MaxRequestThreads=16

 

그리고 Csrss는 다른 서브시스템들과 빠른 통신을 위해 레지스트리 ServerDLL에 등록된 DLL을 통하여

LPC로 처리를 하게 된다. LPC가 뭘까?? (Desktop Heap 이란 개념도 이해 해야하는 이건 다음에 다루도록 함.)

 

LPC (Local Inter-Process Communication)

응용 프로그램이 Csrss와 통신할 때, 

SRM( Security Reference Monitor's) 및 Winlogon이 Lsass와 정보를 주고 받을 때,

서로 다른 구조에서 빠륵속도로 데이터 교환을 하고자 할 때 사용된다.

 

윈도우 비스타 이후로는 강제로 동기화 시키던 LPC방식을 비동기화로 바꾸었따.

이걸 ALPC 라고함. (A는 Asynchronous)

 

이거랑 비슷한 RPC(Remote Procedure call) 이 있는데, 이건 네트워크 상으로 서로 다른 기기로 위치 중일때

사용되는 통신 방식이다.

 

LPC에 사용되는 API와 처리 흐름에 대한 그림을 보자.

쉽게 보자. 클라이언트는 요청하는 쪽, 서버는 제공하는 쪽.

아래는 LPC에서 사용하는 Native API들이고, 얘내들을 이용하여 통신을 한다.

Ntdll.dll과 Ntoskrnl.exe에서 제공하고 응용프로그램에서 직접 LPC를 사용할 수 없다.

 

분석할 때 참고하면 될 것 같 습 니 당

Windbg에서 LPC상태를 확인할 수 있는 명령어가 있는데.. 한번 해봅시다.

 

위에 노란색 친 부분은 !lpc 명령 파라미터임.

아래는 lpc를 사용중인 스레드를 출력한 화면.

반응형