WinRing0
WinRing0 is a hardware access library for Windows.
왜 Windows가 각종 PC 모니터링 앱을 악성코드로 인식하기 시작했는가
현대 OS의 보안 모델
- 운영체제는 시스템을 보호하기 위해서 "protection ring" 구조를 채용하고 있음. Ring 0부터 3까지 있지만 현대 OS에서는 0과 3만 사용하고 있음.
- Ring 0은 커널 영역으로 하드웨어와 메모리, CPU 레지스터 등 컴퓨터의 모든 부분에 무제한적인 직접 접근이 가능함.
- Ring 3은 응용 영역으로 시스템 소프트웨어를 제외한 일반적인 응용 프로그램들은 모두 여기에서 동작함.
- 바깥쪽 ring은 안쪽 ring을 볼 수 없는 구조로 되어 있으며, 응용 영역에서 커널 영역에 접근하기 위해서는 장치 드라이버가 필요함.
PC 주변기기 시장의 현주소
- PC 주변기기 시장의 경쟁이 치열해지면서 제조사들은 기능 차별화를 위해 전용 소프트웨어를 함께 제공하는 경우가 많아졌음.
- 가령 CPU 쿨러의 경우 CPU의 온도에 따라 팬의 속도를 직접 제어할 수 있으며, 이를 소프트웨어를 통해 설정할 수 있음.
윈도 드라이버 모델(WDM)과 WinRing0
- SMBus를 통해 하드웨어를 제어하기 위해서는 ring 0 위에서 동작하는 커널 모드 드라이버가 필요함.
- 커널 모드 드라이버는 고도의 보안성이 요구되기 때문에 EV (Extended Validation) 전자서명이 되어 있어야 하며, MS가 직접 검수 후 드라이버를 전자서명하는 절차가 요구됨.
- 이 절차가 까다롭고 많은 비용이 들기 때문에 주변기기 제조사들은 WinRing0을 통해 이를 우회하기 시작함.
- WinRing0은 CrystalDiskMark를 만든 Miyazaki Noriyuki가 2007년 개발한 드라이버 및 라이브러리로, 응용 레벨에서 ring 0에 존재하는 여러 부분들을 응용 계층에 노출시키는 기능을 함.
- 주변기기 제조사들은 WinRing0을 통해 응용 계층에서 ring 0에 직접 접근하여 하드웨어를 제어하는 방식으로 소프트웨어를 제작함.
- WinRing0은 Windows 드라이버 인증 절차가 강화되기 이전에 cross-signing을 통해 전자서명된 것으로 보임.
- 제작자는 WinRing0을 저수준 프로그래밍을 탐구하기 위한 일종의 토이 프로젝트의 성격으로 만들었다고 밝혔으나, 이를 실제 제품에 적용하는 사례가 계속 나오면서 2010년 더 이상 사용하지 말 것을 권고하면서 개발을 중단함.
- 그러나 오픈 소스의 특성상 개발자가 관리를 중단한 이후에도 계속 배포되며 여러 곳에서 쓰여 옴.
WinRing0의 보안 위협
- WinRing0의 목적이 커널에서 관리해야 하는 영역을 응용 계층에 그대로 노출시키는 것이기 때문에 이는 즉 OS의 근본적인 보안을 무력화한다는 의미이며, 관련하여 우려가 제기되어 옴.
- 관련하여 여러 건의 CVE가 등록됨 (CVE-2019-6333, CVE-2020-14979, CVE-2021-44901)
- 신용카드 번호, 브라우징 기록, 브라우저 쿠키 등을 탈취한 것으로 알려진 "SteelFox" 멀웨어가 이를 이용하는 등 실제 공격이 이루어진 사례 역시 발견됨.
- WinRing0을 직접 사용하는 소프트웨어 뿐만 아니라 OpenHardwareMonitor (https://github.com/openhardwaremonitor/openhardwaremonitor) LibreHardwareMonitor (https://github.com/LibreHardwareMonitor/LibreHardwareMonitor) 를 통해 간접적으로 WinRing0에 의존하는 수많은 소프트웨어들이 이에 영향을 받음.
- HP의 Touchpoint Analytics 소프트웨어가 OpenHardwareMonitor를 사용하고 있어서 2019년 당시 시중에 유통되는 모든 HP의 노트북 컴퓨터가 영향을 받음.