Windows Vista SP1의 Object Manager Filtering으로 할 수 있는 일

윈도우즈 비스타 SP1에 새롭게 탑재될 Object Manager Filtering을 통해서 기본적으로 프로세스간의 상호 작용을 컨트롤 할 수 있다. 윈도우즈의 한 특징이 바로 한 프로세스가 다른 프로세스를 열거나(OpenProcess) 핸들을 복사해 올 수 있다는 것이다. 이러한 과정에서 비스타(Vista) 이전에는 권한만 있다면 아무러한 제약이 없었다. 하지만 비스타에 들어서는 아무리 권한이 많은 프로세스라도 다른 프로세스를 함부로 건드리지 못하도록 할 수 있게 되었다. 이 것은 “Object Manager Filtering”으로 구현되어 있으며, 현재 비스타(Vista) SP1 베타 시스템에 탑재되어 있다.

“Object Manager Filtering”은 원래 윈도우즈 모든 오브젝트들의 상호 작용을 컨트롤하기 위하여 설계 된 것으로 보인다. 하지만, 현재 SP1에서는 Process Thread Object에 대한 필터링만을 지원한다. 자세한 스펙은 Kernel Data and Filtering Support for Windows Server 2008 문서를 참조하면 된다. Windows Server 2008을 기준으로 작성된 문서이지만, Vista SP1에서도 그대로 적용 되는 것을 확인했다.

OB_PRE_CREATE_HANDLE_INFORMATION 문서를 읽어 보면 프로세스와 쓰레드에 대해서 어떠한 오퍼레이션을 제어할 수 있는 지를 알 수 있다.

음은 프로세스에 대한 제어 가능한 DesiredAccess 목록이다. 프로세스나 쓰레드를 생성하거나 다른 프로세스의 가상 메모리에 쓰는 일 등을 막을 수 있다. 이는 곧 악성 프로그램들로 부터 사용자 프로세스가 보호 받을 수 있는 길이 열렸음을 의미한다. 아무리 스파이웨어에 감염 되어도 특정 프로세스는 변조되거나 종료 또는 잠시 멈춰지는 일을 당하지 않아도 되게 되었다.

Flag

Allowed operations

PROCESS_CREATE_PROCESS

Create a new child process of the process.

PROCESS_CREATE_THREAD

Create a new thread in the context of the process.

PROCESS_DUP_HANDLE

Duplicate handles to or from the context of the process, such as by calling the user-mode DuplicateHandle routine.

PROCESS_SET_QUOTA

Set the working set size for the process, such as by calling the user-mode SetProcessWorkingSetSize routine.

PROCESS_SET_INFORMATION

Modify process settings, such as by calling the user-mode SetPriorityClass routine.

PROCESS_SUSPEND_RESUME

Suspend or resume the process.

PROCESS_TERMINATE

Terminate the process, such as by calling the user-mode TerminateProcess routine..

PROCESS_VM_OPERATIONS

Modify the address space of the process, such as by calling the user-mode WriteProcessMemory and VirtualProtectEx routines.

PROCESS_VM_WRITE

Write to the address space of the process, such as by calling the user-mode WriteProcessMemory routine.

다음은 쓰레드에 대한 제어 가능한 DesiredAccess 목록이다. 역시 프로세스와 같은 정도의 보호를 받을 수 있다.

Flag

Allowed operations

THREAD_DIRECT_IMPERSONATION

Enable a server thread to impersonate one of its clients.

THREAD_IMPERSONATE

Impersonate the operating system’s anonymous logon token, such as by calling the user-mode ImpersonateAnonymousToken routine.

THREAD_SET_CONTEXT

Modify the thread’s execution context, such as by calling the user-mode SetThreadContext routine.

THREAD_SET_INFORMATION

Modify thread settings, such as by calling the user-mode SetThreadIdealProcessor routine. The operations that are permitted by this access right are a superset of those that are permitted by the THREAD_SET_LIMITED_INFORMATION access right.

THREAD_SET_LIMITED_INFORMATION

Modify a limited set of thread settings, such as by calling the user-mode SetThreadAffinityMask and SetThreadPriorityBoost routines.

THREAD_SET_THREAD_TOKEN

Modify properties of the thread’s impersonation token, such as by calling the user-mode SetTokenInformation routine.

THREAD_SUSPEND_RESUME

Suspend or resume the thread, such as by calling the user-mode SuspendThread and ResumeThread routines.

THREAD_TERMINATE

Terminate the thread, such as by calling the user-mode TerminateThread routine.

러한 오브젝트 보호 메카니즘을 통해서 윈도우즈 세계에서 활개를 치는 악성 코드들로 부터 사용자들이 자유로워질 수 있는 길이 열렸다. 하지만, 예전에도 그러했듯이 분명히 이러한 보호 장치를 우회하는 기법이 나올 것이고, 창과 방패의 전쟁은 계속 될 것이다.

Leave a Reply