윈도우 로그인 관리자 Winlogon.exe

Winlogon.exe는 사용자 로그인 관련 동작을 지원하는 프로세스로써, 비스타이전 부팅시 보안 인증을 담당하는 Lsass.exe(Local Security Authority Subsystem Service, LSA라고도 함)와 서비스를 관리하는Services.exe(Service Control Manager)를 실행 하고(앞서 애기 했듯 비스타이후 부터는 Wininit.exe가 실행한다.), 유저 로그인 동작 위해 GINA(Graphical Identification and Authentication)을 호출하는 등 로그온, 로그오프 관련 기능을 수행하는 프로세스 이다.

[그림]Winlogon이 호출한 GINA(msgina.dll)화면

Winlogon은 대기 시 SAS(secure attention sequence: Alt+Ctrl+Del)키 입력를 항시 감시하다가, SAS입력 발생시 GINA를 불러와 사용자가 로그온 작업을 진행할 수 있도록 한다. 그리고 컴퓨터를 잠그고, 잠금 해제와 같은 보안 관련 작업도 수행하게 된다. 더욱이 스마트 카드와 같은 다른 자격 증명 제공자를 설치할 수 있도록 하여 여러 사용자 인증 방식을 사용할 수 있다. 기본 자격 증명 제공자는 패스워드와 PIN, 스마트 카드 방식을 제공하며 해당 DLL은 아래 위치 한다.

%SystemRoot%\System32\authui.dll

%SystemRoot%\System32\SmartcardCredentialProvider.dll

GINA는 Winlogon.exe와 상호 작용하면서 로그온 UI와 인증 UI 그리고 인증 제공자의 인터페이스를 관리하게 된다.

윈도우 로그인 관리자 Winlogon.exe

[그림] GINA를 이용한 인증 구조

Authui.dll은 윈도우 시작 화면과 UI도 함께 담당하여, 해당 파일을 수정하므로써, 윈도우 시작 화면 및 UI를 변경할 수 있다.

[그림]authui.dll를 수정하여 변경한 로그인 화면

그리고 Winlogon은 자격 증명 제공자의 버그로부터 Winlogon을 보호하기 위해, 별도의 프로세스인 통해자격 증명 제공자(Logonui.exe) 및 네트워크 제공자를 로드하고, 윈도우 로그온 인터페이스를 보여주게 된다. 이로써 자격 증명 제공자의 문제점으로, Winlogon.exe가 함께 종료(Windows XP에서는 Winlogon.exe이 종료되면 시스템 크래쉬가 발생하지만, 비스타이후 Winlogon.exe 종료시 로그오프된다. 대신 Wininit 및 Csrss는 시스템 크래쉬가 발생한다.)되는 것을 방지 한다.

[그림]자격 증명 제공자 DLL을 로드하는 logonui.exe

또한 Winlogon은 고유한 SID를 사용자에게 할당하여 데스크톱 인스턴스(키보드, 화면, 마우스)에 배정하게 되고, 로그온 프로세스 토큰에 포함하여 Lsass에 전달한 후, 성공적으로 인증이 완료되면, 할당하였던 SID를 로그온 프로세스 토큰에 포함하여, 로그인 이후 인증에 사용하도록 한다.

그리고 Winlogon.exe에서 사전에 로드한 네트워크 제공자를 통해 인증에 필요한 정보를 한번에 얻어갈 수 있어, 네트워크에 연결된 시스템에 별도의 인증 없이 로그인 할 수 있는데, 이를 이용하여 다른 머신에서 동일 계정과 패스워드를 쓰는 워크그룹 로그인이나, 도메인 환경의 SSO(Single sign-on)이 가능한 것이다.

아래 그림은 Winlogon의 관장하는 주요 작업 흐름을 그림으로 나타낸 것이다.

[그림]Winlogon의 주요 처리 작업

고정키

만약 고정키 설정을 해놓았을 경우 쉬프트(Shift)키 사용이 가능 경우 GINA 화면에서 SAS키 이외에 윈도우에서 제공하는 고정키 설정이 가능하다.

고정키는 Alt, Ctrl, Shift등을 계속 눌려야 하는 상황에 이 기능을 활성화 하면, 해당 키를 누른 상태 인것처럼 인생하게된다.

이 기능은 GINA 화면에서도 설정가능하도록 되어 있다.(윈도우 설치시 기본적으로 활성화 된다.)

[그림]쉬프트(Shift)키 사용이 가능

이 기능은 sethc.exe라는 프로세스에 의해 실행되는데 이를 이용하여, 간단히 약간의 장난을 걸을 수도 있다.

이 sethc.exe를 cmd.exe로 변경할 경우, 로컬 로그인을 바이패스 할 수 있다.

[그림] sechc.exe를 cmd.exe로 변경

[그림] 로그인 하지 않은 상태에서 바로 명령 프롬프트 실행이 가능

새로운 세션0 관리자 Wininit.exe

Wininit는 비스타에서 새롭게 생성된 시스템 프로세스로 Smss에 의해 실행되는데, 초기 윈도우 세션 0을 생성하는 역할을 담당하게 된다.(비스타 이후부터 Winlogon.exe는 세션1 이후를 담당하는데, 즉 사용자 로그인 세션을 담당하게 된다.)

세션0는 SCM(\%Systemroot%\System32\Services.exe)을 생성하여 자동 시작되는 서비스와 디바이스 드라이버를 초기화 하고 Lsass.exe과 Lsm.exe(로컬세션관리자로 머신의 터미널 서버 연결을 관리)를 로드하게 된다.(Windows Xp에서는 Winlogon.exe가 이 역할을 함께 하였었다.)

Windows XP시절 콘솔 로그인, 즉 로컬 로그인을 할경우 세션 0를 사용하는 환경이였다.

Windows XP와는 많이 다른 구조를 보이는데, 아래 프로세스 리스트를 통해 보고 해보자.

[그림]Windows 7과 Windows XP의 시스템 프로세스 차이

이는 세션0을 격리해 보안을 강화하는 역할을 하게 된다. 또한 사용자 로그온인 Winlogon.exe와 자동실행 서비스 및 드라이버를 분리하여, Winlogon의 부담을 덜어주어 더 빠른게 부팅할 수 있도록 개선한 거라 생각된다.(실제로 더 무거운 비스타, 윈도우 7이 XP보다 로그인 화면 표시가 빠르다.)

Facebook Comments

Leave A Reply

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

This site uses Akismet to reduce spam. Learn how your comment data is processed.