반응형
Windows는 기본적으로 여러 사용자가 동시에 사용할 수 있는 운영체제이다. 따라서, 운영체제가 동작하고 있는 동안 여러 사용자와 관련된 프로세스가 유지된다. 그런데, 이들 프로세스 상호간에 일반적인 통신이 가능하다면, 전반적인 시스템 보안에 문제가 생기게 된다. 가령, 철수의 프로세스와 순이의 프로세스가 통신할 수 있다면 프로세스 사이의 데이터 교환으로 인해 철수의 암호나 기밀문서와 관계된 여러 정보들이 순이의 프로세스로 이전될 수 있다. 악성 코드를 사용한 프로그램의 경우 프로세스간 통신을 악용하여 기밀 정보를 빼 갈 수 있다.
이벤트 핸들링 방식의 윈도우 프로그램은 특정 이벤트에 따라 동작하도록 되어 있기 때문에 이러한 이벤트가 영향을 받지 않는 가상적인 테두리가 필요하다. 보통 서버 프로세스에 별 영향을 미치지 않는 네트워크 로그온 세션을 제외하고는 사용자의 로컬 로그온 세션과 그에 관계되는 시스템 로그온 세션 내의 일부 프로세스, 배치 작업이나 서비스로의 로그온을 허용받은 시스템 이외의 로그온 세션들은 상호간 격리되어 있어야 한다.
윈도우 스테이션은 사용자들의 운영 환경을 캡슐화한 하나의 단위로 흔히 정의된다. 일반적으로 배치 작업으로의 로그온 세션, 시스템 서비스를 제외한 서비스로의 로그온 세션은 하나의 윈도우 스테이션으로 간주되며, 시스템 로그온 세션 중 LSASS, RPCSS 등이 독립적으로 하나의 윈도우 스테이션을 형성한다. 가장 독특한 윈도우 스테이션은 Winsta0라는 이름의 인터액티브 로그온 세션이며, 로컬 로그온을 한 사용자에게만 발생된다. Winsta0 로그온 스테이션은 인터액티브 로그온에서만 생성된다. 그런데 하나의 Windows 2000 시스템에서 로컬 로그온은 단 하나만 형성되므로 Winsta0 스테이션 역시 단 하나만 형성되게 된다(터미널 서비스의 경우 터미널 세션이라는 새로운 개념을 도입하여 Winsta0를 각 세션별로 하나씩 생성하는 방법론을 사용한다. 따라서, 터미널 서비스가 동작할 경우 일반적인 Windows NT의 보안 구조와는 조금 다른 특유의 구조가 형성되며, 터미널 세션별로 시스템 프로세스 중 Winsta0에 해당하는 프로세스들을 동작시키게 된다. 이에 대해서는 뒷 장에서 따로 설명하도록 한다.) Winsta0 스테이션은 CSRSS, WINLOGON 등의 TCB 특권을 지닌 서비스와 사용자 로그온 세션과 그에 해당하는 프로세스들의 묶음으로 볼 수 있다.
스테이션의 개념이 존재하지 않는다면 배치 작업으로 로그온 된 세션이나 서비스로 로그온 된 세션에서 로컬 로그온 세션에 대한 이벤트 핸들을 읽을 수 있게 되므로 악의적인 프로그램으로 다른 사용자의 로그온 세션에 해당하는 프로세스에서 정보를 읽어들일 수 있다. 윈도우 스테이션은 이런 세션 사이의 통신을 근본적으로 차단하는 역할을 한다.
그런데, 보편적인 TCB 특권을 사용하게 되면, 이러한 스테이션 사이의 정보 전달 차단을 무력화시킬 수 있다. 보통 특별한 프로그램적인 목적 때문에, Winsta0 스테이션에서 동작하는 사용자들의 이벤트를 읽어들일 수 있는 서비스를 제작할 수 있으며, 이 경우 TCB 특권을 통한 Winsta0의 이벤트를 읽을 수 있도록 로그온 옵션을 조정해 주어야 한다. 서비스 로그온을 설정하는 다음 그림에서 계정 로그온 옵션 뒤에 추가로 첨가되는 서비스와 데스크톱 상호 작용 허용이라는 옵션이 TCB 특권을 사용하여 Winsta0의 이벤트를 읽도록 설정하는 것이다.
대부분의 서비스는 서비스 고유 계정에 의해 로그온되며, 이들은 Winsta0 스테이션과는 이벤트를 주고받지 못한다. 따라서 서비스는 인터액티브 로그온 세션을 가진 사용자와 대화 상자 등의 방법으로는 통신할 수 없다. 인터액티브한 사용자의 입력을 기다리는 대화 상자가 존재하는 서비스 코드를 사용했다면 스테이션 사이의 장벽에 가로막혀 서비스는 올바로 동작하지 못하고 계속 사용자의 입력만을 기다리게 될 것이다
반응형

+ Recent posts