ONTAP Cyber Vault-Härtung mit PowerShell
Der ONTAP Cyber Vault bietet im Vergleich zu herkömmlichen Lösungen eine bessere Widerstandsfähigkeit gegen Cyberangriffe. Beim Entwurf einer Architektur zur Verbesserung der Sicherheit ist es von entscheidender Bedeutung, Maßnahmen zur Verringerung der Angriffsfläche zu berücksichtigen. Dies kann durch verschiedene Methoden erreicht werden, beispielsweise durch die Implementierung gehärteter Kennwortrichtlinien, die Aktivierung von RBAC, das Sperren von Standardbenutzerkonten, die Konfiguration von Firewalls und die Nutzung von Genehmigungsabläufen für alle Änderungen am Tresorsystem. Darüber hinaus kann die Einschränkung von Netzwerkzugriffsprotokollen auf bestimmte IP-Adressen dazu beitragen, potenzielle Sicherheitslücken zu begrenzen.
ONTAP bietet eine Reihe von Steuerelementen, mit denen der ONTAP Speicher gehärtet werden kann. Verwenden Sie die"Anleitungen und Konfigurationseinstellungen für ONTAP" um Organisationen dabei zu helfen, vorgeschriebene Sicherheitsziele hinsichtlich der Vertraulichkeit, Integrität und Verfügbarkeit von Informationssystemen zu erreichen.
Best Practices zur Härtung
Manuelle Schritte
-
Erstellen Sie einen bestimmten Benutzer mit vordefinierter und benutzerdefinierter Administratorrolle.
-
Erstellen Sie einen neuen IP-Bereich, um den Netzwerkverkehr zu isolieren.
-
Erstellen Sie eine neue SVM im neuen IP-Bereich.
-
Stellen Sie sicher, dass die Firewall-Routing-Richtlinien richtig konfiguriert sind und dass alle Regeln regelmäßig überprüft und bei Bedarf aktualisiert werden.
ONTAP CLI oder über Automatisierungsskript
-
Schützen Sie die Verwaltung mit Multi-Admin Verification (MFA)
-
Aktivieren Sie die Verschlüsselung für Standarddaten während der Übertragung zwischen Clustern.
-
Sichern Sie SSH mit einer starken Verschlüsselungsmethode und erzwingen Sie sichere Passwörter.
-
Aktivieren Sie globales FIPS.
-
Telnet und Remote Shell (RSH) sollten deaktiviert sein.
-
Standard-Administratorkonto sperren.
-
Deaktivieren Sie Daten-LIFs und sichern Sie Remote-Zugriffspunkte.
-
Deaktivieren und entfernen Sie nicht verwendete oder überflüssige Protokolle und Dienste.
-
Verschlüsseln Sie den Netzwerkverkehr.
-
Verwenden Sie beim Einrichten von Superuser- und Administratorrollen das Prinzip der geringsten Privilegien.
-
Beschränken Sie HTTPS und SSH von bestimmten IP-Adressen mithilfe der Option „Zulässige IPs“.
-
Beenden Sie die Replikation und setzen Sie sie basierend auf dem Übertragungsplan fort.
Die Punkte 1–4 erfordern manuelle Eingriffe wie die Festlegung eines isolierten Netzwerks, die Trennung des IP-Bereichs usw. und müssen im Voraus durchgeführt werden. Detaillierte Informationen zur Konfiguration der Härtung finden Sie im"Leitfaden zur ONTAP -Sicherheitshärtung" . Der Rest kann zur einfachen Bereitstellung und Überwachung problemlos automatisiert werden. Das Ziel dieses orchestrierten Ansatzes besteht darin, einen Mechanismus zur Automatisierung der Härtungsschritte bereitzustellen, um den Vault-Controller zukunftssicher zu machen. Der Zeitraum, in dem die Cyber-Vault-Air-Gap geöffnet ist, ist so kurz wie möglich. SnapVault nutzt die „Incremental Forever“-Technologie, die nur die Änderungen seit der letzten Aktualisierung in den Cyber-Tresor verschiebt und so die Zeit minimiert, die der Cyber-Tresor geöffnet bleiben muss. Um den Arbeitsablauf weiter zu optimieren, wird die Öffnung des Cyber-Tresors mit dem Replikationszeitplan koordiniert, um das kleinstmögliche Verbindungsfenster sicherzustellen.
Hier ist ein PowerShell-Codebeispiel 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
}
}