주식회사 누리아이티

정보자산의 보안강화를 위한 3단계 인증 보안SW(BaroPAM) 전문기업인 누리아이티

▶ BaroSolution/기술문서

Winlogon Credential Provider란?

누리아이티 2023. 7. 29. 12:41

1. Credential Provider 개요

 

Windows 로그온 화면을 커스터마이징 할 때, Windows XP까지는 GINA(Graphical Identification and Authentication) DLL이 사용되었는데, 인터페이스가 어렵고 복잡하며, 디버깅도 매우 어려워서 소수 일부 전문가들만 사용했다.

 

Windows 7(Vista 이상)부터는 CP(Credential Provider)라는 개념으로 비교적 쉽게 수정할 수 있는 API 인터페이스를 제공하고 있다.

 

Credential Provider Plugin처럼 여러 개 병렬로 등록 가능하며, 각각 한 가지 인증 처리를 할 수 있는데, 이와 같이 추가 Credential Provider를 만들어 할 수 있는 일은,

 

-로그온 화면에 TextBox ComboBox 등을 추가한 뒤 추가 입력값(OTP 인증 등)을 받아 검증

-기본 Password 로그온 이외에 다른 처리(패스워드 초기화 등)를 함

 

이상의 두 가지 정도가 대부분이라 할 수 있겠다.

 

패스워드 인증을 사용하지 않고 스마트카드 인증을 한다거나 지문 인식 인증을 한다거나 등은 OS 및 하드웨어 수준에서 지원이 될 때만 가능한 것이지, 무턱대고 Credential Provider를 만든다고 새로운 인증 방식이 적용되는 것은 아니다.

 

예를 들어, user/password라는 Windows 계정이 있는데, password 대신에 OTP 코드로 123456이라는 값을 입력 받아 인증되게 하려면, 별도 사용자 DB user:password:OTP와 같은 매핑 테이블이 있어서 OTP 코드로부터 사용자의 password를 조회할 수 있도록 만들어 놓은 경우라면 몰라도, password를 입력하지 않고 그냥 인증할 수 있는 방법은 없다.

 

, Credential Provider를 통해 인증을 성공하는 유일한 방법은 ID/Password를 제대로 입력했을때 뿐이다.

 

 

2. Winlogon 동작 원리

 

 

 

Winlogon Windows의 로그 관리자로써 Windows Vista 이전에는 Winlogon.exe Lsass.exe Services.exe를 실행시키는데, Windows 7(Vista 이후)에는 Winlogon.exe Wininit.exe가 함께 실행되고, Wininit.exe Lsass.exe Services.exe를 실핼 시킨다.

 

Lsass.exe(Local Security Authority Subsystem Service)는 부팅 시 보안 인증을 담당하고 LSA라고도 부른다.

 

Services.exe(Service Control Manager)는 서비스를 관리하고 SCM이라고도 부른다.

 

Winlogon은 또한 사용자 로그온 동작을 수행하는 Credential Provider를 호출하고 로그온, 로그오프 관련 작업에 관여한다.

 

대기할 때 항시 SAS(Secure Attention Sequence : Alt + Ctrl + Del) 키 입력을 감시 하다가 SAS 키 입력이 들어오면 Credential Provider를 불러와 사용자가 로그온 작업을 할 수 있도록 한다.

 

이와 관련된 DLL %SystemRoot%\System32\authui.dll(여길 수정하면 로그온 테마 변경 가능), %SystemRoot%\System32\SmartcardCredentialProvider.dll이다.

 

이를 Credential Provider와 연결하여 Winlogon.exe와 상호 작용하면서 로그온, 인증 UI를 관리한다. 그리고, Winlogon은 자격 증명 제공 오류로 부터 자신을 보호하기 위하여 Logonui.exe(자격 증명 제공자)를 이용한다. 이것은 네트워크 제공자 로드, 로그온 인터페이스 노출, Winlogon 종료 방지 등의 기능을 한다.

 

Vista 이전 까지는 Winlogon이 종료되면 시스템 크래쉬가 발생했지만, 이후로는 Wininit.exe가 지켜줘서 로그오프만 된다.

 

또한 Winlogon은 고유한 SID를 할당하여 Desktop 인스턴스(키보드, 화면, 마우스 등)에 배정하게 되고, 이를 로그온 프로세스 토큰에 포함하여 보안을 담당하는 Lsass에 전달한 후 인증을 통과하면 할당했던 SID를 로그온 프로세스 토큰에 포함해 로그온 인증용도로 사용한다. 쉽게 말해서 컴퓨터 잠금, 로그온, 로그오프에 관여한다.

 

 

3. Credential Provider 추가/삭제/비활성화

 

앞에서도 잠깐 언급했지만, Credential Provider를 새로 추가한다는 것은 기본 ID/Password 인증을 사용하지 않고 새로운 형태의 인증 방식을 추가하는 것이다.

 

따라서 ID/Password 인증 기본 Credential Provider(PasswordProvider)수정해서 화면 상에 뭔가 텍스트나 그림 등을 추가할 수 없을까 고민한다면, 그건 잘못된 생각이다.

 

기본 제공되는 Built-In Credential Provider들은 수정이 불가능하다. (소스 코드를 제공하지 않으니까)

다만, OOP 개념에 따라 새로운 Credential Provider를 만들고 Wrapping하여 Override할 수 있을 뿐이다.

 

 

 

아무튼, Windows 로그온에서 사용되는 Credential Provider들은 모두 위 레지스트리에 등록되어 있다.

 

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers

 

여기서 테스트 목적 또는 필요 시 해당 레지스트리 키를 삭제하지 않고도 "비활성화"시키는 방법이 있는데,

 

-Group Policy로 비활성화 하는 방법: https://community.sophos.com/kb/en-us/114190

 

-레지스트리를 수정하여 개별 CLSID별로 Disabled 값을 추가하는 방법: https://social.technet.microsoft.com/Forums/windows/en-US/9c23976a-3e2b-4b71-9f19-83ee3df0848b/how-to-disable-additional-credential-providers?forum=w8itprosecurity

 

-Credential Provider Filter를 만들어 등록하는 방법: http://www.pagepinner.com/2013/12/how-to-hide-credential-providers-from.html

 

이상의 세 가지 방법이 있다.