[하루한줄] CVE-2021-1678 : MSRPC Printer Spooler Relay

URL

Security Advisory: MSRPC Printer Spooler Relay (CVE-2021-1678)

Target

  • 2021년 1월 12일 패치 이전
    • Windows 7, 8.1, 10
    • Windows Server 2008, 2012, 2016, 2019

Explain

2021년 1월 12일 Patch Tuesday에서 CVE-2021-1678이 패치되었습니다. 이 취약점을 통해 해커는 NTLM(NT Lan Manager) 인증 세션을 릴레이 하여 프린터 스풀러 MSRPC 인터페이로 원격 코드 실행이 가능합니다.

NTLM 릴레이는 해커가 클라이언트와 서버 사이에서 메시지나 정보들을 전달합니다. 해커는 클라이언트인 척 하지만, 서버는 클라이언트가 해커인지 알지 못하며 NTLM 인증 중 서버에서 제공한 정보를 통해 서버에 인증이 가능합니다. NTLM 인증은 보호 기능이 없으면 모든 프로토콜에서 다른 프로토콜로 릴레이 할 수 있습니다. 해당 취약점은 NTLM 릴레이 공격을 통해 MSRPC를 타게팅하여 이루어집니다.

MSRPC는 인증에 대한 여러 가지 단계가 있지만 RPC_C_AUTHN_LEVEL_CONNECT는 사용자 인증을 통한 전송에 암호화나 서명을 하지 않으므로 NTLM 릴레이 공격을 악용할 수 있습니다. RPC 인터페이스 중 IRemoteWinspool은 패킷 보안이 필요하지 않으므로 다음과 같은 방법으로 RPC 명령을 실행할 수 있습니다.

  1. NTLM 세션이 해커에 의해 제어되는 릴레이 머신에 설정
  2. 해커는 IRemoteWinspool 인터페이스에 바인딩하고 RPC_C_AUTHN_LEVEL_CONNECT 권한을 선택
  3. NTLM 인증이 RPC 채널에서 해커에 의해 릴레이 됨
  4. PrinterDemon 공격 흐름과 같이 PRC 명령이 실행됨:
    • RpcAsyncInstallPrinterDriverFromPackage(Opnum 62) - “generic/text” 프린터 드라이버 설치
    • RpcAsyncOpenPrinter (Opnum 0)
    • RpcAsyncXcvData (Opnum 33) - 포트 추가
    • RpcAsyncAddPrinter (Opnum 1) - 드라이버에 따른 프린터 추가
    • RpcAsyncStartDocPrinter (Opnum 10) - 새 문서 시작
    • RpcAsyncWritePrinter (Opnum 12) - 새 문서 작성

해당 취약점은 IRemoteWinspoolRpcManager::VerifyRpcValidProtocolSequence에서 RPC_C_AUTHN_LEVEL_PKT_PRIVACY 이상의 레벨에서만 접근 가능하도록 패치되었습니다.

Reference

https://en.hackndo.com/ntlm-relay/#ntlm-relay

https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-par/695e3f9a-f83f-479a-82d9-ba260497c2d0