윈도우에서 사용자가 로그인할 때 내부에서 어떤 구성요소들이 어떤 순서와 역할로 움직이는지
전체 구조는 “사용자 입력 → 인증 → 권한 결정”이라는 한 줄 흐름으로 이해하면 된다.
먼저 사용자가 윈도우 로그인 화면에서 아이디와 비밀번호를 입력하면, 이 과정의 출발점이 되는 것이 Winlogon이다. Winlogon은 윈도우의 로그인 절차를 총괄하는 프로세스로, 로그인 화면을 띄우고 사용자의 입력을 받아 다음 단계로 넘기는 역할을 한다. 즉, Winlogon 자체가 비밀번호를 검사하는 것은 아니고, 로그인 절차의 “관리자” 역할이라고 보면 된다.
Winlogon은 사용자가 입력한 계정 정보와 암호를 직접 처리하지 않고, GINA(msgina.dll)라는 모듈을 로딩해서 사용한다. GINA는 로그인 UI와 인증 입력을 담당하는 구성요소로, 사용자가 입력한 아이디와 비밀번호를 받아서 LSA에게 전달하는 중간 창구 역할을 한다. 쉽게 말해, “사용자 입력을 받아서 보안 담당자에게 전달하는 인터페이스”다.
다음 단계가 이 구조에서 가장 중요한 LSA(Local Security Authority, lsass.exe)다. LSA는 윈도우 보안의 핵심 엔진이다. LSA는 전달받은 계정 정보와 비밀번호를 검증하기 위해 NTLM 같은 인증 모듈을 로딩하고, 해당 사용자가 실제로 존재하는지, 비밀번호가 맞는지를 확인한다. 여기서 로그인 성공 여부가 결정된다. 동시에 LSA는 이 사용자가 어떤 시스템 자원에 접근할 수 있는지, 어떤 권한을 가져야 하는지도 함께 검사한다. 그리고 로그인 시도와 결과를 감사 로그로 남기는데, 이때 사용자 계정과 SID를 매칭해서 기록한다.
LSA가 계정 검증을 수행할 때 실제 계정 정보와 비밀번호 해시를 관리하는 곳이 바로 SAM(Security Account Manager)이다. SAM은 윈도우의 사용자 계정 데이터베이스라고 보면 된다. 사용자 계정과 암호의 해시 값이 저장되어 있고, 입력된 정보가 이 저장된 정보와 일치하는지를 확인한다. 역할 면에서 보면 리눅스의 /etc/shadow 파일과 거의 같은 개념이다. SAM은 “이 계정이 맞는지 아닌지”를 판단해서 그 결과를 보안 처리 쪽으로 전달한다.
계정이 정상적으로 인증되면, 이제 “이 사용자가 무엇을 할 수 있는가”를 결정해야 한다. 이 역할을 담당하는 것이 SRM(Security Reference Monitor)이다. SRM은 사용자에게 SID(Security Identifier)를 부여하고, 그 SID에 어떤 권한이 붙어 있는지를 기준으로 파일, 디렉터리, 시스템 자원에 대한 접근 허용 여부를 판단한다. 예를 들어 Administrator는 SID 끝자리가 500, Guest는 501, 일반 사용자는 보통 1000번 이후의 값을 가진다. 윈도우는 사용자 이름이 아니라 이 SID를 기준으로 접근 권한을 판단한다.
정리하면, 윈도우 로그인 흐름은 이렇게 이어진다.
Winlogon이 로그인 절차를 시작하고, GINA가 사용자 입력을 받아서 LSA로 전달한다. LSA는 SAM에 저장된 계정 정보와 비교해 인증을 수행하고, 인증이 성공하면 SRM이 SID 기반으로 접근 권한을 부여한다. 이 구조 덕분에 “로그인 검증”과 “권한 판단”이 명확히 분리되어 있고, 모든 접근 통제가 SID 중심으로 일관되게 처리된다.