Slack-Benachrichtigung erstellen, wenn neue Schwachstellen erkannt werden

Erstellen Sie mithilfe der WebSphere Automation -Swagger-Benutzerschnittstelle, des Builders für Slack Block Kit und der Mustache-Syntax einen Prozess, der eine Benachrichtigung an einen Webhook sendet, der zu einer Slack-Nachricht führt. Die Benachrichtigung enthält die Details zu allen neuen Schwachstellen, die WebSphere Automation erkennt.

Vorbereitende Schritte

Wenn Sie planen, Variablen oder bedingte Verarbeitung zu implementieren, stellen Sie sicher, dass Sie mit der Mustache-Syntax Symbol für externen Link vertraut sind.

WebSphere Automation -Ressourcenbenachrichtigung untersuchen

Das erwartete Ergebnis dieses Lernprogramms ist, dass Slack Nachrichten mit Informationen anzeigt, die von neu erstellten Ressourcenbenachrichtigungen in WebSphere Automationübergeben werden. In diesem Lernprogramm enthält die Ressourcenbenachrichtigung die Details für die Erstellung eines neuen Schwachstellendatensatzes, wenn eine neue Schwachstelle auf einem verwalteten Server erkannt wird. In der folgenden Beispielressourcenbenachrichtigung hat der Parameter type den Wert create. Das erstellte Objekt ist ein 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
    }
}

Zu den Informationen, die von Interesse sind, gehören die CVE-IDs, die CVSS-Scores, der betroffene Server, die Beschreibung der Schwachstelle und URL des Sicherheitsbulletins.

Prozess und erwartetes Ergebnis definieren

Das Ergebnis ist, dass ein Slack-Webhook-Ziel Informationen zu neuen CVEs mit hohem Schweregrad empfängt und diese Informationen in einer neuen Slack-Nachricht anzeigt.

  1. Öffnen Sie den Builder für Slack Block Kit in einem Web-Browser.
    https://app.slack.com/block-kit-builder/
  2. Mit dem Builder für Blockkit können Sie eine Nachricht erstellen, die Text in dem von Ihnen gewünschten Format anzeigt. Diese Slack-Nachricht wird anhand des folgenden Beispiels erstellt.
    Beispiel einer Slack-Nachricht zu einer Sicherheitslücke, die in einem verwalteten Server erkannt wird
    {
    	"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"
    				}
    			]
    		}
    	]
    }
  3. Nachdem Sie die Slack-Nachricht korrekt strukturiert haben, können Sie Variablen mithilfe der Mustache-Syntax ersetzen. Nehmen Sie diese Ersetzungen für die Parameter vor, die Sie aus dem Ereignis WebSphere Automation senden wollen.
    {
        "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"
          }
        ]
      }

Webhook-Aktion einrichten

Verwenden Sie die Swagger-Benutzerschnittstelle von WebSphere Automation , um eine Webhook-Aktion zu erstellen. Weitere Informationen finden Sie unter Erstellen einer Webhook-Aktion.

Erstellen Sie im Parameter body eine durch Kommas getrennte Liste der JSON-Elemente, die Sie im Slack Block Kit Builder erstellt haben. Anführungszeichen im Wert des Parameters 'body' müssen mit einem Backslash als Escapezeichen versehen werden. Verwenden Sie für die von Ihnen erstellten Variablennamen die Mustache-Notation (doppelte geschweifte Klammern).

{
    "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\" } ] }"
    }
}

Webhook-Aktion testen

Zum Testen der Webhook-Aktion öffnen Sie die Swagger-Benutzerschnittstelle von WebSphere Automation und verwenden das Steuerelement PATCH /action/{actionId} , um fest codierte Werte an Slack zu übergeben. Weitere Informationen finden Sie unter Erstellen einer Aktion.

Geben Sie die Aktions-ID in das Textfeld actionId ein. Verwenden Sie den Wert actionId , den die Swagger-Benutzerschnittstelle bei der Erstellung der Aktion zugeordnet hat.

Geben Sie den folgenden JSON-Code in das Feld Anforderungshauptteil ein:

{
   "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"
   }
}

Klicken Sie auf Ausführen.

Stellen Sie sicher, dass der Serverantwortcode den Wert 200hat. Eine erfolgreiche Antwort hat auch"successful": trueim Antworthauptteil.

Öffnen Sie den Slack-Kanal und bestätigen Sie, dass eine neue Nachricht erstellt wird.

Erstellen des Ressourcenauslösers

Folgen Sie den Anweisungen, um einen Ressourcenauslöser zu erstellen. Siehe das folgende Beispiel für einen Ressourcenauslöser.

Setzen Sie den Wert des Parameters actionId auf die Aktions-ID, die der Aktion von der Swagger-Benutzerschnittstelle zugeordnet wird.

Erstellen Sie im Abschnitt variableMappings Variablen, die denen entsprechen, die in der Aktions-und Vorfalltabelle definiert sind. Erstellen Sie für jede Variable JSONata-Ausdrücke, die einen booleschen Wert https://try.jsonata.org/ Symbol für externen Link oder einen Wert auswerten, den Sie an den Webhook übergeben wollen.

{
    "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"
    }
}

Die Beschreibungen für die verschiedenen JSONata-Ausdrücke lauten wie folgt:

  • cveSummary: Die Beschreibung der CVE in der Ressourcenbenachrichtigung mit der höchsten CVSS-Bewertung
  • cveId: Die CVE-ID für das CVE in der Ressourcenbenachrichtigung mit der höchsten CVSS-Bewertung.
  • icon: Ein Symbol, das auf die Dringlichkeit der CVE mit der höchsten CVSS-Bewertung hinweist. Für eine CVSS-Bewertung von 3.9 oder niedriger wird ein Warnsymbol angezeigt, für 4.0 bis 6.9eine schwerwiegende Warnung und für mehr als 7.0
  • cvssBaseScore: Die höchste CVSS-Bewertung der CVEs in der Ressourcenbenachrichtigung.

Die folgenden Variablen verwenden Kontextvariablen. Weitere Informationen finden Sie unter Ressource auslösen.

  • isJDK: Ein boolescher Wert, der mit true ausgewertet wird, wenn das CVE als für das Java Developer Kit relevant definiert ist.
  • productName: Der Name des Produkts mit der Sicherheitslücke.
  • servername: Der Name des Servers mit der Sicherheitslücke.
  • hostname: Der Hostname der Laufzeit mit der Sicherheitslücke.
  • bulletinUrl: URL für das Sicherheitsbulletin für die Schwachstelle.

Aktivieren Sie den Ressourcenauslöser über die Swagger-Benutzerschnittstelle, um den zugehörigen JSON-Code auszuführen. Weitere Informationen finden Sie unter Erstellen eines Ressourcen-Triggers.

Nächste Schritte

Nachdem der Ressourcenauslöser aktiviert ist, wird die Slack-Benachrichtigungsaktion nur aufgerufen, wenn WebSphere Automation eine neue CVE in einem verwalteten Asset erkennt. Wenn Sie kürzlich einen Fix für eine solche CVE über die WebSphere Automation -Benutzerschnittstelle installiert haben, können Sie den Fix mithilfe von WebSphere Automation deinstallieren, um die richtigen Bedingungen zu erstellen. Nachdem Sie den ordnungsgemäßen Betrieb der Slack-Benachrichtigungsaktion überprüft haben, installieren Sie den Fix erneut, um die Sicherheitslücke zu schließen.