이번 내용은 Terminal Service 이용시에 Session 접속이 어떻게 이루어 지는가에 대해서 자세히 살펴 보려고 한다. 해당 내용은 순하게 RDP Session만 다루는 것은 아니며, CPS (Citrix Presentation Server) 접속 또한 같이 확인해 보려고 한다.

기본적으로 Terminal Service는 RDP Protocal을 이용해 Data 송수신, Server와 Client 간에 변경내역에 대한 정보를 주고 받는다.

image

즉, Client 는 Physical한 마우스와 키보드의 위치 정보값을 전달하면 Server쪽에서는 해당 위치값을 처리하며, 가상 마우스와 키보드의 값을 매핑하여, 입력처리를 하며, 이에 대한 결과값을 서버에서 RDP Graphic Driver를 이용하여(RDPDD.dll) Client에 있는 Win32 Graphic API를 이용함으로써 결과값을 전달받게 된다. CPS서버에서는 Client 와 Server 통신시 이용되는 Protocol을 ICA Protocol을 이용해서 전달(1494)을 하며, 해당 Protocol은 Data는 전달하지 않은체, 순수하게 키보드, 마우스 정보만 송수신 하는 구조로 구성이 된다. 이부분이 RDP Protocol을 이용하는 것과의 차이라 생각되며, 보안적인 측면을 내세울 때  강조하는 면이라고 생각이 된다.

이번 Section은 Client 와 서버간의 정보 전달보다는 Client를 위해 Server에서 어떠한 동작이 이루어 지는지 살펴보려고 한다. 즉, Kernel Mode에서 동작을 확인하는 것이 아닌 User Mode상태에서 어떻게 System 사용을 위해 준비가 되는지 확인해 보려고 한다. (단, 내용에 오류가 있는 부분도 있을 것이라 생각되오니, 수정할 부분이 있으면, 덧글을 달아 주시길....)

 

[참고] LPC 통신 - http://technet.microsoft.com

LPC (자체 프로시저 호출, Local Procedure Call)는 Windows NT 4.0 및 Windows 2000에서 제공되는 메시지-전달 서비스로 쓰레드 (thread)와 프로세스 간의 통신을 지원합니다. 클라이언트 프로세스가 서버 프로세스에서 제공되는 서비스들을 요청할 필요가 있을 때마다, 2개의 프로세스가 서로 통신할 방법이 있어야 합니다. 즉 클라이언트 프로세스 입장에서는 서버에 대한 요청 생성, 서버 입장에서는 클라이언트에 대한 응답 내용 전송, 또한 각기 상호간의 상태를 결정할 방법이 있어야 합니다. 클라이언트와 서버 프로세스가 서로 다른 기기에 위치하고 있을 때, RPC (Remote Procedure Call)이 사용됩니다. 반면 이들이 동일 기기에 위치할 때에는 LPC를 이용할 수 있습니다.

LPC 이용을 통해 얻을 수 있는 장점은 속도가 빠르다는 것입니다. 프로세스들이 동일 기기에 위치하기 때문에, 통신 속도를 높이기 위한 확실한 효율성을 확보할 수 있습니다. 예로, LPC 하에서 두 프로세스는 상호간에 메시지를 전달하기 보다는 공유 메모리 세그먼트를 통해 통신할 수 있습니다. 즉 하나의 프로세스가 공유 세그먼트에 메시지를 두고 상대측에 신호를 보내면 상대측은 공유 세그먼트로부터 메시지를 읽어 들입니다.

image

 

[참고] LPC Port - http://www.zezula.net/en/prog/lpc.html

 

image

  • Connection Port : Connection응답에 사용되며, Server쪽에서 발생되는 통신 Port
  • Server Communication Port : 새로운 Session 통신이 이루어지거나, 연결이 종료될 때 사용됨
  • Client Communication Port : 메세지 송수신 역확을 하는 Port

 

● Terminal Service 이용시 Process간 상호관계

 

  Client 에서 Terminal Server로 접속 요청을 할 경우 과연 서버에서는 무슨일이 일어나는 것일까? Windows 초기 구동 순서에서도 한번 알아 보았지만. Server 쪽에서도 가장먼저 동작하는 주요 Process은 바로 Session Manager Process이다.

image

HKEY_LOCAL_MACHINE\SYSTEM\CCS\Control\Session Manager 아래에 있는 내용을 중심으로 .해당 Module들이 순차적으로 Load되게 된다. 최초, Termsrv.dll (Terminal Service Driver)에서 LPC 통신을 통해 SMSS.exe를 오출하게 되며, SMSS.exe는 Session을 생성하게 되며, 메모리 상에 Session 공간 할당, Device 사용을 위한 Symbolic Link를 생성한다.(예를들면, CMD창 사용 및 COM Port Mapping) 메모리 공간에 상주하는 주요 내용은 Session Paged Pool, Win32K.sys에 의한 Session Data Structure가 메모리 공간에 상주되게 된다. 이후에는 Winlogon.exe와 CSRSS.exe를 실행시키게 되며, LPC Port또한 할당을 한다. 이것과 상세한 내용은 위에 Link 되어 있는 "Windows 초기 구동 순서" 부분에 상세히 명시하였다.

 

● Xen APP 이용시 Terminal Service Architecture

 

  MS의 일반적인 접속 방법을 이해한다면, 이번 Section에서 다루려고 했던 CPS서버와의 연관도에 대해 지금부터 알아보려고 한다. 위에 명시된 내용처럼 초기 구동에 대한 내용은 동일하다. 이후 Winlogon.exe나 CSRSS 이후 진행되는 Logic에서 어떠한 v패턴으로 접속이 진행되는지 살펴 보도록 하자.

image

 

먼저 CSRSS.exe (Client Server Runtime Subsystem) 프로세스 동작에 대해 알아보자. CSRSS.exe가 기동되면서 발생되는 Action은 Process List 초기화, Desktop, Console,. Terminal Service Request, Spooler등등의 Thread들이 시작되게 된다. 이후 GDI 객체 사용을 위한 Win32K.sys를 통한 Citrix Video Driver인 vdtw30.dll을 Load하게 된다. Citrix 기술문서를 보다보면, CSRSS.exe Process과점유 현상이나 Zombie성 Session이 발생하는것을 볼 수 있다. 이때 Process Explorer나 Dump를 보면 주로 vdtw30.dll에서 Lock을 유발하는것을 확인하는 경우가 있는데 막연히 Citrix Graphic Driver 에서 걸리는 구나...하는것보다는 위와 같이 정리를 통해서 살펴보면 좀 더 이해하기가 쉬울 것이라 판단된다.

 

Winlogon.exe에 동작해 대해 알아보자. 이미 로긴을 진행한 상태이기 때문에 User ID와 PW는 Capture되어 Lsass.exe(Local Security authentication Server Process)로 승인을 받게 된다. AD나 SAM에 계정비교를 한 이후 Security reference monitor(LPC통신을통하여) User에게 Ticket을 발급하게 되며(Users Security Profile) 이후 이는 Session 내 Process를 초기화 하는데 사용이 된다.

 

이번에는 초기 구동에 대해 알아보았다. 앞으로 실제적으로 Registry값 확인을 통한 이후 Module에 대해서 알아보야 하겠지만, 이부분은 다음으로 넘겨야 할 듯 하다. 이후 wfshell.exe 등의 기동 관계, 등등을 다음 포스팀 내용으로 채택할 예정이다.

신고
Posted by hotpoto

티스토리 툴바