Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- :: github.com/microsoft/SpeculationControl presented in a click to run batch-ps hybrid with auto-verify and menu by AveYo
- @echo off & title SpeculationControl Menu v20190916
- :: run bundled Get-SpeculationControlSettings
- powershell -noprofile -c "$f=[io.file]::ReadAllText('%~f0') -split \":speculationcontrol\:.*`r`n\"; iex ($f[1]);"
- rem timeout /t -1 & exit/b uncomment to skip optional SpeculationControl Menu section below (safe to delete the whole section)
- ::________________________________________________________________________________________________________________________________
- :: grab SYS info
- call :wmic baseboard "manufacturer,product,version"
- call :wmic bios SMBIOSBIOSVersion
- call :reg microcode "HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0" "Update Revision"
- call :wmic cpu name
- call :wmic cpu Manufacturer
- if "%cpu_manufacturer%" equ "AuthenticAMD" (set "amd=AMD") else set "amd="
- if "%cpu_manufacturer%" equ "GenuineIntel" (set "intel=Intel" & set "mtl=Hyper-Threading") else set "intel=" & set "mtl=SMT"
- call :wmic cpu NumberOfCores
- call :wmic cpu NumberOfLogicalProcessors
- if "%cpu_NumberOfCores%" equ "%cpu_NumberOfLogicalProcessors%" (set "ht=") else set "ht=Enabled"
- if defined ht (set "mt=%mtl% Enabled") else set "mt=%mtl% Disabled/Not Supported"
- call :reg product "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" ProductName
- call :reg release "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" ReleaseId
- call :reg buildex "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" BuildLabEx
- set "x86=%buildex:amd64=%"
- if "%buildex%" equ "%x86%" (set "arch=x86") else set "arch=x64"
- set "hyperv=" & sc query "vmms" 2>nul >nul && set "hyperv=Installed"
- :: print SYS info
- echo(
- echo * Cancel the SpeculationControl Menu / UAC prompt if not interested in adjusting mitigations
- echo ===========================================================
- echo MainBoard: %baseboard_manufacturer% %baseboard_product% %baseboard_version%
- echo BIOS Ver: %bios_SMBIOSBIOSVersion%
- echo MicroCode: %microcode%
- echo CPU: %cpu_name%
- echo MT: %mt%
- echo OS: %product% %arch% Version %release%
- echo Build: %buildex%
- echo Hyper-V: %hyperv%
- echo ===========================================================
- :: self-elevate passing args and preventing loop
- set "args="%~f0" %*" & reg query HKU\S-1-5-19>nul 2>nul || if "%_%" neq "y" (
- powershell -c "$Env:_='y';$ErrorActionPreference=0;start cmd -ArgumentList \"/c call $Env:args\" -verb runas" && exit)
- :: show SpeculationControl Menu only if running as admin
- reg query HKU\S-1-5-19>nul 2>nul && call :menu
- :: done
- timeout /t -1
- exit/b
- :menu
- set "?=Disable all OS mitigations,+ mitigate Meltdown,+ mitigate Spectre,+ mitigate Speculative Store Bypass,+ mitigate Microarchitectural Data Sampling (all)"
- set "$=" & call :choices $ "%?%" 0 "SpeculationControl Menu - choices are incremental" 15 0xff520018 Snow 500
- if not defined $ exit
- call :menu%$%
- echo Reboot required to apply changes..
- goto :menu loop
- :menu1 Disable all OS mitigations
- echo %DATE% %TIME%: Disabling all OS mitigations!
- reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t reg_dword /d 3 /f >nul
- reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t reg_dword /d 3 /f >nul
- reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization" /v MinVmVersionForCpuBasedMitigations /f >nul 2>nul
- exit/b
- :menu2 Mitigate Meltdown
- echo %DATE% %TIME%: Enabling Meltdown mitigations
- reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t reg_dword /d 1 /f >nul
- reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t reg_dword /d 3 /f >nul
- call :hyperv
- if defined intel exit/b only on Intel
- reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t reg_dword /d 3 /f >nul
- exit/b
- :menu3 Mitigate Spectre
- echo %DATE% %TIME%: Enabling Spectre + Meltdown mitigations
- reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t reg_dword /d 0 /f >nul
- reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t reg_dword /d 3 /f >nul
- call :hyperv
- if defined intel exit/b full mitigation only on AMD/ARM
- reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t reg_dword /d 64 /f >nul
- exit/b
- :menu4 Mitigate Speculative Store Bypass
- echo %DATE% %TIME%: Enabling Speculative Store Bypass + Spectre + Meltdown mitigations
- reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t reg_dword /d 8 /f >nul
- reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t reg_dword /d 3 /f >nul
- call :hyperv
- if defined intel exit/b full mitigation only on AMD/ARM
- reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t reg_dword /d 72 /f >nul
- exit/b
- :menu5 Mitigate Microarchitectural Data Sampling (All)
- echo %DATE% %TIME%: Enabling Microarchitectural Data Sampling + L1TF + SSBD + Spectre + Meltdown mitigations
- reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t reg_dword /d 72 /f >nul
- reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t reg_dword /d 3 /f >nul
- call :hyperv
- if not defined ht (
- reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t reg_dword /d 8264 /f >nul
- ) else echo Consider disabling HyperThreading for a stronger mitigation of MDS
- exit/b
- :hyperv
- if defined hyperv (
- reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization" /v MinVmVersionForCpuBasedMitigations /t reg_sz /d "1.0" /f >nul
- echo Consider shutting down all Hyper-V VMs to apply host mitigations
- )
- exit/b
- :wmic [USAGE] call :wmic OS version [OUTPUTS] OS_Version
- (for /f "usebackq tokens=* skip=2" %%s in (`"wmic %~1 get %~2 /format:list"`) do set "%~1_%%s" >nul 2>nul) & exit/b
- :reg [USAGE] call :reg ResultVar "HKCU\KeyName" "ValueName"
- (for /f "skip=2 delims=" %%s in ('reg query "%~2" /v "%~3" /z 2^>nul') do set ".=%%s" & call set "%~1=%%.:*) =%%") & exit/b
- :choices dialog w buttons: 1=outvar 2="choices" 3=selected [optional] 4="caption" 5=textsize 6=backcolor 7=textcolor 8=minsize
- set "snippet=iex(([io.file]::ReadAllText('%~f0')-split':PS_CHOICE\:.*')[1]); Choices %*"
- (for /f "usebackq" %%s in (`powershell -noprofile -c "%snippet:"='%"`) do set "%~1=%%s") &exit/b :PS_CHOICE:
- function Choices($outputvar,$choices,$sel=1,$caption='Choose',[byte]$sz=12,$bc='MidnightBlue',$fc='Snow',[string]$min='400') {
- [void][System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); $f=New-Object System.Windows.Forms.Form;
- $bt=@(); $i=1; $global:rez=''; $ch=($choices+',Cancel').split(','); $ch | foreach { $b=New-Object System.Windows.Forms.Button;
- $b.Name=$i; $b.Text=$_; $b.Font='Tahoma,'+$sz; $b.Margin='0,0,9,9'; $b.Location='9,'+($sz*3*$i-$sz); $b.MinimumSize=$min+',18';
- $b.AutoSize=1; $b.cursor='Hand'; $b.add_Click({$global:rez=$this.Name;$f.Close()}); $f.Controls.Add($b); $bt+=$b; $i++ }
- $f.Text=$caption; $f.BackColor=$bc; $f.ForeColor=$fc; $f.StartPosition=4; $f.AutoSize=1; $f.AutoSizeMode=0; $f.MaximizeBox=0;
- $f.AcceptButton=$bt[$sel-1]; $f.CancelButton=$bt[-1]; $f.Add_Shown({$f.Activate();$bt[$sel-1].focus()}); $null=$f.ShowDialog();
- if($global:rez -ne $ch.length){ return $global:rez }else{ return $null } } :PS_CHOICE:
- :: Let's Make Console Scripts Friendlier Initiative by AveYo - MIT License - call :choices rez "one, 2 two, three" 3 'Usage'
- ::________________________________________________________________________________________________________________________________
- :speculationcontrol:! verify
- $sig = Get-AuthenticodeSignature -Content ([text.encoding]::UTF8.GetBytes($f[2])) -SourcePathorExtension .psm1
- if ($sig.Status -ne 0) { write-host COPY-PASTE ERROR, USE DOWNLOAD BUTTON ON PASTEBIN AND RUN AGAIN! }
- else { $sig | fl; iex ($f[2]); $scs = Get-SpeculationControlSettings }
- #timeout /t -1
- :speculationcontrol:[ start
- function Get-SpeculationControlSettings {
- <#
- .SYNOPSIS
- This function queries the speculation control settings for the system.
- .DESCRIPTION
- This function queries the speculation control settings for the system.
- .PARAMETER Quiet
- This parameter suppresses host output that is displayed by default.
- #>
- [CmdletBinding()]
- param (
- [switch]$Quiet
- )
- process {
- $NtQSIDefinition = @'
- [DllImport("ntdll.dll")]
- public static extern int NtQuerySystemInformation(uint systemInformationClass, IntPtr systemInformation, uint systemInformationLength, IntPtr returnLength);
- '@
- $ntdll = Add-Type -MemberDefinition $NtQSIDefinition -Name 'ntdll' -Namespace 'Win32' -PassThru
- [System.IntPtr]$systemInformationPtr = [System.Runtime.InteropServices.Marshal]::AllocHGlobal(4)
- [System.IntPtr]$returnLengthPtr = [System.Runtime.InteropServices.Marshal]::AllocHGlobal(4)
- $object = New-Object -TypeName PSObject
- try {
- if ($PSVersionTable.PSVersion -lt [System.Version]("3.0.0.0")) {
- $cpu = Get-WmiObject Win32_Processor
- }
- else {
- $cpu = Get-CimInstance Win32_Processor
- }
- if ($cpu -is [array]) {
- $cpu = $cpu[0]
- }
- $PROCESSOR_ARCHITECTURE_ARM64 = 12
- $PROCESSOR_ARCHITECTURE_ARM = 5
- $manufacturer = $cpu.Manufacturer
- $processorArchitecture = $cpu.Architecture
- $isArmCpu = ($processorArchitecture -eq $PROCESSOR_ARCHITECTURE_ARM) -or ($processorArchitecture -eq $PROCESSOR_ARCHITECTURE_ARM64)
- #
- # Query branch target injection information.
- #
- if ($Quiet -ne $true) {
- Write-Host "For more information about the output below, please refer to https://support.microsoft.com/help/4074629" -ForegroundColor Cyan
- Write-Host
- Write-Host "Speculation control settings for CVE-2017-5715 [branch target injection]" -ForegroundColor Cyan
- if ($manufacturer -eq "AuthenticAMD") {
- Write-Host "AMD CPU detected: mitigations for branch target injection on AMD CPUs have additional registry settings for this mitigation, please refer to FAQ #15 at https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/ADV180002" -ForegroundColor Cyan
- }
- Write-Host
- }
- $btiHardwarePresent = $false
- $btiWindowsSupportPresent = $false
- $btiWindowsSupportEnabled = $false
- $btiDisabledBySystemPolicy = $false
- $btiDisabledByNoHardwareSupport = $false
- $ssbdAvailable = $false
- $ssbdHardwarePresent = $false
- $ssbdSystemWide = $false
- $ssbdRequired = $null
- $mdsHardwareProtected = $null
- $mdsMbClearEnabled = $false
- $mdsMbClearReported = $false
- [System.UInt32]$systemInformationClass = 201
- [System.UInt32]$systemInformationLength = 4
- $retval = $ntdll::NtQuerySystemInformation($systemInformationClass, $systemInformationPtr, $systemInformationLength, $returnLengthPtr)
- if ($retval -eq 0xc0000003 -or $retval -eq 0xc0000002) {
- # fallthrough
- }
- elseif ($retval -ne 0) {
- throw (("Querying branch target injection information failed with error {0:X8}" -f $retval))
- }
- else {
- [System.UInt32]$scfBpbEnabled = 0x01
- [System.UInt32]$scfBpbDisabledSystemPolicy = 0x02
- [System.UInt32]$scfBpbDisabledNoHardwareSupport = 0x04
- [System.UInt32]$scfHwReg1Enumerated = 0x08
- [System.UInt32]$scfHwReg2Enumerated = 0x10
- [System.UInt32]$scfHwMode1Present = 0x20
- [System.UInt32]$scfHwMode2Present = 0x40
- [System.UInt32]$scfSmepPresent = 0x80
- [System.UInt32]$scfSsbdAvailable = 0x100
- [System.UInt32]$scfSsbdSupported = 0x200
- [System.UInt32]$scfSsbdSystemWide = 0x400
- [System.UInt32]$scfSsbdRequired = 0x1000
- [System.UInt32]$scfSpecCtrlRetpolineEnabled = 0x4000
- [System.UInt32]$scfSpecCtrlImportOptimizationEnabled = 0x8000
- [System.UInt32]$scfEnhancedIbrs = 0x10000
- [System.UInt32]$scfHvL1tfStatusAvailable = 0x20000
- [System.UInt32]$scfHvL1tfProcessorNotAffected = 0x40000
- [System.UInt32]$scfHvL1tfMigitationEnabled = 0x80000
- [System.UInt32]$scfHvL1tfMigitationNotEnabled_Hardware = 0x100000
- [System.UInt32]$scfHvL1tfMigitationNotEnabled_LoadOption = 0x200000
- [System.UInt32]$scfHvL1tfMigitationNotEnabled_CoreScheduler = 0x400000
- [System.UInt32]$scfEnhancedIbrsReported = 0x800000
- [System.UInt32]$scfMdsHardwareProtected = 0x1000000
- [System.UInt32]$scfMbClearEnabled = 0x2000000
- [System.UInt32]$scfMbClearReported = 0x4000000
- [System.UInt32]$flags = [System.UInt32][System.Runtime.InteropServices.Marshal]::ReadInt32($systemInformationPtr)
- $btiHardwarePresent = ((($flags -band $scfHwReg1Enumerated) -ne 0) -or (($flags -band $scfHwReg2Enumerated)))
- $btiWindowsSupportPresent = $true
- $btiWindowsSupportEnabled = (($flags -band $scfBpbEnabled) -ne 0)
- $btiRetpolineEnabled = (($flags -band $scfSpecCtrlRetpolineEnabled) -ne 0)
- $btiImportOptimizationEnabled = (($flags -band $scfSpecCtrlImportOptimizationEnabled) -ne 0)
- $mdsHardwareProtected = (($flags -band $scfMdsHardwareProtected) -ne 0)
- $mdsMbClearEnabled = (($flags -band $scfMbClearEnabled) -ne 0)
- $mdsMbClearReported = (($flags -band $scfMbClearReported) -ne 0)
- if (($manufacturer -eq "AuthenticAMD") -or
- ($isArmCpu -eq $true)) {
- $mdsHardwareProtected = $true
- }
- if ($btiWindowsSupportEnabled -eq $false) {
- $btiDisabledBySystemPolicy = (($flags -band $scfBpbDisabledSystemPolicy) -ne 0)
- $btiDisabledByNoHardwareSupport = (($flags -band $scfBpbDisabledNoHardwareSupport) -ne 0)
- }
- $ssbdAvailable = (($flags -band $scfSsbdAvailable) -ne 0)
- if ($ssbdAvailable -eq $true) {
- $ssbdHardwarePresent = (($flags -band $scfSsbdSupported) -ne 0)
- $ssbdSystemWide = (($flags -band $scfSsbdSystemWide) -ne 0)
- $ssbdRequired = (($flags -band $scfSsbdRequired) -ne 0)
- }
- if ($Quiet -ne $true -and $PSBoundParameters['Verbose']) {
- Write-Verbose "BpbEnabled : $(($flags -band $scfBpbEnabled) -ne 0)"
- Write-Verbose "BpbDisabledSystemPolicy : $(($flags -band $scfBpbDisabledSystemPolicy) -ne 0)"
- Write-Verbose "BpbDisabledNoHardwareSupport : $(($flags -band $scfBpbDisabledNoHardwareSupport) -ne 0)"
- Write-Verbose "HwReg1Enumerated : $(($flags -band $scfHwReg1Enumerated) -ne 0)"
- Write-Verbose "HwReg2Enumerated : $(($flags -band $scfHwReg2Enumerated) -ne 0)"
- Write-Verbose "HwMode1Present : $(($flags -band $scfHwMode1Present) -ne 0)"
- Write-Verbose "HwMode2Present : $(($flags -band $scfHwMode2Present) -ne 0)"
- Write-Verbose "SmepPresent : $(($flags -band $scfSmepPresent) -ne 0)"
- Write-Verbose "SsbdAvailable : $(($flags -band $scfSsbdAvailable) -ne 0)"
- Write-Verbose "SsbdSupported : $(($flags -band $scfSsbdSupported) -ne 0)"
- Write-Verbose "SsbdSystemWide : $(($flags -band $scfSsbdSystemWide) -ne 0)"
- Write-Verbose "SsbdRequired : $(($flags -band $scfSsbdRequired) -ne 0)"
- Write-Verbose "SpecCtrlRetpolineEnabled : $(($flags -band $scfSpecCtrlRetpolineEnabled) -ne 0)"
- Write-Verbose "SpecCtrlImportOptimizationEnabled : $(($flags -band $scfSpecCtrlImportOptimizationEnabled) -ne 0)"
- }
- }
- if ($Quiet -ne $true) {
- Write-Host "Hardware support for branch target injection mitigation is present:"($btiHardwarePresent)
- Write-Host "Windows OS support for branch target injection mitigation is present:"($btiWindowsSupportPresent)
- Write-Host "Windows OS support for branch target injection mitigation is enabled:"($btiWindowsSupportEnabled)
- if ($btiWindowsSupportPresent -eq $true -and $btiWindowsSupportEnabled -eq $false) {
- Write-Host "Windows OS support for branch target injection mitigation is disabled by system policy:"($btiDisabledBySystemPolicy)
- Write-Host "Windows OS support for branch target injection mitigation is disabled by absence of hardware support:"($btiDisabledByNoHardwareSupport)
- }
- }
- $object | Add-Member -MemberType NoteProperty -Name BTIHardwarePresent -Value $btiHardwarePresent
- $object | Add-Member -MemberType NoteProperty -Name BTIWindowsSupportPresent -Value $btiWindowsSupportPresent
- $object | Add-Member -MemberType NoteProperty -Name BTIWindowsSupportEnabled -Value $btiWindowsSupportEnabled
- $object | Add-Member -MemberType NoteProperty -Name BTIDisabledBySystemPolicy -Value $btiDisabledBySystemPolicy
- $object | Add-Member -MemberType NoteProperty -Name BTIDisabledByNoHardwareSupport -Value $btiDisabledByNoHardwareSupport
- $object | Add-Member -MemberType NoteProperty -Name BTIKernelRetpolineEnabled -Value $btiRetpolineEnabled
- $object | Add-Member -MemberType NoteProperty -Name BTIKernelImportOptimizationEnabled -Value $btiImportOptimizationEnabled
- #
- # Query kernel VA shadow information.
- #
- if ($Quiet -ne $true) {
- Write-Host
- Write-Host "Speculation control settings for CVE-2017-5754 [rogue data cache load]" -ForegroundColor Cyan
- Write-Host
- }
- $kvaShadowRequired = $true
- $kvaShadowPresent = $false
- $kvaShadowEnabled = $false
- $kvaShadowPcidEnabled = $false
- $l1tfRequired = $true
- $l1tfMitigationPresent = $false
- $l1tfMitigationEnabled = $false
- $l1tfFlushSupported = $false
- $l1tfInvalidPteBit = $null
- [System.UInt32]$systemInformationClass = 196
- [System.UInt32]$systemInformationLength = 4
- $retval = $ntdll::NtQuerySystemInformation($systemInformationClass, $systemInformationPtr, $systemInformationLength, $returnLengthPtr)
- if ($retval -eq 0xc0000003 -or $retval -eq 0xc0000002) {
- }
- elseif ($retval -ne 0) {
- throw (("Querying kernel VA shadow information failed with error {0:X8}" -f $retval))
- }
- else {
- [System.UInt32]$kvaShadowEnabledFlag = 0x01
- [System.UInt32]$kvaShadowUserGlobalFlag = 0x02
- [System.UInt32]$kvaShadowPcidFlag = 0x04
- [System.UInt32]$kvaShadowInvpcidFlag = 0x08
- [System.UInt32]$kvaShadowRequiredFlag = 0x10
- [System.UInt32]$kvaShadowRequiredAvailableFlag = 0x20
- [System.UInt32]$l1tfInvalidPteBitMask = 0xfc0
- [System.UInt32]$l1tfInvalidPteBitShift = 6
- [System.UInt32]$l1tfFlushSupportedFlag = 0x1000
- [System.UInt32]$l1tfMitigationPresentFlag = 0x2000
- [System.UInt32]$flags = [System.UInt32][System.Runtime.InteropServices.Marshal]::ReadInt32($systemInformationPtr)
- $kvaShadowPresent = $true
- $kvaShadowEnabled = (($flags -band $kvaShadowEnabledFlag) -ne 0)
- $kvaShadowPcidEnabled = ((($flags -band $kvaShadowPcidFlag) -ne 0) -and (($flags -band $kvaShadowInvpcidFlag) -ne 0))
- if (($flags -band $kvaShadowRequiredAvailableFlag) -ne 0) {
- $kvaShadowRequired = (($flags -band $kvaShadowRequiredFlag) -ne 0)
- }
- else {
- if ($manufacturer -eq "AuthenticAMD") {
- $kvaShadowRequired = $false
- }
- elseif ($manufacturer -eq "GenuineIntel") {
- $regex = [regex]'Family (\d+) Model (\d+) Stepping (\d+)'
- $result = $regex.Match($cpu.Description)
- if ($result.Success) {
- $family = [System.UInt32]$result.Groups[1].Value
- $model = [System.UInt32]$result.Groups[2].Value
- $stepping = [System.UInt32]$result.Groups[3].Value
- if (($family -eq 0x6) -and
- (($model -eq 0x1c) -or
- ($model -eq 0x26) -or
- ($model -eq 0x27) -or
- ($model -eq 0x36) -or
- ($model -eq 0x35))) {
- $kvaShadowRequired = $false
- }
- }
- }
- else {
- throw ("Unsupported processor manufacturer: {0}" -f $manufacturer)
- }
- }
- if ($isArmCpu -eq $true) {
- $l1tfRequired = $false
- }
- else {
- $l1tfRequired = $kvaShadowRequired
- }
- $l1tfInvalidPteBit = [math]::Floor(($flags -band $l1tfInvalidPteBitMask) * [math]::Pow(2,-$l1tfInvalidPteBitShift))
- $l1tfMitigationEnabled = (($l1tfInvalidPteBit -ne 0) -and ($kvaShadowEnabled -eq $true))
- $l1tfFlushSupported = (($flags -band $l1tfFlushSupportedFlag) -ne 0)
- if (($flags -band $l1tfMitigationPresentFlag) -or
- ($l1tfMitigationEnabled -eq $true) -or
- ($l1tfFlushSupported -eq $true)) {
- $l1tfMitigationPresent = $true
- }
- if ($Quiet -ne $true -and $PSBoundParameters['Verbose']) {
- Write-Verbose "KvaShadowEnabled : $(($flags -band $kvaShadowEnabledFlag) -ne 0)"
- Write-Verbose "KvaShadowUserGlobal : $(($flags -band $kvaShadowUserGlobalFlag) -ne 0)"
- Write-Verbose "KvaShadowPcid : $(($flags -band $kvaShadowPcidFlag) -ne 0)"
- Write-Verbose "KvaShadowInvpcid : $(($flags -band $kvaShadowInvpcidFlag) -ne 0)"
- Write-Verbose "KvaShadowRequired : $kvaShadowRequired"
- Write-Verbose "KvaShadowRequiredAvailable : $(($flags -band $kvaShadowRequiredAvailableFlag) -ne 0)"
- Write-Verbose "L1tfRequired : $l1tfRequired"
- Write-Verbose "L1tfInvalidPteBit : $l1tfInvalidPteBit"
- Write-Verbose "L1tfFlushSupported : $l1tfFlushSupported"
- }
- }
- if ($Quiet -ne $true) {
- Write-Host "Hardware requires kernel VA shadowing:"$kvaShadowRequired
- if ($kvaShadowRequired) {
- Write-Host "Windows OS support for kernel VA shadow is present:"$kvaShadowPresent
- Write-Host "Windows OS support for kernel VA shadow is enabled:"$kvaShadowEnabled
- if ($kvaShadowEnabled) {
- Write-Host "Windows OS support for PCID performance optimization is enabled: $kvaShadowPcidEnabled [not required for security]"
- }
- }
- }
- $object | Add-Member -MemberType NoteProperty -Name KVAShadowRequired -Value $kvaShadowRequired
- $object | Add-Member -MemberType NoteProperty -Name KVAShadowWindowsSupportPresent -Value $kvaShadowPresent
- $object | Add-Member -MemberType NoteProperty -Name KVAShadowWindowsSupportEnabled -Value $kvaShadowEnabled
- $object | Add-Member -MemberType NoteProperty -Name KVAShadowPcidEnabled -Value $kvaShadowPcidEnabled
- #
- # Speculation Control Settings for CVE-2018-3639 (Speculative Store Bypass)
- #
- if ($Quiet -ne $true) {
- Write-Host
- Write-Host "Speculation control settings for CVE-2018-3639 [speculative store bypass]" -ForegroundColor Cyan
- Write-Host
- }
- if ($Quiet -ne $true) {
- if (($ssbdAvailable -eq $true)) {
- Write-Host "Hardware is vulnerable to speculative store bypass:"$ssbdRequired
- if ($ssbdRequired -eq $true) {
- Write-Host "Hardware support for speculative store bypass disable is present:"$ssbdHardwarePresent
- Write-Host "Windows OS support for speculative store bypass disable is present:"$ssbdAvailable
- Write-Host "Windows OS support for speculative store bypass disable is enabled system-wide:"$ssbdSystemWide
- }
- }
- else {
- Write-Host "Windows OS support for speculative store bypass disable is present:"$ssbdAvailable
- }
- }
- $object | Add-Member -MemberType NoteProperty -Name SSBDWindowsSupportPresent -Value $ssbdAvailable
- $object | Add-Member -MemberType NoteProperty -Name SSBDHardwareVulnerable -Value $ssbdRequired
- $object | Add-Member -MemberType NoteProperty -Name SSBDHardwarePresent -Value $ssbdHardwarePresent
- $object | Add-Member -MemberType NoteProperty -Name SSBDWindowsSupportEnabledSystemWide -Value $ssbdSystemWide
- #
- # Speculation Control Settings for CVE-2018-3620 (L1 Terminal Fault)
- #
- if ($Quiet -ne $true) {
- Write-Host
- Write-Host "Speculation control settings for CVE-2018-3620 [L1 terminal fault]" -ForegroundColor Cyan
- Write-Host
- }
- if ($Quiet -ne $true) {
- Write-Host "Hardware is vulnerable to L1 terminal fault:"$l1tfRequired
- if ($l1tfRequired -eq $true) {
- Write-Host "Windows OS support for L1 terminal fault mitigation is present:"$l1tfMitigationPresent
- Write-Host "Windows OS support for L1 terminal fault mitigation is enabled:"$l1tfMitigationEnabled
- }
- }
- $object | Add-Member -MemberType NoteProperty -Name L1TFHardwareVulnerable -Value $l1tfRequired
- $object | Add-Member -MemberType NoteProperty -Name L1TFWindowsSupportPresent -Value $l1tfMitigationPresent
- $object | Add-Member -MemberType NoteProperty -Name L1TFWindowsSupportEnabled -Value $l1tfMitigationEnabled
- $object | Add-Member -MemberType NoteProperty -Name L1TFInvalidPteBit -Value $l1tfInvalidPteBit
- $object | Add-Member -MemberType NoteProperty -Name L1DFlushSupported -Value $l1tfFlushSupported
- #
- # Speculation control settings for MDS [microarchitectural data sampling]
- #
- if ($Quiet -ne $true) {
- Write-Host
- Write-Host "Speculation control settings for MDS [microarchitectural data sampling]" -ForegroundColor Cyan
- Write-Host
- }
- if ($Quiet -ne $true) {
- Write-Host "Windows OS support for MDS mitigation is present:"$mdsMbClearReported
- if ($mdsMbClearReported -eq $true) {
- Write-Host "Hardware is vulnerable to MDS:"($mdsHardwareProtected -ne $true)
- if ($mdsHardwareProtected -eq $false) {
- Write-Host "Windows OS support for MDS mitigation is enabled:"$mdsMbClearEnabled
- }
- }
- }
- $object | Add-Member -MemberType NoteProperty -Name MDSWindowsSupportPresent -Value $mdsMbClearReported
- if ($mdsMbClearReported -eq $true) {
- $object | Add-Member -MemberType NoteProperty -Name MDSHardwareVulnerable -Value ($mdsHardwareProtected -ne $true)
- $object | Add-Member -MemberType NoteProperty -Name MDSWindowsSupportEnabled -Value $mdsMbClearEnabled
- }
- #
- # Provide guidance as appropriate.
- #
- $actions = @()
- if ($btiHardwarePresent -eq $false) {
- $actions += "Install BIOS/firmware update provided by your device OEM that enables hardware support for the branch target injection mitigation."
- }
- if (($btiWindowsSupportPresent -eq $false) -or
- ($kvaShadowPresent -eq $false) -or
- ($ssbdAvailable -eq $false) -or
- ($l1tfMitigationPresent -eq $false) -or
- ($mdsMbClearReported -eq $false)) {
- $actions += "Install the latest available updates for Windows with support for speculation control mitigations."
- }
- if (($btiHardwarePresent -eq $true -and $btiWindowsSupportEnabled -eq $false) -or
- ($kvaShadowRequired -eq $true -and $kvaShadowEnabled -eq $false) -or
- ($l1tfRequired -eq $true -and $l1tfMitigationEnabled -eq $false) -or
- ($mdsMbClearReported -eq $true -and $mdsHardwareProtected -eq $false -and $mdsMbClearEnabled -eq $false)) {
- $guidanceUri = ""
- $guidanceType = ""
- if ($PSVersionTable.PSVersion -lt [System.Version]("3.0.0.0")) {
- $os = Get-WmiObject Win32_OperatingSystem
- }
- else {
- $os = Get-CimInstance Win32_OperatingSystem
- }
- if ($os.ProductType -eq 1) {
- # Workstation
- $guidanceUri = "https://support.microsoft.com/help/4073119"
- $guidanceType = "Client"
- }
- else {
- # Server/DC
- $guidanceUri = "https://support.microsoft.com/help/4072698"
- $guidanceType = "Server"
- }
- $actions += "Follow the guidance for enabling Windows $guidanceType support for speculation control mitigations described in $guidanceUri"
- }
- if ($Quiet -ne $true -and $actions.Length -gt 0) {
- Write-Host
- Write-Host "Suggested actions" -ForegroundColor Cyan
- Write-Host
- foreach ($action in $actions) {
- Write-Host " *" $action
- }
- }
- return $object
- }
- finally
- {
- if ($systemInformationPtr -ne [System.IntPtr]::Zero) {
- [System.Runtime.InteropServices.Marshal]::FreeHGlobal($systemInformationPtr)
- }
- if ($returnLengthPtr -ne [System.IntPtr]::Zero) {
- [System.Runtime.InteropServices.Marshal]::FreeHGlobal($returnLengthPtr)
- }
- }
- }
- }
- # SIG # Begin signature block
- # MIIkfwYJKoZIhvcNAQcCoIIkcDCCJGwCAQExDzANBglghkgBZQMEAgEFADB5Bgor
- # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
- # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCRdPuMJlxe+cQz
- # Um8G99hWbWYeZZWSU0dhLLunRs5OMaCCDYEwggX/MIID56ADAgECAhMzAAABA14l
- # HJkfox64AAAAAAEDMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
- # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
- # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
- # bmcgUENBIDIwMTEwHhcNMTgwNzEyMjAwODQ4WhcNMTkwNzI2MjAwODQ4WjB0MQsw
- # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
- # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
- # b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
- # AQDRlHY25oarNv5p+UZ8i4hQy5Bwf7BVqSQdfjnnBZ8PrHuXss5zCvvUmyRcFrU5
- # 3Rt+M2wR/Dsm85iqXVNrqsPsE7jS789Xf8xly69NLjKxVitONAeJ/mkhvT5E+94S
- # nYW/fHaGfXKxdpth5opkTEbOttU6jHeTd2chnLZaBl5HhvU80QnKDT3NsumhUHjR
- # hIjiATwi/K+WCMxdmcDt66VamJL1yEBOanOv3uN0etNfRpe84mcod5mswQ4xFo8A
- # DwH+S15UD8rEZT8K46NG2/YsAzoZvmgFFpzmfzS/p4eNZTkmyWPU78XdvSX+/Sj0
- # NIZ5rCrVXzCRO+QUauuxygQjAgMBAAGjggF+MIIBejAfBgNVHSUEGDAWBgorBgEE
- # AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUR77Ay+GmP/1l1jjyA123r3f3QP8w
- # UAYDVR0RBEkwR6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1
- # ZXJ0byBSaWNvMRYwFAYDVQQFEw0yMzAwMTIrNDM3OTY1MB8GA1UdIwQYMBaAFEhu
- # ZOVQBdOCqhc3NyK1bajKdQKVMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly93d3cu
- # bWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY0NvZFNpZ1BDQTIwMTFfMjAxMS0w
- # Ny0wOC5jcmwwYQYIKwYBBQUHAQEEVTBTMFEGCCsGAQUFBzAChkVodHRwOi8vd3d3
- # Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvZFNpZ1BDQTIwMTFfMjAx
- # MS0wNy0wOC5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAgEAn/XJ
- # Uw0/DSbsokTYDdGfY5YGSz8eXMUzo6TDbK8fwAG662XsnjMQD6esW9S9kGEX5zHn
- # wya0rPUn00iThoj+EjWRZCLRay07qCwVlCnSN5bmNf8MzsgGFhaeJLHiOfluDnjY
- # DBu2KWAndjQkm925l3XLATutghIWIoCJFYS7mFAgsBcmhkmvzn1FFUM0ls+BXBgs
- # 1JPyZ6vic8g9o838Mh5gHOmwGzD7LLsHLpaEk0UoVFzNlv2g24HYtjDKQ7HzSMCy
- # RhxdXnYqWJ/U7vL0+khMtWGLsIxB6aq4nZD0/2pCD7k+6Q7slPyNgLt44yOneFuy
- # bR/5WcF9ttE5yXnggxxgCto9sNHtNr9FB+kbNm7lPTsFA6fUpyUSj+Z2oxOzRVpD
- # MYLa2ISuubAfdfX2HX1RETcn6LU1hHH3V6qu+olxyZjSnlpkdr6Mw30VapHxFPTy
- # 2TUxuNty+rR1yIibar+YRcdmstf/zpKQdeTr5obSyBvbJ8BblW9Jb1hdaSreU0v4
- # 6Mp79mwV+QMZDxGFqk+av6pX3WDG9XEg9FGomsrp0es0Rz11+iLsVT9qGTlrEOla
- # P470I3gwsvKmOMs1jaqYWSRAuDpnpAdfoP7YO0kT+wzh7Qttg1DO8H8+4NkI6Iwh
- # SkHC3uuOW+4Dwx1ubuZUNWZncnwa6lL2IsRyP64wggd6MIIFYqADAgECAgphDpDS
- # AAAAAAADMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
- # V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
- # IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0
- # ZSBBdXRob3JpdHkgMjAxMTAeFw0xMTA3MDgyMDU5MDlaFw0yNjA3MDgyMTA5MDla
- # MH4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
- # ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMT
- # H01pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTEwggIiMA0GCSqGSIb3DQEB
- # AQUAA4ICDwAwggIKAoICAQCr8PpyEBwurdhuqoIQTTS68rZYIZ9CGypr6VpQqrgG
- # OBoESbp/wwwe3TdrxhLYC/A4wpkGsMg51QEUMULTiQ15ZId+lGAkbK+eSZzpaF7S
- # 35tTsgosw6/ZqSuuegmv15ZZymAaBelmdugyUiYSL+erCFDPs0S3XdjELgN1q2jz
- # y23zOlyhFvRGuuA4ZKxuZDV4pqBjDy3TQJP4494HDdVceaVJKecNvqATd76UPe/7
- # 4ytaEB9NViiienLgEjq3SV7Y7e1DkYPZe7J7hhvZPrGMXeiJT4Qa8qEvWeSQOy2u
- # M1jFtz7+MtOzAz2xsq+SOH7SnYAs9U5WkSE1JcM5bmR/U7qcD60ZI4TL9LoDho33
- # X/DQUr+MlIe8wCF0JV8YKLbMJyg4JZg5SjbPfLGSrhwjp6lm7GEfauEoSZ1fiOIl
- # XdMhSz5SxLVXPyQD8NF6Wy/VI+NwXQ9RRnez+ADhvKwCgl/bwBWzvRvUVUvnOaEP
- # 6SNJvBi4RHxF5MHDcnrgcuck379GmcXvwhxX24ON7E1JMKerjt/sW5+v/N2wZuLB
- # l4F77dbtS+dJKacTKKanfWeA5opieF+yL4TXV5xcv3coKPHtbcMojyyPQDdPweGF
- # RInECUzF1KVDL3SV9274eCBYLBNdYJWaPk8zhNqwiBfenk70lrC8RqBsmNLg1oiM
- # CwIDAQABo4IB7TCCAekwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFEhuZOVQ
- # BdOCqhc3NyK1bajKdQKVMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1Ud
- # DwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFHItOgIxkEO5FAVO
- # 4eqnxzHRI4k0MFoGA1UdHwRTMFEwT6BNoEuGSWh0dHA6Ly9jcmwubWljcm9zb2Z0
- # LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y
- # Mi5jcmwwXgYIKwYBBQUHAQEEUjBQME4GCCsGAQUFBzAChkJodHRwOi8vd3d3Lm1p
- # Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y
- # Mi5jcnQwgZ8GA1UdIASBlzCBlDCBkQYJKwYBBAGCNy4DMIGDMD8GCCsGAQUFBwIB
- # FjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2RvY3MvcHJpbWFyeWNw
- # cy5odG0wQAYIKwYBBQUHAgIwNB4yIB0ATABlAGcAYQBsAF8AcABvAGwAaQBjAHkA
- # XwBzAHQAYQB0AGUAbQBlAG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIBAGfyhqWY
- # 4FR5Gi7T2HRnIpsLlhHhY5KZQpZ90nkMkMFlXy4sPvjDctFtg/6+P+gKyju/R6mj
- # 82nbY78iNaWXXWWEkH2LRlBV2AySfNIaSxzzPEKLUtCw/WvjPgcuKZvmPRul1LUd
- # d5Q54ulkyUQ9eHoj8xN9ppB0g430yyYCRirCihC7pKkFDJvtaPpoLpWgKj8qa1hJ
- # Yx8JaW5amJbkg/TAj/NGK978O9C9Ne9uJa7lryft0N3zDq+ZKJeYTQ49C/IIidYf
- # wzIY4vDFLc5bnrRJOQrGCsLGra7lstnbFYhRRVg4MnEnGn+x9Cf43iw6IGmYslmJ
- # aG5vp7d0w0AFBqYBKig+gj8TTWYLwLNN9eGPfxxvFX1Fp3blQCplo8NdUmKGwx1j
- # NpeG39rz+PIWoZon4c2ll9DuXWNB41sHnIc+BncG0QaxdR8UvmFhtfDcxhsEvt9B
- # xw4o7t5lL+yX9qFcltgA1qFGvVnzl6UJS0gQmYAf0AApxbGbpT9Fdx41xtKiop96
- # eiL6SJUfq/tHI4D1nvi/a7dLl+LrdXga7Oo3mXkYS//WsyNodeav+vyL6wuA6mk7
- # r/ww7QRMjt/fdW1jkT3RnVZOT7+AVyKheBEyIXrvQQqxP/uozKRdwaGIm1dxVk5I
- # RcBCyZt2WwqASGv9eZ/BvW1taslScxMNelDNMYIWVDCCFlACAQEwgZUwfjELMAkG
- # A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
- # HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9z
- # b2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMQITMwAAAQNeJRyZH6MeuAAAAAABAzAN
- # BglghkgBZQMEAgEFAKCB0jAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor
- # BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQgPkebc8/b
- # BvbG7NmJaah5XgDy0uj3Tp4DlEU5MtXjm4wwZgYKKwYBBAGCNwIBDDFYMFagNoA0
- # AFMAcABlAGMAdQBsAGEAdABpAG8AbgBDAG8AbgB0AHIAbwBsACAAdABvAG8AbABz
- # AGUAdKEcgBpodHRwczovL3d3dy5taWNyb3NvZnQuY29tIDANBgkqhkiG9w0BAQEF
- # AASCAQDNuiDXheIiF2P66mGgNkVxqrzUa2m7QRXJ5Pc/LH8oQ0RbHw37T3rHgAX6
- # 6rSTEIkFvvEu8bSzZAu+bAvieu7Xr4qMtyVBnQoqg7eQPNPu0mty2iNq2uJrLmHL
- # t8Ka8yIeV3rNwZUNr2yby8MyNGE7wSUgzTvFWsqClWKUHc6s5UIBVM/43m/hSZB1
- # U6wC63A9HRJ9YdxT+2R5mfNSDGlSLufwwDNcjxasWqYkhdlEdJq14xzQNwj6u9MD
- # hI4kK8hCA8VwSgkAv1mhCnxHxgiz4F7vwPszL8Y/4w/SjAfS7f479WfrQFMNv1k6
- # QxvHr2P0gryPIA7phiPxfyB19h7hoYITujCCE7YGCisGAQQBgjcDAwExghOmMIIT
- # ogYJKoZIhvcNAQcCoIITkzCCE48CAQMxDzANBglghkgBZQMEAgEFADCCAVgGCyqG
- # SIb3DQEJEAEEoIIBRwSCAUMwggE/AgEBBgorBgEEAYRZCgMBMDEwDQYJYIZIAWUD
- # BAIBBQAEIP73Px446E4IhqRb1neYRQes4FPXX3RnfL7+K9LVQWZkAgZcwc2QSlwY
- # EzIwMTkwNTE1MjAxMTI5LjI2N1owBwIBAYACAfSggdSkgdEwgc4xCzAJBgNVBAYT
- # AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
- # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1pY3Jvc29mdCBP
- # cGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpG
- # NTI4LTM3NzctOEE3NjElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vy
- # dmljZaCCDyIwggT1MIID3aADAgECAhMzAAAA0ZjP5DyZJWSEAAAAAADRMA0GCSqG
- # SIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
- # DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
- # JjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTE4MDgy
- # MzIwMjYzM1oXDTE5MTEyMzIwMjYzM1owgc4xCzAJBgNVBAYTAlVTMRMwEQYDVQQI
- # EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
- # ZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1
- # ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpGNTI4LTM3NzctOEE3
- # NjElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZTCCASIwDQYJ
- # KoZIhvcNAQEBBQADggEPADCCAQoCggEBAO8AzsRMhqn2kikKhD3zCu0CrZNR/rI/
- # 5Mk55+pELW4spLVAS2J5i9pImF9/L+hCWB1+VABr1O6Z7JLscLyNQH9h+425uDw/
- # j9NivZcdYhQHS5aXUGrlg+hBI04qTdVXVFiLz7QnOdOCQWWT34xuwiDFSTU3pND3
- # zBTUzgtHG2DHuZ9KYCBBQI5h+DppSTrIl2hrNoi2h048t68+kzCzZbxtcDB5Jdvn
- # PklmJW0eiaBUNLDQBJ+qisRoEe5KXXUJbvcFSh40S1PHF5hKSSMa2dzsK+7U7N9S
- # XMla5WYOGshZSD9OKiNzR24i6gNYxHx2qrkexW6j2M/OCj8zcpMqx/8CAwEAAaOC
- # ARswggEXMB0GA1UdDgQWBBSD+xJFcDb/Z4m6UIvdycY9VPNqDDAfBgNVHSMEGDAW
- # gBTVYzpcijGQ80N7fEYbxTNoWoVtVTBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8v
- # Y3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNUaW1TdGFQQ0Ff
- # MjAxMC0wNy0wMS5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRw
- # Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1RpbVN0YVBDQV8yMDEw
- # LTA3LTAxLmNydDAMBgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMIMA0G
- # CSqGSIb3DQEBCwUAA4IBAQA64DLn2qQE9IkemBnRJXoNPZ8i2UamL9Syzn2kERwV
- # uBZ4lrlNjXcdzGEFwKpnxtw4nHbwdyaUxDf26Nu0fcGA0+8YJqinxW5Ru8r0uLbb
- # n/5DCEhnoC/eGEtQkgQVC2ppiula+Uk5RSTq/A90xnT74jnIgGQuC9tptzLmy3LH
- # YBGObaMCPxFaVkea9BL87pxnk8pGFF/069NFIZGb5OjMCJgkqyycHEb+Kk+H/JT0
- # fuqydkn8CXk8lrV/Mehla+jEcGLW2DSBdM9Epq84Zn4ywzU9s2Ri63KfeNARfvkL
- # NTWiDRwPhogV7O6O6Y171+1bOo4RggWFdfAX/JWlmsooMIIGcTCCBFmgAwIBAgIK
- # YQmBKgAAAAAAAjANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV
- # BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
- # c29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlm
- # aWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMTAwNzAxMjEzNjU1WhcNMjUwNzAxMjE0
- # NjU1WjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
- # BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYD
- # VQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDCCASIwDQYJKoZIhvcN
- # AQEBBQADggEPADCCAQoCggEBAKkdDbx3EYo6IOz8E5f1+n9plGt0VBDVpQoAgoX7
- # 7XxoSyxfxcPlYcJ2tz5mK1vwFVMnBDEfQRsalR3OCROOfGEwWbEwRA/xYIiEVEMM
- # 1024OAizQt2TrNZzMFcmgqNFDdDq9UeBzb8kYDJYYEbyWEeGMoQedGFnkV+BVLHP
- # k0ySwcSmXdFhE24oxhr5hoC732H8RsEnHSRnEnIaIYqvS2SJUGKxXf13Hz3wV3Ws
- # vYpCTUBR0Q+cBj5nf/VmwAOWRH7v0Ev9buWayrGo8noqCjHw2k4GkbaICDXoeByw
- # 6ZnNPOcvRLqn9NxkvaQBwSAJk3jN/LzAyURdXhacAQVPIk0CAwEAAaOCAeYwggHi
- # MBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBTVYzpcijGQ80N7fEYbxTNoWoVt
- # VTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0T
- # AQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2UkFvXzpoYxDBWBgNV
- # HR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9w
- # cm9kdWN0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcmwwWgYIKwYBBQUHAQEE
- # TjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2Nl
- # cnRzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNydDCBoAYDVR0gAQH/BIGVMIGS
- # MIGPBgkrBgEEAYI3LgMwgYEwPQYIKwYBBQUHAgEWMWh0dHA6Ly93d3cubWljcm9z
- # b2Z0LmNvbS9QS0kvZG9jcy9DUFMvZGVmYXVsdC5odG0wQAYIKwYBBQUHAgIwNB4y
- # IB0ATABlAGcAYQBsAF8AUABvAGwAaQBjAHkAXwBTAHQAYQB0AGUAbQBlAG4AdAAu
- # IB0wDQYJKoZIhvcNAQELBQADggIBAAfmiFEN4sbgmD+BcQM9naOhIW+z66bM9TG+
- # zwXiqf76V20ZMLPCxWbJat/15/B4vceoniXj+bzta1RXCCtRgkQS+7lTjMz0YBKK
- # dsxAQEGb3FwX/1z5Xhc1mCRWS3TvQhDIr79/xn/yN31aPxzymXlKkVIArzgPF/Uv
- # eYFl2am1a+THzvbKegBvSzBEJCI8z+0DpZaPWSm8tv0E4XCfMkon/VWvL/625Y4z
- # u2JfmttXQOnxzplmkIz/amJ/3cVKC5Em4jnsGUpxY517IW3DnKOiPPp/fZZqkHim
- # bdLhnPkd/DjYlPTGpQqWhqS9nhquBEKDuLWAmyI4ILUl5WTs9/S/fmNZJQ96LjlX
- # dqJxqgaKD4kWumGnEcua2A5HmoDF0M2n0O99g/DhO3EJ3110mCIIYdqwUB5vvfHh
- # AN/nMQekkzr3ZUd46PioSKv33nJ+YWtvd6mBy6cJrDm77MbL2IK0cs0d9LiFAR6A
- # +xuJKlQ5slvayA1VmXqHczsI5pgt6o3gMy4SKfXAL1QnIffIrE7aKLixqduWsqdC
- # osnPGUFN4Ib5KpqjEWYw07t0MkvfY3v1mYovG8chr1m1rtxEPJdQcdeh0sVV42ne
- # V8HR3jDA/czmTfsNv11P6Z0eGTgvvM9YBS7vDaBQNdrvCScc1bN+NR4Iuto229Nf
- # j950iEkSoYIDsDCCApgCAQEwgf6hgdSkgdEwgc4xCzAJBgNVBAYTAlVTMRMwEQYD
- # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
- # b3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25z
- # IFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpGNTI4LTM3Nzct
- # OEE3NjElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIlCgEB
- # MAkGBSsOAwIaBQADFQBKXMzSTq/paxECeoaXXVG5drZU8aCB3jCB26SB2DCB1TEL
- # MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
- # bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEpMCcGA1UECxMgTWlj
- # cm9zb2Z0IE9wZXJhdGlvbnMgUHVlcnRvIFJpY28xJzAlBgNVBAsTHm5DaXBoZXIg
- # TlRTIEVTTjo0REU5LTBDNUUtM0UwOTErMCkGA1UEAxMiTWljcm9zb2Z0IFRpbWUg
- # U291cmNlIE1hc3RlciBDbG9jazANBgkqhkiG9w0BAQUFAAIFAOCGZwowIhgPMjAx
- # OTA1MTUxODIzMDZaGA8yMDE5MDUxNjE4MjMwNlowdzA9BgorBgEEAYRZCgQBMS8w
- # LTAKAgUA4IZnCgIBADAKAgEAAgIeNgIB/zAHAgEAAgIafTAKAgUA4Ie4igIBADA2
- # BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMBoAowCAIBAAIDFuNgoQowCAIB
- # AAIDB6EgMA0GCSqGSIb3DQEBBQUAA4IBAQCNvTUQeI4FdjdtG0ZXm78sWy1sd5Xr
- # zzIY+bguVkRn4UTG2Nr7IEAnHYIWpC1vMIQQ0YWTiNFqMffH8b6/E06wbjKNbh8z
- # qoGCo+A2lQAWOGp1ZmGO2SWTuNihEXcfjeXl4RSVjVL7tbOef6KRDdHp+SSimUmZ
- # QPTxnU7yXK3dJ/+5wpYNEsUJTp+Boivey4o3rkHvhG1l9rIRNc+vKwBTzEP3TfGc
- # /iArCBm5j8/tp59kuWfORx18oiAsZlKC6tDrz9HbCm7PI7wS2P7EQZCHS/X+YJTV
- # slD+CNVcmTPnC1DAtUCuUWPQBrhr0kZ0fOjeJPqJb4aFd+8s94C3oUzYMYIC9TCC
- # AvECAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
- # BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEm
- # MCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAADRmM/k
- # PJklZIQAAAAAANEwDQYJYIZIAWUDBAIBBQCgggEyMBoGCSqGSIb3DQEJAzENBgsq
- # hkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgwPMLIKi/dle4J4dGS4HNM9mOkiZ/
- # ltdjZvDAp8AP3KIwgeIGCyqGSIb3DQEJEAIMMYHSMIHPMIHMMIGxBBRKXMzSTq/p
- # axECeoaXXVG5drZU8TCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX
- # YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg
- # Q29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAy
- # MDEwAhMzAAAA0ZjP5DyZJWSEAAAAAADRMBYEFKLU2QvUJseoMxBgE10SDxRCCftv
- # MA0GCSqGSIb3DQEBCwUABIIBAL3fHdQvHuU4n2C+k6wndcGealqMN1y3nrqYrs2h
- # qqBS/wsk75HHmEYJ9CwXz1J095BgnN4SFEqrBX5fzntEB8zpl1eVzoOKJ3rmlY99
- # Rk+iZQxKOfD8ZOBaqqAWba9Xm0NgnOWI3cEqUWxeKXfGU3SeVFGoco0LawAogzmw
- # b3im/vJZFMuQ8tbGEyWlIJrUATI3YDbWwWuCbbwmyST9SMmyJ8F3DU2OSAF9onRB
- # 7jlHrHAFAF9qaTx/7pWqQyCLRH2CyVdGEaXMisRW9omBd6pE8okFkUmH7wAwNLsx
- # Vsd5+Lpua143GW3BWdO3amYe+AlV6IkwiOfc5oE0LveXj8o=
- # SIG # End signature block
- :speculationcontrol:] exit
- ::
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement