Documentazione avanzata
Conformità air gap con l’API in PowerShell
Gli script di conformità air gap richiedono l’autenticazione secondo questa procedura.
La conformità air gap funziona solo con asset già esistenti in Cyberwatch.
Nel caso in cui il certificato TLS del server Cyberwatch non possa essere riconosciuto dalla macchina su cui viene eseguito questo script, è necessario eseguire lo snippet di codice seguente all’inizio dello script:
add-type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
Script di conformità air gap e funzionamento
Recuperare lo script di download della conformità air gap e lo script di upload della conformità air gap, quindi valorizzare le variabili
$API_URLe$CREDENTIALSDopo aver eseguito lo script di download, viene creata una cartella
compliance_scriptscontenente lo script che consente di generare i risultatiPer eseguire lo script, spostare la cartella completa sull’asset da scansionare ed eseguire lo script come indicato di seguito. Per evitare qualsiasi rischio di esecuzione di uno script indesiderato, spostare la cartella completa, e non solo il suo contenuto:
- Per Linux:
bash ./compliance.sh > result.txt - Per Windows in PowerShell:
.\compliance.ps1 | Out-File -Encoding ASCII -FilePath result.txt
Verrà creato un file
result.txtcontenente i risultati dell’esecuzioneSpostare quindi il file
result.txtnella cartellauploadssul sistema che dispone dello script di upload.- Per Linux:
Inviare i risultati degli script presenti nella cartella
uploadstramite lo script di upload della conformità air gap
Script di download della conformità air gap
Mostra il codice sorgente dello script
# -------------------------------------
# CONFIGURATION
# Please check and complete these items
# -------------------------------------
$API_URL = ""
$CREDENTIALS = "access_key:secret_key"
# -------------------------
# RUN
# -------------------------
$encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($CREDENTIALS))
$os = Read-Host -Prompt "Input one OS (format from $API_URL/cbw_assets/os) to get the scripts, ex: 'windows_10_21h1_64/ubuntu_2004_64'"
$repository_input = Read-Host -Prompt "Input one or multiple repositories to fetch, ex: 'CIS_Benchmark, Security_Best_Practices, ...'"
$repository_array = $repository_input -split ", "
Function FetchImporterScripts {
<#
.SYNOPSIS
Example script to fetch Compliance Air gap scripts
#>
Write-Output "-------------------------------------------"
Write-Output "Cyberwatch - Fetch Compliance Air gap scripts"
Write-Output "-------------------------------------------"
# Test the client connection
Write-Output "INFO: Checking API connection and credentials..."
try {
$response = Invoke-WebRequest -URI $API_URL/api/v3/ping -Method Get -Headers @{
"Accept" = "application/json; charset=utf-8"
Authorization = "Basic $encodedCreds"
}
$response.Content
}
catch {
Write-Output "ERROR: Connection failed. Please check the following error message : '$_'"
Return
}
# Clean old files
Write-Output "INFO: Cleaning old files..."
Remove-Item -LiteralPath ".\compliance_scripts" -Force -Recurse -ErrorAction Ignore
Write-Output "INFO: Done."
# Create the base folders
New-Item -path ".\compliance_scripts" -Force -ItemType Directory | Out-Null
New-Item -path ".\uploads" -Force -ItemType Directory | Out-Null
# Fetch available scanning scripts from the API for the OS
Write-Output "INFO: Fetching filtered compliance scripts for OS: $os..."
$uri = "$API_URL/api/v2/compliances/scripts?os=$os&"
$repository_array | ForEach-Object {
$uri += "repositories%5B%5D=$_&"
}
Write-Output $uri
$response = Invoke-RestMethod -URI $uri -Method Get -Headers @{
"Accept" = "application/json; charset=utf-8"
Authorization = "Basic $encodedCreds"
}
# Fetch content of each script and attachments
$response | ForEach-Object {
Write-Output "INFO: Fetching content for '$($_.code)' ..."
$scanning_script = ($_)
$scanning_script_path = ".\compliance_scripts\"+$scanning_script.filename.ToLower().replace("::", "\")
Write-Output $scanning_script.filename
$scanning_script.script_content | New-Item -path $scanning_script_path -Force -ItemType File | Out-Null
Write-Output "INFO: Script saved at $($(Resolve-Path -Path $scanning_script_path).Path)."
}
Write-Output "---------------------------------------------------------------------"
Write-Output "Script completed!"
Write-Output "To continue, please now:"
Write-Output "1) Run the fetched scripts with 'compliance.ps1' or 'compliance.sh' on the targeted systems"
Write-Output "2) Put the results of the scripts as TXT files in the 'upload' folder"
Write-Output "3) Run the compliance 'upload' script"
Write-Output "---------------------------------------------------------------------"
}
FetchImporterScripts
Script di upload della conformità air gap
Mostra il codice sorgente dello script
# -------------------------------------
# CONFIGURATION
# Please check and complete these items
# -------------------------------------
$API_URL = ""
$CREDENTIALS = "access_key:secret_key"
# -------------------------
# RUN
# -------------------------
Write-Output "-------------------------------------------"
Write-Output "Cyberwatch - Send Compliance Air gap results for analysis"
Write-Output "-------------------------------------------"
$encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($CREDENTIALS))
Function SendResultsImporter {
<#
.SYNOPSIS
Example script to send Compliance Air gap scripts results
#>
try {
$response = Invoke-WebRequest -URI $API_URL/api/v3/ping -Method Get -Headers @{
"Accept" = "application/json; charset=utf-8"
Authorization = "Basic $encodedCreds"
}
$response.Content
}
catch {
Write-Output "ERROR: Connection failed. Please check the following error message : '$_'"
Return
}
# Load results and send them to Cyberwatch
Write-Output "INFO: Searching for available results..."
$available_results = Get-ChildItem -Recurse -File -Path ".\uploads"
Write-Output "INFO: Done. Found $($available_results.count) results to be processed and sent for analysis."
$available_results | ForEach-Object {
Write-Output "INFO: Reading $($_.FullName) content..."
$content = [IO.File]::ReadAllText($_.FullName)
Write-Output "INFO: Sending $($_.FullName) content to the API..."
$body_content = @{ output = $content } | ConvertTo-Json
$response = Invoke-WebRequest -URI $API_URL/api/v2/compliances/scripts -Method POST -Body $body_content -Headers @{
"Accept" = "application/json; charset=utf-8"
"Content-Type" = "application/json"
Authorization = "Basic $encodedCreds"
}
Write-Output "INFO: Done."
}
Write-Output "---------------------------------------------------------------------"
Write-Output "Script completed!"
Write-Output "Your scans are now being processed by your Cyberwatch nodes."
Write-Output "Please log on $API_URL to see the results."
Write-Output "---------------------------------------------------------------------"
}
SendResultsImporter