본문 바로가기

Golden City of El Dorado


기술 잡지

Dr. Watson 호출

Winlogon 프로세스의 메모리 덤프를 만들도록 Dr. Watson(drwtsn32.exe)에 요청하면 작업이 완료되자마자 Windows®가 종료되는 것을 경험한 독자도 있을 것입니다. 그리고 이때 "왜 디버거를 Winlogon에 연결하면 시스템이 종료되지?"라는 의문을 가졌던 사람도 있을 것입니다.

사실 정확히 말하면 이는 틀린 말입니다. 프로세스에 대해 Dr. Watson을 실행하는 것은 디버거를 프로세스에 연결하는 것과는 다르니까요. 디버거를 연결하려면 ntsd와 같은 도구를 사용해야 하며 필요한 권한이 있다면 충분히 가능합니다. 실제로 Windows 팀에서도 이러한 방법으로 Winlogon 문제를 디버그합니다. 따라서 "왜 디버거를 Winlogon에 연결하면 시스템이 종료되는가?"라는 질문에 대해 간단히 답한다면 "Winlogon이 시스템을 중단시키는 것이 아닙니다."라고 대답할 수 있습니다.

먼저 문제가 발생한 프로세스의 메모리 덤프를 만든 후 프로세스를 중단하는 Dr. Watson은 말하자면 일반 개업의가 아니라 검시관에 해당한다고 할 수 있습니다. 실질적으로 Dr. Watson은 문제 해결을 시도하지 않으므로 프로세스를 계속 실행하도록 허용하면 다시 중단될 뿐입니다. 그리고 Dr. Watson이 다시 호출되어 무한 루프에 빠지게 됩니다. 한마디로 Dr. Watson은 디버그를 수행하지 않는 디버거라고 할 수 있습니다. 어디에선가 좋은 의사가 나타나 주의 깊게 상황을 살피고 프로세스를 중단하는 것입니다. 그리고 메모리 덤프를 만든 후에 Winlogon을 중단함에 따라 시스템이 중단됩니다.

Winlogon을 중단하면 시스템이 다시 부팅됨 (더 크게 보려면 이미지를 클릭하십시오.)

Winlogon는 "중대한 시스템 프로세스"이므로 중단될 경우 시스템이 다시 시작됩니다. 그렇다면 왜 Winlogon은 시스템 작동에 있어서 중요한 프로세스로 간주될까요? 첫째, Winlogon은 SAS(Secure Attention Sequence)인 Ctrl+Alt+Del의 처리를 담당합니다. Winlogon이 중단되면 SAS가 작동하지 않습니다. 이 자체만으로도 문제라고 할 수 있습니다. 그런데 더 나쁜 것은 SAS의 공식 담당자가 중단되면서 다른 프로그램이 사용자가 Ctrl+Alt+Del을 누를 때까지 기다렸다가 응답으로 가짜 암호 대화 상자를 표시할 수 있다는 점입니다. 이런 식으로 스푸핑될 수 있다면 Secure Attention Sequence라는 이름이 무색해집니다. 따라서 보안 차원에서 Windows는 더 큰 문제가 발생하기 전에 시스템을 종료합니다.

다음으로, 사용자가 작업 관리자를 실행하고 Winlogon과 같은 중대한 시스템 프로세스를 선택하고 프로세스 종료를 클릭한 후 종료하도록 확인하면 Winlogon이 중단되고 시스템이 다시 부팅됩니다. 물론 프로세스를 중단할 권한이 있는 높은 권한의 관리자로 시스템을 실행한 경우에 이것이 가능합니다.

이전 Windows 버전에서 작업 관리자는 사용자가 중대한 시스템 프로세스를 중지하지 못하도록 막았지만 중대한 프로세스인지를 확인하는 알고리즘은 그다지 지능적이지 못했습니다. 때문에 편법을 사용하면 작업 관리자를 속여 특정 프로그램을 중단 불가능한 것으로 간주되도록 할 수 있었습니다. 물론 이러한 프로그램도 작업 관리자 이외의 프로그램을 사용하면 중단할 수 있었습니다. 예를 들어 taskkill 프로그램을 사용할 수 있습니다.

이러한 편법을 방지하기 위해 더 이상 작업 관리자는 사용자가 중대한 시스템 프로세스를 중단하지 못하도록 방지하지 않습니다. 결국 아무 것도 하지 않으면 잘못될 일도 없다는 것이죠. 결론적으로 작업 관리자는 더 이상 사용자가 어떤 프로세스를 중단하는지 감시하지 않습니다. 그리고 건드려서는 안 될 프로세스를 중단하려 할 때에도 아무런 조치를 취하지 않습니다. 따라서 중대한 시스템 프로세스를 중단한다면 그에 따른 결과를 감내하는 수밖에 없습니다.