IT 그리고 정보보안/Knowledge base

윈도우 서브시스템

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

시스템 프로세스는 윈도우 시작 프로세스 이며, 사용자가 시스템을 사용하는 데 필요한 핵심 부분을 담당하는 프로세스이다. 커널과 연결되는 서브시스템을 구동하거나 관리하는 역할을 하는 것.

 

우리가 사용하는 유저모드에서 아주 중요한 프로세스라고 말할 수 있겠죠??

Smss.exe, Csrss.ee, Winlogon.exe, Lsass.exe, Services.exe 등이 있는데, 작업관리자 열어서 보면

다들 한번씩 이름쯤은 접해봤을 겁니다.

그럼 먼저 서브시스템이 무엇인가 부터 한번 알아보죠.

 

서브시스템

윈도우의 보안과 호환성을 위해 커널의 시스템 자원을 호출할 때 사용되는 시스템.

환경 서브시스템, 서브시스템 DLL 두가지로 나눌 수 있돠. 한번 알아봅시다.

 

1. 환경 서브시스템

프로그램의 구동 환경을 제공하고 관리하는 서브시스템이다.

환경 서브시스템에는..

윈도우 환경을 지원하는 윈도우 서브시스템 Csrss.exe

POSIX 서브시스템인 Psxss.exe 가 있다.

(POSIX : Portable Operating System Interface based on UNIX, UNIX용..)

POSIX 서브 시스템은 Psxss.exe를 통해 unix용도의 프로그램을 윈도우에서 구동 가능하도록 호환을 지원하는 시스템이다.

 

2. 서브시스템 DLL

프로그램이 커널의 시스템 자원을 호출할 수 있도록 도와주는 서브시스템이다. 시스템 DLL이라고도 부른다.

Kernel32.dll, Advapi32.dll, User32.dll, Gdi32.dll 등이 있다.

환경 서브시스템은 프로그램의 환경과 관리를 담당하고

서브시스템 DLL 에서 자신이 사용가능한 API(인터페이스)를 노출하여 실질적인 프로그램의 요청에 따라 커널 자원을 호출한다.

 

좀더 자세히 알아보자면, 윈도우 실행 파일은 PE Header 구조의 Option Header 정보를 가지고 있는데, 

이를 통해 서브시스템의 유형을 구분한다. 아래 그림을 보면 세부 설명이 되있음.

파일을 실행하면 운영체제는 프로세스를 실행하기 위해서 CreateProcess 함수를 호출하여 파일 이미지 로드를 진행하게 되는데, 이때 파일 구조(PE Header)를 확인하여 어떤 형식의 파일인지 확인하는 과정을 진행한다.

 

그림에서 보면 적절한 실행자를 선택하도록되어 있고, PE Header 서브시스템 코드에서 메모리에 실행 프로세스 개체를 만든다.

.bat .com 같은 실행 파일은 확장자로 구분이 되지만, .exe .com 같은 경우 PE Header의 Option Header 부분을 참조하여 실행자를 선택한다. 그 후 EPROCESS Block, KPROCESS Block, PEB 등을 초기화 한다.

 

그리고 메인 스레드, 스택, 컨텍스트를 만들고 Csrss( 프로세스와 스레드 생성 담당)에게 새 프로세스의 정보가 전달되면서 작업이 진행된다.

 

그러면 각 실행파일 마다 서브시스템 코드가 어떤식으로 되어있을까?? Winnt.h에 정의되어 있다.

 c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h 이 위치에 있다고 말을 하는데

난 도저히 찾아도 안나오더라.

그래서 그냥 구글에서 다운 받았다. WinNT.h 없으신 분들은 받아서 참고

다운받고 열어서 서브시스템 코드 부분을 찾아 보면 요렇게 나옴

그럼 원래있던 서브 시스템 코드를 변경하면 어떤일이 일어나나 볼까요??

PEview를이용하여 서브시스템 코드를 확인!

IMAGE_SUBSYSTEM_WINDOWS_GUI 라고 코드는 0002 인걸 볼수 있죠

그럼 HxD를 이용하여 변경을 한번 해봅시다.

IMAGE_SUBSYSTEM_NATIVE_WINDOWS 인 0008 코드로 바꿔보겠음.

 

바꾸고 확인해보았음.

 

IMAGE_SUBSYSTEM_NATIVE_WINDOWS로 서브시스템 코드가 바뀐것을 볼 수있다.

반응형