122 lines
3.7 KiB
PowerShell
122 lines
3.7 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
PS 12: Sicherheit, Execution Policies & Secrets Management
|
|
.DESCRIPTION
|
|
Lerne professionelles Credential- und Sicherheitsmanagement in PowerShell 7+:
|
|
- Typensichere PSCredentials mit [SecureString]
|
|
- Ver- und Entschlüsselung sensibler Daten
|
|
- Sicherheits-Auditierung (ExecutionPolicy & LanguageMode)
|
|
- SecretVault-Simulation nach modernem SecretManagement-Standard
|
|
#>
|
|
|
|
# 🎯 TEILZIEL 1 (TODO 1): New-SecureCredentials
|
|
<#
|
|
.DESCRIPTION
|
|
Wandelt einen Benutzernamen und ein Klartextpasswort in ein sicheres [PSCredential]-Objekt um.
|
|
Nutzt ConvertTo-SecureString -AsPlainText -Force.
|
|
.OUTPUTS
|
|
[PSCredential]
|
|
#>
|
|
function New-SecureCredentials {
|
|
[CmdletBinding()]
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$UserName,
|
|
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$PlainTextPassword
|
|
)
|
|
|
|
# TODO:
|
|
# 1. Konvertiere $PlainTextPassword in einen [SecureString] (ConvertTo-SecureString -AsPlainText -Force).
|
|
# 2. Erzeuge und gib ein [PSCredential]::new($UserName, $secureString) zurück.
|
|
return $null
|
|
}
|
|
|
|
# 🎯 TEILZIEL 2 (TODO 2): Protect-SensitiveString & Unprotect-SensitiveString
|
|
<#
|
|
.DESCRIPTION
|
|
Verschlüsselt einen Klartextstring in einen geschützten Standard-String und entschlüsselt ihn wieder.
|
|
#>
|
|
function Protect-SensitiveString {
|
|
[CmdletBinding()]
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$PlainText
|
|
)
|
|
|
|
# TODO:
|
|
# 1. Konvertiere $PlainText in SecureString.
|
|
# 2. Konvertiere den SecureString mit ConvertFrom-SecureString in einen verschlüsselten String.
|
|
return ""
|
|
}
|
|
|
|
function Unprotect-SensitiveString {
|
|
[CmdletBinding()]
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$EncryptedString
|
|
)
|
|
|
|
# TODO:
|
|
# 1. Wandle $EncryptedString mit ConvertTo-SecureString zurück in einen SecureString.
|
|
# 2. Entschlüssele den Klartext via [System.Net.NetworkCredential]::new('', $secStr).Password
|
|
return ""
|
|
}
|
|
|
|
# 🎯 TEILZIEL 3 (TODO 3): Get-SecurityAuditReport
|
|
<#
|
|
.DESCRIPTION
|
|
Prüft die aktuelle Sicherheitskonfiguration der PowerShell-Sitzung.
|
|
.OUTPUTS
|
|
[PSCustomObject]@{
|
|
LanguageMode = [string]
|
|
ExecutionPolicy = [string]
|
|
IsElevated = [bool]
|
|
SecurityScore = [int]
|
|
Recommendations = [string[]]
|
|
}
|
|
#>
|
|
function Get-SecurityAuditReport {
|
|
[CmdletBinding()]
|
|
param()
|
|
|
|
# TODO:
|
|
# 1. Ermittle LanguageMode aus $ExecutionContext.SessionState.LanguageMode.
|
|
# 2. Ermittle die ExecutionPolicy (Get-ExecutionPolicy).
|
|
# 3. Prüfe, ob administrative Rechte vorliegen.
|
|
# 4. Berechne einen SecurityScore (0-100) und Empfehlungen.
|
|
return $null
|
|
}
|
|
|
|
# 🎯 TEILZIEL 4 (TODO 4): Invoke-SecretVaultSimulation
|
|
<#
|
|
.DESCRIPTION
|
|
Verwaltet einen sicheren Secret Store (Set, Get, Remove, List) auf Basis von SecureString-Verschlüsselung.
|
|
.OUTPUTS
|
|
Je nach Aktion: [bool], [string] oder [string[]]
|
|
#>
|
|
function Invoke-SecretVaultSimulation {
|
|
[CmdletBinding()]
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[ValidateSet('Set', 'Get', 'Remove', 'List')]
|
|
[string]$Action,
|
|
|
|
[Parameter()]
|
|
[string]$SecretName,
|
|
|
|
[Parameter()]
|
|
[string]$SecretValue,
|
|
|
|
[Parameter(Mandatory = $true)]
|
|
[hashtable]$VaultStorage
|
|
)
|
|
|
|
# TODO:
|
|
# Aktion 'Set': Verschlüssele $SecretValue mit Protect-SensitiveString und speichere in $VaultStorage[$SecretName]. Gib $true zurück.
|
|
# Aktion 'Get': Hole den verschlüsselten Wert, entschlüssele ihn mit Unprotect-SensitiveString und gib Klartext zurück.
|
|
# Aktion 'Remove': Entferne das Secret aus $VaultStorage. Gib $true zurück falls vorhanden, sonst $false.
|
|
# Aktion 'List': Gib alle gespeicherten Secret-Namen als Array zurück ($VaultStorage.Keys).
|
|
return $null
|
|
}
|