CVE-2022-30216 - Windows "Server" 서비스 인증 강제 전환
벤 바르니아(Ben Barnea) 작성
핵심 요약
Akamai 연구원 벤 바르니아(Ben Barnea)는 CVE-2022-30216이 할당되고 기본 점수가 8.8인 Windows Server 서비스에서 중요 취약점을 발견했습니다.
취약점은 Server 서비스가 구현하는 보안 콜백 과정에서 off-by-one 오류를 이용합니다.
패치되지 않은 Windows 11 및 Windows Server 2022 머신에 취약점이 있는 것을 확인했습니다.
공격자는 AD CS(Active Directory Certificate Services)에 대한 NTLM(New Technology LAN Manager) 릴레이 공격과 취약점을 결합하여 도메인 인증 정보를 확보하고 도메인 컨트롤러에서 코드를 원격 실행할 수 있습니다.
공격자는 이 기법을 사용하여 서버의 인증서 매핑을 조작하고 서버 스푸핑을 실행할 수도 있을 것으로 여겨집니다.
이 취약점은 Microsoft에 보고되어 7월 패치 화요일(Patch Tuesday)에서 처리됐습니다.
Akamai는 취약점 개념의 증거를 GitHub 저장소에서 소개했습니다.
서론
최근 몇 개월 동안 Akamai는 Microsoft의 RPC(Remote Procedure Call)를 심층 연구했습니다. 간단히 말해 RPC는 효율적인 프로세스 간 통신을 위해 사용됩니다. 표준 클라이언트 서버 모델에 기반하며 현재 Windows에서 가장 널리 사용되는 프로토콜 중 하나입니다.
MS-RPC 설계에서 가장 흥미로운 점 중 하나는 보안 콜백으로서 이 기능은 RPC 서버에 대한 접속을 제한하여 원치 않는 원격 사용자를 차단합니다. 많은 RPC 서버는 보안 콜백을 실행하며 각 서버에는 자체 논리와 고려 사항이 있습니다.
Windows 서비스는 RPC를 광범위하게 사용하여 클라이언트에 기능을 제공합니다. 이에 따라 Akamai는 다양한 서비스와 보안 콜백 실행을 위한 기본 논리를 조사했습니다. Akamai는 Server 서비스에서 공격자가 서버 스푸핑을 실행하거나 피해자에 대한 강제 인증을 트리거할 수 있는 보안 결함을 발견할 수 있었습니다.
이 블로그에서는 새로 발견된 버그에 집단적으로 기여할 수 있는 RPC의 측면을 알아보고, 버그 정보, 버그가 사용되는 방법, 버그 예방 방법을 소개합니다.
Windows Server 서비스 소개
LanmanServer라고도 불리는 Server 서비스는 SMB 공유를 관리하는 Windows 서비스입니다. 공유는 파일, 프린터, 디렉터리 트리 같은 리소스며 Common Internet File System 서버를 통해 네트워크에서 접속할 수 있습니다. 사용자는 네트워크 공유를 통해 네트워크상의 다른 디바이스를 사용하고 다양한 일상 업무를 수행할 수 있습니다.
Server 서비스 덕분에 원격 머신은 네임드 파이프(\\pipe\srvsvc)의 RPC를 통해 공유를 만들고, 설정하고, 질의하고, 삭제할 수 있습니다. 이제부터 Server 서비스를 SRVSVC로 표시하겠습니다.
SRVSVC의 취약점은 이 서비스가 핵심 기능을 제공해 모든 Windows 머신에서 디폴트로 작동하기 때문에 강력합니다.
SMB over QUIC
Windows 10 20H2 이후 Microsoft는 새로운 기능인 SMB over QUIC를 도입했습니다. 이 기능을 이용하면 새로운 전송 레이어 네트워크 프로토콜인 QUIC를 통해 SMB 공유에 접속할 수 있습니다. QUIC의 목적은 지연 시간과 패킷 손실 같은 일반적인 인터넷 문제를 극복하면서 보다 신뢰할 수 있고 안전한 연결을 제공하는 것입니다.
QUIC 네트워크 상호작용에서 클라이언트는 추가 보안 조치로서 서버가 제공한 인증서를 확인하여 서버의 ID를 검증합니다. SMB over QUIC의 도입으로 Server 서비스가 해당 인증서를 관리하게 됐습니다.
Akamai가 발견한 취약점은 이 기능에 있습니다. 취약점을 이해하려면 우선 RPC 서버가 접속 관리를 어떻게 수행하는지 살펴봐야 합니다.
보안 콜백
다양한 Windows 서비스 중 하나인 SRVSVC는 RPC 서버를 실행해 프로세스 간 통신을 가능하게 하고 다양한 클라이언트가 기능에 접속할 수 있게 합니다. Windows의 RPC는 다양한 보안 메커니즘을 사용하는데 여기서는 보안 콜백을 집중적으로 알아보겠습니다.
보안 콜백의 목적은 RPC 인터페이스에 대한 접속을 제한하는 것입니다. 콜백은 RPC 서버 개발자에 의해 실행되며 각 개발자는 콜백을 통해 자체 논리를 적용하고 특정 사용자의 접속을 허용하거나 특정 기능에 대한 접속을 제한합니다. RPC에서는 Opnum(오퍼레이션 번호)을 사용하여 서버가 노출하는 기능을 대표합니다. 이에 대해서는 SRVSVC의 보안 콜백에서 다시 알아보겠습니다.
보안 콜백의 역사
버그를 이해하기 위해 SMB over QUIC 기능이 추가되기 전에 SRVSVC 이전 버전의 보안 콜백을 살펴봐야 합니다.
위에서 볼 수 있듯이 SRVSVC의 보안 콜백 논리는 다음과 같습니다.
- 원격 클라이언트가 64-69(포함) 범위의 기능에 접속하려는 경우 — 접속 거부
- 클러스터 계정이 아닌 원격 클라이언트가 58-63(포함) 범위의 기능에 접속하려는 경우 — 접속 거부
따라서 원격 클라이언트는 인터페이스의 이들 특정 기능에 접속할 수 없습니다. 이러한 범위 검사는 제한된 기능이 민감하고 예상된(로컬) 프로세스만 호출해야 한다는 힌트를 줍니다.
SMB over QUIC 도입으로 Windows 10 20H2는 SRVSVC service에 네 가지 새로운 기능을 추가했습니다.
- LocalrServerCertificateMappingGet
- LocalrServerCertificateMappingSet
- LocalrServerCertificateMappingEnum
- LocalrServerCertificateMappingRemove
이들 기능에 원격 접속하는 것은 바람직하지 않기 때문에 해당 기능은 SRVSVC의 보안 콜백이 원격 클라이언트를 제한하는 로컬 기능의 범위에 추가됐습니다.
아래에서 볼 수 있듯이 범위가 변경되어 새로운 기능의 opnum이 포함됨에 따라 첫 번째 로컬 범위가 64-69에서 64-73으로 증가하고 보안 콜백의 기능 접속 제어가 확대됐습니다. 아직까지는 괜찮아 보입니다.
Windows 11 및 Windows Server 2022에서 Microsoft는 LocalrServerCertificateMappingModify라는 새로운 기능을 추가했습니다.
하지만 이때, 새롭게 추가된 기능을 포함하도록 제한된 기능의 범위가 새로운 버전에서 변경되지 않았습니다.
따라서 당시 이 기능이 추가됐을 때 보안 콜백에 포함되지 않았고 원격 RPC 클라이언트가 접속할 수 있었습니다.
악용 기회
공격자는 이 기능을 호출하여 서버의 인증서 매핑 구성을 변경할 수 있습니다. 인증서 매핑은 서버의 QUIC 인증서와 인증서 스토어의 인증서 간 상징적 링크입니다. 공격자는 이 기능을 사용하여 자체 인증서 매핑을 추가하고 서버 스푸핑을 실행할 수 있는 것으로 여겨집니다. 이 기능은 Windows 인증서 스토어에 인증서를 추가하거나 조작하지 않으며 QUIC 서버가 사용하는 인증서와 Windows 스토어의 인증서 간 매핑을 변경합니다.
취약점의 영향을 평가할 때 기능이 받는 구조체에 인증서의 스토어 위치가 있다는 것을 발견했습니다.
공격자는 UNC 경로를 storeLocation 변수로 제공하여 LocalrServerCertificateMappingModify를 이용해 피해 서버가 제어하는 머신에 RPC 요청을 보내게 만들 수 있습니다. 기능은 다음과 같은 플로우에 따라 요청을 보냅니다.
LocalrServerCertificateMappingModify → SsValidCertandUpdateCertinfo → CertOpenStore → _CertDllOpenSystemStoreProvW → EnumPhysicalStore → FormatSystemRegPath → RegConnectRegistryExW → BaseBindToMachine → Rpc_OpenPredefHandle → NdrClientCall3
서버가 머신에 RPC 요청을 보낼 때 서버는 공격자의 서버를 기준으로 인증을 실행합니다. 이제 공격자는 피해자의 인증 정보를 사용하여 NTLM 릴레이 공격을 실행할 수 있습니다.
Akamai는 취약점을 이용하고 NTLM 릴레이 플로우를 실행하여 AD CS를 악용하고 도메인 컨트롤러를 장악하는 PetitPotam 공격 시나리오를 재현할 수 있었습니다.
공격자는 취약점을 트리거하려면 도메인의 머신에 대한 접속 권한이 있어야 합니다. NTLM 릴레이 시나리오에서 NTLM 릴레이(Certificate Authority Web Enrollment, Certificate Enrollment Web Service)에 취약한 서비스 중 하나와 함께 AD CS 역할을 추가해야 합니다.
수정
Microsoft는 7월 패치 화요일에서 이 취약점에 대한 패치를 발표했습니다. 문제는 다음과 같이 해결됐습니다.
보안 콜백의 로컬 기능의 범위를 수정하여 LocalrServerCertificateMappingModify에 대한 원격 접속을 차단했습니다
새롭게 추가된 로컬 기능마다 접속 검사를 추가했습니다
공개 타임라인
2022년 4월 26일: 보고서가 Microsoft로 전송
2022년 4월 26일: 상태가 신규에서 검토 및 재현으로 변경
2022년 5월 9일: 상태가 검토 및 재현에서 개발로 변경
2022년 7월 12일: 패치 릴리스
방어 및 탐지
NTLM 릴레이를 방어하기 위해 다음을 권장합니다.
AD CS를 악용하는 NTLM 릴레이 공격에는 종종 TGT 요청이 포함됩니다. 이벤트 로그(EventID 4768)에 머신의 IP 주소 요청이 포함됩니다. 도메인 컨트롤러가 아닌 머신에서 도메인 컨트롤러를 요청하는 TGT 요청은 악성 요청으로 탐지됩니다.
Akamai 보안 연구 저장소에서 개념 증거를 확인할 수 있습니다.
요약
새 기능이 추가되면 기능의 동작뿐만 아니라 사용자가 기능에 접속할 수 있게 하는 방법에도 문제가 발생할 수 있다는 것을 유념해야 합니다. 이번 사례에서는 SMB over QUIC가 Windows에 추가되고 새로운 기능이 Server 서비스에 도입됐습니다. 하지만 취약점은 SMB over QUIC 실행이 아니라 각 RPC 인터페이스에 접속이 제한된 이전 기능에서 발생했습니다.
Akamai 보안 연구팀은 4월 패치 화요일의 RPC 런타임 취약점 분석부터 시작하여5월에 발견한 또 다른 CVE 분석을 통해 MS-RPC에 대해 다방면으로 조사했습니다. 벤 바르니아와 오피르 하르파즈(Ophir Harpaz)는 라스베이거스 DEF CON 30에서 Server 서비스 취약점을 발표했습니다.