Advertisement
aveyo

SpeculationControl

Jan 6th, 2018
2,860
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 44.11 KB | None | 0 0
  1. :: github.com/microsoft/SpeculationControl presented in a click to run batch-ps hybrid with auto-verify and menu by AveYo
  2. @echo off & title SpeculationControl Menu v20190916
  3.  
  4. :: run bundled Get-SpeculationControlSettings
  5. powershell -noprofile -c "$f=[io.file]::ReadAllText('%~f0') -split \":speculationcontrol\:.*`r`n\"; iex ($f[1]);"
  6.  
  7. rem timeout /t -1 & exit/b  uncomment to skip optional SpeculationControl Menu section below (safe to delete the whole section)  
  8. ::________________________________________________________________________________________________________________________________
  9. :: grab SYS info
  10. call :wmic baseboard "manufacturer,product,version"
  11. call :wmic bios SMBIOSBIOSVersion
  12. call :reg microcode "HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0" "Update Revision"
  13. call :wmic cpu name
  14. call :wmic cpu Manufacturer
  15. if "%cpu_manufacturer%" equ "AuthenticAMD" (set "amd=AMD") else set "amd="
  16. if "%cpu_manufacturer%" equ "GenuineIntel" (set "intel=Intel" & set "mtl=Hyper-Threading") else set "intel=" & set "mtl=SMT"
  17. call :wmic cpu NumberOfCores
  18. call :wmic cpu NumberOfLogicalProcessors
  19. if "%cpu_NumberOfCores%" equ "%cpu_NumberOfLogicalProcessors%" (set "ht=") else set "ht=Enabled"
  20. if defined ht (set "mt=%mtl% Enabled") else set "mt=%mtl% Disabled/Not Supported"
  21. call :reg product "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" ProductName
  22. call :reg release "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" ReleaseId
  23. call :reg buildex "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" BuildLabEx
  24. set "x86=%buildex:amd64=%"
  25. if "%buildex%" equ "%x86%" (set "arch=x86") else set "arch=x64"
  26. set "hyperv=" & sc query "vmms" 2>nul >nul && set "hyperv=Installed"
  27.  
  28. :: print SYS info
  29. echo(
  30. echo  * Cancel the SpeculationControl Menu / UAC prompt if not interested in adjusting mitigations
  31. echo ===========================================================
  32. echo  MainBoard: %baseboard_manufacturer% %baseboard_product% %baseboard_version%
  33. echo  BIOS Ver:  %bios_SMBIOSBIOSVersion%  
  34. echo  MicroCode: %microcode%
  35. echo  CPU:       %cpu_name%
  36. echo  MT:        %mt%
  37. echo  OS:        %product% %arch% Version %release%
  38. echo  Build:     %buildex%
  39. echo  Hyper-V:   %hyperv%
  40. echo ===========================================================
  41.  
  42. :: self-elevate passing args and preventing loop
  43. set "args="%~f0" %*" & reg query HKU\S-1-5-19>nul 2>nul || if "%_%" neq "y" (
  44. powershell -c "$Env:_='y';$ErrorActionPreference=0;start cmd -ArgumentList \"/c call $Env:args\" -verb runas" && exit)
  45.  
  46. :: show SpeculationControl Menu only if running as admin
  47. reg query HKU\S-1-5-19>nul 2>nul && call :menu
  48.  
  49. :: done
  50. timeout /t -1
  51. exit/b
  52.  
  53. :menu
  54. set "?=Disable all OS mitigations,+ mitigate Meltdown,+ mitigate Spectre,+ mitigate Speculative Store Bypass,+ mitigate Microarchitectural Data Sampling (all)"
  55. set "$=" & call :choices $ "%?%" 0 "SpeculationControl Menu - choices are incremental" 15 0xff520018 Snow 500
  56. if not defined $ exit
  57. call :menu%$%
  58. echo Reboot required to apply changes..
  59. goto :menu loop
  60.  
  61. :menu1 Disable all OS mitigations
  62. echo %DATE% %TIME%: Disabling all OS mitigations!
  63. reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t reg_dword /d 3 /f >nul
  64. reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t reg_dword /d 3 /f >nul
  65. reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization" /v MinVmVersionForCpuBasedMitigations /f >nul 2>nul
  66. exit/b
  67.  
  68. :menu2 Mitigate Meltdown
  69. echo %DATE% %TIME%: Enabling Meltdown mitigations
  70. reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t reg_dword /d 1 /f >nul
  71. reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t reg_dword /d 3 /f >nul
  72. call :hyperv
  73. if defined intel exit/b only on Intel
  74. reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t reg_dword /d 3 /f >nul
  75. exit/b
  76.  
  77. :menu3 Mitigate Spectre
  78. echo %DATE% %TIME%: Enabling Spectre + Meltdown mitigations
  79. reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t reg_dword /d 0 /f >nul
  80. reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t reg_dword /d 3 /f >nul
  81. call :hyperv
  82. if defined intel exit/b full mitigation only on AMD/ARM
  83. reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t reg_dword /d 64 /f >nul
  84. exit/b
  85.  
  86. :menu4 Mitigate Speculative Store Bypass
  87. echo %DATE% %TIME%: Enabling Speculative Store Bypass + Spectre + Meltdown mitigations
  88. reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t reg_dword /d 8 /f >nul
  89. reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t reg_dword /d 3 /f >nul
  90. call :hyperv
  91. if defined intel exit/b full mitigation only on AMD/ARM
  92. reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t reg_dword /d 72 /f >nul
  93. exit/b
  94.  
  95. :menu5 Mitigate Microarchitectural Data Sampling (All)
  96. echo %DATE% %TIME%: Enabling Microarchitectural Data Sampling + L1TF + SSBD + Spectre + Meltdown mitigations
  97. reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t reg_dword /d 72 /f >nul
  98. reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t reg_dword /d 3 /f >nul
  99. call :hyperv
  100. if not defined ht (
  101.  reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t reg_dword /d 8264 /f >nul
  102. ) else echo Consider disabling HyperThreading for a stronger mitigation of MDS
  103. exit/b
  104.  
  105. :hyperv
  106. if defined hyperv (
  107.  reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization" /v MinVmVersionForCpuBasedMitigations /t reg_sz /d "1.0" /f >nul
  108.  echo Consider shutting down all Hyper-V VMs to apply host mitigations
  109. )
  110. exit/b
  111.  
  112. :wmic [USAGE] call :wmic OS version                                          [OUTPUTS] OS_Version
  113. (for /f "usebackq tokens=* skip=2" %%s in (`"wmic %~1 get %~2 /format:list"`) do set "%~1_%%s" >nul 2>nul) & exit/b
  114.  
  115. :reg [USAGE] call :reg ResultVar "HKCU\KeyName" "ValueName"
  116. (for /f "skip=2 delims=" %%s in ('reg query "%~2" /v "%~3" /z 2^>nul') do set ".=%%s" & call set "%~1=%%.:*)    =%%") & exit/b
  117.  
  118. :choices dialog w buttons: 1=outvar 2="choices" 3=selected [optional] 4="caption" 5=textsize 6=backcolor 7=textcolor 8=minsize
  119. set "snippet=iex(([io.file]::ReadAllText('%~f0')-split':PS_CHOICE\:.*')[1]); Choices %*"
  120. (for /f "usebackq" %%s in (`powershell -noprofile -c "%snippet:"='%"`) do set "%~1=%%s") &exit/b :PS_CHOICE:
  121. function Choices($outputvar,$choices,$sel=1,$caption='Choose',[byte]$sz=12,$bc='MidnightBlue',$fc='Snow',[string]$min='400') {
  122.  [void][System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); $f=New-Object System.Windows.Forms.Form;
  123.  $bt=@(); $i=1; $global:rez=''; $ch=($choices+',Cancel').split(','); $ch | foreach { $b=New-Object System.Windows.Forms.Button;
  124.  $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';
  125.  $b.AutoSize=1; $b.cursor='Hand'; $b.add_Click({$global:rez=$this.Name;$f.Close()}); $f.Controls.Add($b); $bt+=$b; $i++ }
  126.  $f.Text=$caption; $f.BackColor=$bc; $f.ForeColor=$fc; $f.StartPosition=4; $f.AutoSize=1; $f.AutoSizeMode=0; $f.MaximizeBox=0;
  127.  $f.AcceptButton=$bt[$sel-1]; $f.CancelButton=$bt[-1]; $f.Add_Shown({$f.Activate();$bt[$sel-1].focus()}); $null=$f.ShowDialog();
  128.  if($global:rez -ne $ch.length){ return $global:rez }else{ return $null } }  :PS_CHOICE:
  129. :: Let's Make Console Scripts Friendlier Initiative by AveYo - MIT License -     call :choices rez "one, 2 two, three" 3 'Usage'
  130. ::________________________________________________________________________________________________________________________________
  131.  
  132. :speculationcontrol:! verify
  133.  $sig = Get-AuthenticodeSignature -Content ([text.encoding]::UTF8.GetBytes($f[2])) -SourcePathorExtension .psm1
  134.  if ($sig.Status -ne 0) { write-host COPY-PASTE ERROR, USE DOWNLOAD BUTTON ON PASTEBIN AND RUN AGAIN! }
  135.  else { $sig | fl; iex ($f[2]); $scs = Get-SpeculationControlSettings }  
  136.  #timeout /t -1
  137.  
  138. :speculationcontrol:[ start
  139. function Get-SpeculationControlSettings {
  140.   <#
  141.  
  142.   .SYNOPSIS
  143.   This function queries the speculation control settings for the system.
  144.  
  145.   .DESCRIPTION
  146.   This function queries the speculation control settings for the system.
  147.  
  148.   .PARAMETER Quiet
  149.   This parameter suppresses host output that is displayed by default.
  150.  
  151.   #>
  152.  
  153.   [CmdletBinding()]
  154.   param (
  155.     [switch]$Quiet
  156.   )
  157.  
  158.   process {
  159.  
  160.     $NtQSIDefinition = @'
  161.     [DllImport("ntdll.dll")]
  162.     public static extern int NtQuerySystemInformation(uint systemInformationClass, IntPtr systemInformation, uint systemInformationLength, IntPtr returnLength);
  163. '@
  164.    
  165.     $ntdll = Add-Type -MemberDefinition $NtQSIDefinition -Name 'ntdll' -Namespace 'Win32' -PassThru
  166.  
  167.  
  168.     [System.IntPtr]$systemInformationPtr = [System.Runtime.InteropServices.Marshal]::AllocHGlobal(4)
  169.     [System.IntPtr]$returnLengthPtr = [System.Runtime.InteropServices.Marshal]::AllocHGlobal(4)
  170.  
  171.     $object = New-Object -TypeName PSObject
  172.  
  173.     try {
  174.         if ($PSVersionTable.PSVersion -lt [System.Version]("3.0.0.0")) {
  175.             $cpu = Get-WmiObject Win32_Processor
  176.         }
  177.         else {
  178.             $cpu = Get-CimInstance Win32_Processor
  179.         }
  180.  
  181.         if ($cpu -is [array]) {
  182.             $cpu = $cpu[0]
  183.         }
  184.  
  185.         $PROCESSOR_ARCHITECTURE_ARM64 = 12
  186.         $PROCESSOR_ARCHITECTURE_ARM   = 5
  187.  
  188.         $manufacturer = $cpu.Manufacturer
  189.         $processorArchitecture = $cpu.Architecture
  190.  
  191.         $isArmCpu = ($processorArchitecture -eq $PROCESSOR_ARCHITECTURE_ARM) -or ($processorArchitecture -eq $PROCESSOR_ARCHITECTURE_ARM64)
  192.  
  193.         #
  194.         # Query branch target injection information.
  195.         #
  196.  
  197.         if ($Quiet -ne $true) {
  198.  
  199.             Write-Host "For more information about the output below, please refer to https://support.microsoft.com/help/4074629" -ForegroundColor Cyan
  200.             Write-Host
  201.             Write-Host "Speculation control settings for CVE-2017-5715 [branch target injection]" -ForegroundColor Cyan
  202.  
  203.             if ($manufacturer -eq "AuthenticAMD") {
  204.                 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
  205.             }
  206.  
  207.             Write-Host
  208.         }
  209.  
  210.         $btiHardwarePresent = $false
  211.         $btiWindowsSupportPresent = $false
  212.         $btiWindowsSupportEnabled = $false
  213.         $btiDisabledBySystemPolicy = $false
  214.         $btiDisabledByNoHardwareSupport = $false
  215.  
  216.         $ssbdAvailable = $false
  217.         $ssbdHardwarePresent = $false
  218.         $ssbdSystemWide = $false
  219.         $ssbdRequired = $null
  220.  
  221.         $mdsHardwareProtected = $null
  222.         $mdsMbClearEnabled = $false
  223.         $mdsMbClearReported = $false
  224.    
  225.         [System.UInt32]$systemInformationClass = 201
  226.         [System.UInt32]$systemInformationLength = 4
  227.  
  228.         $retval = $ntdll::NtQuerySystemInformation($systemInformationClass, $systemInformationPtr, $systemInformationLength, $returnLengthPtr)
  229.  
  230.         if ($retval -eq 0xc0000003 -or $retval -eq 0xc0000002) {
  231.             # fallthrough
  232.         }
  233.         elseif ($retval -ne 0) {
  234.             throw (("Querying branch target injection information failed with error {0:X8}" -f $retval))
  235.         }
  236.         else {
  237.    
  238.             [System.UInt32]$scfBpbEnabled = 0x01
  239.             [System.UInt32]$scfBpbDisabledSystemPolicy = 0x02
  240.             [System.UInt32]$scfBpbDisabledNoHardwareSupport = 0x04
  241.             [System.UInt32]$scfHwReg1Enumerated = 0x08
  242.             [System.UInt32]$scfHwReg2Enumerated = 0x10
  243.             [System.UInt32]$scfHwMode1Present = 0x20
  244.             [System.UInt32]$scfHwMode2Present = 0x40
  245.             [System.UInt32]$scfSmepPresent = 0x80
  246.             [System.UInt32]$scfSsbdAvailable = 0x100
  247.             [System.UInt32]$scfSsbdSupported = 0x200
  248.             [System.UInt32]$scfSsbdSystemWide = 0x400
  249.             [System.UInt32]$scfSsbdRequired = 0x1000
  250.             [System.UInt32]$scfSpecCtrlRetpolineEnabled = 0x4000
  251.             [System.UInt32]$scfSpecCtrlImportOptimizationEnabled = 0x8000
  252.             [System.UInt32]$scfEnhancedIbrs = 0x10000
  253.             [System.UInt32]$scfHvL1tfStatusAvailable = 0x20000
  254.             [System.UInt32]$scfHvL1tfProcessorNotAffected = 0x40000
  255.             [System.UInt32]$scfHvL1tfMigitationEnabled = 0x80000
  256.             [System.UInt32]$scfHvL1tfMigitationNotEnabled_Hardware = 0x100000
  257.             [System.UInt32]$scfHvL1tfMigitationNotEnabled_LoadOption = 0x200000
  258.             [System.UInt32]$scfHvL1tfMigitationNotEnabled_CoreScheduler = 0x400000
  259.             [System.UInt32]$scfEnhancedIbrsReported = 0x800000
  260.             [System.UInt32]$scfMdsHardwareProtected = 0x1000000
  261.             [System.UInt32]$scfMbClearEnabled = 0x2000000
  262.             [System.UInt32]$scfMbClearReported = 0x4000000
  263.  
  264.             [System.UInt32]$flags = [System.UInt32][System.Runtime.InteropServices.Marshal]::ReadInt32($systemInformationPtr)
  265.  
  266.             $btiHardwarePresent = ((($flags -band $scfHwReg1Enumerated) -ne 0) -or (($flags -band $scfHwReg2Enumerated)))
  267.             $btiWindowsSupportPresent = $true
  268.             $btiWindowsSupportEnabled = (($flags -band $scfBpbEnabled) -ne 0)
  269.             $btiRetpolineEnabled = (($flags -band $scfSpecCtrlRetpolineEnabled) -ne 0)
  270.             $btiImportOptimizationEnabled = (($flags -band $scfSpecCtrlImportOptimizationEnabled) -ne 0)
  271.  
  272.             $mdsHardwareProtected = (($flags -band $scfMdsHardwareProtected) -ne 0)
  273.             $mdsMbClearEnabled = (($flags -band $scfMbClearEnabled) -ne 0)
  274.             $mdsMbClearReported = (($flags -band $scfMbClearReported) -ne 0)
  275.  
  276.             if (($manufacturer -eq "AuthenticAMD") -or
  277.                 ($isArmCpu -eq $true)) {
  278.                 $mdsHardwareProtected = $true
  279.             }
  280.  
  281.             if ($btiWindowsSupportEnabled -eq $false) {
  282.                 $btiDisabledBySystemPolicy = (($flags -band $scfBpbDisabledSystemPolicy) -ne 0)
  283.                 $btiDisabledByNoHardwareSupport = (($flags -band $scfBpbDisabledNoHardwareSupport) -ne 0)
  284.             }
  285.            
  286.             $ssbdAvailable = (($flags -band $scfSsbdAvailable) -ne 0)
  287.  
  288.             if ($ssbdAvailable -eq $true) {
  289.                 $ssbdHardwarePresent = (($flags -band $scfSsbdSupported) -ne 0)
  290.                 $ssbdSystemWide = (($flags -band $scfSsbdSystemWide) -ne 0)
  291.                 $ssbdRequired = (($flags -band $scfSsbdRequired) -ne 0)
  292.             }
  293.  
  294.             if ($Quiet -ne $true -and $PSBoundParameters['Verbose']) {
  295.                 Write-Verbose "BpbEnabled                        : $(($flags -band $scfBpbEnabled) -ne 0)"
  296.                 Write-Verbose "BpbDisabledSystemPolicy           : $(($flags -band $scfBpbDisabledSystemPolicy) -ne 0)"
  297.                 Write-Verbose "BpbDisabledNoHardwareSupport      : $(($flags -band $scfBpbDisabledNoHardwareSupport) -ne 0)"
  298.                 Write-Verbose "HwReg1Enumerated                  : $(($flags -band $scfHwReg1Enumerated) -ne 0)"
  299.                 Write-Verbose "HwReg2Enumerated                  : $(($flags -band $scfHwReg2Enumerated) -ne 0)"
  300.                 Write-Verbose "HwMode1Present                    : $(($flags -band $scfHwMode1Present) -ne 0)"
  301.                 Write-Verbose "HwMode2Present                    : $(($flags -band $scfHwMode2Present) -ne 0)"
  302.                 Write-Verbose "SmepPresent                       : $(($flags -band $scfSmepPresent) -ne 0)"
  303.                 Write-Verbose "SsbdAvailable                     : $(($flags -band $scfSsbdAvailable) -ne 0)"
  304.                 Write-Verbose "SsbdSupported                     : $(($flags -band $scfSsbdSupported) -ne 0)"
  305.                 Write-Verbose "SsbdSystemWide                    : $(($flags -band $scfSsbdSystemWide) -ne 0)"
  306.                 Write-Verbose "SsbdRequired                      : $(($flags -band $scfSsbdRequired) -ne 0)"
  307.                 Write-Verbose "SpecCtrlRetpolineEnabled          : $(($flags -band $scfSpecCtrlRetpolineEnabled) -ne 0)"
  308.                 Write-Verbose "SpecCtrlImportOptimizationEnabled : $(($flags -band $scfSpecCtrlImportOptimizationEnabled) -ne 0)"
  309.             }
  310.         }
  311.  
  312.         if ($Quiet -ne $true) {
  313.             Write-Host "Hardware support for branch target injection mitigation is present:"($btiHardwarePresent)
  314.             Write-Host "Windows OS support for branch target injection mitigation is present:"($btiWindowsSupportPresent)
  315.             Write-Host "Windows OS support for branch target injection mitigation is enabled:"($btiWindowsSupportEnabled)
  316.  
  317.             if ($btiWindowsSupportPresent -eq $true -and $btiWindowsSupportEnabled -eq $false) {
  318.                 Write-Host "Windows OS support for branch target injection mitigation is disabled by system policy:"($btiDisabledBySystemPolicy)
  319.                 Write-Host "Windows OS support for branch target injection mitigation is disabled by absence of hardware support:"($btiDisabledByNoHardwareSupport)
  320.             }
  321.         }
  322.        
  323.         $object | Add-Member -MemberType NoteProperty -Name BTIHardwarePresent -Value $btiHardwarePresent
  324.         $object | Add-Member -MemberType NoteProperty -Name BTIWindowsSupportPresent -Value $btiWindowsSupportPresent
  325.         $object | Add-Member -MemberType NoteProperty -Name BTIWindowsSupportEnabled -Value $btiWindowsSupportEnabled
  326.         $object | Add-Member -MemberType NoteProperty -Name BTIDisabledBySystemPolicy -Value $btiDisabledBySystemPolicy
  327.         $object | Add-Member -MemberType NoteProperty -Name BTIDisabledByNoHardwareSupport -Value $btiDisabledByNoHardwareSupport
  328.         $object | Add-Member -MemberType NoteProperty -Name BTIKernelRetpolineEnabled -Value $btiRetpolineEnabled
  329.         $object | Add-Member -MemberType NoteProperty -Name BTIKernelImportOptimizationEnabled -Value $btiImportOptimizationEnabled
  330.  
  331.         #
  332.         # Query kernel VA shadow information.
  333.         #
  334.        
  335.         if ($Quiet -ne $true) {
  336.             Write-Host
  337.             Write-Host "Speculation control settings for CVE-2017-5754 [rogue data cache load]" -ForegroundColor Cyan
  338.             Write-Host    
  339.         }
  340.  
  341.         $kvaShadowRequired = $true
  342.         $kvaShadowPresent = $false
  343.         $kvaShadowEnabled = $false
  344.         $kvaShadowPcidEnabled = $false
  345.        
  346.         $l1tfRequired = $true
  347.         $l1tfMitigationPresent = $false
  348.         $l1tfMitigationEnabled = $false
  349.         $l1tfFlushSupported = $false
  350.         $l1tfInvalidPteBit = $null
  351.  
  352.         [System.UInt32]$systemInformationClass = 196
  353.         [System.UInt32]$systemInformationLength = 4
  354.  
  355.         $retval = $ntdll::NtQuerySystemInformation($systemInformationClass, $systemInformationPtr, $systemInformationLength, $returnLengthPtr)
  356.  
  357.         if ($retval -eq 0xc0000003 -or $retval -eq 0xc0000002) {
  358.         }
  359.         elseif ($retval -ne 0) {
  360.             throw (("Querying kernel VA shadow information failed with error {0:X8}" -f $retval))
  361.         }
  362.         else {
  363.    
  364.             [System.UInt32]$kvaShadowEnabledFlag = 0x01
  365.             [System.UInt32]$kvaShadowUserGlobalFlag = 0x02
  366.             [System.UInt32]$kvaShadowPcidFlag = 0x04
  367.             [System.UInt32]$kvaShadowInvpcidFlag = 0x08
  368.             [System.UInt32]$kvaShadowRequiredFlag = 0x10
  369.             [System.UInt32]$kvaShadowRequiredAvailableFlag = 0x20
  370.            
  371.             [System.UInt32]$l1tfInvalidPteBitMask = 0xfc0
  372.             [System.UInt32]$l1tfInvalidPteBitShift = 6
  373.             [System.UInt32]$l1tfFlushSupportedFlag = 0x1000
  374.             [System.UInt32]$l1tfMitigationPresentFlag = 0x2000
  375.  
  376.             [System.UInt32]$flags = [System.UInt32][System.Runtime.InteropServices.Marshal]::ReadInt32($systemInformationPtr)
  377.  
  378.             $kvaShadowPresent = $true
  379.             $kvaShadowEnabled = (($flags -band $kvaShadowEnabledFlag) -ne 0)
  380.             $kvaShadowPcidEnabled = ((($flags -band $kvaShadowPcidFlag) -ne 0) -and (($flags -band $kvaShadowInvpcidFlag) -ne 0))
  381.            
  382.             if (($flags -band $kvaShadowRequiredAvailableFlag) -ne 0) {
  383.                 $kvaShadowRequired = (($flags -band $kvaShadowRequiredFlag) -ne 0)
  384.             }
  385.             else {
  386.  
  387.                 if ($manufacturer -eq "AuthenticAMD") {
  388.                     $kvaShadowRequired = $false
  389.                 }
  390.                 elseif ($manufacturer -eq "GenuineIntel") {
  391.                     $regex = [regex]'Family (\d+) Model (\d+) Stepping (\d+)'
  392.                     $result = $regex.Match($cpu.Description)
  393.            
  394.                     if ($result.Success) {
  395.                         $family = [System.UInt32]$result.Groups[1].Value
  396.                         $model = [System.UInt32]$result.Groups[2].Value
  397.                         $stepping = [System.UInt32]$result.Groups[3].Value
  398.                
  399.                         if (($family -eq 0x6) -and
  400.                             (($model -eq 0x1c) -or
  401.                              ($model -eq 0x26) -or
  402.                              ($model -eq 0x27) -or
  403.                              ($model -eq 0x36) -or
  404.                              ($model -eq 0x35))) {
  405.  
  406.                             $kvaShadowRequired = $false
  407.                         }
  408.                     }
  409.                 }
  410.                 else {
  411.                     throw ("Unsupported processor manufacturer: {0}" -f $manufacturer)
  412.                 }
  413.             }
  414.  
  415.             if ($isArmCpu -eq $true) {
  416.                 $l1tfRequired = $false
  417.             }
  418.             else {
  419.                 $l1tfRequired = $kvaShadowRequired
  420.             }
  421.  
  422.             $l1tfInvalidPteBit = [math]::Floor(($flags -band $l1tfInvalidPteBitMask) * [math]::Pow(2,-$l1tfInvalidPteBitShift))
  423.  
  424.             $l1tfMitigationEnabled = (($l1tfInvalidPteBit -ne 0) -and ($kvaShadowEnabled -eq $true))
  425.             $l1tfFlushSupported = (($flags -band $l1tfFlushSupportedFlag) -ne 0)
  426.  
  427.             if (($flags -band $l1tfMitigationPresentFlag) -or
  428.                 ($l1tfMitigationEnabled -eq $true) -or
  429.                 ($l1tfFlushSupported -eq $true)) {
  430.                 $l1tfMitigationPresent = $true
  431.             }
  432.  
  433.             if ($Quiet -ne $true -and $PSBoundParameters['Verbose']) {
  434.                 Write-Verbose "KvaShadowEnabled             : $(($flags -band $kvaShadowEnabledFlag) -ne 0)"
  435.                 Write-Verbose "KvaShadowUserGlobal          : $(($flags -band $kvaShadowUserGlobalFlag) -ne 0)"
  436.                 Write-Verbose "KvaShadowPcid                : $(($flags -band $kvaShadowPcidFlag) -ne 0)"
  437.                 Write-Verbose "KvaShadowInvpcid             : $(($flags -band $kvaShadowInvpcidFlag) -ne 0)"
  438.                 Write-Verbose "KvaShadowRequired            : $kvaShadowRequired"
  439.                 Write-Verbose "KvaShadowRequiredAvailable   : $(($flags -band $kvaShadowRequiredAvailableFlag) -ne 0)"
  440.                 Write-Verbose "L1tfRequired                 : $l1tfRequired"
  441.                 Write-Verbose "L1tfInvalidPteBit            : $l1tfInvalidPteBit"
  442.                 Write-Verbose "L1tfFlushSupported           : $l1tfFlushSupported"
  443.             }
  444.         }
  445.        
  446.         if ($Quiet -ne $true) {
  447.             Write-Host "Hardware requires kernel VA shadowing:"$kvaShadowRequired
  448.  
  449.             if ($kvaShadowRequired) {
  450.  
  451.                 Write-Host "Windows OS support for kernel VA shadow is present:"$kvaShadowPresent
  452.                 Write-Host "Windows OS support for kernel VA shadow is enabled:"$kvaShadowEnabled
  453.  
  454.                 if ($kvaShadowEnabled) {
  455.                     Write-Host "Windows OS support for PCID performance optimization is enabled: $kvaShadowPcidEnabled [not required for security]"
  456.                 }
  457.             }
  458.         }
  459.        
  460.         $object | Add-Member -MemberType NoteProperty -Name KVAShadowRequired -Value $kvaShadowRequired
  461.         $object | Add-Member -MemberType NoteProperty -Name KVAShadowWindowsSupportPresent -Value $kvaShadowPresent
  462.         $object | Add-Member -MemberType NoteProperty -Name KVAShadowWindowsSupportEnabled -Value $kvaShadowEnabled
  463.         $object | Add-Member -MemberType NoteProperty -Name KVAShadowPcidEnabled -Value $kvaShadowPcidEnabled
  464.  
  465.         #
  466.         # Speculation Control Settings for CVE-2018-3639 (Speculative Store Bypass)
  467.         #
  468.        
  469.         if ($Quiet -ne $true) {
  470.             Write-Host
  471.             Write-Host "Speculation control settings for CVE-2018-3639 [speculative store bypass]" -ForegroundColor Cyan
  472.             Write-Host    
  473.         }
  474.        
  475.         if ($Quiet -ne $true) {
  476.             if (($ssbdAvailable -eq $true)) {
  477.                 Write-Host "Hardware is vulnerable to speculative store bypass:"$ssbdRequired
  478.                 if ($ssbdRequired -eq $true) {
  479.                     Write-Host "Hardware support for speculative store bypass disable is present:"$ssbdHardwarePresent
  480.                     Write-Host "Windows OS support for speculative store bypass disable is present:"$ssbdAvailable
  481.                     Write-Host "Windows OS support for speculative store bypass disable is enabled system-wide:"$ssbdSystemWide
  482.                 }
  483.             }
  484.             else {
  485.                 Write-Host "Windows OS support for speculative store bypass disable is present:"$ssbdAvailable
  486.             }
  487.         }
  488.  
  489.         $object | Add-Member -MemberType NoteProperty -Name SSBDWindowsSupportPresent -Value $ssbdAvailable
  490.         $object | Add-Member -MemberType NoteProperty -Name SSBDHardwareVulnerable -Value $ssbdRequired
  491.         $object | Add-Member -MemberType NoteProperty -Name SSBDHardwarePresent -Value $ssbdHardwarePresent
  492.         $object | Add-Member -MemberType NoteProperty -Name SSBDWindowsSupportEnabledSystemWide -Value $ssbdSystemWide
  493.  
  494.        
  495.         #
  496.         # Speculation Control Settings for CVE-2018-3620 (L1 Terminal Fault)
  497.         #
  498.        
  499.         if ($Quiet -ne $true) {
  500.             Write-Host
  501.             Write-Host "Speculation control settings for CVE-2018-3620 [L1 terminal fault]" -ForegroundColor Cyan
  502.             Write-Host    
  503.         }
  504.        
  505.         if ($Quiet -ne $true) {
  506.             Write-Host "Hardware is vulnerable to L1 terminal fault:"$l1tfRequired
  507.  
  508.             if ($l1tfRequired -eq $true) {
  509.                 Write-Host "Windows OS support for L1 terminal fault mitigation is present:"$l1tfMitigationPresent
  510.                 Write-Host "Windows OS support for L1 terminal fault mitigation is enabled:"$l1tfMitigationEnabled
  511.             }
  512.         }
  513.  
  514.         $object | Add-Member -MemberType NoteProperty -Name L1TFHardwareVulnerable -Value $l1tfRequired
  515.         $object | Add-Member -MemberType NoteProperty -Name L1TFWindowsSupportPresent -Value $l1tfMitigationPresent
  516.         $object | Add-Member -MemberType NoteProperty -Name L1TFWindowsSupportEnabled -Value $l1tfMitigationEnabled
  517.         $object | Add-Member -MemberType NoteProperty -Name L1TFInvalidPteBit -Value $l1tfInvalidPteBit
  518.         $object | Add-Member -MemberType NoteProperty -Name L1DFlushSupported -Value $l1tfFlushSupported
  519.  
  520.         #
  521.         # Speculation control settings for MDS [microarchitectural data sampling]
  522.         #
  523.  
  524.         if ($Quiet -ne $true) {
  525.             Write-Host
  526.             Write-Host "Speculation control settings for MDS [microarchitectural data sampling]" -ForegroundColor Cyan
  527.             Write-Host
  528.         }
  529.  
  530.         if ($Quiet -ne $true) {
  531.        
  532.             Write-Host "Windows OS support for MDS mitigation is present:"$mdsMbClearReported
  533.  
  534.             if ($mdsMbClearReported -eq $true) {
  535.                 Write-Host "Hardware is vulnerable to MDS:"($mdsHardwareProtected -ne $true)
  536.                
  537.                 if ($mdsHardwareProtected -eq $false) {
  538.                     Write-Host "Windows OS support for MDS mitigation is enabled:"$mdsMbClearEnabled
  539.                 }
  540.             }
  541.         }
  542.        
  543.         $object | Add-Member -MemberType NoteProperty -Name MDSWindowsSupportPresent -Value $mdsMbClearReported
  544.        
  545.         if ($mdsMbClearReported -eq $true) {
  546.             $object | Add-Member -MemberType NoteProperty -Name MDSHardwareVulnerable -Value ($mdsHardwareProtected -ne $true)
  547.             $object | Add-Member -MemberType NoteProperty -Name MDSWindowsSupportEnabled -Value $mdsMbClearEnabled
  548.         }
  549.  
  550.         #
  551.         # Provide guidance as appropriate.
  552.         #
  553.  
  554.         $actions = @()
  555.        
  556.         if ($btiHardwarePresent -eq $false) {
  557.             $actions += "Install BIOS/firmware update provided by your device OEM that enables hardware support for the branch target injection mitigation."
  558.         }
  559.        
  560.         if (($btiWindowsSupportPresent -eq $false) -or
  561.             ($kvaShadowPresent -eq $false) -or
  562.             ($ssbdAvailable -eq $false) -or
  563.             ($l1tfMitigationPresent -eq $false) -or
  564.             ($mdsMbClearReported -eq $false)) {
  565.             $actions += "Install the latest available updates for Windows with support for speculation control mitigations."
  566.         }
  567.  
  568.         if (($btiHardwarePresent -eq $true -and $btiWindowsSupportEnabled -eq $false) -or
  569.             ($kvaShadowRequired -eq $true -and $kvaShadowEnabled -eq $false) -or
  570.             ($l1tfRequired -eq $true -and $l1tfMitigationEnabled -eq $false) -or
  571.             ($mdsMbClearReported -eq $true -and $mdsHardwareProtected -eq $false -and $mdsMbClearEnabled -eq $false)) {
  572.             $guidanceUri = ""
  573.             $guidanceType = ""
  574.  
  575.             if ($PSVersionTable.PSVersion -lt [System.Version]("3.0.0.0")) {
  576.                 $os = Get-WmiObject Win32_OperatingSystem
  577.             }
  578.             else {
  579.                 $os = Get-CimInstance Win32_OperatingSystem
  580.             }
  581.  
  582.             if ($os.ProductType -eq 1) {
  583.                 # Workstation
  584.                 $guidanceUri = "https://support.microsoft.com/help/4073119"
  585.                 $guidanceType = "Client"
  586.             }
  587.             else {
  588.                 # Server/DC
  589.                 $guidanceUri = "https://support.microsoft.com/help/4072698"
  590.                 $guidanceType = "Server"
  591.             }
  592.  
  593.             $actions += "Follow the guidance for enabling Windows $guidanceType support for speculation control mitigations described in $guidanceUri"
  594.         }
  595.  
  596.         if ($Quiet -ne $true -and $actions.Length -gt 0) {
  597.  
  598.             Write-Host
  599.             Write-Host "Suggested actions" -ForegroundColor Cyan
  600.             Write-Host
  601.  
  602.             foreach ($action in $actions) {
  603.                 Write-Host " *" $action
  604.             }
  605.         }
  606.  
  607.         return $object
  608.  
  609.     }
  610.     finally
  611.     {
  612.         if ($systemInformationPtr -ne [System.IntPtr]::Zero) {
  613.             [System.Runtime.InteropServices.Marshal]::FreeHGlobal($systemInformationPtr)
  614.         }
  615.  
  616.         if ($returnLengthPtr -ne [System.IntPtr]::Zero) {
  617.             [System.Runtime.InteropServices.Marshal]::FreeHGlobal($returnLengthPtr)
  618.         }
  619.     }    
  620.   }
  621. }
  622.  
  623. # SIG # Begin signature block
  624. # MIIkfwYJKoZIhvcNAQcCoIIkcDCCJGwCAQExDzANBglghkgBZQMEAgEFADB5Bgor
  625. # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
  626. # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCRdPuMJlxe+cQz
  627. # Um8G99hWbWYeZZWSU0dhLLunRs5OMaCCDYEwggX/MIID56ADAgECAhMzAAABA14l
  628. # HJkfox64AAAAAAEDMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
  629. # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
  630. # b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
  631. # bmcgUENBIDIwMTEwHhcNMTgwNzEyMjAwODQ4WhcNMTkwNzI2MjAwODQ4WjB0MQsw
  632. # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
  633. # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
  634. # b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
  635. # AQDRlHY25oarNv5p+UZ8i4hQy5Bwf7BVqSQdfjnnBZ8PrHuXss5zCvvUmyRcFrU5
  636. # 3Rt+M2wR/Dsm85iqXVNrqsPsE7jS789Xf8xly69NLjKxVitONAeJ/mkhvT5E+94S
  637. # nYW/fHaGfXKxdpth5opkTEbOttU6jHeTd2chnLZaBl5HhvU80QnKDT3NsumhUHjR
  638. # hIjiATwi/K+WCMxdmcDt66VamJL1yEBOanOv3uN0etNfRpe84mcod5mswQ4xFo8A
  639. # DwH+S15UD8rEZT8K46NG2/YsAzoZvmgFFpzmfzS/p4eNZTkmyWPU78XdvSX+/Sj0
  640. # NIZ5rCrVXzCRO+QUauuxygQjAgMBAAGjggF+MIIBejAfBgNVHSUEGDAWBgorBgEE
  641. # AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUR77Ay+GmP/1l1jjyA123r3f3QP8w
  642. # UAYDVR0RBEkwR6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1
  643. # ZXJ0byBSaWNvMRYwFAYDVQQFEw0yMzAwMTIrNDM3OTY1MB8GA1UdIwQYMBaAFEhu
  644. # ZOVQBdOCqhc3NyK1bajKdQKVMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly93d3cu
  645. # bWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY0NvZFNpZ1BDQTIwMTFfMjAxMS0w
  646. # Ny0wOC5jcmwwYQYIKwYBBQUHAQEEVTBTMFEGCCsGAQUFBzAChkVodHRwOi8vd3d3
  647. # Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvZFNpZ1BDQTIwMTFfMjAx
  648. # MS0wNy0wOC5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAgEAn/XJ
  649. # Uw0/DSbsokTYDdGfY5YGSz8eXMUzo6TDbK8fwAG662XsnjMQD6esW9S9kGEX5zHn
  650. # wya0rPUn00iThoj+EjWRZCLRay07qCwVlCnSN5bmNf8MzsgGFhaeJLHiOfluDnjY
  651. # DBu2KWAndjQkm925l3XLATutghIWIoCJFYS7mFAgsBcmhkmvzn1FFUM0ls+BXBgs
  652. # 1JPyZ6vic8g9o838Mh5gHOmwGzD7LLsHLpaEk0UoVFzNlv2g24HYtjDKQ7HzSMCy
  653. # RhxdXnYqWJ/U7vL0+khMtWGLsIxB6aq4nZD0/2pCD7k+6Q7slPyNgLt44yOneFuy
  654. # bR/5WcF9ttE5yXnggxxgCto9sNHtNr9FB+kbNm7lPTsFA6fUpyUSj+Z2oxOzRVpD
  655. # MYLa2ISuubAfdfX2HX1RETcn6LU1hHH3V6qu+olxyZjSnlpkdr6Mw30VapHxFPTy
  656. # 2TUxuNty+rR1yIibar+YRcdmstf/zpKQdeTr5obSyBvbJ8BblW9Jb1hdaSreU0v4
  657. # 6Mp79mwV+QMZDxGFqk+av6pX3WDG9XEg9FGomsrp0es0Rz11+iLsVT9qGTlrEOla
  658. # P470I3gwsvKmOMs1jaqYWSRAuDpnpAdfoP7YO0kT+wzh7Qttg1DO8H8+4NkI6Iwh
  659. # SkHC3uuOW+4Dwx1ubuZUNWZncnwa6lL2IsRyP64wggd6MIIFYqADAgECAgphDpDS
  660. # AAAAAAADMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
  661. # V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
  662. # IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0
  663. # ZSBBdXRob3JpdHkgMjAxMTAeFw0xMTA3MDgyMDU5MDlaFw0yNjA3MDgyMTA5MDla
  664. # MH4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
  665. # ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMT
  666. # H01pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTEwggIiMA0GCSqGSIb3DQEB
  667. # AQUAA4ICDwAwggIKAoICAQCr8PpyEBwurdhuqoIQTTS68rZYIZ9CGypr6VpQqrgG
  668. # OBoESbp/wwwe3TdrxhLYC/A4wpkGsMg51QEUMULTiQ15ZId+lGAkbK+eSZzpaF7S
  669. # 35tTsgosw6/ZqSuuegmv15ZZymAaBelmdugyUiYSL+erCFDPs0S3XdjELgN1q2jz
  670. # y23zOlyhFvRGuuA4ZKxuZDV4pqBjDy3TQJP4494HDdVceaVJKecNvqATd76UPe/7
  671. # 4ytaEB9NViiienLgEjq3SV7Y7e1DkYPZe7J7hhvZPrGMXeiJT4Qa8qEvWeSQOy2u
  672. # M1jFtz7+MtOzAz2xsq+SOH7SnYAs9U5WkSE1JcM5bmR/U7qcD60ZI4TL9LoDho33
  673. # X/DQUr+MlIe8wCF0JV8YKLbMJyg4JZg5SjbPfLGSrhwjp6lm7GEfauEoSZ1fiOIl
  674. # XdMhSz5SxLVXPyQD8NF6Wy/VI+NwXQ9RRnez+ADhvKwCgl/bwBWzvRvUVUvnOaEP
  675. # 6SNJvBi4RHxF5MHDcnrgcuck379GmcXvwhxX24ON7E1JMKerjt/sW5+v/N2wZuLB
  676. # l4F77dbtS+dJKacTKKanfWeA5opieF+yL4TXV5xcv3coKPHtbcMojyyPQDdPweGF
  677. # RInECUzF1KVDL3SV9274eCBYLBNdYJWaPk8zhNqwiBfenk70lrC8RqBsmNLg1oiM
  678. # CwIDAQABo4IB7TCCAekwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFEhuZOVQ
  679. # BdOCqhc3NyK1bajKdQKVMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1Ud
  680. # DwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFHItOgIxkEO5FAVO
  681. # 4eqnxzHRI4k0MFoGA1UdHwRTMFEwT6BNoEuGSWh0dHA6Ly9jcmwubWljcm9zb2Z0
  682. # LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y
  683. # Mi5jcmwwXgYIKwYBBQUHAQEEUjBQME4GCCsGAQUFBzAChkJodHRwOi8vd3d3Lm1p
  684. # Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y
  685. # Mi5jcnQwgZ8GA1UdIASBlzCBlDCBkQYJKwYBBAGCNy4DMIGDMD8GCCsGAQUFBwIB
  686. # FjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2RvY3MvcHJpbWFyeWNw
  687. # cy5odG0wQAYIKwYBBQUHAgIwNB4yIB0ATABlAGcAYQBsAF8AcABvAGwAaQBjAHkA
  688. # XwBzAHQAYQB0AGUAbQBlAG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIBAGfyhqWY
  689. # 4FR5Gi7T2HRnIpsLlhHhY5KZQpZ90nkMkMFlXy4sPvjDctFtg/6+P+gKyju/R6mj
  690. # 82nbY78iNaWXXWWEkH2LRlBV2AySfNIaSxzzPEKLUtCw/WvjPgcuKZvmPRul1LUd
  691. # d5Q54ulkyUQ9eHoj8xN9ppB0g430yyYCRirCihC7pKkFDJvtaPpoLpWgKj8qa1hJ
  692. # Yx8JaW5amJbkg/TAj/NGK978O9C9Ne9uJa7lryft0N3zDq+ZKJeYTQ49C/IIidYf
  693. # wzIY4vDFLc5bnrRJOQrGCsLGra7lstnbFYhRRVg4MnEnGn+x9Cf43iw6IGmYslmJ
  694. # aG5vp7d0w0AFBqYBKig+gj8TTWYLwLNN9eGPfxxvFX1Fp3blQCplo8NdUmKGwx1j
  695. # NpeG39rz+PIWoZon4c2ll9DuXWNB41sHnIc+BncG0QaxdR8UvmFhtfDcxhsEvt9B
  696. # xw4o7t5lL+yX9qFcltgA1qFGvVnzl6UJS0gQmYAf0AApxbGbpT9Fdx41xtKiop96
  697. # eiL6SJUfq/tHI4D1nvi/a7dLl+LrdXga7Oo3mXkYS//WsyNodeav+vyL6wuA6mk7
  698. # r/ww7QRMjt/fdW1jkT3RnVZOT7+AVyKheBEyIXrvQQqxP/uozKRdwaGIm1dxVk5I
  699. # RcBCyZt2WwqASGv9eZ/BvW1taslScxMNelDNMYIWVDCCFlACAQEwgZUwfjELMAkG
  700. # A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
  701. # HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9z
  702. # b2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMQITMwAAAQNeJRyZH6MeuAAAAAABAzAN
  703. # BglghkgBZQMEAgEFAKCB0jAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor
  704. # BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQgPkebc8/b
  705. # BvbG7NmJaah5XgDy0uj3Tp4DlEU5MtXjm4wwZgYKKwYBBAGCNwIBDDFYMFagNoA0
  706. # AFMAcABlAGMAdQBsAGEAdABpAG8AbgBDAG8AbgB0AHIAbwBsACAAdABvAG8AbABz
  707. # AGUAdKEcgBpodHRwczovL3d3dy5taWNyb3NvZnQuY29tIDANBgkqhkiG9w0BAQEF
  708. # AASCAQDNuiDXheIiF2P66mGgNkVxqrzUa2m7QRXJ5Pc/LH8oQ0RbHw37T3rHgAX6
  709. # 6rSTEIkFvvEu8bSzZAu+bAvieu7Xr4qMtyVBnQoqg7eQPNPu0mty2iNq2uJrLmHL
  710. # t8Ka8yIeV3rNwZUNr2yby8MyNGE7wSUgzTvFWsqClWKUHc6s5UIBVM/43m/hSZB1
  711. # U6wC63A9HRJ9YdxT+2R5mfNSDGlSLufwwDNcjxasWqYkhdlEdJq14xzQNwj6u9MD
  712. # hI4kK8hCA8VwSgkAv1mhCnxHxgiz4F7vwPszL8Y/4w/SjAfS7f479WfrQFMNv1k6
  713. # QxvHr2P0gryPIA7phiPxfyB19h7hoYITujCCE7YGCisGAQQBgjcDAwExghOmMIIT
  714. # ogYJKoZIhvcNAQcCoIITkzCCE48CAQMxDzANBglghkgBZQMEAgEFADCCAVgGCyqG
  715. # SIb3DQEJEAEEoIIBRwSCAUMwggE/AgEBBgorBgEEAYRZCgMBMDEwDQYJYIZIAWUD
  716. # BAIBBQAEIP73Px446E4IhqRb1neYRQes4FPXX3RnfL7+K9LVQWZkAgZcwc2QSlwY
  717. # EzIwMTkwNTE1MjAxMTI5LjI2N1owBwIBAYACAfSggdSkgdEwgc4xCzAJBgNVBAYT
  718. # AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
  719. # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1pY3Jvc29mdCBP
  720. # cGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpG
  721. # NTI4LTM3NzctOEE3NjElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vy
  722. # dmljZaCCDyIwggT1MIID3aADAgECAhMzAAAA0ZjP5DyZJWSEAAAAAADRMA0GCSqG
  723. # SIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
  724. # DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
  725. # JjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTE4MDgy
  726. # MzIwMjYzM1oXDTE5MTEyMzIwMjYzM1owgc4xCzAJBgNVBAYTAlVTMRMwEQYDVQQI
  727. # EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
  728. # ZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1
  729. # ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpGNTI4LTM3NzctOEE3
  730. # NjElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZTCCASIwDQYJ
  731. # KoZIhvcNAQEBBQADggEPADCCAQoCggEBAO8AzsRMhqn2kikKhD3zCu0CrZNR/rI/
  732. # 5Mk55+pELW4spLVAS2J5i9pImF9/L+hCWB1+VABr1O6Z7JLscLyNQH9h+425uDw/
  733. # j9NivZcdYhQHS5aXUGrlg+hBI04qTdVXVFiLz7QnOdOCQWWT34xuwiDFSTU3pND3
  734. # zBTUzgtHG2DHuZ9KYCBBQI5h+DppSTrIl2hrNoi2h048t68+kzCzZbxtcDB5Jdvn
  735. # PklmJW0eiaBUNLDQBJ+qisRoEe5KXXUJbvcFSh40S1PHF5hKSSMa2dzsK+7U7N9S
  736. # XMla5WYOGshZSD9OKiNzR24i6gNYxHx2qrkexW6j2M/OCj8zcpMqx/8CAwEAAaOC
  737. # ARswggEXMB0GA1UdDgQWBBSD+xJFcDb/Z4m6UIvdycY9VPNqDDAfBgNVHSMEGDAW
  738. # gBTVYzpcijGQ80N7fEYbxTNoWoVtVTBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8v
  739. # Y3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNUaW1TdGFQQ0Ff
  740. # MjAxMC0wNy0wMS5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRw
  741. # Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1RpbVN0YVBDQV8yMDEw
  742. # LTA3LTAxLmNydDAMBgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMIMA0G
  743. # CSqGSIb3DQEBCwUAA4IBAQA64DLn2qQE9IkemBnRJXoNPZ8i2UamL9Syzn2kERwV
  744. # uBZ4lrlNjXcdzGEFwKpnxtw4nHbwdyaUxDf26Nu0fcGA0+8YJqinxW5Ru8r0uLbb
  745. # n/5DCEhnoC/eGEtQkgQVC2ppiula+Uk5RSTq/A90xnT74jnIgGQuC9tptzLmy3LH
  746. # YBGObaMCPxFaVkea9BL87pxnk8pGFF/069NFIZGb5OjMCJgkqyycHEb+Kk+H/JT0
  747. # fuqydkn8CXk8lrV/Mehla+jEcGLW2DSBdM9Epq84Zn4ywzU9s2Ri63KfeNARfvkL
  748. # NTWiDRwPhogV7O6O6Y171+1bOo4RggWFdfAX/JWlmsooMIIGcTCCBFmgAwIBAgIK
  749. # YQmBKgAAAAAAAjANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV
  750. # BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
  751. # c29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlm
  752. # aWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMTAwNzAxMjEzNjU1WhcNMjUwNzAxMjE0
  753. # NjU1WjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
  754. # BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYD
  755. # VQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDCCASIwDQYJKoZIhvcN
  756. # AQEBBQADggEPADCCAQoCggEBAKkdDbx3EYo6IOz8E5f1+n9plGt0VBDVpQoAgoX7
  757. # 7XxoSyxfxcPlYcJ2tz5mK1vwFVMnBDEfQRsalR3OCROOfGEwWbEwRA/xYIiEVEMM
  758. # 1024OAizQt2TrNZzMFcmgqNFDdDq9UeBzb8kYDJYYEbyWEeGMoQedGFnkV+BVLHP
  759. # k0ySwcSmXdFhE24oxhr5hoC732H8RsEnHSRnEnIaIYqvS2SJUGKxXf13Hz3wV3Ws
  760. # vYpCTUBR0Q+cBj5nf/VmwAOWRH7v0Ev9buWayrGo8noqCjHw2k4GkbaICDXoeByw
  761. # 6ZnNPOcvRLqn9NxkvaQBwSAJk3jN/LzAyURdXhacAQVPIk0CAwEAAaOCAeYwggHi
  762. # MBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBTVYzpcijGQ80N7fEYbxTNoWoVt
  763. # VTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0T
  764. # AQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2UkFvXzpoYxDBWBgNV
  765. # HR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9w
  766. # cm9kdWN0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcmwwWgYIKwYBBQUHAQEE
  767. # TjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2Nl
  768. # cnRzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNydDCBoAYDVR0gAQH/BIGVMIGS
  769. # MIGPBgkrBgEEAYI3LgMwgYEwPQYIKwYBBQUHAgEWMWh0dHA6Ly93d3cubWljcm9z
  770. # b2Z0LmNvbS9QS0kvZG9jcy9DUFMvZGVmYXVsdC5odG0wQAYIKwYBBQUHAgIwNB4y
  771. # IB0ATABlAGcAYQBsAF8AUABvAGwAaQBjAHkAXwBTAHQAYQB0AGUAbQBlAG4AdAAu
  772. # IB0wDQYJKoZIhvcNAQELBQADggIBAAfmiFEN4sbgmD+BcQM9naOhIW+z66bM9TG+
  773. # zwXiqf76V20ZMLPCxWbJat/15/B4vceoniXj+bzta1RXCCtRgkQS+7lTjMz0YBKK
  774. # dsxAQEGb3FwX/1z5Xhc1mCRWS3TvQhDIr79/xn/yN31aPxzymXlKkVIArzgPF/Uv
  775. # eYFl2am1a+THzvbKegBvSzBEJCI8z+0DpZaPWSm8tv0E4XCfMkon/VWvL/625Y4z
  776. # u2JfmttXQOnxzplmkIz/amJ/3cVKC5Em4jnsGUpxY517IW3DnKOiPPp/fZZqkHim
  777. # bdLhnPkd/DjYlPTGpQqWhqS9nhquBEKDuLWAmyI4ILUl5WTs9/S/fmNZJQ96LjlX
  778. # dqJxqgaKD4kWumGnEcua2A5HmoDF0M2n0O99g/DhO3EJ3110mCIIYdqwUB5vvfHh
  779. # AN/nMQekkzr3ZUd46PioSKv33nJ+YWtvd6mBy6cJrDm77MbL2IK0cs0d9LiFAR6A
  780. # +xuJKlQ5slvayA1VmXqHczsI5pgt6o3gMy4SKfXAL1QnIffIrE7aKLixqduWsqdC
  781. # osnPGUFN4Ib5KpqjEWYw07t0MkvfY3v1mYovG8chr1m1rtxEPJdQcdeh0sVV42ne
  782. # V8HR3jDA/czmTfsNv11P6Z0eGTgvvM9YBS7vDaBQNdrvCScc1bN+NR4Iuto229Nf
  783. # j950iEkSoYIDsDCCApgCAQEwgf6hgdSkgdEwgc4xCzAJBgNVBAYTAlVTMRMwEQYD
  784. # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
  785. # b3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25z
  786. # IFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpGNTI4LTM3Nzct
  787. # OEE3NjElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIlCgEB
  788. # MAkGBSsOAwIaBQADFQBKXMzSTq/paxECeoaXXVG5drZU8aCB3jCB26SB2DCB1TEL
  789. # MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
  790. # bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEpMCcGA1UECxMgTWlj
  791. # cm9zb2Z0IE9wZXJhdGlvbnMgUHVlcnRvIFJpY28xJzAlBgNVBAsTHm5DaXBoZXIg
  792. # TlRTIEVTTjo0REU5LTBDNUUtM0UwOTErMCkGA1UEAxMiTWljcm9zb2Z0IFRpbWUg
  793. # U291cmNlIE1hc3RlciBDbG9jazANBgkqhkiG9w0BAQUFAAIFAOCGZwowIhgPMjAx
  794. # OTA1MTUxODIzMDZaGA8yMDE5MDUxNjE4MjMwNlowdzA9BgorBgEEAYRZCgQBMS8w
  795. # LTAKAgUA4IZnCgIBADAKAgEAAgIeNgIB/zAHAgEAAgIafTAKAgUA4Ie4igIBADA2
  796. # BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMBoAowCAIBAAIDFuNgoQowCAIB
  797. # AAIDB6EgMA0GCSqGSIb3DQEBBQUAA4IBAQCNvTUQeI4FdjdtG0ZXm78sWy1sd5Xr
  798. # zzIY+bguVkRn4UTG2Nr7IEAnHYIWpC1vMIQQ0YWTiNFqMffH8b6/E06wbjKNbh8z
  799. # qoGCo+A2lQAWOGp1ZmGO2SWTuNihEXcfjeXl4RSVjVL7tbOef6KRDdHp+SSimUmZ
  800. # QPTxnU7yXK3dJ/+5wpYNEsUJTp+Boivey4o3rkHvhG1l9rIRNc+vKwBTzEP3TfGc
  801. # /iArCBm5j8/tp59kuWfORx18oiAsZlKC6tDrz9HbCm7PI7wS2P7EQZCHS/X+YJTV
  802. # slD+CNVcmTPnC1DAtUCuUWPQBrhr0kZ0fOjeJPqJb4aFd+8s94C3oUzYMYIC9TCC
  803. # AvECAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
  804. # BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEm
  805. # MCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAADRmM/k
  806. # PJklZIQAAAAAANEwDQYJYIZIAWUDBAIBBQCgggEyMBoGCSqGSIb3DQEJAzENBgsq
  807. # hkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgwPMLIKi/dle4J4dGS4HNM9mOkiZ/
  808. # ltdjZvDAp8AP3KIwgeIGCyqGSIb3DQEJEAIMMYHSMIHPMIHMMIGxBBRKXMzSTq/p
  809. # axECeoaXXVG5drZU8TCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX
  810. # YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg
  811. # Q29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAy
  812. # MDEwAhMzAAAA0ZjP5DyZJWSEAAAAAADRMBYEFKLU2QvUJseoMxBgE10SDxRCCftv
  813. # MA0GCSqGSIb3DQEBCwUABIIBAL3fHdQvHuU4n2C+k6wndcGealqMN1y3nrqYrs2h
  814. # qqBS/wsk75HHmEYJ9CwXz1J095BgnN4SFEqrBX5fzntEB8zpl1eVzoOKJ3rmlY99
  815. # Rk+iZQxKOfD8ZOBaqqAWba9Xm0NgnOWI3cEqUWxeKXfGU3SeVFGoco0LawAogzmw
  816. # b3im/vJZFMuQ8tbGEyWlIJrUATI3YDbWwWuCbbwmyST9SMmyJ8F3DU2OSAF9onRB
  817. # 7jlHrHAFAF9qaTx/7pWqQyCLRH2CyVdGEaXMisRW9omBd6pE8okFkUmH7wAwNLsx
  818. # Vsd5+Lpua143GW3BWdO3amYe+AlV6IkwiOfc5oE0LveXj8o=
  819. # SIG # End signature block
  820. :speculationcontrol:] exit
  821. ::
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement