Risiko Repository
Früher wurden die Management Tools mit der Software gleich mit installiert und mit einem Service Pack aktualisiert. In der Cloud ist das nicht nicht mehr so und gerade viele PowerShell-Module werden heute über Internet bereit gestellt: Als Administrator sollten Sie da doppelt wachsam sein.
Bislang habe ich noch kein Modul gefunden, welches absichtlich oder unabsichtlich einen Schaden provoziert hat. Ich warte aber nur darauf.
Es gibt auch für andere Programmiersprachen und Umgebungen entsprechende "Pakete", sei es Arduino Paket, Python und andere. Das Problem ist also nicht auf PowerShell beschränkt aber mit PowerShell arbeiten sehr oft Administratoren.
Beispiel MSCommerce
Im November 2019 hat Microsoft angekündigt, dass Anwender eigenständig Produkte im Office 365 Tenant kaufen können ohne dass der globale Administrator oder der Rechnungsadministrator zustimmen muss. Diese Funktion können Sie natürlich abstellen und es gibt auch einen entsprechenden Abschnitt in meiner Checkliste Tenant Einrichtung. Die Steuerung dieser Funktion ist auch auf der Microsoft Seite gut beschrieben.
- Self-service purchase FAQ
https://docs.microsoft.com/en-us/microsoft-365/commerce/subscriptions/self-service-purchase-faq - Use AllowSelfServicePurchase
for the MSCommerce PowerShell
module
https://docs.microsoft.com/en-us/microsoft-365/commerce/subscriptions/allowselfservicepurchase-powershell
Die Einstellung erfordert aber die Installation eines PowerShell-Moduls, welches laut Anleitung auch ganz einfach installiert wird:
Diese unscheinbare Einrichtung bedeutet aber, dass Sie als Administrator ein Modul installieren und später den dort enthaltenen Code mit privilegierten Rechten ausführen.
Das gleiche Prinzip gilt für sehr viele weitere Module, die Microsoft direkt über PSGallery anbietet.
Am 25. Nov 2019 waren es allein 5925 "unique Packages" und die Menge an Download zeigt die Verbreitung. Angeblich prüft Microsoft über automatische Skripte die eingereichten Pakete aber niemand wird hier sicher den Code durch schauen. Zumal es einem Code auch einfach möglich wäre, weitere Bestandteile nachzuladen.
PSGallery ist Microsoft aber nicht jeder Inhalt
Die PSGallery ist unter der URL https://www.powershellgallery.com/ zwar nicht als Subdomains von microsoft.com erreichbar, aber alle Hinweise wie das Impressum und die Feedback-Adresse verweisen auf Microsoft. Die PSGallery steht aber jedem Entwickler offen, der meint ein Modul für PowerShell veröffentlichen zu müssen.
- The PowerShell Gallery
https://docs.microsoft.com/en-us/powershell/scripting/gallery/overview?view=powershell-6
Er muss sich natürlich registrieren aber das ist heute mit einer Microsoft Konto (vormals LiveID) schnell auch mit einem falschen Namen gemacht. Auch müssen die Module bislang nicht zwingend digital signiert sein.
Insofern sollten Sie nicht ganz blind jedem Modul vertrauen, sondern erst mal kritisch hinterfragen..
- Wie lange gibt es das Modul schon
- Ist der Entwickler irgendwie bekannt
- Wie viele Download hat das Modul
Da aber alle Module "offen" sind, können Sie auch selbst nach der Installation einfach nachschauen, was der Code macht. Es ist dazu gar nicht mal erforderlich, dass Sie jeden Abschnitt 100% verstehen. Ich schaue mir den Code aber zumindest grob daraufhin an, welche HTTP-Verbindungen er startet und ob die verwendeten PowerShell-Commandlets sinnvoll sein. Nebenbei lerne ich so durchaus Unterschiede in den Programmierstielen kennen und der ein oder andere Aha-Effekt stellt sich auch immer mal wieder ein.
Andere Repositories
Es gibt neben der PSGallery noch andere Webseiten, die PowerShell-Module installationsfertig anbieten. Sie müssen diese Quellen natürlich erst in der PowerShell freischalten aber auch dann ist es nur ein "Install-Module" entfernt. Über den Weg können Sie sogar eigene Repositories einbinden, die sie selbst intern auf einem eigenen Server hosten.
Das ist insbesondere für Firmen mit mehreren Entwicklern und Nutzern interessant, die ihre Skripte konsequent als Pakete in einem Repository ablegen und damit die Installation und Verteilung deutlich vereinfachen. Die interessanten PowerShell-Commandlets sind schnell ermittelt:
PS C:\> get-command *-*Repository* CommandType Name Version Source ----------- ---- ------- ------ Function Get-PSRepository 2.1.4 PowerShellGet Function Register-PSRepository 2.1.4 PowerShellGet Function Set-PSRepository 2.1.4 PowerShellGet Function Unregister-PSRepository 2.1.4 PowerShellGet PS C:\> Get-PSRepository Name InstallationPolicy SourceLocation ---- ------------------ -------------- PSGallery Untrusted https://www.powershellgallery.com/api/v2/
Auf meinen Client war nur die PSGallery eingerichtet.
- Working with local PowerShellGet
Repositories
https://docs.microsoft.com/en-us/powershell/scripting/gallery/how-to/working-with-local-psrepositories?view=powershell-6
Andere Repositores sind z.B.
- NuGET
https://www.nuget.org/
An introduction to NuGet
https://docs.microsoft.com/de-de/nuget/what-is-nuget - Chocolatey
https://chocolatey.org/
Da die Schnittstellen zu solchen Repositories bekannt und offen sind, dürfte es noch weitere entsprechende Pools geben, über deren Zuverlässigkeit Sie selbst wachen müssen.
Weitere Links
- Checkliste Tenant Einrichtung
- Getting Started with the PowerShell
Gallery
https://blogs.technet.microsoft.com/poshchap/2015/08/07/getting-started-with-the-powershell-gallery/ - PSGallery, are all module safe to use?
https://www.reddit.com/r/PowerShell/comments/8m9n0x/psgallery_are_all_module_safe_to_use/ - Erneut Schadcode im Python-Paketmanager
aufgetaucht
https://www.heise.de/developer/meldung/Erneut-Schadcode-im-Python-Paketmanager-aufgetaucht-4605789.html