Utiliser des scripts PowerShell signés ne vous protège pas

Parmi les fausses idées qui circulent au sujet de PowerShell, il en est une qui est très dangereuse : utiliser uniquement des scripts signés vous protégerait contre tout acte malveillant.

Malheureusement, tout n’est pas aussi simple. La signature d’un script Powershell permet de s’assurer qu’un script provenant d’un tiers de confiance n’a pas été modifié.

Une confiance mal placée

Dans les faits, forcer une GPO, ou utiliser Powershell pour interdire l’exécution de scripts non signés peut introduire un effet pervers : les utilisateurs se croient protégés, ils ont confiance dans tous les scripts signés.

Nombre d’utilisateurs ne font pas attention aux questions qui leur sont posées lors de la première exécution d’un script signé. Par habitudes, ils acceptent, et le mal est fait.

Bien évidemment, il faut que le script soit signé via un certificat émis par une autorité de certificats de confiance. Un certificat compromis peut donc se transformer en une véritable bombe.

Les scripts autosignés

Pour profiter de la confiance des utilisateurs, il est aussi possible d’utiliser des scripts autosignés. Si le script a été signé sur un autre ordinateur, il n’y a aucun risque. PowerShell refusera d’exécuter le script, car il a été signé par une autorité en laquelle PC ne peut pas faire confiance.

Parti de ce postulat, on pourrait se penser en sécurité. Malheureusement, tout n’est pas aussi simple. Il est parfaitement possible d’utiliser votre PC pour lui faire signer des certificats. Ceci peut être effectué par un autre script (.cmd, .vbs ou autre… oui en 2022 il y a des entreprises qui interdisent les scripts PowerShell non signés, mais qui autorisent VB Script). Ce script sera en mesure d’utiliser les commandes PowerShell permettant la création d’un certificat et son emploi pour signer un script PowerShell…

Fort heureusement, la commande New-SelfSignedCertificate ne peut pas être utilisée sans privilèges administrateurs. Conclusion : seules les personnes qui acceptent les élévations de privilège sans se poser de questions sont en danger (comme très souvent).

Dans la pratique, je suis tenté de dire que cela fait encore beaucoup trop de monde…

Alias, l’ami qui vous veut du bien ?

Même un script créé avec de bonnes intentions peut vous nuire. Si celui-ci utilise des alias au lieu de commandes PowerShell, il peut être détourné. Chaque alias peut être remplacé par une autre commande, ou une fonction.

L’appel à de simples commandes comme cd, echo, dir, ls, cat, peut cacher un Logger ou une activité malveillante plus sophistiquée.

Moralité :

  • Ne pensez plus jamais que "signé" rime avec "sécurité".
  • Ne lancez jamais un script sans jeter un œil à son contenu. S’il utilise des alias, vérifiez toujours la configuration de ceux-ci sur votre PC. Ceci est possible via la commande Get-Alias.
  • Si vous devez signer un script, substituez tous les alias par les commandes PowerShell équivalentes.
Jérémy Jeanson

Comments

You have to be logged in to comment this post.