Die Einschränkung des Python-Zugriffs in Microsoft Excel mit PowerShell

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.

Nächste Schritte

Der Aufbau eines effizienten und effektiven IT-Teams erfordert eine zentralisierte Lösung, die als einheitliches Tool zur Bereitstellung von IT-Dienstleistungen fungiert. NinjaOne ermöglicht es IT-Teams, alle Geräte zu überwachen, zu verwalten, zu sichern und zu unterstützen, unabhängig vom Standort, ohne dass eine komplexe Infrastruktur vor Ort erforderlich ist.

Erfahren Sie mehr über NinjaOne Remote Script Deployment, sehen Sie sich eine Live-Tour an oder starten Sie Ihre kostenlose Testversion unserer NinjaOne Plattform.

Kategorien:

Das könnte Sie auch interessieren

Wie man nach Windows-Registrierungsschlüsseln, Eigenschaften und Werten mit PowerShell sucht

IT-Guide zur Verwendung von PowerShell für Dateierweiterungsberichte

Wie man das Vorhandensein von Dateien und Ordnern unter macOS automatisiert überprüft

Vollständiger Guide: Wie man mit einem Linux-Skript das Vorhandensein von Dateien oder Ordnern überprüft

Wie man Zertifikate nach Fingerabdruck mit PowerShell effizient auffindet und entfernt

Wie man die Existenz von Dateien oder Ordnern unter Windows mit einem PowerShell-Skript überprüft

×

Sehen Sie NinjaOne in Aktion!

Mit dem Absenden dieses Formulars akzeptiere ich die Datenschutzerklärung von NinjaOne.

NinjaOne Allgemeine Geschäftsbedingungen für Skripte

Indem Sie unten auf die Schaltfläche “Ich akzeptiere” klicken, erklären Sie Ihr Einverständnis mit den folgenden rechtlichen Bedingungen sowie mit unseren Nutzungsbedingungen:

  • Eigentumsrechte: NinjaOne besitzt und wird weiterhin alle Rechte, Titel und Interessen an dem Skript (einschließlich des Urheberrechts) behalten. NinjaOne gewährt Ihnen eine eingeschränkte Lizenz zur Nutzung des Skripts in Übereinstimmung mit diesen rechtlichen Bedingungen.
  • Einschränkung der Nutzung: Sie dürfen das Skript nur für Ihre legitimen persönlichen oder internen Geschäftszwecke verwenden und es nicht an Dritte weitergeben.
  • Verbot der Wiederveröffentlichung: Sie sind unter keinen Umständen berechtigt, das Skript in einer Skriptbibliothek, die einem anderen Softwareanbieter gehört oder von diesem kontrolliert wird, erneut zu veröffentlichen.
  • Gewährleistungsausschluss: Das Skript wird “wie gesehen” und “wie verfügbar” bereitgestellt, ohne jegliche Garantie. NinjaOne gibt keine Versprechen oder Garantien, dass das Skript frei von Fehlern ist oder dass es Ihre speziellen Bedürfnisse oder Erwartungen erfüllt.
  • Risikoübernahme: Die Verwendung des Skripts erfolgt auf eigene Gefahr. Sie erkennen an, dass die Nutzung des Skripts mit bestimmten Risiken verbunden ist, und Sie verstehen und übernehmen jedes dieser Risiken.
  • Verzicht und Freigabe: Sie machen NinjaOne nicht für nachteilige oder unbeabsichtigte Folgen verantwortlich, die sich aus Ihrer Nutzung des Skripts ergeben, und Sie verzichten auf alle gesetzlichen oder billigkeitsrechtlichen Rechte oder Rechtsmittel, die Sie gegen NinjaOne im Zusammenhang mit Ihrer Nutzung des Skripts haben könnten.
  • EULA: Wenn Sie ein NinjaOne-Kunde sind, unterliegt Ihre Nutzung des Skripts dem für Sie geltenden Endbenutzer-Lizenzvertrag (EULA).