엔터프라이즈용 Windows 보호 인쇄 모드의 기본 사항에 대해 알아보려면 엔터프라이즈용 Windows 보호 인쇄 모드를 참조하세요.
Windows 인쇄 시스템은 지금까지 공격의 빈번한 대상이었으며 인쇄 버그는 지난 3년 동안 MSRC(Microsoft 보안 대응 센터)에 보고된 모든 사례 중 9%를 차지했습니다. 프린터 관리, 데이터 변환 및 기타 많은 작업을 처리하는 스풀러 서비스는 Windows 인쇄 시스템의 핵심입니다. 이 프로세스는 WINDOWS에서 가장 높은 권한 수준 중 하나인 SYSTEM으로 실행되므로 매력적인 대상입니다. 또한 스풀러는 표준 사용자가 광범위하게 액세스할 수 있으며 요청 시 타사 코드를 로드합니다. 이러한 드라이버는 역사적으로 업계에서 문서 처리 및 프린터 통신에 대한 균일한 표준이 부족한 시기에 광범위한 프린터를 지원해야 했습니다. 다양한 제조업체의 이 방대한 드라이버 에코시스템을 통해 Windows는 광범위한 이전 프린터와 40개가 넘는 PDL(페이지 설명 언어)을 지원할 수 있습니다. 그러나 이러한 복잡성으로 인해 일반적인 조건 집합을 갖기 어렵습니다. 이러한 복잡성은 사용자에게 더 안전한 옵션을 제공하는 Microsoft의 기능을 제한하는 많은 보안 문제를 제시합니다. 이 문서에서는 인쇄 스택 보안과 관련된 문제를 설명하고 현재 사용자에게 도움이 될 수 있는 몇 가지 정보를 공유합니다. 또한 Microsoft MORSE(공격 연구 및 보안 엔지니어링) 팀과 Windows 인쇄 팀 간의 협업을 미리 볼 수 있으며, 더 이상 타사 드라이버를 로드하지 않고 공격 표면이 감소하여 실행되는 인쇄 스택의 IPP 기반 수정 버전인 Windows 인쇄의 미래가 될 것이라고 생각합니다.
드라이버 문제
인쇄 드라이버의 보안 모델은 Windows 인쇄 스택과 타사 드라이버가 각각 기능을 제공하고 보안 약속을 적용하는 역할을 수행해야 하는 공유 책임 모델을 사용하며 취약성을 방지합니다. 이는 Windows의 다른 하위 시스템과 비슷하지만, 고객이 높은 권한의 시스템 프로세스에 원격 코드를 로드할 때 프로세스가 마찰 없이 진행되기를 원하기 때문에 인쇄는 어려운 시나리오입니다.
타사에서 코드를 로드하면 보안 관점에서 몇 가지 문제가 발생합니다. 로드하려는 코드를 로드해야 할 뿐만 아니라 해당 코드는 예기치 않은 방식으로 애플리케이션의 동작을 변경할 수 있습니다. 예를 들어 드라이버는 스풀러 또는 관련 인쇄 프로세스를 완전히 제어할 수 있는 버그로 이어질 수 있는 복잡한 구문 분석 논리를 지원합니다. 드라이버에서 취약성이 발견되면 Microsoft는 타사에 의존하여 드라이버를 업데이트합니다. 퍼블리셔가 더 이상 존재하지 않거나 이전 제품을 지원하지 않는 것으로 간주하는 경우 취약성을 해결하는 명확한 방법은 없습니다.
공유 책임 모델에서 타사 드라이버에 대한 의존도는 Microsoft의 민첩성과 고객 보호 옵션을 제한합니다. 우리는 종종 새로운 보안 보호의 최첨단에 있지만 타사 코드를 로드할 때 균일하게 배포할 수 없습니다.
호환성
인쇄 드라이버의 한 가지 과제는 나이입니다. 많은 인쇄 드라이버는 수십 년 전에 사용되었으며 CFG(Control Flow Guard), CET(제어 흐름 적용 기술), ACG(임의 코드 가드) 및 Microsoft가 수년에 걸쳐 구현한 다른 많은 보호와 같은 최신 보안 완화와 호환되지 않습니다. 이러한 보호는 종종 "전부 또는 전혀"이므로 참여하는 모든 이진 파일이 보호를 적용하기 위해 호환되는 조치를 취해야 합니다. 모든 인쇄 제조업체가 이러한 드라이버를 업데이트하는 데 필요한 조치를 취하지 않았기 때문에 인쇄 서비스는 현재 이러한 최신 악용 완화의 혜택을 받지 못합니다. 취약성이 발견되면 공격자는 취약성을 악용하는 데 성공할 가능성이 더 높습니다.
과도한 권한
Windows 인쇄 스택은 2년 이상 된 원래 디자인의 많은 측면을 유지합니다. 인쇄 스풀러는 Windows의 표준 관리자 계정보다 더 강력한 특별한 권한이 있는 SYSTEM으로 실행됩니다. 스풀러에 로드된 드라이버(타사 드라이버 포함)는 사용자 요청의 기본 문서 인쇄 및 처리를 위해 이 권한 수준에서 실행됩니다. 스풀러가 수신하는 모든 사용자의 요청에 대해 어려운 것으로 판명될 수 있는 해당 작업에 대한 적절한 액세스 수준을 결정해야 합니다.
스풀러가 이러한 사용 권한을 유지하는 한 가지 이유는 이전 버전과의 호환성 문제 때문입니다. 30년 동안 수천 명의 드라이버가 Windows에서 사용되고 있으며 사용자에게 발생할 수 있는 모든 위험을 식별하기는 어렵습니다.
이상적인 솔루션은 드라이버를 완전히 제거하고 스풀러를 최소 권한 보안 모델로 이동하는 것입니다. 일부 작업에는 시스템 수준 권한이 필요할 수 있지만 가장 확실하지는 않습니다. Microsoft에서 자주 직면하는 과제는 모든 솔루션이 고객의 호환성 요구 사항을 고려해야 한다는 것입니다. 이러한 요구 사항과 보안을 개선하려는 욕구의 균형을 맞추는 것은 어려운 작업입니다. 다행히도 우리는 해결책이 있다고 생각합니다.
IPP 기본 사항
IPP는 HTTP 기반 프로토콜이며 HTTP에서 기대하는 많은 인증 방법을 지원합니다. 각 IPP 요청은 HTTP POST 메시지이며 프린터는 ipps://printer.example.com/ipp/print 같은 URI를 사용하여 식별됩니다. IPP는 다음과 같은 프린터에서 예상하는 모든 일반적인 작업을 지원합니다 .
작업 만들기: 새 인쇄 작업 만들기
문서 보내기: 인쇄 작업에 문서 추가
인쇄 작업: 단일 문서를 사용하여 새 인쇄 작업 만들기
프린터 특성 가져오기: 프린터 상태 및 기능 가져오기
Get-Jobs: 큐에 대기된 작업 목록 가져오기
작업 특성 가져오기: 작업 상태 및 옵션 가져오기
Cancel-Job: 대기 중 작업 취소
무인 인쇄는 PWG 래스터 및 PDF와 같은 공용 표준에 따라 제한된 수의 PDL을 지원합니다. 이렇게 하면 운영 체제에서 변환을 위해 처리해야 하는 고유한 형식 수가 제한되고 코드가 크게 간소화됩니다. 클라이언트 쪽 렌더링은 프린터로 전송된 최종 문서를 생성하는 데 사용됩니다.
PSA(Print Support App)
PSA 를 사용하면 프린터 OEM 및 IHV가 특정 요구 사항에 맞게 기존 IPP 지원을 확장할 수 있습니다. 모든 프린터가 동일한 기능 및 구성 옵션을 지원하는 것은 아닙니다. PSA는 사용자가 기대하는 환경을 손상시키지 않고 맞춤형 사용자 환경을 허용합니다.
포인트 앤 프린트
Point and Print 는 사용자가 드라이버를 제공하지 않고 원격 프린터에 연결할 수 있도록 하고 클라이언트에 필요한 모든 드라이버를 설치하는 기능입니다. 포인트 앤 프린트는 IPP와 함께 제공되지만, 작동 방식이 다릅니다. 더 이상 드라이버를 설치하지 않아도 되지만 프린터를 설정하려면 몇 가지 기본 구성이 필요합니다. 이 프로세스는 IPP에서 다음과 같이 작동합니다.
Windows 클라이언트 및 서버가 RPC를 통해 연결
서버와 클라이언트 모두 각각의 Microsoft IPP 드라이버를 사용합니다.
서버에서 IPP를 사용하여 프린터와 통신
PSA가 설치됩니다(사용 가능한 경우).
안전
현재 Windows에서 IPP 기반 인쇄는 타사 드라이버의 필요성을 제거합니다. IPP는 전송 암호화를 지원하며 PDL의 지원 수가 제한되어 구문 분석 복잡성이 크게 감소합니다. 이는 드라이버를 사용해야 하는 모델에 비해 의미 있는 개선 사항입니다.
오늘날 Windows의 IPP 인쇄는 보안 관점에서 이미 훌륭한 단계이며, 가능한 한 사용자가 전환하는 것이 좋습니다. 또한 관리자는 이 작업의 우선 순위를 차량 전체에서 지정하는 것이 좋습니다.
Windows 보호 인쇄 모드의 스풀러 보안
Windows 보호 인쇄 모드는 Mopria 인증 프린터 만 지원되는 기존 IPP 인쇄 스택을 기반으로 하며 타사 드라이버를 로드하는 기능을 사용하지 않도록 설정합니다. 이렇게 하면 Windows에서 인쇄 보안을 의미 있게 개선할 수 있으며, 그렇지 않으면 발생할 수 없습니다. 궁극적으로 가장 안전한 기본 구성을 제공하고 사용자가 프린터와 호환되지 않는 경우 언제든지 레거시(드라이버 기반) 인쇄로 되돌릴 수 있는 유연성을 제공하는 것이 목표입니다. Windows 보호 인쇄 모드를 사용하려면 프린터에서 IPP를 사용하도록 설정되어 있는지 확인합니다.
사용자가 Windows 보호 인쇄 모드를 사용하도록 설정하면 Windows 보호 인쇄 모드 개선 사항을 구현하는 새 스풀러 프로세스로 일반 스풀러 작업이 지연됩니다. 이러한 변경 내용 중 일부를 살펴보겠습니다.
제한된 보안 인쇄 구성
Windows 보호 인쇄 모드에서는 많은 레거시 구성이 더 이상 유효하지 않습니다. Windows에 대한 일반적인 공격은 프린터 포트 모니터가 DLL(동적 링크 라이브러리)일 수 있다는 사실을 악용하고 공격자가 이를 악용하여 악성 코드를 로드합니다. 공격자는 또한 상징적 링크를 사용하여 스풀러를 속여 악성 코드를 로드할 수 있었지만, 이제 불가능합니다. IPP를 사용하는 경우에만 적합한 값으로 구성을 제한하도록 업데이트되는 많은 레거시 API가 있습니다. 이렇게 하면 공격자가 스풀러를 사용하여 시스템의 파일을 수정할 수 있는 기회가 제한됩니다.
모듈 차단
모듈 로드를 허용하는 API는 새 모듈의 로드를 방지하기 위해 수정됩니다. 예를 들어 AddPrintProviderW 및 기타 호출은 악성일 수 있는 모듈을 로드합니다. 또한 IPP에 필요한 Microsoft 서명된 이진 파일만 로드되도록 하는 제한을 적용합니다.
사용자별 XPS 렌더링
XPS 렌더링은 Windows 보호 인쇄 모드에서 SYSTEM 대신 사용자로 실행됩니다. 오늘날 Windows의 대부분의 인쇄 작업에는 일부 XPS 변환이 포함되며 이 작업(PrintFilterPipelineSVC)을 처리하는 프로세스는 많은 메모리 손상 취약성의 원인입니다. 다른 문제와 마찬가지로 이 프로세스를 사용자로 실행하면 이러한 버그의 영향이 최소화됩니다.
일반적인 스풀러 작업을 위한 낮은 수준의 권한 사용
드라이버를 제거하면 Spooler 프로세스에서 수행하는 일반적인 작업을 수행하고 사용자로 실행되는 프로세스로 이동할 수도 있습니다. 이러한 프로세스에 메모리 손상 취약성이 있는 경우 해당 영향은 사용자만 수행할 수 있는 작업으로 제한됩니다.
새 Spooler Worker 프로세스에는 SeTcbPrivilege, SeAssignPrimaryTokenPrivilege와 같은 많은 권한을 제거하고 SYSTEM IL에서 더 이상 실행되지 않는 새로운 제한된 토큰이 있습니다.
이진 완화
타사 이진 파일을 제거함으로써, Microsoft가 수년에 걸쳐 투자해 온 많은 이진 방지책을 활성화할 수 있게 되었습니다. Windows의 보호된 인쇄 모드에서 프로세스는 새로운 여러 이진 보호 조치와 함께 실행됩니다. 다음은 몇 가지 주요 기능입니다.
제어 흐름 적용 기술(CFG, CET) – ROP(반환 지향 프로그래밍) 기반 공격을 완화하는 데 도움이 되는 하드웨어 기반 완화입니다.
자식 프로세스 만들기 사용 안 함 - 자식 프로세스 만들기가 차단됩니다. 이렇게 하면 공격자가 Spooler에서 코드 실행을 가져올 수 있는 경우 새 프로세스를 생성할 수 없습니다.
Redirection Guard – 종종 인쇄 스풀러를 대상으로 하는 많은 일반적인 경로 리디렉션 공격을 방지합니다.
임의 Code Guard – 프로세스 내에서 동적 코드 생성을 방지합니다.
이러한 보호를 통해 취약성이 발견되면 취약성을 악용하기가 더 어려워집니다.
Windows로 보호된 인쇄 모드를 사용하여 포인트 및 인쇄
위에서 설명한 것처럼 Point and Print는 일반적으로 드라이버 로드뿐만 아니라 IPP 프린터 구성을 허용합니다. 일부 사용자에게는 IPP 프린터만 있는 환경이 있을 수 있지만 악의적인 공격자는 프린터로 가장하여 사용자를 속여 드라이버를 설치할 수 있습니다. Windows 보호 인쇄 모드는 Point and Print가 타사 드라이버를 설치하지 못하게 하여 이러한 위험을 완화합니다.
관련 문서
| 조항 | 설명 |
|---|---|
| Windows 보호 인쇄 모드 개요 | Windows 보호 인쇄 모드, 해당 이점 및 사용 방법에 대한 개요를 제공합니다. |
| 엔터프라이즈용 Windows 보호 인쇄 모드 | Windows 보호 인쇄 모드를 사용하는 기업에 대한 지침을 제공합니다. |
| 최신 인쇄 플랫폼 검색 | 최신 인쇄 플랫폼의 개요와 레거시 프린터 드라이버에 대한 보안, 호환성 및 안정성 이점을 제공합니다. |
| Windows에서 타사 프린터 드라이버에 대한 서비스 종료 일정 | 레거시 v3 및 v4 Windows 인쇄 드라이버에 대한 서비스 계획의 종료에 대한 정보를 제공합니다. |
| 인쇄 지원 앱 디자인 가이드 | 디바이스에 대한 PSA(인쇄 지원 앱)를 구현하는 프린터 OEM 및 IHV에 대한 지침과 예제를 제공합니다. |
| 인쇄 지원 앱 v3 API 디자인 가이드 | 디바이스에 대한 v3 PSA(인쇄 지원 앱)를 구현하는 프린터 OEM 및 IHV에 대한 지침과 예제를 제공합니다. |
| 인쇄 지원 앱 v4 API 디자인 가이드 | 디바이스에 대한 v4 PSA(인쇄 지원 앱)를 구현하는 프린터 OEM 및 IHV에 대한 지침과 예제를 제공합니다. |
| 인쇄 지원 가상 프린터용 MSIX 매니페스트 사양 | 인쇄 지원 가상 프린터를 구현하는 프린터 OEM 및 IHV에 대한 MSIX 매니페스트 지침 및 예제를 제공합니다. |
| 인쇄 지원 앱 연결 | PSA(인쇄 지원 앱)를 프린터와 연결하기 위한 지침과 예제를 제공합니다. |