본문 바로가기
reversing

Session in Kernel 6

by 코끼리_땃쥐 2022. 8. 29.
반응형

Windows 응용 프로그램 개발자라면, (xp에서 잘 실행되는) 서비스 프로그램이 vista 혹은 7에서 정상적으로 동작하지 않는 경험을 해보았을 것입니다. 이는 주로 사용자와 인터렉티브하게 동작하는 서비스 프로그램에 해당됩니다. 즉 서비스로 동작하는 프로그램에서 사용자 다이얼로그를 출력하거나, 사용자 프로그램과 서비스 프로그램 사이의 메시지 통신등을 시도 할 때 예전의 xp처럼 잘되지 않는 것 입니다. 그이유는 Kernel6에서 적용된 세션 관리 정책이 변경되었기 때문입니다. Kernel6에서 세션 관리 정책 변경은 개발 관점에서도 중요한 일이지만, 리버싱 관점에서도 매우 중요한 사건입니다. 왜냐하면 기존부터 널리 사용되던 CreateRemote Thread() API를 이용한 DLL 인젝션 방법이 Kernel6의 서비스 프로세스들에게는 더이상 먹히지 않기 때문입니다. (일반 프로세스에게는 아직도 잘 됩니다.)

 

세션

 

세션이란 간단히 말해서 로그온 사용자 환경을 의미합니다. 대부분의 OS는 동시에 여러 사용자들의 로그온을 허가하고 각 로그온에 대해서 독립된 사용자 환경을 제공합니다. Windows운영 체제를 예로 들면 '사용자 전환' 기능으로 로컬 사용자 세션을 생성할 수 있으며, '원격 데스크톱 연결' 기능으로 리모트 사용자 세션을 생성할 수 있습니다. Process Explorer의 view메뉴에서 세션 항목을 선택하면 현재 실행되고 있는 프로세스들이 각각 어떤 세션에 속해 있는지 표시해줍니다.

 

 

Session 0 Isolation

windows 커널 버전 6 이후부터는 보안강화를 위하여 첫 번째 로그온 사용자 세션을 1로 하여 시스템 세션 0과 구별되도록  하였습니다. 이렇게 시스템과 사용자 세션을 분리시켜 서로에 대한 상호작용을 없애는 정책으로 인해서 비록 부분적으로 하위호환 문제가 발생 하였지만, 그 대신 시스템 보안이 강화되었습니다.

이러한 정책을 MS에서는  'Session 0 Isolation' 이라고 부릅니다.

 

 

반응형

'reversing' 카테고리의 다른 글

TLS CALLBACK  (0) 2022.08.31
CreateRemoteThread() API 호출 흐름  (0) 2022.08.29
ASLR 이란?  (1) 2022.07.25
PE32+  (0) 2022.07.18
64비트  (0) 2022.07.15

댓글