In der modernen Arbeitswelt werden Datensicherheit und Zugriffsmanagement immer wichtiger, vor allem da Unternehmen verschiedene Programmiersprachen und Tools in ihre täglichen Abläufe integrieren.
Eine solche Integration ist die Verwendung von Python in Microsoft Excel, eine leistungsstarke Funktion, die die Produktivität steigern kann, aber auch potenzielle Sicherheitsrisiken birgt. Für IT-Experten und Managed Service Provider (MSPs) ist die Verwaltung und Einschränkung des Python-Zugriffs in Excel für die Aufrechterhaltung einer sicheren Umgebung unerlässlich.
In diesem Blogbeitrag wird ein PowerShell-Skript vorgestellt, mit dem die Verwendung von Python in Excel gesteuert wird, um sicherzustellen, dass die Sicherheitsprotokolle eingehalten werden, ohne die Funktionalität zu beeinträchtigen.
Kontext
Mit der wachsenden Popularität von Python in der Datenanalyse und -automatisierung bietet seine Integration in Excel den Benutzer:innen erweiterte Möglichkeiten. Diese Integration birgt jedoch auch potenzielle Sicherheitsrisiken, insbesondere wenn Python-Skripte ohne angemessene Übersicht ausgeführt werden.
IT-Experten und MSPs müssen die Vorteile der Python-Funktionen mit der Notwendigkeit abwägen, sensible Daten zu schützen. Das hier besprochene PowerShell-Skript bietet eine Lösung, indem es Administratoren die Möglichkeit gibt, die Verwendung von Python in Excel einzuschränken. Sie können nämlich entweder Sicherheitsabfragen aktivieren oder den Zugriff auf Python ganz sperren, bzw. zu den Standardeinstellungen von Microsoft zurückkehren.
Das Skript:
<# .SYNOPSIS Restricts the use of Python in Excel for all users. By default it'll enable a security prompt but does have the option to block or to set it back to the Microsoft default (no warnings or prompts). .DESCRIPTION Restricts the use of Python in Excel for all users. By default it'll enable a security prompt but does have the option to block or to set it back to the Microsoft default (no warnings or prompts). .EXAMPLE (No Parameters) Registry::HKEY_USERS\S-1-5-21-3870645062-3653562310-3850680542-1001\software\policies\microsoft\office\16.0\excel\security\PythonFunctionWarnings changed from 1 to 1 Registry::HKEY_USERS\S-1-5-21-3870645062-3653562310-3850680542-1002\software\policies\microsoft\office\16.0\excel\security\PythonFunctionWarnings changed from 1 to 1 Set Registry::HKEY_USERS\S-1-5-21-3870645062-3653562310-3850680542-1003\software\policies\microsoft\office\16.0\excel\security\PythonFunctionWarnings to 1 PARAMETER: -Block Blocks the use of Python in Excel. .EXAMPLE -Block Registry::HKEY_USERS\S-1-5-21-3870645062-3653562310-3850680542-1001\software\policies\microsoft\office\16.0\excel\security\PythonFunctionWarnings changed from 1 to 2 Registry::HKEY_USERS\S-1-5-21-3870645062-3653562310-3850680542-1002\software\policies\microsoft\office\16.0\excel\security\PythonFunctionWarnings changed from 1 to 2 Set Registry::HKEY_USERS\S-1-5-21-3870645062-3653562310-3850680542-1003\software\policies\microsoft\office\16.0\excel\security\PythonFunctionWarnings to 2 PARAMETER: -IncludeNewUsers Adds the registry key to the Default Profile so that this change carriers over when new accounts are created. .EXAMPLE -IncludeNewUsers Set Registry::HKEY_USERS\DefaultProfile\software\policies\microsoft\office\16.0\excel\security\PythonFunctionWarnings to 1 Registry::HKEY_USERS\S-1-5-21-3870645062-3653562310-3850680542-1001\software\policies\microsoft\office\16.0\excel\security\PythonFunctionWarnings changed from 1 to 1 Registry::HKEY_USERS\S-1-5-21-3870645062-3653562310-3850680542-1002\software\policies\microsoft\office\16.0\excel\security\PythonFunctionWarnings changed from 1 to 1 Set Registry::HKEY_USERS\S-1-5-21-3870645062-3653562310-3850680542-1003\software\policies\microsoft\office\16.0\excel\security\PythonFunctionWarnings to 1 PARAMETER: -ChangeBackToMicrosoftDefault Resets the setting/restriction back to the Microsoft Default (enabled with no security prompt). .EXAMPLE -ChangeBackToMicrosoftDefault Registry::HKEY_USERS\S-1-5-21-3870645062-3653562310-3850680542-1001\software\policies\microsoft\office\16.0\excel\security\PythonFunctionWarnings changed from 1 to 0 Registry::HKEY_USERS\S-1-5-21-3870645062-3653562310-3850680542-1002\software\policies\microsoft\office\16.0\excel\security\PythonFunctionWarnings changed from 1 to 0 Set Registry::HKEY_USERS\S-1-5-21-3870645062-3653562310-3850680542-1003\software\policies\microsoft\office\16.0\excel\security\PythonFunctionWarnings to 0 .LINK https://support.microsoft.com/en-us/office/data-security-and-python-in-excel-33cc88a4-4a87-485e-9ff9-f35958278327 .OUTPUTS None .NOTES Minimum OS Architecture Supported: Windows 8.1, Server 2012 Release Notes: Initial Release By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://ninjastage2.wpengine.com/terms-of-use. Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA). #> [CmdletBinding()] param ( [Parameter()] [Switch]$Block = [System.Convert]::ToBoolean($env:blockPython), [Parameter()] [Switch]$IncludeNewUsers = [System.Convert]::ToBoolean($env:includeNewUsers), [Parameter()] [Switch]$ChangeBackToMicrosoftDefault = [System.Convert]::ToBoolean($env:changeBackToMicrosoftDefaultSetting) ) begin { # If incompatible options are detected error out if($Block -and $ChangeBackToMicrosoftDefault){ Write-Error "-ChangeBackToMicrosoftDefault and -Block cannot be used together. The 'Change Back To Microsoft Default' option is to set Python in Excel back to how Microsoft ships the feature (with all security warnings disabled)." exit 1 } # Write a warning message for the least secure option if($ChangeBackToMicrosoftDefault){ Write-Warning "Changing the setting back to the default. All Python security warnings will be disabled..." } function Test-IsElevated { $id = [System.Security.Principal.WindowsIdentity]::GetCurrent() $p = New-Object System.Security.Principal.WindowsPrincipal($id) $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator) } # Handy registry setting function function Set-HKProperty { param ( $Path, $Name, $Value, [ValidateSet('DWord', 'QWord', 'String', 'ExpandedString', 'Binary', 'MultiString', 'Unknown')] $PropertyType = 'DWord' ) if (-not $(Test-Path -Path $Path)) { # Check if path does not exist and create the path New-Item -Path $Path -Force | Out-Null } if ((Get-ItemProperty -Path $Path -Name $Name -ErrorAction SilentlyContinue)) { # Update property and print out what it was changed from and changed to $CurrentValue = (Get-ItemProperty -Path $Path -Name $Name -ErrorAction SilentlyContinue).$Name try { Set-ItemProperty -Path $Path -Name $Name -Value $Value -Force -Confirm:$false -ErrorAction Stop | Out-Null } catch { Write-Error "[Error] Unable to Set registry key for $Name please see below error!" Write-Error $_ exit 1 } Write-Host "$Path\$Name changed from $CurrentValue to $($(Get-ItemProperty -Path $Path -Name $Name -ErrorAction SilentlyContinue).$Name)" } else { # Create property with value try { New-ItemProperty -Path $Path -Name $Name -Value $Value -PropertyType $PropertyType -Force -Confirm:$false -ErrorAction Stop | Out-Null } catch { Write-Error "[Error] Unable to Set registry key for $Name please see below error!" Write-Error $_ exit 1 } Write-Host "Set $Path\$Name to $($(Get-ItemProperty -Path $Path -Name $Name -ErrorAction SilentlyContinue).$Name)" } } # This function will gather all the user profiles on the system for use later function Get-UserHives { param ( [Parameter()] [ValidateSet('AzureAD', 'DomainAndLocal', 'All')] [String]$Type = "All", [Parameter()] [String[]]$ExcludedUsers, [Parameter()] [switch]$IncludeDefault ) # User account SID's follow a particular patter depending on if they're azure AD or a Domain account or a local "workgroup" account. $Patterns = switch ($Type) { "AzureAD" { "S-1-12-1-(\d+-?){4}$" } "DomainAndLocal" { "S-1-5-21-(\d+-?){4}$" } "All" { "S-1-12-1-(\d+-?){4}$" ; "S-1-5-21-(\d+-?){4}$" } } # We'll need the NTuser.dat file to load each users registry hive. So we grab it if their account sid matches the above pattern. $UserProfiles = Foreach ($Pattern in $Patterns) { Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\*" | Where-Object { $_.PSChildName -match $Pattern } | Select-Object @{Name = "SID"; Expression = { $_.PSChildName } }, @{Name = "UserName"; Expression = { "$($_.ProfileImagePath | Split-Path -Leaf)" } }, @{Name = "UserHive"; Expression = { "$($_.ProfileImagePath)\NTuser.dat" } }, @{Name = "Path"; Expression = { $_.ProfileImagePath } } } # There are some situations where grabbing the .Default user's info is needed. switch ($IncludeDefault) { $True { $DefaultProfile = "" | Select-Object UserName, SID, UserHive, Path $DefaultProfile.UserName = "Default" $DefaultProfile.SID = "DefaultProfile" $DefaultProfile.Userhive = "$env:SystemDrive\Users\Default\NTUSER.DAT" $DefaultProfile.Path = "$env:SystemDrive\Users\Default" $DefaultProfile | Where-Object { $ExcludedUsers -notcontains $_.UserName } } } $UserProfiles | Where-Object { $ExcludedUsers -notcontains $_.UserName } } } process { if (-not (Test-IsElevated)) { Write-Error -Message "Access Denied. Please run with Administrator privileges." exit 1 } # If we're only asked to set it for existing users we won't include the default registry hive if($IncludeNewUsers){ $UserProfiles = Get-UserHives -Type "All" -IncludeDefault }else{ $UserProfiles = Get-UserHives -Type "All" } $Key = "software\policies\microsoft\office\16.0\excel\security" $PropertyName = "PythonFunctionWarnings" if($ChangeBackToMicrosoftDefault){ # No Prompt and unlocked $Value = 0 } # This is the default option for the script if(-not ($ChangeBackToMicrosoftDefault) -and -not ($Block)){ # Prompt $Value = 1 } if($Block){ # Block $Value = 2 } # Loop through each profile on the machine Foreach ($UserProfile in $UserProfiles) { # Load User ntuser.dat if it's not already loaded If (($ProfileWasLoaded = Test-Path Registry::HKEY_USERS\$($UserProfile.SID)) -eq $false) { Start-Process -FilePath "cmd.exe" -ArgumentList "/C reg.exe LOAD HKU\$($UserProfile.SID) `"$($UserProfile.UserHive)`"" -Wait -WindowStyle Hidden } Set-HKProperty -Path "Registry::HKEY_USERS\$($UserProfile.SID)\$Key" -Name $PropertyName -Value $Value # Unload NTuser.dat If ($ProfileWasLoaded -eq $false) { [gc]::Collect() Start-Sleep 1 Start-Process -FilePath "cmd.exe" -ArgumentList "/C reg.exe UNLOAD HKU\$($UserProfile.SID)" -Wait -WindowStyle Hidden | Out-Null } } } end { }
Detailansicht
Das mitgelieferte PowerShell-Skript wurde entwickelt, um Administratoren die Kontrolle über die Python-Funktionen in Excel zu ermöglichen. Im Folgenden wird Schritt für Schritt erklärt, wie das Skript funktioniert:
1. Skript-Parameter:
- -Block: Dieser Parameter blockiert die Verwendung von Python in Excel, indem er den Registrierungsschlüssel PythonFunctionWarnings auf 2 setzt und damit die Ausführung von Python verhindert.
- -IncludeNewUsers: Wenn dieser Parameter verwendet wird, wendet das Skript die Einschränkung auch auf neue Benutzerprofile an und gewährleistet, dass dieselben Einstellungen auf alle zukünftigen Benutzer:innen, die im System angelegt werden, übernommen werden.
- -ChangeBackToMicrosoftDefault: Diese Option setzt den Registrierungsschlüssel auf seinen Standardwert (0) zurück, wodurch Python ohne Sicherheitsabfragen oder Warnungen ausgeführt werden kann.
2. Manipulation der Registrierung:
- Das Skript verändert die Windows-Registrierung und zielt insbesondere auf den PythonFunctionWarningskey ab, der sich unter den Excel-Sicherheitseinstellungen befindet. Je nach den übergebenen Parametern setzt das Skript diesen Schlüssel auf 0, 1 oder 2, was keine Warnungen, eine Sicherheitsabfrage bzw. eine vollständige Sperrung bedeutet.
3. Verarbeitung von Benutzerprofilen:
- Das Skript ruft alle Benutzerprofile auf dem System ab und wendet die Änderungen in der Registrierung entsprechend an. Es enthält auch eine Funktion zum Laden und Entladen der Datei NTUSER.DAT für jedes Benutzerprofil, um sicherzustellen, dass die Änderungen auch dann übernommen werden, wenn die Benutzer:innen gerade nicht angemeldet sind.
4. Fehlerbehandlung und Überprüfungsfunktion:
- Das Skript prüft, ob es mit erweiterten Rechten (Administratorrechten) ausgeführt wird, und bricht andernfalls mit einer Fehlermeldung ab. Dies ist von entscheidender Bedeutung, da die Änderung der Registrierung solche Rechte erfordert.
Potenzielle Anwendungsfälle
Stellen Sie sich vor, ein MSP verwaltet die IT-Infrastruktur eines großen Unternehmens. Sie haben vor kurzem die Python-Integration in Excel für eingehende Datenanalysen eingeführt, sind jedoch besorgt über die potenziellen Risiken einer unregulierten Ausführung von Python-Skripten.
Durch die Bereitstellung dieses PowerShell-Skripts kann der MSP Sicherheitsabfragen für alle Benutzerkonten durchsetzen und sicherstellen, dass jeder Versuch, Python in Excel auszuführen, ausdrücklich genehmigt werden muss. Darüber hinaus können sie die Ausführung von Python auf Rechnern, die mit sensiblen Informationen wie Finanzdaten umgehen, vollständig blockieren, um die Risiken weiter zu verringern.
Vergleiche
Es gibt noch andere Methoden, um die Verwendung von Python in Excel einzuschränken, z. B. Einstellungen in den Gruppenrichtlinien oder manuelle Änderungen in der Registrierung. Diese Ansätze bieten jedoch möglicherweise nicht den gleichen Grad an Detaillierung oder Automatisierung, den das PowerShell-Skript bietet.
Gruppenrichtlinien können zwar effektiv sein, lassen sich aber nicht ohne Weiteres auf alle Benutzerprofile anwenden oder ermöglichen eine selektive Sperrung im Gegensatz zu einer Aufforderung. Manuelle Änderungen an der Registrierung sind dagegen fehleranfällig und für umfangreiche Bereitstellungen nicht praktikabel.
FAQs
1. Was passiert, wenn ich die Parameter -Block und -ChangeBackToMicrosoftDefault zusammen verwende?
- Das Skript bricht mit einer Fehlermeldung ab, da diese beiden Optionen nicht kompatibel sind. Das Blockieren von Python und das Zurücksetzen auf die Standardeinstellungen können nicht gleichzeitig durchgeführt werden.
2. Muss ich das Skript als Administrator ausführen?
- Ja, das Skript erfordert erhöhte Rechte, um die Registrierung zu ändern.
3. Kann ich diese Einstellungen automatisch auf neue Benutzer anwenden?
- Ja, durch die Verwendung des Parameters -IncludeNewUsers stellt das Skript sicher, dass neue Benutzerprofile dieselben Python-Einschränkungen übernehmen.
Folgen
Die Einschränkung der Verwendung von Python in Excel kann erhebliche Auswirkungen auf die Datensicherheit in einem Unternehmen haben. Durch das Durchsetzen von Sicherheitsabfragen oder das vollständige Blockieren von Python können IT-Administratoren die unbefugte oder bösartige Ausführung von Skripten verhindern und so sensible Daten schützen. Es ist jedoch auch wichtig, die Auswirkungen auf die Produktivität zu berücksichtigen, da zu restriktive Maßnahmen legitime Anwendungsfälle behindern können.
Empfehlungen
Wenn Sie dieses Skript verwenden, beachten Sie folgende Aspekte:
- Testen Sie die Einstellungen mit einer kleinen Gruppe von Benutzer:innen, bevor Sie sie in großem Umfang einsetzen, um sicherzustellen, dass der normale Betrieb nicht gestört wird.
- Regelmäßige Überprüfung und Aktualisierung der Beschränkungen auf der Grundlage der sich entwickelnden Sicherheitsbedürfnisse des Unternehmens und der Einführung neuer Tools oder Praktiken.
- Ziehen Sie die Verwendung des Parameters -IncludeNewUsers in Erwägung, um unternehmensweit einheitliche Sicherheitsrichtlinien zu gewährleisten.
Abschließende Überlegungen
Die Verwaltung der Python-Integration in Excel ist eine wichtige Aufgabe für IT-Experten und MSPs, insbesondere in Umgebungen, in denen die Datensicherheit an erster Stelle steht. Dieses PowerShell-Skript bietet eine zuverlässige Lösung für die Steuerung der Python-Nutzung und bietet Flexibilität und Automatisierungsfunktionen, die anderen Methoden möglicherweise fehlen.
Für alle, die ihren IT-Betrieb weiter optimieren und absichern wollen, bietet NinjaOne komplette Tools und Services, die auf die Anforderungen des modernen IT-Managements zugeschnitten sind. Ob durch Automatisierung, Überwachung oder Sicherheitsmanagement, NinjaOne kann Ihnen helfen, eine sichere und effiziente IT-Infrastruktur zu erhalten.