Excel Macros: Vereist Een Vertrouwde Uitgever Voor Add-ins

πŸ’Ό Management Samenvatting

Vereisen van een vertrouwde uitgever voor add-ins bij ondertekende macro's voorkomt dat willekeurige code-ondertekende macro's (met gestolen of gecompromitteerde certificaten) automatisch worden vertrouwd - alleen uitgevers die expliciet zijn toegevoegd aan de lijst met vertrouwde uitgevers kunnen macro's uitvoeren.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
7/10
Implementatie
4u (tech: 2u)
Van toepassing op:
βœ“ Microsoft Excel

Code signing alleen is onvoldoende: Gestolen certificaten (aanvallers stelen code-signing certificaten), Gecompromitteerde CA's (certificaatautoriteit inbreuken), Verlopen certificaten (oude ondertekende malware). Vertrouwde uitgever vereiste: Gebruiker/beheerder moet uitgever EXPLICIET vertrouwen (eerste keer melding), certificaatketen validatie (verifieer CA), certificaat intrekkingscontrole (CRL/OCSP). Zonder vertrouwde uitgever controle: elke code-ondertekende macro wordt uitgevoerd (gestolen certificaat is automatisch vertrouwd), Geen gebruikersbewustzijn (stille uitvoering), certificaatvalidatie omzeild.

Implementatie

Registry: DisableTrustBarNotificationForUnsignedApplicationAddins is 1 (Blokkeer notificatie voor niet-ondertekende add-ins - forceer vertrouwde uitgever). Effect: Eerste macro van uitgever β†’ melding 'Deze uitgever vertrouwen?', Volgende macro's van dezelfde uitgever β†’ automatisch (geen melding), niet-vertrouwde uitgevers β†’ geblokkeerd.

