PrintNightmare는 Windows Print Spooler 서비스에서 발견된 취약점으로, 원격 코드 실행과 권한 상승(로컬 사용자가 SYSTEM 권한을 획득) 두 가지 형태로 모두 악용 가능했다. Print Spooler는 거의 모든 Windows 시스템에서 기본적으로 실행 중인 서비스라는 점에서, 영향 범위가 사실상 Windows 생태계 전체에 해당했다.
Print Spooler와 프린터 드라이버 설치 기능
Windows의 Print Spooler는 인쇄 작업을 관리하는 서비스인데, 편의 기능으로 **네트워크 프린터에 연결할 때 필요한 드라이버를 원격 서버에서 자동으로 다운로드해서 설치하는 기능(Point and Print)**을 갖고 있다. 이 기능 자체가 "임의의 코드(드라이버 형태로 위장한)를 시스템에 설치하고 실행하는 통로"가 될 수 있다는 게 문제의 본질이다.
근본 원인: 권한 검증 누락
Print Spooler가 드라이버 설치 요청을 처리할 때, 그 요청을 보낸 주체가 실제로 드라이버를 설치할 권한이 있는지를 제대로 검증하지 않는 경로가 있었다. 구체적으로는 RpcAddPrinterDriver 같은 RPC(원격 프로시저 호출) 인터페이스를 통해, 권한이 낮은 사용자도 서명되지 않은(신뢰할 수 없는) 드라이버 DLL을 시스템 디렉터리에 설치하고 Print Spooler 프로세스(SYSTEM 권한으로 실행됨) 안에서 그 코드를 실행시킬 수 있었다.
Print Spooler 서비스 자체가 SYSTEM 권한으로 동작하기 때문에, 이 경로로 심어진 코드는 곧바로 시스템 최고 권한으로 실행된다 — 낮은 권한의 로컬 사용자가 관리자 권한으로 뛰어오르거나(권한 상승), 네트워크를 통해 원격의 다른 시스템에서 같은 방식으로 원격 코드 실행을 일으킬 수 있었다.
두 가지 공격 시나리오
- 로컬 권한 상승(LPE): 이미 시스템에 낮은 권한으로 접속해 있는 공격자(또는 악성코드)가 이 취약점으로 SYSTEM 권한까지 상승 — 침투 이후 단계에서 자주 활용되는 유형
- 원격 코드 실행(RCE): 공격자가 통제하는 프린트 서버에 피해자가 연결하도록 유도하면(피싱, 사회공학), 악성 드라이버가 자동 설치되며 원격에서 코드가 실행됨
패치 과정이 유난히 혼란스러웠던 이유
이 CVE는 대응 과정 자체가 이례적으로 복잡했던 사례로도 자주 언급된다.
- 처음에 비슷한 취약점(CVE-2021-1675)에 대한 패치가 나왔지만, 이후 연구자들이 그 패치를 우회하는 별도의 공격 경로를 발견하면서 CVE-2021-34527이 별도로 등록됐다
- 마이크로소프트가 낸 초기 패치 이후에도 추가 우회 방법이 계속 보고되면서, 몇 차례에 걸쳐 패치가 다시 나왔다
- 이 혼란 속에서 마이크로소프트는 이례적으로 "패치와 별개로 Point and Print 관련 그룹 정책을 강화하라"는 설정 변경 권고를 함께 냈고, 많은 보안 팀이 아예 Print Spooler 서비스 자체를 비활성화하는 극단적인 임시 조치를 택했다 (프린터를 실제로 안 쓰는 서버에서는 합리적인 선택)
방어자 관점에서 배울 점
- 기본으로 켜져 있는 서비스일수록 공격 표면으로서의 파급력이 크다. Print Spooler처럼 대부분의 관리자가 신경 쓰지 않는 백그라운드 서비스가 SYSTEM 권한을 가진 채 원격 인터페이스를 노출하고 있다는 사실 자체를 재점검하는 계기가 됐다
- 패치 하나로 안심하지 말 것. 초기 패치가 우회되는 경우가 드물지 않으므로, 벤더의 후속 공지를 계속 추적해야 한다
- **불필요한 서비스는 끈다는 원칙(Attack Surface Reduction)**이 개별 취약점 패치보다 근본적인 방어가 될 때가 있다 — 프린터를 쓰지 않는 서버/도메인 컨트롤러에서 Print Spooler를 꺼두는 것만으로 이 취약점 계열 전체가 무력화된다
- 패치와 설정 강화(그룹 정책)는 상호 배타적이지 않고, 함께 적용해야 완전한 방어에 가까워지는 경우가 실무에서 흔하다는 것도 이 사건이 남긴 교훈이다