ONTAP Cyber-Vault-Härtung mit PowerShell
Im Vergleich zu herkömmlichen Lösungen bietet die ONTAP Cyber-Vault eine bessere Ausfallsicherheit gegen Cyberangriffe. Bei der Entwicklung einer Architektur zur Erhöhung der Sicherheit ist es von entscheidender Bedeutung, Maßnahmen zur Reduzierung der Angriffsfläche zu berücksichtigen. Dies kann durch verschiedene Methoden erreicht werden, wie z. B. die Implementierung gesicherter Passwortrichtlinien, die Aktivierung von RBAC, die Sperrung von Standardbenutzerkonten, die Konfiguration von Firewalls und die Nutzung von Genehmigungsströmen für Änderungen am Vault-System. Darüber hinaus kann die Einschränkung von Netzwerkzugriffsprotokollen von einer bestimmten IP-Adresse helfen, potenzielle Schwachstellen zu begrenzen.
ONTAP bietet eine Reihe von Kontrollen, die das Absichern des ONTAP-Speichers ermöglichen. Verwenden Sie das"Richtlinien und Konfigurationseinstellungen für ONTAP", um Unternehmen bei der Einhaltung vorgegebener Sicherheitsziele für Vertraulichkeit, Integrität und Verfügbarkeit von Informationssystemen zu unterstützen.
Best Practices optimieren
Manuelle Schritte
-
Erstellen Sie einen bestimmten Benutzer mit einer vordefinierten und benutzerdefinierten Administratorrolle.
-
Erstellen Sie einen neuen IPspace, um den Netzwerkverkehr zu isolieren.
-
Erstellen Sie eine neue SVM im neuen IPspace.
-
Stellen Sie sicher, dass Firewall-Routing-Richtlinien ordnungsgemäß konfiguriert und alle Regeln regelmäßig geprüft und bei Bedarf aktualisiert werden.
ONTAP CLI oder über Automatisierungsskript
-
Schutz der Administration durch MFA (Multi-Admin Verification)
-
Verschlüsselung von Standarddaten „während der Übertragung“ zwischen Clustern aktivieren
-
Sichern Sie SSH mit starker Verschlüsselung und erzwingen Sie sichere Passwörter.
-
Globalen FIPS ermöglichen.
-
Telnet und Remote Shell (RSH) sollten deaktiviert werden.
-
Standard-Administratorkonto sperren.
-
Deaktivieren Sie Daten-LIFs und sichere Remote-Zugriffspunkte.
-
Deaktivieren und entfernen Sie nicht verwendete oder externe Protokolle und Services.
-
Verschlüsseln Sie den Netzwerkverkehr.
-
Verwenden Sie beim Einrichten von Superuser- und Administratorrollen das Prinzip „Least Privilege“.
-
Beschränken Sie HTTPS und SSH von einer bestimmten IP-Adresse mit der zulässigen IP-Option.
-
Legen Sie die Replikation auf der Grundlage des Übertragungszeitplans still und nehmen Sie sie wieder auf.
Die Aufzählungspunkte 1-4 müssen manuell eingreifen, wie z. B. die Benennung eines isolierten Netzwerks, die Trennung des IPspaces usw. und müssen vorher durchgeführt werden. Detaillierte Informationen zur Konfiguration der Härtung finden Sie im "Leitfaden zur ONTAP-Erhöhung der Sicherheit". Der Rest kann leicht automatisiert werden, um eine einfache Bereitstellung und Überwachung zu ermöglichen. Das Ziel dieses orchestrierten Ansatzes besteht darin, einen Mechanismus zur Automatisierung der Härtungsschritte bereitzustellen, um den Vault-Controller zukunftssicher zu machen. Der Zeitrahmen, in dem der Cyber-Vault-Luftspalt offen ist, ist so kurz wie möglich. SnapVault nutzt die Incremental Forever-Technologie, die die Änderungen seit dem letzten Update nur in den Cyber-Vault verschiebt, um so die Zeit zu minimieren, die das Cyber-Vault offen halten muss. Um den Workflow weiter zu optimieren, wird die Cyber-Vault-Eröffnung mit dem Replikationszeitplan abgestimmt, um das kleinste Verbindungsfenster zu gewährleisten.
Hier ist ein PowerShell-Code-Beispiel zum Härten eines ONTAP Controllers.
function removeSvmDataProtocols {
try {
# checking NFS service is disabled
logMessage -message "Checking if NFS service is disabled on vServer $DESTINATION_VSERVER"
$nfsService = Get-NcNfsService
if($nfsService) {
# Remove NFS
logMessage -message "Removing NFS protocol on vServer : $DESTINATION_VSERVER"
Remove-NcNfsService -VserverContext $DESTINATION_VSERVER -Confirm:$false
logMessage -message "NFS protocol removed on vServer : $DESTINATION_VSERVER" -type "SUCCESS"
} else {
logMessage -message "NFS service is disabled on vServer $DESTINATION_VSERVER" -type "SUCCESS"
}
# checking CIFS/SMB server is disabled
logMessage -message "Checking if CIFS/SMB server is disabled on vServer $DESTINATION_VSERVER"
$cifsServer = Get-NcCifsServer
if($cifsServer) {
# Remove SMB/CIFS
logMessage -message "Removing SMB/CIFS protocol on vServer : $DESTINATION_VSERVER"
$domainAdministratorUsername = Read-Host -Prompt "Enter Domain administrator username"
$domainAdministratorPassword = Read-Host -Prompt "Enter Domain administrator password" -AsSecureString
$plainPassword = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($domainAdministratorPassword))
Remove-NcCifsServer -VserverContext $DESTINATION_VSERVER -AdminUsername $domainAdministratorUsername -AdminPassword $plainPassword -Confirm:$false -ErrorAction Stop
logMessage -message "SMB/CIFS protocol removed on vServer : $DESTINATION_VSERVER" -type "SUCCESS"
} else {
logMessage -message "CIFS/SMB server is disabled on vServer $DESTINATION_VSERVER" -type "SUCCESS"
}
# checking iSCSI service is disabled
logMessage -message "Checking if iSCSI service is disabled on vServer $DESTINATION_VSERVER"
$iscsiService = Get-NcIscsiService
if($iscsiService) {
# Remove iSCSI
logMessage -message "Removing iSCSI protocol on vServer : $DESTINATION_VSERVER"
Remove-NcIscsiService -VserverContext $DESTINATION_VSERVER -Confirm:$false
logMessage -message "iSCSI protocol removed on vServer : $DESTINATION_VSERVER" -type "SUCCESS"
} else {
logMessage -message "iSCSI service is disabled on vServer $DESTINATION_VSERVER" -type "SUCCESS"
}
# checking FCP service is disabled
logMessage -message "Checking if FCP service is disabled on vServer $DESTINATION_VSERVER"
$fcpService = Get-NcFcpService
if($fcpService) {
# Remove FCP
logMessage -message "Removing FC protocol on vServer : $DESTINATION_VSERVER"
Remove-NcFcpService -VserverContext $DESTINATION_VSERVER -Confirm:$false
logMessage -message "FC protocol removed on vServer : $DESTINATION_VSERVER" -type "SUCCESS"
} else {
logMessage -message "FCP service is disabled on vServer $DESTINATION_VSERVER" -type "SUCCESS"
}
} catch {
handleError -errorMessage $_.Exception.Message
}
}
function disableSvmDataLifs {
try {
logMessage -message "Finding all data lifs on vServer : $DESTINATION_VSERVER"
$dataLifs = Get-NcNetInterface -Vserver $DESTINATION_VSERVER | Where-Object { $_.Role -contains "data_core" }
$dataLifs | Select-Object -Property InterfaceName, OpStatus, DataProtocols, Vserver, Address
logMessage -message "Disabling all data lifs on vServer : $DESTINATION_VSERVER"
# Disable the filtered data LIFs
foreach ($lif in $dataLifs) {
$disableLif = Set-NcNetInterface -Vserver $DESTINATION_VSERVER -Name $lif.InterfaceName -AdministrativeStatus down -ErrorAction Stop
$disableLif | Select-Object -Property InterfaceName, OpStatus, DataProtocols, Vserver, Address
}
logMessage -message "Disabled all data lifs on vServer : $DESTINATION_VSERVER" -type "SUCCESS"
} catch {
handleError -errorMessage $_.Exception.Message
}
}
function configureMultiAdminApproval {
try {
# check if multi admin verification is enabled
logMessage -message "Checking if multi-admin verification is enabled"
$maaConfig = Invoke-NcSsh -Name $DESTINATION_ONTAP_CLUSTER_MGMT_IP -Credential $DESTINATION_ONTAP_CREDS -Command "set -privilege advanced; security multi-admin-verify show"
if ($maaConfig.Value -match "Enabled" -and $maaConfig.Value -match "true") {
$maaConfig
logMessage -message "Multi-admin verification is configured and enabled" -type "SUCCESS"
} else {
logMessage -message "Setting Multi-admin verification rules"
# Define the commands to be restricted
$rules = @(
"cluster peer delete",
"vserver peer delete",
"volume snapshot policy modify",
"volume snapshot rename",
"vserver audit modify",
"vserver audit delete",
"vserver audit disable"
)
foreach($rule in $rules) {
Invoke-NcSsh -Name $DESTINATION_ONTAP_CLUSTER_MGMT_IP -Credential $DESTINATION_ONTAP_CREDS -Command "security multi-admin-verify rule create -operation `"$rule`""
}
logMessage -message "Creating multi admin verification group for ONTAP Cluster $DESTINATION_ONTAP_CLUSTER_MGMT_IP, Group name : $MULTI_ADMIN_APPROVAL_GROUP_NAME, Users : $MULTI_ADMIN_APPROVAL_USERS, Email : $MULTI_ADMIN_APPROVAL_EMAIL"
Invoke-NcSsh -Name $DESTINATION_ONTAP_CLUSTER_MGMT_IP -Credential $DESTINATION_ONTAP_CREDS -Command "security multi-admin-verify approval-group create -name $MULTI_ADMIN_APPROVAL_GROUP_NAME -approvers $MULTI_ADMIN_APPROVAL_USERS -email `"$MULTI_ADMIN_APPROVAL_EMAIL`""
logMessage -message "Created multi admin verification group for ONTAP Cluster $DESTINATION_ONTAP_CLUSTER_MGMT_IP, Group name : $MULTI_ADMIN_APPROVAL_GROUP_NAME, Users : $MULTI_ADMIN_APPROVAL_USERS, Email : $MULTI_ADMIN_APPROVAL_EMAIL" -type "SUCCESS"
logMessage -message "Enabling multi admin verification group $MULTI_ADMIN_APPROVAL_GROUP_NAME"
Invoke-NcSsh -Name $DESTINATION_ONTAP_CLUSTER_MGMT_IP -Credential $DESTINATION_ONTAP_CREDS -Command "security multi-admin-verify modify -approval-groups $MULTI_ADMIN_APPROVAL_GROUP_NAME -required-approvers 1 -enabled true"
logMessage -message "Enabled multi admin verification group $MULTI_ADMIN_APPROVAL_GROUP_NAME" -type "SUCCESS"
logMessage -message "Enabling multi admin verification for ONTAP Cluster $DESTINATION_ONTAP_CLUSTER_MGMT_IP"
Invoke-NcSsh -Name $DESTINATION_ONTAP_CLUSTER_MGMT_IP -Credential $DESTINATION_ONTAP_CREDS -Command "security multi-admin-verify modify -enabled true"
logMessage -message "Successfully enabled multi admin verification for ONTAP Cluster $DESTINATION_ONTAP_CLUSTER_MGMT_IP" -type "SUCCESS"
logMessage -message "Enabling multi admin verification for ONTAP Cluster $DESTINATION_ONTAP_CLUSTER_MGMT_IP"
Invoke-NcSsh -Name $DESTINATION_ONTAP_CLUSTER_MGMT_IP -Credential $DESTINATION_ONTAP_CREDS -Command "security multi-admin-verify modify -enabled true"
logMessage -message "Successfully enabled multi admin verification for ONTAP Cluster $DESTINATION_ONTAP_CLUSTER_MGMT_IP" -type "SUCCESS"
}
} catch {
handleError -errorMessage $_.Exception.Message
}
}
function additionalSecurityHardening {
try {
$command = "set -privilege advanced -confirmations off;security protocol modify -application telnet -enabled false;"
logMessage -message "Disabling Telnet"
Invoke-NcSsh -Name $DESTINATION_ONTAP_CLUSTER_MGMT_IP -Credential $DESTINATION_ONTAP_CREDS -Command $command
logMessage -message "Disabled Telnet" -type "SUCCESS"
#$command = "set -privilege advanced -confirmations off;security config modify -interface SSL -is-fips-enabled true;"
#logMessage -message "Enabling Global FIPS"
##Invoke-SSHCommand -SessionId $sshSession.SessionId -Command $command -ErrorAction Stop
#logMessage -message "Enabled Global FIPS" -type "SUCCESS"
$command = "set -privilege advanced -confirmations off;network interface service-policy modify-service -vserver cluster2 -policy default-management -service management-https -allowed-addresses $ALLOWED_IPS;"
logMessage -message "Restricting IP addresses $ALLOWED_IPS for Cluster management HTTPS"
Invoke-NcSsh -Name $DESTINATION_ONTAP_CLUSTER_MGMT_IP -Credential $DESTINATION_ONTAP_CREDS -Command $command
logMessage -message "Successfully restricted IP addresses $ALLOWED_IPS for Cluster management HTTPS" -type "SUCCESS"
#logMessage -message "Checking if audit logs volume audit_logs exists"
#$volume = Get-NcVol -Vserver $DESTINATION_VSERVER -Name audit_logs -ErrorAction Stop
#if($volume) {
# logMessage -message "Volume audit_logs already exists! Skipping creation"
#} else {
# # Create audit logs volume
# logMessage -message "Creating audit logs volume : audit_logs"
# New-NcVol -Name audit_logs -Aggregate $DESTINATION_AGGREGATE_NAME -Size 5g -ErrorAction Stop | Select-Object -Property Name, State, TotalSize, Aggregate, Vserver
# logMessage -message "Volume audit_logs created successfully" -type "SUCCESS"
#}
## Mount audit logs volume to path /vol/audit_logs
#logMessage -message "Creating junction path for volume audit_logs at path /vol/audit_logs for vServer $DESTINATION_VSERVER"
#Mount-NcVol -VserverContext $DESTINATION_VSERVER -Name audit_logs -JunctionPath /audit_logs | Select-Object -Property Name, -JunctionPath
#logMessage -message "Created junction path for volume audit_logs at path /vol/audit_logs for vServer $DESTINATION_VSERVER" -type "SUCCESS"
#logMessage -message "Enabling audit logging for vServer $DESTINATION_VSERVER at path /vol/audit_logs"
#$command = "set -privilege advanced -confirmations off;vserver audit create -vserver $DESTINATION_VSERVER -destination /audit_logs -format xml;"
#Invoke-SSHCommand -SessionI $sshSession.SessionId -Command $command -ErrorAction Stop
#logMessage -message "Successfully enabled audit logging for vServer $DESTINATION_VSERVER at path /vol/audit_logs"
} catch {
handleError -errorMessage $_.Exception.Message
}
}