
SpecuCheck는 CVE-2017-5754 (Meltdown), CVE-2017-5715 (Spectre v2), CVE-2018-3260 (Foreshadow) 및 CVE-2018-3639 (Spectre v4)에 대한 소프트웨어 완화 및 하드웨어의 상태를 확인하는 Windows 유틸리티입니다.
SpecuCheck는 CVE-2017-5754(Meltdown), CVE-2017-5715(Spectre v2), CVE-2018-3260(Foreshadow), CVE-2018-3639(Spectre v4)에 대한 소프트웨어 및 하드웨어 완화 상태를 확인하는 Windows 유틸리티입니다. 이 도구는 2018년 1월에 도입된 최신 패치의 일부로 NtQuerySystemInformation API 호출에 추가된 두 가지 새로운 정보 클래스를 사용하며, Windows 커널이 보는 대로 데이터를 보고합니다.
이제 공식 Microsoft PowerShell Cmdlet 모듈도 제공되며, 이 정보를 얻는 권장되고 지원되는 방법입니다.

2018년 1월 3일, Intel, AMD, ARM Holdings 및 여러 OS 공급업체는 Google Project Zero가 발견한 일련의 취약점을 보고했습니다:
Microsoft는 같은 날 Windows 7 SP1 이상에 대한 패치를 출시했습니다. 이러한 패치는 아키텍처, OS 버전, 부팅 설정 및 여러 하드웨어 관련 속성에 따라 이러한 문제에 대한 여러 소프트웨어 및 하드웨어 완화를 적용합니다. 이러한 완화의 활성화 상태, 가용성 및 구성은 Windows 커널이 여러 전역 변수에 저장하며, 문서화되지 않은 시스템 호출을 통해 사용자 모드 호출자에게 노출됩니다.
또한, 8월 패치 화요일의 패치로 Windows 7 SP1 이상에서 수정된 Spectre 변종 4: 추측 저장 우회(CVE-2018-3639) 및 Foreshadow: L1 터미널 오류(CVE-2018-3620)와 같은 새로운 사이드 채널 공격이 보고되었습니다.
SpecuCheck는 시스템이 실제로 패치되었는지(패치되지 않은 시스템은 호출에 실패함)와 완화 상태를 확인하기 위해 이 시스템 호출을 활용하며, 이는 잠재적인 성능 문제를 결정하는 데 사용될 수 있습니다.
원래 이 문제에 대해 많은 소음, 과장, 마케팅이 있었고, 영향을 받았는지와 성능 오버헤드가 얼마인지 확인하는 방법에 대한 문서는 많지 않았습니다. SpecuCheck는 사용자와 IT 부서가 Windows 디버거를 사용하거나 API를 직접 리버스 엔지니어링하지 않아도 해당 데이터에 쉽게 접근할 수 있도록 하는 것을 목표로 했습니다.
그 이후로 Microsoft는 커널 모드에서 해당 데이터를 간결하게 노출하는 훌륭한 작업을 수행했으며, 이는 커널의 다양한 완화 기술 및 하드웨어 기능 지원 및 사용을 간결하게 나타냅니다. 또한 해당 데이터를 검색하기 위해 PowerShell CmdLet Module을 출시했습니다. 따라서 SpecuCheck는 연구 도구로만 남아 있으며 권장되지 않습니다. 대신 Microsoft 승인 PowerShell 모듈을 사용하십시오.
SpecuCheck를 실행하려면 명령줄에서 c:\SpecuCheck.exe를 실행하기만 하면 됩니다.
그러면 어떤 기능/완화가 활성화되었는지 나타내는 정보 화면이 표시됩니다. 다음 텍스트가 표시되면:
Your system either does not have the appropriate patch, or it may not support the information class required
이는 시스템이 현재 이러한 취약점을 완화하기 위해 패치되지 않았음을 나타냅니다.
제 연구나 작업에 대해 더 알고 싶으시다면 제 블로그 http://www.alex-ionescu.com와 제 교육 및 컨설팅 회사인 Winsider Seminars & Solutions Inc.의 http://www.windows-internals.com를 방문해 주시기 바랍니다.
또한 매우 유익한 Project Zero 포스트를 꼭 읽어보시기 바랍니다.
적절하고 필요한 Windows 패치에 대한 추가 정보는 Microsoft 권고와 추가 Microsoft 지침을 읽어보시기 바랍니다.
SpecuCheck는 변경될 수 있는 문서화되지 않은 시스템 호출 및 정보 클래스에 의존합니다. 또한 SpecuCheck는 Windows 커널이 완화 및 하드웨어 기능의 상태에 대해 저장하는 정보만 반환합니다. 정책 설정(레지스트리, 부팅 매개변수) 또는 기타 호환성 플래그에 따라 Windows 커널의 상태가 실제 하드웨어 상태와 일치하지 않을 수 있습니다. 이 도구의 목표는 OS에 구애받지 않는 하드웨어 평가가 아닌 Windows 특정 평가를 제공하는 것입니다.
SpecuCheck는 연구 도구일 뿐이며 일반 또는 상업적 사용에는 권장되지 않습니다. 대신 Microsoft 승인 PowerShell 모듈을 사용하십시오.
Copyright 2018 Alex Ionescu. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided
that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and
the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions
and the following disclaimer in the documentation and/or other materials provided with the
distribution.
THIS SOFTWARE IS PROVIDED BY ALEX IONESCU ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ALEX IONESCU
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those of the authors and
should not be interpreted as representing official policies, either expressed or implied, of Alex Ionescu.