Added Files
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
RuleID,RuleDescription,RuleAction
|
||||
75668C1F-73B5-4CF0-BB93-3ECF5CB7CC84, Block Office applications from injecting into other processes, Enabled
|
||||
3B576869-A4EC-4529-8536-B80A7769E899, Block Office applications from creating executable content, Enabled
|
||||
D4F940AB-401B-4EfC-AADC-AD5F3C50688A, Block Office applications from creating child processes, Enabled
|
||||
D3E037E1-3EB8-44C8-A917-57927947596D, Impede JavaScript and VBScript to launch executables, Enabled
|
||||
5BEB7EFE-FD9A-4556-801D-275E5FFC04CC, Block execution of potentially obfuscated script, Enabled
|
||||
BE9BA2D9-53EA-4CDC-84E5-9B1EEEE46550, Block executable content from email client and webmail, Enabled
|
||||
92E97FA1-2EDF-4476-BDD6-9DD0B4DDDC7B, Block Win32 imports from Macro code in Office, Enabled
|
||||
c1db55ab-c21a-4637-bb3f-a12568109d35, Use advanced protection against ransomware, Enabled
|
||||
9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2, Block credential stealing from the Windows local security authority subsystem (lsass.exe), Enabled
|
||||
d1e49aac-8f56-4280-b9ba-993a6d77406c, Block process creations originating from PSExec and WMI commands, Enabled
|
||||
b2b3f03d-6a65-4f7b-a9c7-1c7ef74a9ba4, Block untrusted and unsigned processes that run from USB, Enabled
|
||||
26190899-1602-49e8-8b27-eb1d0a1ce869, Block Office communication applications from creating child processes, AuditMode
|
||||
7674ba52-37eb-4a4f-a9a1-f0f9a1619a2c, Block Adobe Reader from creating child processes, Enabled
|
||||
e6db77e5-3df2-4cf1-b95a-636979351e5b, Block persistence through WMI event subscription, Enabled
|
||||
01443614-cd74-433a-b99e-2ecdc07bfc25, Block executable files from running unless they meet a prevalence age or trusted list criteria, AuditMode
|
||||
|
@@ -0,0 +1,676 @@
|
||||
#requires -Version 3.0 -Modules ConfigDefender, NetSecurity
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Bootstrap Microsoft Defender configuration
|
||||
|
||||
.DESCRIPTION
|
||||
Bootstrap Microsoft Defender configuration, optimize and tweak Windows 10 protection and security
|
||||
|
||||
.PARAMETER CsvPath
|
||||
The CSV with the configuration.
|
||||
This is optional. Defaults are in the Script.
|
||||
|
||||
.PARAMETER Force
|
||||
Enforce to apply the customize attack surface reduction rules
|
||||
|
||||
.EXAMPLE
|
||||
PS C:\> .\Bootstrap-MicrosoftDefenderConfiguration.ps1
|
||||
|
||||
Bootstrap Microsoft Defender configuration, optimize and tweak Windows 10 Protection
|
||||
|
||||
.EXAMPLE
|
||||
PS C:\> .\Bootstrap-MicrosoftDefenderConfiguration.ps1 -Verbose -Force
|
||||
|
||||
Bootstrap Microsoft Defender configuration, optimize and tweak Windows 10 Protection
|
||||
|
||||
.EXAMPLE
|
||||
PS C:\> .\Bootstrap-MicrosoftDefenderConfiguration.ps1 -Verbose
|
||||
|
||||
Bootstrap Microsoft Defender configuration, optimize and tweak Windows 10 Protection
|
||||
|
||||
.LINK
|
||||
https://docs.microsoft.com/en-us/powershell/module/defender/index?view=win10-ps
|
||||
|
||||
.LINK
|
||||
https://github.com/jhochwald/PowerShell-collection/blob/master/Misc/Optimize-MicrosoftDefenderExclusions.ps1
|
||||
|
||||
.LINK
|
||||
https://docs.microsoft.com/en-us/windows/security/threat-protection/microsoft-defender-atp/enable-exploit-protection
|
||||
|
||||
.LINK
|
||||
https://docs.microsoft.com/en-us/powershell/module/defender/set-mppreference?view=win10-ps
|
||||
|
||||
.LINK
|
||||
https://docs.microsoft.com/en-us/windows/security/threat-protection/microsoft-defender-atp/customize-attack-surface-reduction
|
||||
|
||||
.LINK
|
||||
https://support.microsoft.com/en-us/help/822158/virus-scanning-recommendations-for-enterprise-computers-that-are-runni
|
||||
|
||||
.LINK
|
||||
https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-antivirus/enable-cloud-protection-windows-defender-antivirus
|
||||
|
||||
.LINK
|
||||
https://demo.wd.microsoft.com/?ocid=cx-wddocs-testground
|
||||
|
||||
.NOTES
|
||||
Please review the settings, please tweak the rules file (or modify the default rule set here)
|
||||
|
||||
You need to run this in an elevated PowerShell!
|
||||
|
||||
I use this during the bootstrap process of Windows systems.
|
||||
Most of the settings here is also enforced by some of our Group Policies and we also have a lot of it configured via MDM CSPs (InTune).
|
||||
|
||||
This script is only a quick hack to harden (and secure) any new system, even if it is not managed afterwords.
|
||||
#>
|
||||
[CmdletBinding(ConfirmImpact = 'Low',
|
||||
SupportsShouldProcess)]
|
||||
param
|
||||
(
|
||||
[Parameter(ValueFromPipeline,
|
||||
ValueFromPipelineByPropertyName)]
|
||||
[Alias('RulesCsv')]
|
||||
[string]
|
||||
$CsvPath = '.\Bootstrap-MicrosoftDefenderConfiguration.csv',
|
||||
[Parameter(ValueFromPipeline,
|
||||
ValueFromPipelineByPropertyName)]
|
||||
[Alias('EnforceRule')]
|
||||
[switch]
|
||||
$Force = $null
|
||||
)
|
||||
|
||||
begin
|
||||
{
|
||||
# Create a new Mail Object
|
||||
$AttackSurfaceReductionRuleList = @()
|
||||
|
||||
#region CsvHandler
|
||||
if (Test-Path -Path $CsvPath -ErrorAction SilentlyContinue)
|
||||
{
|
||||
#region ImportCsv
|
||||
Write-Verbose -Message ('Import the attack surface reduction settings from ' + $CsvPath)
|
||||
$AttackSurfaceReductionRuleList = (Import-Csv -Path $CsvPath -Delimiter ',' -Encoding UTF8)
|
||||
#endregion ImportCsv
|
||||
}
|
||||
else
|
||||
{
|
||||
#region DefaultCsv
|
||||
Write-Verbose -Message 'Use the attack surface reduction default settings'
|
||||
|
||||
# Create a virtual CSV File (Quick hack: To keep it plain and simple to maintain)
|
||||
$RuleDefaults = 'RuleID,RuleDescription,RuleAction
|
||||
75668C1F-73B5-4CF0-BB93-3ECF5CB7CC84, Block Office applications from injecting into other processes, Enabled
|
||||
3B576869-A4EC-4529-8536-B80A7769E899, Block Office applications from creating executable content, Enabled
|
||||
D4F940AB-401B-4EfC-AADC-AD5F3C50688A, Block Office applications from creating child processes, Enabled
|
||||
D3E037E1-3EB8-44C8-A917-57927947596D, Impede JavaScript and VBScript to launch executable, Enabled
|
||||
5BEB7EFE-FD9A-4556-801D-275E5FFC04CC, Block execution of potentially obfuscated script, Enabled
|
||||
BE9BA2D9-53EA-4CDC-84E5-9B1EEEE46550, Block executable content from email client and webmail, Enabled
|
||||
92E97FA1-2EDF-4476-BDD6-9DD0B4DDDC7B, Block Win32 imports from Macro code in Office, Enabled
|
||||
c1db55ab-c21a-4637-bb3f-a12568109d35, Use advanced protection against ransomware, Enabled
|
||||
9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2, Block credential stealing from the Windows local security authority subsystem (lsass.exe), Enabled
|
||||
d1e49aac-8f56-4280-b9ba-993a6d77406c, Block process creations originating from PSExec and WMI commands, Enabled
|
||||
b2b3f03d-6a65-4f7b-a9c7-1c7ef74a9ba4, Block untrusted and unsigned processes that run from USB, Enabled
|
||||
26190899-1602-49e8-8b27-eb1d0a1ce869, Block Office communication applications from creating child processes, AuditMode
|
||||
7674ba52-37eb-4a4f-a9a1-f0f9a1619a2c, Block Adobe Reader from creating child processes, Enabled
|
||||
e6db77e5-3df2-4cf1-b95a-636979351e5b, Block persistence through WMI event subscription, Enabled
|
||||
01443614-cd74-433a-b99e-2ecdc07bfc25, Block executable files from running unless they meet a prevalence age or trusted list criteria, AuditMode'
|
||||
|
||||
# Import the virtual CSV File
|
||||
$AttackSurfaceReductionRuleList = (ConvertFrom-Csv -InputObject $RuleDefaults -Delimiter ',')
|
||||
#endregion DefaultCsv
|
||||
}
|
||||
#endregion CsvHandler
|
||||
}
|
||||
|
||||
process
|
||||
{
|
||||
#region SetMpPreference
|
||||
#region EnableNetworkProtection
|
||||
Write-Verbose -Message 'Network protection helps to prevent employees from using any application to access dangerous domains that may host phishing scams, exploits, and other malicious content on the Internet'
|
||||
$null = (Set-MpPreference -EnableNetworkProtection Enabled -Force -ErrorAction Continue)
|
||||
#endregion EnableNetworkProtection
|
||||
|
||||
#region EnableControlledFolderAccess
|
||||
Write-Verbose -Message 'Controlled folder access helps you protect valuable data from malicious apps and threats, such as ransomware'
|
||||
$null = (Set-MpPreference -EnableControlledFolderAccess Enabled -Force -ErrorAction Continue)
|
||||
#endregion EnableControlledFolderAccess
|
||||
|
||||
#region SignatureScheduleDay
|
||||
Write-Verbose -Message 'Specifies the day of the week on which to check for definition updates'
|
||||
$null = (Set-MpPreference -SignatureScheduleDay Everyday -Force -ErrorAction Continue)
|
||||
#endregion SignatureScheduleDay
|
||||
|
||||
#region SignatureScheduleTime
|
||||
Write-Verbose -Message 'Specifies the time of day, as the number of minutes after midnight, to check for definition updates'
|
||||
$null = (Set-MpPreference -SignatureScheduleTime 320 -Force -ErrorAction Continue)
|
||||
#endregion SignatureScheduleTime
|
||||
|
||||
#region DisableArchiveScanning
|
||||
Write-Verbose -Message 'Indicates whether to scan archive files for malicious and unwanted software'
|
||||
$null = (Set-MpPreference -DisableArchiveScanning $true -Force -ErrorAction Continue)
|
||||
#endregion DisableArchiveScanning
|
||||
|
||||
#region DisableAutoExclusions
|
||||
Write-Verbose -Message 'Indicates whether to disable the Automatic Exclusions feature for the server'
|
||||
$null = (Set-MpPreference -DisableAutoExclusions $false -Force -ErrorAction Continue)
|
||||
#endregion DisableAutoExclusions
|
||||
|
||||
#region DisableBehaviorMonitoring
|
||||
Write-Verbose -Message 'Indicates whether to enable behavior monitoring'
|
||||
$null = (Set-MpPreference -DisableBehaviorMonitoring $true -Force -ErrorAction Continue)
|
||||
#endregion DisableBehaviorMonitoring
|
||||
|
||||
#region DisableBlockAtFirstSeen
|
||||
Write-Verbose -Message 'Indicates whether to enable block at first seen'
|
||||
$null = (Set-MpPreference -DisableBlockAtFirstSeen $true -Force -ErrorAction Continue)
|
||||
#endregion DisableBlockAtFirstSeen
|
||||
|
||||
#region DisableCatchupFullScan
|
||||
Write-Verbose -Message 'Indicates whether Windows Defender runs catch-up scans for scheduled full scans'
|
||||
$null = (Set-MpPreference -DisableCatchupFullScan $true -Force -ErrorAction Continue)
|
||||
#endregion DisableCatchupFullScan
|
||||
|
||||
#region DisableCatchupQuickScan
|
||||
Write-Verbose -Message 'Indicates whether Windows Defender runs catch-up scans for scheduled quick scans'
|
||||
$null = (Set-MpPreference -DisableCatchupQuickScan $true -Force -ErrorAction Continue)
|
||||
#endregion DisableCatchupQuickScan
|
||||
|
||||
#region DisableEmailScanning
|
||||
Write-Verbose -Message 'Indicates whether Windows Defender parses the mailbox and mail files, according to their specific format, in order to analyze mail bodies and attachments'
|
||||
$null = (Set-MpPreference -DisableEmailScanning $false -Force -ErrorAction Continue)
|
||||
#endregion DisableEmailScanning
|
||||
|
||||
#region DisableIOAVProtection
|
||||
Write-Verbose -Message 'Indicates whether Windows Defender scans all downloaded files and attachments (e.g. Downloads)'
|
||||
$null = (Set-MpPreference -DisableIOAVProtection $true -Force -ErrorAction Continue)
|
||||
#endregion DisableIOAVProtection
|
||||
|
||||
#region DisableIntrusionPreventionSystem
|
||||
Write-Verbose -Message 'Indicates whether to configure network protection against exploitation of known vulnerabilities'
|
||||
$null = (Set-MpPreference -DisableIntrusionPreventionSystem $false -Force -ErrorAction Continue)
|
||||
#endregion DisableIntrusionPreventionSystem
|
||||
|
||||
#region DisablePrivacyMode
|
||||
Write-Verbose -Message 'Indicates whether to disable privacy mode. Privacy mode prevents users, other than administrators, from displaying threat history'
|
||||
$null = (Set-MpPreference -DisablePrivacyMode $false -Force -ErrorAction Continue)
|
||||
#endregion DisablePrivacyMode
|
||||
|
||||
#region DisableRealtimeMonitoring
|
||||
Write-Verbose -Message 'Indicates whether to use real-time protection'
|
||||
$null = (Set-MpPreference -DisableRealtimeMonitoring $false -Force -ErrorAction Continue)
|
||||
#endregion DisableRealtimeMonitoring
|
||||
|
||||
#region CheckForSignaturesBeforeRunningScan
|
||||
Write-Verbose -Message 'Enable checking signatures before scanning'
|
||||
$null = (Set-MpPreference -CheckForSignaturesBeforeRunningScan 1 -Force -ErrorAction Continue)
|
||||
#endregion CheckForSignaturesBeforeRunningScan
|
||||
|
||||
#region DisableRemovableDriveScanning
|
||||
Write-Verbose -Message 'Indicates whether to scan for malicious and unwanted software in removable drives, such as flash drives, during a full scan'
|
||||
$null = (Set-MpPreference -DisableRemovableDriveScanning $true -Force -ErrorAction Continue)
|
||||
#endregion DisableRemovableDriveScanning
|
||||
|
||||
#region DisableRestorePoint
|
||||
Write-Verbose -Message 'Indicates whether to disable scanning of restore points'
|
||||
$null = (Set-MpPreference -DisableRestorePoint $true -Force -ErrorAction Continue)
|
||||
#endregion DisableRestorePoint
|
||||
|
||||
#region DisableScanningMappedNetworkDrivesForFullScan
|
||||
Write-Verbose -Message 'Indicates whether to scan mapped network drives'
|
||||
$null = (Set-MpPreference -DisableScanningMappedNetworkDrivesForFullScan $true -Force -ErrorAction Continue)
|
||||
#endregion DisableScanningMappedNetworkDrivesForFullScan
|
||||
|
||||
#region DisableScanningNetworkFiles
|
||||
Write-Verbose -Message 'Indicates whether to scan for network files'
|
||||
$null = (Set-MpPreference -DisableScanningNetworkFiles $false -Force -ErrorAction Continue)
|
||||
#endregion DisableScanningNetworkFiles
|
||||
|
||||
#region DisableScriptScanning
|
||||
Write-Verbose -Message 'Specifies whether to disable the scanning of scripts during malware scans'
|
||||
$null = (Set-MpPreference -DisableScriptScanning $false -Force -ErrorAction Continue)
|
||||
#endregion DisableScriptScanning
|
||||
|
||||
#region HighThreatDefaultAction
|
||||
Write-Verbose -Message 'Specifies which automatic remediation action to take for a high level threat'
|
||||
$null = (Set-MpPreference -HighThreatDefaultAction Quarantine -Force -ErrorAction Continue)
|
||||
#endregion HighThreatDefaultAction
|
||||
|
||||
#region LowThreatDefaultAction
|
||||
Write-Verbose -Message 'Specifies which automatic remediation action to take for a low level threat'
|
||||
$null = (Set-MpPreference -LowThreatDefaultAction Block -Force -ErrorAction Continue)
|
||||
#endregion LowThreatDefaultAction
|
||||
|
||||
#region ModerateThreatDefaultAction
|
||||
Write-Verbose -Message 'Specifies which automatic remediation action to take for a moderate level threat'
|
||||
$null = (Set-MpPreference -ModerateThreatDefaultAction Quarantine -Force -ErrorAction Continue)
|
||||
#endregion ModerateThreatDefaultAction
|
||||
|
||||
#region PUAProtection
|
||||
Write-Verbose -Message 'Disable PUA Protection'
|
||||
$null = (Set-MpPreference -PUAProtection Enabled -Force -ErrorAction Continue)
|
||||
#endregion PUAProtection
|
||||
|
||||
#region QuarantinePurgeItemsAfterDelay
|
||||
Write-Verbose -Message 'Specifies the number of days to keep items in the Quarantine folder'
|
||||
$null = (Set-MpPreference -QuarantinePurgeItemsAfterDelay 30 -Force -ErrorAction Continue)
|
||||
#endregion QuarantinePurgeItemsAfterDelay
|
||||
|
||||
#region RandomizeScheduleTaskTimes
|
||||
Write-Verbose -Message 'Indicates whether to select a random time for the scheduled start and scheduled update for definitions'
|
||||
$null = (Set-MpPreference -RandomizeScheduleTaskTimes $true -Force -ErrorAction Continue)
|
||||
#endregion RandomizeScheduleTaskTimes
|
||||
|
||||
#region RealTimeScanDirection
|
||||
Write-Verbose -Message 'Specifies scanning configuration for incoming and outgoing files on NTFS volumes'
|
||||
$null = (Set-MpPreference -RealTimeScanDirection 0 -Force -ErrorAction Continue)
|
||||
#endregion RealTimeScanDirection
|
||||
|
||||
#region RemediationScheduleDay
|
||||
Write-Verbose -Message 'Specifies the day of the week on which to perform a scheduled full scan in order to complete remediation'
|
||||
$null = (Set-MpPreference -RemediationScheduleDay Everyday -Force -ErrorAction Continue)
|
||||
#endregion
|
||||
|
||||
#region RemediationScheduleTime
|
||||
Write-Verbose -Message 'Specifies the time of day, as the number of minutes after midnight, to perform a scheduled scan'
|
||||
$null = (Set-MpPreference -RemediationScheduleTime 120 -Force -ErrorAction Continue)
|
||||
#endregion RemediationScheduleDay
|
||||
|
||||
#region ReportingAdditionalActionTimeOut
|
||||
Write-Verbose -Message 'Specifies the number of minutes before a detection in the additional action state changes to the cleared state'
|
||||
$null = (Set-MpPreference -ReportingAdditionalActionTimeOut 10080 -Force -ErrorAction Continue)
|
||||
#endregion ReportingAdditionalActionTimeOut
|
||||
|
||||
#region ReportingCriticalFailureTimeOut
|
||||
Write-Verbose -Message 'Specifies the number of minutes before a detection in the critically failed state changes to either the additional action state or the cleared state'
|
||||
$null = (Set-MpPreference -ReportingCriticalFailureTimeOut 10080 -Force -ErrorAction Continue)
|
||||
#endregion ReportingCriticalFailureTimeOut
|
||||
|
||||
#region ReportingNonCriticalTimeOut
|
||||
Write-Verbose -Message 'Specifies the number of minutes before a detection in the non-critically failed state changes to the cleared state'
|
||||
$null = (Set-MpPreference -ReportingNonCriticalTimeOut 11440 -Force -ErrorAction Continue)
|
||||
#endregion ReportingNonCriticalTimeOut
|
||||
|
||||
#region ScanAvgCPULoadFactor
|
||||
Write-Verbose -Message 'Specifies the maximum percentage CPU usage for a scan'
|
||||
$null = (Set-MpPreference -ScanAvgCPULoadFactor 50 -Force -ErrorAction Continue)
|
||||
#endregion ScanAvgCPULoadFactor
|
||||
|
||||
#region ScanOnlyIfIdleEnabled
|
||||
Write-Verbose -Message 'Indicates whether to start scheduled scans only when the computer is not in use'
|
||||
$null = (Set-MpPreference -ScanOnlyIfIdleEnabled $true -Force -ErrorAction Continue)
|
||||
#endregion ScanOnlyIfIdleEnabled
|
||||
|
||||
#region ScanParameters
|
||||
Write-Verbose -Message 'Specifies the scan type to use during a scheduled scan'
|
||||
$null = (Set-MpPreference -ScanParameters 1 -Force -ErrorAction Continue)
|
||||
#endregion ScanParameters
|
||||
|
||||
#region ScanPurgeItemsAfterDelay
|
||||
Write-Verbose -Message 'Specifies the number of days to keep items in the scan history folder'
|
||||
$null = (Set-MpPreference -ScanPurgeItemsAfterDelay 15 -Force -ErrorAction Continue)
|
||||
#endregion ScanPurgeItemsAfterDelay
|
||||
|
||||
#region ScanScheduleDay
|
||||
Write-Verbose -Message 'Specifies the day of the week on which to perform a scheduled scan'
|
||||
$null = (Set-MpPreference -ScanScheduleDay Everyday -Force -ErrorAction Continue)
|
||||
#endregion ScanScheduleDay
|
||||
|
||||
#region ScanScheduleQuickScanTime
|
||||
Write-Verbose -Message 'Specifies the time of day, as the number of minutes after midnight, to perform a scheduled quick scan'
|
||||
$null = (Set-MpPreference -ScanScheduleQuickScanTime 0 -Force -ErrorAction Continue)
|
||||
#endregion ScanScheduleQuickScanTime
|
||||
|
||||
#region ScanScheduleTime
|
||||
Write-Verbose -Message 'Specifies the time of day, as the number of minutes after midnight, to perform a scheduled scan'
|
||||
$null = (Set-MpPreference -ScanScheduleTime 120 -Force -ErrorAction Continue)
|
||||
#endregion ScanScheduleTime
|
||||
|
||||
#region SevereThreatDefaultAction
|
||||
Write-Verbose -Message 'Specifies which automatic remediation action to take for a severe level threat'
|
||||
$null = (Set-MpPreference -SevereThreatDefaultAction Quarantine -Force -ErrorAction Continue)
|
||||
#endregion SevereThreatDefaultAction
|
||||
|
||||
#region SignatureAuGracePeriod
|
||||
Write-Verbose -Message 'Specifies a grace period, in minutes, for the definition'
|
||||
$null = (Set-MpPreference -SignatureAuGracePeriod 0 -Force -ErrorAction Continue)
|
||||
#endregion SignatureAuGracePeriod
|
||||
|
||||
#region SignatureDisableUpdateOnStartupWithoutEngine
|
||||
Write-Verbose -Message 'Indicates whether to initiate definition updates even if no antimalware engine is present'
|
||||
$null = (Set-MpPreference -SignatureDisableUpdateOnStartupWithoutEngine $false -Force -ErrorAction Continue)
|
||||
#endregion SignatureDisableUpdateOnStartupWithoutEngine
|
||||
|
||||
#region SignatureFirstAuGracePeriod
|
||||
Write-Verbose -Message 'Specifies a grace period, in minutes, for the definition. If a definition successfully updates within this period, Windows Defender abandons any service initiated updates'
|
||||
$null = (Set-MpPreference -SignatureFirstAuGracePeriod 120 -Force -ErrorAction Continue)
|
||||
#endregion SignatureFirstAuGracePeriod
|
||||
|
||||
#region SignatureScheduleDay
|
||||
Write-Verbose -Message 'Specifies the day of the week on which to check for definition updates'
|
||||
$null = (Set-MpPreference -SignatureScheduleDay Everyday -Force -ErrorAction Continue)
|
||||
#endregion SignatureScheduleDay
|
||||
|
||||
#region SignatureScheduleTime
|
||||
Write-Verbose -Message 'Specifies the time of day, as the number of minutes after midnight, to check for definition updates'
|
||||
$null = (Set-MpPreference -SignatureScheduleTime 165 -Force -ErrorAction Continue)
|
||||
#endregion SignatureScheduleTime
|
||||
|
||||
#region SignatureUpdateCatchupInterval
|
||||
Write-Verbose -Message 'Specifies the number of days after which Windows Defender requires a catch-up definition update'
|
||||
$null = (Set-MpPreference -SignatureUpdateCatchupInterval 1 -Force -ErrorAction Continue)
|
||||
#endregion SignatureUpdateCatchupInterval
|
||||
|
||||
#region SignatureUpdateInterval
|
||||
Write-Verbose -Message 'Specifies the interval, in hours, at which to check for definition updates'
|
||||
$null = (Set-MpPreference -SignatureUpdateInterval 12 -Force -ErrorAction Continue)
|
||||
#endregion SignatureUpdateInterval
|
||||
|
||||
#region SubmitSamplesConsent
|
||||
Write-Verbose -Message 'Specifies how Windows Defender checks for user consent for certain samples'
|
||||
$null = (Set-MpPreference -SubmitSamplesConsent AlwaysPrompt -Force -ErrorAction Continue)
|
||||
#endregion SubmitSamplesConsent
|
||||
|
||||
#region MAPSReporting MAPSReporting
|
||||
Write-Verbose -Message 'Membership in Microsoft Active Protection Service Enable'
|
||||
$null = (Set-MpPreference -MAPSReporting Advanced -Force -ErrorAction Continue)
|
||||
#endregion MAPSReporting MAPSReporting
|
||||
|
||||
#region ThrottleLimit
|
||||
Write-Verbose -Message 'Specifies the maximum number of concurrent operations that can be established to run the cmdlet'
|
||||
$null = (Set-MpPreference -ThrottleLimit 0 -Force -ErrorAction Continue)
|
||||
#endregion ThrottleLimit
|
||||
|
||||
#region UILockdown
|
||||
Write-Verbose -Message 'Indicates whether to disable UI lock down mode'
|
||||
$null = (Set-MpPreference -UILockdown $false -Force -ErrorAction Continue)
|
||||
#endregion UILockdown
|
||||
|
||||
#region UnknownThreatDefaultAction
|
||||
Write-Verbose -Message 'Specifies which automatic remediation action to take for an unknown level threat'
|
||||
$null = (Set-MpPreference -UnknownThreatDefaultAction Block -Force -ErrorAction Continue)
|
||||
#endregion UnknownThreatDefaultAction
|
||||
|
||||
#region SignatureFallbackOrder
|
||||
Write-Verbose -Message 'Specifies the order in which to contact different definition update sources.'
|
||||
$null = (Set-MpPreference -SignatureFallbackOrder 'MicrosoftUpdateServer | MMPC' -Force -ErrorAction Continue)
|
||||
#endregion SignatureFallbackOrder
|
||||
|
||||
#region ControlledFolderAccessAllowedApplications
|
||||
Write-Verbose -Message 'Setup the Controlled Folder Access Allowed Applications'
|
||||
|
||||
# Define a list of Applications to exclude - Fully Qualified
|
||||
<#
|
||||
I like to keep this list as short as possible
|
||||
#>
|
||||
$NewControlledFolderAccessAllowedApplications = @(
|
||||
"$env:windir\System32\taskhostw.exe"
|
||||
)
|
||||
|
||||
# Create a new Object
|
||||
$AllControlledFolderAccessAllowedApplications = (New-Object -TypeName System.Collections.Generic.List[System.Object])
|
||||
|
||||
# Get the existing exclusions
|
||||
$AllControlledFolderAccessAllowedApplications.Add((Get-MpPreference -ErrorAction SilentlyContinue | Select-Object -ExpandProperty ControlledFolderAccessAllowedApplications))
|
||||
|
||||
#region NewControlledFolderAccessAllowedApplicationsLoop
|
||||
foreach ($NewControlledFolderAccessAllowedApplication in $NewControlledFolderAccessAllowedApplications)
|
||||
{
|
||||
if ($AllControlledFolderAccessAllowedApplications -notcontains $NewControlledFolderAccessAllowedApplication)
|
||||
{
|
||||
Write-Verbose -Message ('Add ' + $NewControlledFolderAccessAllowedApplication + ' to the Controlled Folder Access Allowed Applications list')
|
||||
|
||||
$AllControlledFolderAccessAllowedApplications.Add($NewControlledFolderAccessAllowedApplication)
|
||||
}
|
||||
}
|
||||
#endregion NewControlledFolderAccessAllowedApplicationsLoop
|
||||
|
||||
# Make sure we have nothing doubled
|
||||
$AllControlledFolderAccessAllowedApplications = ($AllControlledFolderAccessAllowedApplications | Sort-Object -Unique)
|
||||
|
||||
# Apply the new exclusion list. This will replace the complete list.
|
||||
Write-Verbose -Message 'Apply the new Controlled Folder Access Allowed Applications list'
|
||||
|
||||
$null = (Set-MpPreference -ControlledFolderAccessAllowedApplications $AllControlledFolderAccessAllowedApplications -Force -ErrorAction Continue)
|
||||
#endregion ControlledFolderAccessAllowedApplications
|
||||
|
||||
#region ExclusionPath
|
||||
# Define a list of Applications to exclude - Fully Qualified
|
||||
$NewExclusionPathList = @(
|
||||
"$env:windir\SoftwareDistribution\DataStore\Datastore.edb",
|
||||
"$env:windir\SoftwareDistribution\DataStore\Logs\Edb*.jrs",
|
||||
"$env:windir\SoftwareDistribution\DataStore\Logs\Edb.chk",
|
||||
"$env:windir\SoftwareDistribution\DataStore\Logs\Tmp.edb",
|
||||
"$env:windir\Security\Database\*.edb",
|
||||
"$env:windir\Security\Database\*.sdb",
|
||||
"$env:windir\Security\Database\*.log",
|
||||
"$env:windir\Security\Database\*.chk",
|
||||
"$env:windir\Security\Database\*.jrs",
|
||||
"$env:windir\Security\Database\*.xml",
|
||||
"$env:windir\Security\Database\*.csv",
|
||||
"$env:windir\Security\Database\*.cmtx",
|
||||
"$env:ProgramData\ntuser.pol",
|
||||
"$env:windir\System32\GroupPolicy\Machine\Registry.pol",
|
||||
"$env:windir\System32\GroupPolicy\Machine\Registry.tmp",
|
||||
"$env:windir\System32\GroupPolicy\User\Registry.pol",
|
||||
"$env:windir\System32\GroupPolicy\User\Registry.tmp"
|
||||
)
|
||||
|
||||
# Create a new Object
|
||||
$AllExclusionPath = (New-Object -TypeName System.Collections.Generic.List[System.Object])
|
||||
|
||||
# Get the existing exclusions
|
||||
$AllExclusionPath.Add((Get-MpPreference -ErrorAction SilentlyContinue | Select-Object -ExpandProperty ExclusionPath))
|
||||
|
||||
#region NewExclusionPathLoop
|
||||
foreach ($NewExclusionPath in $NewExclusionPathList)
|
||||
{
|
||||
if ($AllExclusionPath -notcontains $NewExclusionPath)
|
||||
{
|
||||
Write-Verbose -Message ('Add ' + $NewExclusionPath + ' as path to exclude')
|
||||
|
||||
$AllExclusionPath.Add($NewExclusionPath)
|
||||
}
|
||||
}
|
||||
#endregion NewExclusionPathLoop
|
||||
|
||||
# Make sure we have nothing doubled
|
||||
$AllExclusionPath = ($AllExclusionPath | Sort-Object -Unique)
|
||||
|
||||
# Apply the new exclusion list. This will replace the complete list.
|
||||
Write-Verbose -Message 'Apply the new Path to exclude list'
|
||||
|
||||
$null = (Set-MpPreference -ExclusionPath $AllExclusionPath -Force -ErrorAction Continue)
|
||||
#endregion ExclusionPath
|
||||
|
||||
#region ExclusionProcess
|
||||
# Define a list of Applications to exclude - Fully Qualified
|
||||
$NewExclusionProcessList = @(
|
||||
"$env:windir\System32\svchost.exe",
|
||||
"$env:windir\System32\wuauclt.exe"
|
||||
)
|
||||
|
||||
# Create a new Object
|
||||
$AllExclusionProcess = (New-Object -TypeName System.Collections.Generic.List[System.Object])
|
||||
|
||||
# Get the existing exclusions
|
||||
$AllExclusionProcess.Add((Get-MpPreference -ErrorAction SilentlyContinue | Select-Object -ExpandProperty ExclusionProcess))
|
||||
|
||||
#region NewExclusionProcessLoop
|
||||
foreach ($NewExclusionProcess in $NewExclusionProcessList)
|
||||
{
|
||||
if ($AllExclusionProcess -notcontains $NewExclusionProcess)
|
||||
{
|
||||
Write-Verbose -Message ('Add ' + $NewExclusionProcess + ' as process to exclude')
|
||||
|
||||
$AllExclusionProcess.Add($NewExclusionProcess)
|
||||
}
|
||||
}
|
||||
#endregion NewExclusionProcessLoop
|
||||
|
||||
# Make sure we have nothing doubled
|
||||
$AllExclusionProcess = ($AllExclusionProcess | Sort-Object -Unique)
|
||||
|
||||
# Apply the new exclusion list. This will replace the complete list.
|
||||
Write-Verbose -Message 'Apply the new Process to exclude list'
|
||||
|
||||
$null = (Set-MpPreference -ExclusionProcess $AllExclusionProcess -Force -ErrorAction Continue)
|
||||
#endregion ExclusionProcess
|
||||
#endregion SetMpPreference
|
||||
|
||||
#region ProcessMitigation
|
||||
# Local Process Mitigation file
|
||||
$ProcessMitigationFile = '.\ProcessMitigation.xml'
|
||||
|
||||
# Check if we have a local Process Mitigation file
|
||||
if (-not (Test-Path -Path $ProcessMitigationFile -ErrorAction SilentlyContinue))
|
||||
{
|
||||
# Where to download the XML File?
|
||||
$ProcessMitigationUri = 'https://demo.wd.microsoft.com/Content/ProcessMitigation.xml'
|
||||
|
||||
Write-Verbose -Message ('Downloading Process Mitigation file from ' + $ProcessMitigationUri)
|
||||
|
||||
# Download
|
||||
$paramInvokeWebRequest = @{
|
||||
Uri = $ProcessMitigationUri
|
||||
OutFile = $ProcessMitigationFile
|
||||
Method = 'Get'
|
||||
ContentType = 'text/xml'
|
||||
ErrorAction = 'Continue'
|
||||
}
|
||||
$null = (Invoke-WebRequest @paramInvokeWebRequest)
|
||||
}
|
||||
|
||||
if (Test-Path -Path $ProcessMitigationFile -ErrorAction SilentlyContinue)
|
||||
{
|
||||
Write-Verbose -Message 'Enabling Exploit Protection'
|
||||
|
||||
# Apply the File
|
||||
$null = (Set-ProcessMitigation -PolicyFilePath $ProcessMitigationFile -ErrorAction Continue)
|
||||
|
||||
# Cleanup
|
||||
$paramRemoveItem = @{
|
||||
Path = $ProcessMitigationFile
|
||||
Force = $true
|
||||
Confirm = $false
|
||||
ErrorAction = 'Continue'
|
||||
}
|
||||
$null = (Remove-Item @paramRemoveItem)
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Warning -Message ('The local Process Mitigation file (' + $ProcessMitigationFile + ') is missing! Not enabling Exploit Protection.')
|
||||
}
|
||||
#endregion ProcessMitigation
|
||||
|
||||
#region WindowsDefenderSandbox
|
||||
Write-Verbose -Message 'Turn on Windows Defender Sandbox'
|
||||
$null = ([Environment]::SetEnvironmentVariable('MP_FORCE_USE_SANDBOX', 1, 'Machine'))
|
||||
#endregion WindowsDefenderSandbox
|
||||
|
||||
#region AttackSurfaceReduction
|
||||
#region GetAttackSurfaceReductionRulesIds
|
||||
$AttackSurfaceReductionRulesIds = (Get-MpPreference -ErrorAction SilentlyContinue | Select-Object -ExpandProperty AttackSurfaceReductionRules_Ids)
|
||||
#endregion GetAttackSurfaceReductionRulesIds
|
||||
|
||||
Write-Verbose -Message 'Enabling Attack Surface Reduction rules'
|
||||
|
||||
#region SetMpPreferenceDefaults
|
||||
$AddMpPreferenceParameters = @{
|
||||
ErrorAction = 'Stop'
|
||||
Force = $true
|
||||
}
|
||||
#endregion SetMpPreferenceDefaults
|
||||
|
||||
#region RuleLoop
|
||||
foreach ($AttackSurfaceReductionRule in $AttackSurfaceReductionRuleList)
|
||||
{
|
||||
#region SingleLoop
|
||||
try
|
||||
{
|
||||
if (($Force) -or ($AttackSurfaceReductionRulesIds -notcontains $AttackSurfaceReductionRule.RuleID))
|
||||
{
|
||||
#region AppleTheRuleValue
|
||||
Write-Verbose -Message ('Set ' + $AttackSurfaceReductionRule.RuleDescription + ' to ' + $AttackSurfaceReductionRule.RuleAction)
|
||||
|
||||
# Add some values
|
||||
$AddMpPreferenceParameters.AttackSurfaceReductionRules_Ids = $AttackSurfaceReductionRule.RuleID
|
||||
$AddMpPreferenceParameters.AttackSurfaceReductionRules_Actions = $AttackSurfaceReductionRule.RuleAction
|
||||
|
||||
# Apply the Rule
|
||||
$null = (Add-MpPreference @AddMpPreferenceParameters)
|
||||
#endregion AppleTheRuleValue
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
#region ErrorHandler
|
||||
# get error record
|
||||
[Management.Automation.ErrorRecord]$e = $_
|
||||
|
||||
# retrieve information about runtime error
|
||||
$info = [PSCustomObject]@{
|
||||
Exception = $e.Exception.Message
|
||||
Reason = $e.CategoryInfo.Reason
|
||||
Target = $e.CategoryInfo.TargetName
|
||||
Script = $e.InvocationInfo.ScriptName
|
||||
Line = $e.InvocationInfo.ScriptLineNumber
|
||||
Column = $e.InvocationInfo.OffsetInLine
|
||||
}
|
||||
|
||||
$info | Out-String | Write-Verbose
|
||||
|
||||
Write-Warning -Message ('Unable to enable to Rule: ' + $AttackSurfaceReductionRule.RuleID + ' (' + $AttackSurfaceReductionRule.RuleDescription + ')')
|
||||
#endregion ErrorHandler
|
||||
}
|
||||
#endregion SingleLoop
|
||||
}
|
||||
#endregion RuleLoop
|
||||
#endregion AttackSurfaceReduction
|
||||
|
||||
#region ReloadRegistry
|
||||
& "$env:windir\system32\rundll32.exe" USER32.DLL, UpdatePerUserSystemParameters , 1 , True
|
||||
#endregion ReloadRegistry
|
||||
|
||||
#region EnableFirewall
|
||||
Write-Verbose -Message 'Enable the Windows Firewall for all Profiles - Set the default to block everything'
|
||||
$null = (Set-NetFirewallProfile -Profile Domain, Public, Private -Enabled True -DefaultInboundAction Block -LogBlocked True -Confirm:$false -ErrorAction Continue)
|
||||
#endregion EnableFirewall
|
||||
}
|
||||
|
||||
end
|
||||
{
|
||||
#region UpdateSignature
|
||||
Write-Verbose -Message 'Update Defender'
|
||||
$null = (Update-MpSignature)
|
||||
#endregion UpdateSignature
|
||||
}
|
||||
|
||||
#region LICENSE
|
||||
<#
|
||||
BSD 3-Clause License
|
||||
|
||||
Copyright (c) 2021, enabling Technology
|
||||
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.
|
||||
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT HOLDER 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.
|
||||
#>
|
||||
#endregion LICENSE
|
||||
|
||||
#region DISCLAIMER
|
||||
<#
|
||||
DISCLAIMER:
|
||||
- Use at your own risk, etc.
|
||||
- This is open-source software, if you find an issue try to fix it yourself. There is no support and/or warranty in any kind
|
||||
- This is a third-party Software
|
||||
- The developer of this Software is NOT sponsored by or affiliated with Microsoft Corp (MSFT) or any of its subsidiaries in any way
|
||||
- The Software is not supported by Microsoft Corp (MSFT)
|
||||
- By using the Software, you agree to the License, Terms, and any Conditions declared and described above
|
||||
- If you disagree with any of the terms, and any conditions declared: Just delete it and build your own solution
|
||||
#>
|
||||
#endregion DISCLAIMER
|
||||
@@ -0,0 +1,29 @@
|
||||
BSD 3-Clause License
|
||||
|
||||
Copyright (c) 2021, enabling Technology <http://enatec.io>
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
* 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.
|
||||
|
||||
* Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT HOLDER 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.
|
||||
@@ -0,0 +1,476 @@
|
||||
# Bootstrap Microsoft Defender configuration
|
||||
|
||||
Bootstrap Microsoft Defender configuration, optimize and tweak Windows 10 protection and security
|
||||
|
||||
## What it does
|
||||
|
||||
Several Microsoft Defender settings are configured.
|
||||
|
||||
### EnableNetworkProtection
|
||||
|
||||
Network protection helps to prevent employees from using any application to access dangerous domains that may host phishing scams, exploits, and other malicious content on the Internet
|
||||
|
||||
Set to: `Enabled`
|
||||
|
||||
### EnableControlledFolderAccess
|
||||
|
||||
Controlled folder access helps you protect valuable data from malicious apps and threats, such as ransomware
|
||||
|
||||
Set to: `Enabled`
|
||||
|
||||
### SignatureScheduleDay
|
||||
|
||||
Specifies the day of the week on which to check for definition updates.
|
||||
|
||||
Set to: `Everyday`
|
||||
|
||||
### SignatureScheduleTime
|
||||
|
||||
Specifies the time of day, as the number of minutes after midnight, to check for definition updates
|
||||
|
||||
Set to: `320`
|
||||
|
||||
### DisableArchiveScanning
|
||||
|
||||
Indicates whether to scan archive files for malicious and unwanted software
|
||||
|
||||
Set to: `true`
|
||||
|
||||
### DisableAutoExclusions
|
||||
|
||||
Indicates whether to disable the Automatic Exclusions feature for the server
|
||||
|
||||
Set to: `false`
|
||||
|
||||
### DisableBehaviorMonitoring
|
||||
|
||||
Indicates whether to enable behavior monitoring
|
||||
|
||||
Set to: `true`
|
||||
|
||||
Something I enable on a few systems only.
|
||||
|
||||
### DisableBlockAtFirstSeen
|
||||
|
||||
Indicates whether to enable block at first seen
|
||||
|
||||
Set to: `true`
|
||||
|
||||
### DisableCatchupFullScan
|
||||
|
||||
Indicates whether Windows Defender runs catch-up scans for scheduled full scans
|
||||
|
||||
Set to: `true`
|
||||
|
||||
### DisableCatchupQuickScan
|
||||
|
||||
Indicates whether Windows Defender runs catch-up scans for scheduled quick scans
|
||||
|
||||
Set to: `true`
|
||||
|
||||
### DisableEmailScanning
|
||||
|
||||
Indicates whether Windows Defender parses the mailbox and mail files, according to their specific format, in order to analyze mail bodies and attachments
|
||||
|
||||
Set to: `false`
|
||||
|
||||
### DisableIOAVProtection
|
||||
|
||||
Indicates whether Windows Defender scans all downloaded files and attachments (e.g. Downloads)
|
||||
|
||||
Set to: `true`
|
||||
|
||||
### DisableIntrusionPreventionSystem
|
||||
|
||||
Indicates whether to configure network protection against exploitation of known vulnerabilities
|
||||
|
||||
Set to: `false`
|
||||
|
||||
### DisablePrivacyMode
|
||||
|
||||
Indicates whether to disable privacy mode. Privacy mode prevents users, other than administrators, from displaying threat history
|
||||
|
||||
Set to: `false`
|
||||
|
||||
### DisableRealtimeMonitoring
|
||||
|
||||
Indicates whether to use real-time protection
|
||||
|
||||
Set to: `false`
|
||||
|
||||
### CheckForSignaturesBeforeRunningScan
|
||||
|
||||
Set to: `1`
|
||||
|
||||
### DisableRemovableDriveScanning
|
||||
|
||||
Indicates whether to scan for malicious and unwanted software in removable drives, such as flash drives, during a full scan
|
||||
|
||||
Set to: `true`
|
||||
|
||||
### DisableRestorePoint
|
||||
|
||||
Indicates whether to disable scanning of restore points
|
||||
|
||||
Set to: `true`
|
||||
|
||||
### DisableScanningMappedNetworkDrivesForFullScan
|
||||
|
||||
Indicates whether to scan mapped network drives
|
||||
|
||||
Set to: `true`
|
||||
|
||||
### DisableScanningNetworkFiles
|
||||
|
||||
Indicates whether to scan for network files
|
||||
|
||||
Set to: `false`
|
||||
|
||||
### DisableScriptScanning
|
||||
|
||||
Specifies whether to disable the scanning of scripts during malware scans
|
||||
|
||||
Set to: `false`
|
||||
|
||||
### HighThreatDefaultAction
|
||||
|
||||
Specifies which automatic remediation action to take for a high level threat
|
||||
|
||||
Set to: `Quarantine`
|
||||
|
||||
### LowThreatDefaultAction
|
||||
|
||||
Specifies which automatic remediation action to take for a low level threat
|
||||
|
||||
Set to: `Block`
|
||||
|
||||
### ModerateThreatDefaultAction
|
||||
|
||||
Specifies which automatic remediation action to take for a moderate level threat
|
||||
|
||||
Set to: `Quarantine`
|
||||
|
||||
### PUAProtection
|
||||
|
||||
Disable PUA Protection
|
||||
|
||||
Set to: `Enabled`
|
||||
|
||||
### QuarantinePurgeItemsAfterDelay
|
||||
|
||||
Specifies the number of days to keep items in the Quarantine folder
|
||||
|
||||
Set to: `30`
|
||||
|
||||
### RandomizeScheduleTaskTimes
|
||||
|
||||
Indicates whether to select a random time for the scheduled start and scheduled update for definitions
|
||||
|
||||
Set to: `true`
|
||||
|
||||
### RealTimeScanDirection
|
||||
|
||||
Specifies scanning configuration for incoming and outgoing files on NTFS volumes
|
||||
|
||||
Set to: `0`
|
||||
|
||||
### RemediationScheduleDay
|
||||
|
||||
Specifies the day of the week on which to perform a scheduled full scan in order to complete remediation
|
||||
|
||||
Set to: `Everyday`
|
||||
|
||||
### RemediationScheduleTime
|
||||
|
||||
Specifies the time of day, as the number of minutes after midnight, to perform a scheduled scan
|
||||
|
||||
Set to: `120`
|
||||
|
||||
### ReportingAdditionalActionTimeOut
|
||||
|
||||
Specifies the number of minutes before a detection in the additional action state changes to the cleared state
|
||||
|
||||
Set to: `10080`
|
||||
|
||||
### ReportingCriticalFailureTimeOut
|
||||
|
||||
Specifies the number of minutes before a detection in the critically failed state changes to either the additional action state or the cleared state
|
||||
|
||||
Set to: `10080`
|
||||
|
||||
### ReportingNonCriticalTimeOut
|
||||
|
||||
Specifies the number of minutes before a detection in the non-critically failed state changes to the cleared state
|
||||
|
||||
Set to: `11440`
|
||||
|
||||
### ScanAvgCPULoadFactor
|
||||
|
||||
Specifies the maximum percentage CPU usage for a scan
|
||||
|
||||
Set to: `50`
|
||||
|
||||
### ScanOnlyIfIdleEnabled
|
||||
|
||||
Indicates whether to start scheduled scans only when the computer is not in use
|
||||
|
||||
Set to: `true`
|
||||
|
||||
### ScanParameters
|
||||
|
||||
Specifies the scan type to use during a scheduled scan
|
||||
|
||||
Set to: `1`
|
||||
|
||||
### ScanPurgeItemsAfterDelay
|
||||
|
||||
Specifies the number of days to keep items in the scan history folder
|
||||
|
||||
Set to: `15`
|
||||
|
||||
### ScanScheduleDay
|
||||
|
||||
Specifies the day of the week on which to perform a scheduled scan
|
||||
|
||||
Set to: `Everyday`
|
||||
|
||||
### ScanScheduleQuickScanTime
|
||||
|
||||
Specifies the time of day, as the number of minutes after midnight, to perform a scheduled quick scan
|
||||
|
||||
Set to: `0`
|
||||
|
||||
### ScanScheduleTime
|
||||
|
||||
Specifies the time of day, as the number of minutes after midnight, to perform a scheduled scan
|
||||
|
||||
Set to: `120`
|
||||
|
||||
### SevereThreatDefaultAction
|
||||
|
||||
Specifies which automatic remediation action to take for a severe level threat
|
||||
|
||||
Set to: `Quarantine`
|
||||
|
||||
### SignatureAuGracePeriod
|
||||
|
||||
Specifies a grace period, in minutes, for the definition
|
||||
|
||||
Set to: `0`
|
||||
|
||||
### SignatureDisableUpdateOnStartupWithoutEngine
|
||||
|
||||
Indicates whether to initiate definition updates even if no antimalware engine is present
|
||||
|
||||
Set to: `false`
|
||||
|
||||
### SignatureFirstAuGracePeriod
|
||||
|
||||
Specifies a grace period, in minutes, for the definition. If a definition successfully updates within this period, Windows Defender abandons any service initiated updates
|
||||
|
||||
Set to: `120`
|
||||
|
||||
### SignatureScheduleDay
|
||||
|
||||
Specifies the day of the week on which to check for definition updates
|
||||
|
||||
Set to: `Everyday`
|
||||
|
||||
### SignatureScheduleTime
|
||||
|
||||
Specifies the time of day, as the number of minutes after midnight, to check for definition updates
|
||||
|
||||
Set to: `165`
|
||||
|
||||
### SignatureUpdateCatchupInterval
|
||||
|
||||
Specifies the number of days after which Windows Defender requires a catch-up definition update
|
||||
|
||||
Set to: `1`
|
||||
|
||||
### SignatureUpdateInterval
|
||||
|
||||
Specifies the interval, in hours, at which to check for definition updates
|
||||
|
||||
Set to: `12`
|
||||
|
||||
### SubmitSamplesConsent
|
||||
|
||||
Specifies how Windows Defender checks for user consent for certain samples
|
||||
|
||||
Set to: `AlwaysPrompt`
|
||||
|
||||
### MAPSReporting
|
||||
|
||||
Membership in Microsoft Active Protection Service Enable
|
||||
|
||||
Set to: `Advanced`
|
||||
|
||||
### ThrottleLimit
|
||||
|
||||
Specifies the maximum number of concurrent operations that can be established to run the cmdlet
|
||||
|
||||
Set to: `0`
|
||||
|
||||
### UILockdown
|
||||
|
||||
Indicates whether to disable UI lock down mode
|
||||
|
||||
Set to: `false`
|
||||
|
||||
### UnknownThreatDefaultAction
|
||||
|
||||
Specifies which automatic remediation action to take for an unknown level threat
|
||||
|
||||
Set to: `Block`
|
||||
|
||||
### SignatureFallbackOrder
|
||||
|
||||
Specifies the order in which to contact different definition update sources. Specify the types of update sources in the order in which you want Windows Defender to contact them, enclosed in braces and separated by the pipeline symbol
|
||||
|
||||
Set to: `MicrosoftUpdateServer | MMPC`
|
||||
|
||||
### ControlledFolderAccessAllowedApplications
|
||||
|
||||
We exclude the following Files by default: `$env:windir\System32\taskhostw.exe`
|
||||
|
||||
Any exclusions previously configured stay intact!
|
||||
|
||||
### ExclusionPath
|
||||
|
||||
The following Files/Folders are excluded from the scan:
|
||||
|
||||
`windir\SoftwareDistribution\DataStore\Datastore.edb`
|
||||
`windir\SoftwareDistribution\DataStore\Logs\Edb*.jrs`
|
||||
`windir\SoftwareDistribution\DataStore\Logs\Edb.chk`
|
||||
`windir\SoftwareDistribution\DataStore\Logs\Tmp.edb`
|
||||
`windir\Security\Database\*.edb`
|
||||
`windir\Security\Database\*.sdb`
|
||||
`windir\Security\Database\*.log`
|
||||
`windir\Security\Database\*.chk`
|
||||
`windir\Security\Database\*.jrs`
|
||||
`windir\Security\Database\*.xml`
|
||||
`windir\Security\Database\*.csv`
|
||||
`windir\Security\Database\*.cmtx`
|
||||
`ProgramData\ntuser.pol`
|
||||
`windir\System32\GroupPolicy\Machine\Registry.pol`
|
||||
`windir\System32\GroupPolicy\Machine\Registry.tmp`
|
||||
`windir\System32\GroupPolicy\User\Registry.pol`
|
||||
`windir\System32\GroupPolicy\User\Registry.tmp`
|
||||
|
||||
Any exclusions previously configured stay intact!
|
||||
|
||||
More Info: [https://support.microsoft.com/en-us/help/822158/virus-scanning-recommendations-for-enterprise-computers-that-are-runni](https://support.microsoft.com/en-us/help/822158/virus-scanning-recommendations-for-enterprise-computers-that-are-runni)
|
||||
|
||||
### ExclusionProcess
|
||||
|
||||
The following processes are excluded from the scan:
|
||||
|
||||
`$env:windir\System32\svchost.exe`
|
||||
`$env:windir\System32\wuauclt.exe`
|
||||
|
||||
Any exclusions previously configured stay intact!
|
||||
|
||||
More Info: [https://support.microsoft.com/en-us/help/822158/virus-scanning-recommendations-for-enterprise-computers-that-are-runni](https://support.microsoft.com/en-us/help/822158/virus-scanning-recommendations-for-enterprise-computers-that-are-runni)
|
||||
|
||||
### Process Mitigation and Exploit Protection
|
||||
|
||||
Microsoft provides a XML file (`ProcessMitigation.xml`) that provides a configuration best practice to mitigate the attack surface and provide Exploit Protection.
|
||||
|
||||
You can provide your own File, otherwise (if missing) we will download the latest version from Microsoft.
|
||||
|
||||
More Info: [https://demo.wd.microsoft.com/Page/EP](https://demo.wd.microsoft.com/Page/EP)
|
||||
|
||||
### WindowsDefenderSandbox
|
||||
|
||||
We tuen on Windows Defender Sandbox
|
||||
|
||||
### AttackSurfaceReduction
|
||||
|
||||
Attack Surface Reduction (ASR) is comprised of a number of rules, each of which target specific behaviors that are typically used by malware and malicious apps to infect machines, such as:
|
||||
|
||||
- Executable files and scripts used in Office apps or web mail that attempt to download or run files
|
||||
- Scripts that are obfuscated or otherwise suspicious
|
||||
- Behaviors that apps undertake that are not usually initiated during normal day-to-day work
|
||||
|
||||
More Info: [https://demo.wd.microsoft.com/Page/ASR](https://demo.wd.microsoft.com/Page/ASR)
|
||||
|
||||
### ReloadRegistry
|
||||
|
||||
We then reload the registry to ensure that the new configuration is activated
|
||||
|
||||
### EnableFirewall
|
||||
|
||||
Enable the Windows Firewall for all Profiles - Set the default to block everything
|
||||
|
||||
We enable the Windows Firewall for the following Network-Profiles:
|
||||
|
||||
- Domain
|
||||
- Public
|
||||
- Private
|
||||
|
||||
We block all inbound connections by default and we log all block-events!
|
||||
|
||||
### UpdateSignature
|
||||
|
||||
As a final touch: We update the Windows Defender signatures.
|
||||
|
||||
## Why this?
|
||||
|
||||
I use this during the bootstrap process of Windows systems.
|
||||
Most of the settings here is also enforced by some of our Group Policies and we also have a lot of it configured via MDM CSPs (InTune).
|
||||
|
||||
This script is only a quick hack to harden (and secure) any new system, even if it is not managed afterwords.
|
||||
|
||||
## Content
|
||||
|
||||
There are two files:
|
||||
|
||||
### Bootstrap-MicrosoftDefenderConfiguration.ps1
|
||||
|
||||
The PowerShell Script itself
|
||||
|
||||
### Bootstrap-MicrosoftDefenderConfiguration.csv
|
||||
|
||||
A CSV File that contains the configuration of the attack surface reduction rules.
|
||||
|
||||
## Configuration
|
||||
|
||||
Please review the `Bootstrap-MicrosoftDefenderConfiguration.csv` where you configure the attack surface reduction rules. Please also review the `Bootstrap-MicrosoftDefenderConfiguration.ps1` file. There is no configuration file, at least not yet!
|
||||
|
||||
## Further Information
|
||||
|
||||
[https://docs.microsoft.com/en-us/powershell/module/defender/index?view=win10-ps](https://docs.microsoft.com/en-us/powershell/module/defender/index?view=win10-ps)
|
||||
|
||||
[https://github.com/jhochwald/PowerShell-collection/blob/master/Misc/Optimize-MicrosoftDefenderExclusions.ps1](https://github.com/jhochwald/PowerShell-collection/blob/master/Misc/Optimize-MicrosoftDefenderExclusions.ps1)
|
||||
|
||||
[https://docs.microsoft.com/en-us/windows/security/threat-protection/microsoft-defender-atp/enable-exploit-protection](https://docs.microsoft.com/en-us/windows/security/threat-protection/microsoft-defender-atp/enable-exploit-protection
|
||||
)
|
||||
|
||||
[https://docs.microsoft.com/en-us/powershell/module/defender/set-mppreference?view=win10-ps](https://docs.microsoft.com/en-us/powershell/module/defender/set-mppreference?view=win10-ps)
|
||||
|
||||
[https://docs.microsoft.com/en-us/windows/security/threat-protection/microsoft-defender-atp/customize-attack-surface-reduction](https://docs.microsoft.com/en-us/powershell/module/defender/set-mppreference?view=win10-ps)
|
||||
|
||||
[https://support.microsoft.com/en-us/help/822158/virus-scanning-recommendations-for-enterprise-computers-that-are-runni](https://docs.microsoft.com/en-us/powershell/module/defender/set-mppreference?view=win10-ps)
|
||||
|
||||
[https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-antivirus/enable-cloud-protection-windows-defender-antivirus](https://docs.microsoft.com/en-us/powershell/module/defender/set-mppreference?view=win10-ps)
|
||||
|
||||
[https://demo.wd.microsoft.com/?ocid=cx-wddocs-testground](https://docs.microsoft.com/en-us/powershell/module/defender/set-mppreference?view=win10-ps)
|
||||
|
||||
## License
|
||||
|
||||
BSD 3-Clause License
|
||||
|
||||
Copyright (c) 2020, Joerg Hochwald
|
||||
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.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT HOLDER 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.
|
||||
Reference in New Issue
Block a user