Vereisten

  1. Office 2016+
  2. Code signing certificaten (interne macro's)
  3. Vertrouwde uitgevers GPO/Intune distributie

Implementatie

Intune Settings Catalog: Excel\Security\Vertrouwenscentrum β†’ Vereisen dat applicatie add-ins zijn ondertekend door vertrouwde uitgever: ingeschakeld. Distribueer vertrouwde uitgever certificaten via GPO (vertrouwde uitgevers store).

Monitoring

Gebruik PowerShell-script macros-trusted-publisher-required.ps1 (functie Invoke-Monitoring) – Controleren.

Monitor macro uitvoeringspogingen, verifieer distributie van lijst met vertrouwde uitgevers.

Compliance en Auditing

Vertrouwde uitgever voldoet aan: CIS Office Benchmark (Macro vertrouwensinstellingen), BIO 14.02 (veilige ontwikkel lifecycle - code signing), ISO 27001 A.14.2.1.

Remediatie

Gebruik PowerShell-script macros-trusted-publisher-required.ps1 (functie Invoke-Remediation) – Herstellen.

Compliance & Frameworks

Automation

Gebruik het onderstaande PowerShell script om deze security control te monitoren en te implementeren. Het script bevat functies voor zowel monitoring (-Monitoring) als remediation (-Remediation).

PowerShell
<# .SYNOPSIS Dwingt vertrouwde uitgever handtekening voor macro's in Excel .DESCRIPTION Dit script implementeert CIS control O365-EX-000002 voor het afdwingen dat add-ins digitaal ondertekend moeten zijn door een vertrouwde uitgever in Microsoft Excel. Dit voorkomt uitvoering van onveilige add-ins zonder expliciete verificatie. .REQUIREMENTS - PowerShell 5.1 of hoger - Lokale administrator rechten voor registry wijzigingen - Microsoft Excel geΓ―nstalleerd .PARAMETER Monitoring Controleert de huidige compliance status .PARAMETER Remediation Past de aanbevolen configuratie toe .PARAMETER Revert Herstelt de originele configuratie .PARAMETER WhatIf Toont wat er zou gebeuren zonder wijzigingen door te voeren .EXAMPLE .\macros-trusted-publisher-required.ps1 -Monitoring Controleert of add-in handtekening is vereist .EXAMPLE .\macros-trusted-publisher-required.ps1 -Remediation Dwingt add-in handtekening door vertrouwde uitgever .NOTES Registry pad: HKCU:\Software\Policies\Microsoft\Office\16.0\Excel\Security Waarde: RequireAddinSig = 1 CIS Control: O365-EX-000002 #> #Requires -Version 5.1 param( [switch]$Monitoring, [switch]$Remediation, [switch]$Revert, [switch]$WhatIf ) # Globale variabelen $RegistryPath = "HKCU:\Software\Policies\Microsoft\Office\16.0\Excel\Security" $ValueName = "RequireAddinSig" $ExpectedValue = 1 $ControlID = "O365-EX-000002" function Test-Compliance { try { if (-not (Test-Path $RegistryPath)) { return $false } $currentValue = Get-ItemProperty -Path $RegistryPath -Name $ValueName -ErrorAction SilentlyContinue return ($currentValue -and $currentValue.$ValueName -eq $ExpectedValue) } catch { return $false } } function Invoke-Monitoring { Write-Host "Monitoring ${ControlID}: Vertrouwde uitgever handtekening voor add-ins afdwingen" -ForegroundColor Green try { if (-not (Test-Path $RegistryPath)) { Write-Host "βœ— Registry pad bestaat niet: $RegistryPath" -ForegroundColor Red return $false } $currentValue = Get-ItemProperty -Path $RegistryPath -Name $ValueName -ErrorAction SilentlyContinue if ($currentValue -and $currentValue.$ValueName -eq $ExpectedValue) { Write-Host "βœ“ Control compliant: ${ValueName} = $ExpectedValue" -ForegroundColor Green return $true } else { $actualValue = if ($currentValue) { $currentValue.$ValueName } else { "Not Set" } Write-Host "βœ— Control non-compliant: ${ValueName} = $actualValue (Expected: $ExpectedValue)" -ForegroundColor Red return $false } } catch { Write-Host "βœ— Fout bij controleren registry instelling: $($_.Exception.Message)" -ForegroundColor Red return $false } } function Invoke-Remediation { Write-Host "Remediating ${ControlID}: Vertrouwde uitgever handtekening voor add-ins afdwingen" -ForegroundColor Yellow try { if ($WhatIf) { Write-Host "WhatIf: Zou registry waarde instellen: ${ValueName} = $ExpectedValue" -ForegroundColor Cyan return $true } if (-not (Test-Path $RegistryPath)) { Write-Host "Registry pad aanmaken: $RegistryPath" -ForegroundColor Yellow New-Item -Path $RegistryPath -Force | Out-Null } Set-ItemProperty -Path $RegistryPath -Name $ValueName -Value $ExpectedValue -Type DWord -Force Write-Host "βœ“ Registry waarde succesvol ingesteld: ${ValueName} = $ExpectedValue" -ForegroundColor Green Start-Sleep -Seconds 1 return Invoke-Monitoring } catch { Write-Host "βœ— Fout bij configureren registry instelling: $($_.Exception.Message)" -ForegroundColor Red return $false } } function Invoke-Revert { Write-Host "Reverting ${ControlID}: Add-in handtekening instelling herstellen" -ForegroundColor Yellow try { if ($WhatIf) { Write-Host "WhatIf: Zou registry waarde verwijderen: ${ValueName}" -ForegroundColor Cyan return $true } if (Test-Path $RegistryPath) { Remove-ItemProperty -Path $RegistryPath -Name $ValueName -ErrorAction SilentlyContinue Write-Host "βœ“ Registry waarde verwijderd: ${ValueName}" -ForegroundColor Green } return $true } catch { Write-Host "βœ— Fout bij herstellen registry instelling: $($_.Exception.Message)" -ForegroundColor Red return $false } } # Hoofd uitvoering try { if ($Monitoring) { $result = Invoke-Monitoring exit $(if ($result) { 0 } else { 1 }) } elseif ($Remediation) { $result = Invoke-Remediation exit $(if ($result) { 0 } else { 1 }) } elseif ($Revert) { $result = Invoke-Revert exit $(if ($result) { 0 } else { 1 }) } else { Write-Host "Gebruik: .\macros-trusted-publisher-required.ps1 [-Monitoring] [-Remediation] [-Revert] [-WhatIf]" -ForegroundColor Yellow Write-Host " -Monitoring: Controleer huidige compliance status" -ForegroundColor White Write-Host " -Remediation: Pas aanbevolen configuratie toe" -ForegroundColor White Write-Host " -Revert: Herstel originele configuratie" -ForegroundColor White Write-Host " -WhatIf: Toon wat er zou gebeuren" -ForegroundColor White } } catch { Write-Host "βœ— Onverwachte fout: $($_.Exception.Message)" -ForegroundColor Red exit 1 }

Risico zonder implementatie

Risico zonder implementatie
High: Hoog: Code-ondertekende macro's met gestolen certificaten worden uitgevoerd zonder vertrouwde uitgever verificatie.

Management Samenvatting

Vereisen van een vertrouwde uitgever voor add-ins bij macro's. Gebruiker/beheerder moet uitgever expliciet vertrouwen. Implementatie: 2-4 uur.