Creazione di una notifica Slack quando vengono rilevate nuove vulnerabilità
Utilizzando l'IU Swagger WebSphere Automation , il builder Slack Block Kit e la sintassi Mustache, crea un processo che invia una notifica a un webhook che risulta in un messaggio Slack. La notifica contiene i dettagli di tutte le nuove vulnerabilità rilevate da WebSphere Automation .
Prima di iniziare
Se si prevede di implementare variabili o elaborazioni condizionali, assicurarsi di avere familiarità con la sintassi di Mustache .
Esame della notifica della risorsa WebSphere Automation
Il risultato previsto di questa esercitazione è che Slack visualizza i messaggi con le informazioni passate dalle notifiche delle risorse appena create in WebSphere Automation. Per questa esercitazione, la notifica della risorsa contiene i dettagli per la creazione di un nuovo record di vulnerabilità quando viene rilevata una nuova vulnerabilità in un server gestito. Nella seguente notifica di risorsa di esempio, il valore del parametro type è create
; l'oggetto creato è un vulnerability
.
{
"type": "CREATE",
"vulnerability": {
"id": "70357d34-411d-3321-a60f-ede653897a55",
"name": "6557248 : server1@defected1.example.com",
"description": "Multiple vulnerabilities exist in the Apache Log4j (CVE-2022-23302, CVE-2022-23305, CVE-2022-23307) library used by IBM WebSphere Application Server in the Admin Console and UDDI Registry application. The same Apache library is also used by the IBM WebSphere Application Server Liberty for z/OS in features zosConnect-1.0 and zosConnect-1.2. All vulnerabilities have been addressed previously by removing all existing Apache Log4j versions.",
"assetId": "1a5d141a-3294-3ff3-9182-5ae1d4f3465d",
"securityBulletinId": "23c15e59-1ef9-3eb5-a175-0845597cdbc1",
"resolved": false,
"cves": [
{
"id": "CVE-2022-23302",
"description": "Apache Log4j could allow a remote authenticated attacker to execute arbitrary code on the system, caused by an unsafe deserialization in JMSSink. By sending specially-crafted JNDI requests using TopicConnectionFactoryBindingName configuration, an attacker could exploit this vulnerability to execute arbitrary code on the system.",
"cvssBaseScore": 8.8
},
{
"id": "CVE-2022-23305",
"description": "Apache Log4j is vulnerable to SQL injection. A remote attacker could send specially-crafted SQL statements to the JDBCAppender, which could allow the attacker to view, add, modify or delete information in the back-end database.",
"cvssBaseScore": 6.5
},
{
"id": "CVE-2022-23307",
"description": "Apache Log4j could allow a remote attacker to execute arbitrary code on the system, caused by an unsafe deserialization in the in Apache Chainsaw component. By sending specially-crafted input, an attacker could exploit this vulnerability to execute arbitrary code on the system.",
"cvssBaseScore": 9.8
}
],
"remediations": [
{
"startVersion": "9.0.0.0",
"endVersion": "9.0.5.10",
"operator": "OR",
"iFixes": [
"PH42762"
],
"fixPack": "9.0.5.11",
"additionalInstallationInstructions": "https://www.ibm.com/support/pages/node/6557248"
}
],
"links": {
"self": {
"rel": "self",
"href": "https://cpd-websphere-automation.apps.wsa-412.example.com/vulnerabilities/70357d34-411d-3321-a60f-ede653897a55",
"type": "application/json",
"title": "self"
},
"asset": {
"rel": "related",
"href": "https://cpd-websphere-automation.apps.wsa-412.example.com/assets/1a5d141a-3294-3ff3-9182-5ae1d4f3465d",
"type": "application/json",
"title": "asset"
},
"securityBulletin": {
"rel": "related",
"href": "https://cpd-websphere-automation.apps.wsa-412.example.com/bulletins/23c15e59-1ef9-3eb5-a175-0845597cdbc1",
"type": "application/json",
"title": "securityBulletin"
}
},
"created": "2023-05-17T10:10:29Z",
"createdBy": "vulnerability-manager",
"updated": "2023-05-17T10:10:29Z",
"updatedBy": "vulnerability-manager",
"secondsExposed": 1379
}
}
Le informazioni di interesse includono gli ID CVE, i punteggi CVSS, il server interessato, la descrizione della vulnerabilità e l' URL del bollettino di sicurezza.
Definizione del processo e del risultato previsto
Il risultato è che una destinazione webhook Slack riceve informazioni sui nuovi CVE di severità elevata e visualizza tali informazioni in un nuovo messaggio Slack.
- Aprire un browser Web per il builder Slack Block Kit.
https://app.slack.com/block-kit-builder/
- Utilizzare il builder del kit di blocchi per creare un messaggio che visualizza il testo nel formato desiderato. Questo messaggio Slack viene creato utilizzando il seguente esempio.
{ "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": ":alert1: WebSphere Automation detected a vulnerability for CVE <https://www.ibm.com/support/pages/node/6525706|CVE-2021-44228> (CVSS base score 10.0) on server *server1* on host *defected1.example.com*." } }, { "type": "divider" }, { "type": "section", "text": { "type": "mrkdwn", "text": "*CVE Information*\nApache Log4j could allow a remote attacker to execute arbitrary code on the system, caused by the failure to protect against attacker controlled LDAP and other JNDI related endpoints by JNDI features. By sending a specially crafted code string, an attacker could exploit this vulnerability to load arbitrary Java code on the server and take complete control of the system. Note: The vulnerability is also called Log4Shell or LogJam." } }, { "type": "divider" }, { "type": "actions", "elements": [ { "type": "button", "text": { "type": "plain_text", "text": "View Bulletin", "emoji": true }, "value": "click_me", "url": "https://www.ibm.com/support/pages/node/6525706" }, { "type": "button", "text": { "type": "plain_text", "text": "View All server1 CVEs", "emoji": true }, "value": "click_me_123", "url": "https://cpd-websphere-automation.example.com/websphereauto/websphere/1a5d141a-3294-3ff3-9182-5ae1d4f3465d/vulnerabilities/cves" } ] } ] }
- Dopo aver strutturato correttamente il messaggio Slack, è possibile sostituire le variabili utilizzando la sintassi Mustache. Effettuare queste sostituzioni per i parametri che si desidera inviare dall'evento WebSphere Automation .
{ "channel": "<your_Slack_channel>", "blocks": [ { "type": "header", "text": { "type": "plain_text", "text": "Vulnerability Detected" } }, { "type": "divider" }, { "type": "section", "text": { "type": "mrkdwn", "text": "{{icon}} WebSphere Automation detected a vulnerability for CVE <{{bulletinUrl}}|{{cveId}}> (CVSS base score {{cvssBaseScore}}) on {{#isJdk}}JDK *{{productName}}*{{/isJdk}}{{^isJdk}}server *{{serverName}}*{{/isJdk}} on host *{{hostName}}*." } }, { "type": "divider" }, { "type": "section", "text": { "type": "mrkdwn", "text": "*CVE Information*\n{{{@wsa_eq_cveSummary}}}" } }, { "type": "actions", "elements": [ { "type": "button", "text": { "type": "plain_text", "text": "View Bulletin" }, "value": "click_me", "url": "{{bulletinUrl}}" }{{^isJdk}}, { "type": "button", "text": { "type": "plain_text", "text": "View All CVEs for {{serverName}}" }, "value": "click_me_123", "url": "https://cpd-websphere-automation.example.com/websphereauto/websphere/{{serverId}}/vulnerabilities/cves" } {{/isJdk}} ] }, { "type": "divider" } ] }
Impostazione dell'azione webhook
Utilizza l'IU Swagger WebSphere Automation per creare un'azione webhook. Per ulteriori informazioni, vedere Creazione di un'azione webhook.
Nel parametro body , crea un elenco separato da virgole degli elementi JSON che hai creato nel Slack Block Kit Builder. Le virgolette nel valore del parametro del corpo devono essere precedute da un carattere di escape barra rovesciata. Utilizzare la notazione Mustache (doppie parentesi graffe) per i nomi di variabile creati.
{
"id": "74313a6b-a163-4f7d-833b-31bf4f12670a",
"name": "Vulnerability Slack Notification Action",
"description": "POSTs a notification to Slack when triggered",
"type": "webhook",
"enabled": true,
"configuration": {
"targetUrl": "https://hooks.slack.com/services/12345/12345/12345",
"method": "POST",
"contentType": "application/json",
"headers": [],
"body": "{ \"channel\": \"<your_Slack_channel>\", \"blocks\": [ { \"type\": \"header\", \"text\": { \"type\": \"plain_text\", \"text\": \"Vulnerability Detected\" } }, { \"type\": \"divider\" }, { \"type\": \"section\", \"text\": { \"type\": \"mrkdwn\", \"text\": \"{{icon}} WebSphere Automation detected a vulnerability for CVE <{{bulletinUrl}}|{{cveId}}> (CVSS base score {{cvssBaseScore}}) on {{#isJdk}}JDK *{{productName}}*{{/isJdk}}{{^isJdk}}server *{{serverName}}*{{/isJdk}} on host *{{hostName}}*.\" } }, { \"type\": \"divider\" }, { \"type\": \"section\", \"text\": { \"type\": \"mrkdwn\", \"text\": \"*CVE Information*\\n{{{@wsa_eq_cveSummary}}}\" } }, { \"type\": \"actions\", \"elements\": [ { \"type\": \"button\", \"text\": { \"type\": \"plain_text\", \"text\": \"View Bulletin\" }, \"value\": \"click_me\", \"url\": \"{{bulletinUrl}}\" }{{^isJdk}}, { \"type\": \"button\", \"text\": { \"type\": \"plain_text\", \"text\": \"View All CVEs for {{serverName}}\" }, \"value\": \"click_me_123\", \"url\": \"https://cpd-websphere-automation.example.com/websphereauto/websphere/{{serverId}}/vulnerabilities/cves\" } {{/isJdk}} ] }, { \"type\": \"divider\" } ] }"
}
}
Esecuzione del test dell'azione webhook
Per verificare l'azione webhook, apri l'IU WebSphere Automation Swagger e utilizza il controllo PATCH /action/{actionId} per passare i valori codificati a Slack. Per ulteriori informazioni, vedere Creazione di un'azione.
Immettere l'ID azione nel campo di testo actionId . Utilizza il valore actionId che l'IU Swagger ha assegnato all'azione quando l'hai creata.
Immettere il seguente codice JSON nel campo Corpo richiesta :
{
"operation": "invoke-action",
"variables": {
"hostName": "example.com",
"cveSummary": "Example CVE summary",
"bulletinUrl": "https://www.ibm.com/support/pages/node/6525706",
"cveId": "CVE-2021-44228",
"icon": ":alert1:",
"serverName": "server1",
"cvssBaseScore": "10",
"isJdk": "false",
"serverId": "1a5d141a-3294-3ff3-9182-5ae1d4f3465d",
"productName": "WebSphere Application Server"
}
}
Fare clic su Esegui.
Assicurarsi che il codice di risposta server abbia il valore 200
. Una risposta di successo ha anche"successful": truenel corpo della risposta.
Apri il canale Slack e conferma che è stato creato un nuovo messaggio.
Creazione del trigger di risorse
Seguire le istruzioni per creare un trigger di risorse. Fare riferimento al seguente trigger di risorse di esempio.
Imposta il valore del parametro actionId sull'ID azione assegnato all'azione dalla IU Swagger.
Nella sezione variableMappings , crea le variabili corrispondenti a quelle definite nella tabella azione e incidente. Per ogni variabile, creare espressioni JSONata che valutano un booleano https://try.jsonata.org/ o a un valore da passare al webhook.
{
"id": "46e65c6e-8c9d-4fe9-90fb-ac5ca2303fae",
"name": "Vulnerability Created Trigger",
"description": "Triggers the Slack Notification action when a vulnerability with a CVE that has a CVSS base score greater than 9 is created.",
"actionId": "<your_Slack_Notification_action_id>",
"type": "resource",
"enabled": true,
"configuration": {
"resourceType": "vulnerability",
"operation": "create"
},
"variableMappings": {
"hostName": "$asset.hostName",
"cveSummary": "($maxCvssBaseScore := $max(vulnerability.cves.cvssBaseScore); vulnerability.cves[cvssBaseScore = $maxCvssBaseScore][0].description)",
"bulletinUrl": "$bulletin.url",
"cveId": "($maxCvssBaseScore := $max(vulnerability.cves.cvssBaseScore); vulnerability.cves[cvssBaseScore = $maxCvssBaseScore][0].id)",
"icon": "($maxCvssBaseScore := $max(vulnerability.cves.cvssBaseScore); $maxCvssBaseScore > 0 and $maxCvssBaseScore <= 3.9 ? ':warning:' : ($maxCvssBaseScore >= 4 and $maxCvssBaseScore <= 6.9 ? ':standup_ibm_status_major_warning_orange:' : ($maxCvssBaseScore >= 7 and $maxCvssBaseScore <= 8.9 ? ':ibm-warning-filled:' : ':alert1:')))",
"serverName": "$asset.serverName",
"cvssBaseScore": "$number($max(vulnerability.cves.cvssBaseScore))",
"isJdk": "$asset.type = 'jdk'",
"serverId": "$asset.id",
"productName": "$asset.productName"
}
}
Le descrizioni per le varie espressioni JSONata sono le seguenti.
- cveSummary: la descrizione del CVE nella notifica della risorsa con il punteggio CVSS più alto.
- cveId: l'ID CVE per il CVE nella notifica della risorsa con il punteggio CVSS più alto.
- icon: un'icona che indica l'urgenza del CVE con il punteggio CVSS più alto; un simbolo di avviso viene visualizzato per un punteggio CVSS di 3.9 o inferiore, un'avvertenza principale da 4.0 a 6.9e un avviso per un valore superiore a 7.0
- cvssBaseScore: il punteggio CVSS più alto dei CVE nella notifica della risorsa.
Le seguenti variabili utilizzano variabili di contesto. Per ulteriori informazioni, vedere Risorsa trigger.
- isJDK: un valore booleano che viene valutato
true
se CVE è impostato in modo da influenzare Java Developer Kit. - productName: il nome del prodotto con la vulnerabilità.
- servername: il nome del server con la vulnerabilità.
- hostname: il nome host del runtime con la vulnerabilità.
- bulletinUrl: l' URL del bollettino di sicurezza relativo alla vulnerabilità.
Abilita il trigger di risorse utilizzando la IU Swagger per eseguire il proprio codice JSON. Per ulteriori informazioni, vedere Creazione di un trigger di risorse.