Nel mondo del lavoro moderno, la sicurezza dei dati e la gestione degli accessi sono diventate sempre più cruciali, soprattutto perché le organizzazioni integrano diversi linguaggi e strumenti di programmazione nelle loro attività quotidiane.
Una di queste integrazioni è l’uso di Python in Microsoft Excel, una funzione potente che può migliorare la produttività ma che presenta anche potenziali rischi per la sicurezza. Per i professionisti IT e i fornitori di servizi gestiti (MSP), gestire e limitare l’accesso di Python in Excel è essenziale per mantenere un ambiente sicuro.
Questo articolo esplora uno script PowerShell progettato per limitare Python in Excel, garantendo il rispetto dei protocolli di sicurezza senza compromettere la funzionalità.
Background
Con la crescente popolarità di Python nell’analisi dei dati e nell’automazione, la sua integrazione in Excel offre agli utenti funzionalità avanzate. Tuttavia, questa integrazione introduce anche potenziali vulnerabilità, in particolare se gli script Python vengono eseguiti senza un’adeguata supervisione.
I professionisti IT e gli MSP devono bilanciare i vantaggi delle funzionalità di Python con la necessità di proteggere i dati sensibili. Lo script PowerShell qui discusso offre una soluzione consentendo agli amministratori di limitare l’uso di Python in Excel, attivando le richieste di sicurezza, bloccando del tutto l’accesso di Python o tornando alle impostazioni predefinite di Microsoft.
Lo script per limitare Python in Excel:
<# .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://www.ninjaone.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 { }
Accedi a oltre 700 script nel Dojo NinjaOne
Analisi dettagliata
Lo script PowerShell fornito è stato progettato per consentire agli amministratori di controllare la funzionalità di Python in Excel. Ecco una descrizione passo per passo di come funziona lo script:
1. Parametri dello script:
- -Block: Questo parametro blocca l’uso di Python in Excel impostando la chiave di registro PythonFunctionWarnings su 2, impedendo di fatto qualsiasi esecuzione di Python.
- -IncludeNewUsers: Quando si utilizza questo parametro, lo script applica la restrizione anche ai nuovi profili utente, garantendo che tutti i futuri utenti creati sul sistema ereditino le stesse impostazioni.
- -ChangeBackToMicrosoftDefault: Questa opzione reimposta la chiave di registro al suo valore predefinito (0), consentendo l’esecuzione di Python senza alcuna richiesta o avviso di sicurezza.
2. Modifica del registro di sistema:
- Lo script agisce modificando il registro di Windows, in particolare prendendo di mira la chiave PythonFunctionWarnings situata nelle impostazioni di sicurezza di Excel. A seconda dei parametri passati, lo script imposta questa chiave a 0, 1 o 2, che corrispondono rispettivamente a nessun avviso, a un messaggio di sicurezza o a un blocco completo.
3. Gestione del profilo utente:
- Lo script recupera tutti i profili utente del sistema e applica le modifiche al registro di conseguenza. Include anche una funzione per caricare e scaricare il file NTUSER.DAT per ogni profilo utente, assicurando che le modifiche vengano applicate anche se l’utente non è attualmente connesso.
4. Gestione degli errori e controllo dell’elevazione:
- Lo script controlla se viene eseguito con privilegi elevati (diritti di amministratore) e, in caso contrario, si conclude con un messaggio di errore. Questo è essenziale perché la modifica del registro richiede tali privilegi.
Casi d’uso potenziali
Immagina un MSP che gestisce l’infrastruttura IT di una grande organizzazione. Hanno recentemente introdotto l’integrazione di Python in Excel per l’analisi avanzata dei dati, ma sono preoccupati per i rischi potenziali dell’esecuzione di script Python non regolamentati.
Distribuendo questo script PowerShell, l’MSP può applicare le richieste di sicurezza a tutti gli account utente, garantendo che qualsiasi tentativo di eseguire Python in Excel richieda un’approvazione esplicita. Inoltre, possono bloccare completamente l’esecuzione di Python sui computer che gestiscono informazioni sensibili, come i dati finanziari, per ridurre ulteriormente i rischi.
Confronti
Esistono altri metodi per limitare l’uso di Python in Excel, come le impostazioni dei Criteri di gruppo o le modifiche manuali del Registro di sistema. Tuttavia, questi approcci potrebbero non offrire lo stesso livello di granularità o automazione dello script PowerShell.
Ad esempio, anche se i Criteri di gruppo offrono una certa efficacia, non è facile che si applichino a tutti i profili utente o che permettano di bloccare in modo selettivo le richieste. Le modifiche manuali del registro, invece, sono soggette a errori e poco pratiche per le implementazioni su larga scala.
Domande frequenti
1. Cosa succede se si utilizzano insieme i parametri -Block e -ChangeBackToMicrosoftDefault?
- Lo script si conclude con un errore, poiché queste due opzioni sono incompatibili. Non è possibile bloccare Python e ripristinare le impostazioni predefinite contemporaneamente.
2. È necessario eseguire lo script come amministratore?
- Sì, lo script richiede privilegi elevati per modificare il registro.
3. Posso applicare automaticamente queste impostazioni ai nuovi utenti?
- Sì, utilizzando il parametro -IncludeNewUsers, lo script assicura che i nuovi profili utente ereditino le stesse restrizioni di Python.
Implicazioni
Limitare l’uso di Python in Excel può avere implicazioni significative per la sicurezza dei dati all’interno di un’organizzazione. Applicando le richieste di sicurezza o bloccando del tutto Python, gli amministratori IT possono impedire l’esecuzione di script non autorizzati o dannosi, proteggendo così i dati sensibili. Tuttavia, è anche essenziale considerare l’impatto sulla produttività, poiché policy troppo restrittive possono ostacolare casi d’uso legittimi.
Raccomandazioni
Durante l’utilizzo di questo script:
- Testa le impostazioni su un piccolo gruppo di utenti prima di una distribuzione su larga scala, per assicurarti che non interrompa le normali operazioni.
- Verifica e aggiorna regolarmente le restrizioni in base all’evoluzione delle esigenze di sicurezza dell’organizzazione e all’introduzione di nuovi strumenti o pratiche.
- Considera l’utilizzo del parametro -IncludeNewUsers per mantenere coerenti i criteri di sicurezza in tutta l’organizzazione.
Considerazioni finali
La gestione dell’integrazione di Python in Excel è un compito critico per i professionisti IT e gli MSP, in particolare negli ambienti in cui la sicurezza dei dati è fondamentale. Questo script PowerShell fornisce una soluzione robusta per controllare l’uso di Python, offrendo flessibilità e automazione che altri metodi potrebbero non avere.
Per coloro che desiderano ottimizzare e rendere più sicure le proprie operazioni IT, NinjaOne offre strumenti e servizi completi progettati per soddisfare le esigenze della moderna gestione IT. Che si tratti di automazione, monitoraggio o gestione della sicurezza, NinjaOne può aiutarti a mantenere un’infrastruttura IT sicura ed efficiente.