Criando uma notificação do Slack quando novas vulnerabilidades são detectados..

Usando a IU do Swagger WebSphere Automation , o construtor Slack Block Kit e a sintaxe Mustache, crie um processo que envie uma notificação para um webhook que resulte em uma mensagem do Slack. A notificação contém os detalhes de qualquer nova vulnerabilidade detectada pelo WebSphere Automation .

Antes de iniciar

Se você planeja implementar variáveis ou processamento condicional, certifique-se de estar familiarizado com a sintaxe do Ícone de link externoMustache.

Examinando a notificação de recurso do WebSphere Automation

O resultado esperado deste tutorial é que o Slack exibe mensagens com informações que são transmitidas de notificações de recurso recém-criadas no WebSphere Automation. Para este tutorial, a notificação de recurso contém os detalhes para a criação de um novo registro de vulnerabilidade quando uma nova vulnerabilidade é detectada em um servidor gerenciado Na notificação de recurso de exemplo a seguir, o valor do parâmetro type é create; o objeto criado é um 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
    }
}

As informações de interesse incluem os IDs CVE, as pontuações CVSS, o servidor afetado, a descrição da vulnerabilidade e o URL do boletim de segurança.

Definindo o processo e o resultado esperado

O resultado é ter um destino de webhook do Slack recebendo informações sobre novos CVE de alta gravidade e exibir essas informações em uma nova mensagem do Slack.

  1. Abra um navegador da web para o construtor do Slack Block Kit
    https://app.slack.com/block-kit-builder/
  2. Utilize o construtor Block Kit para construir uma mensagem que exibe texto no formato que você desejar. Essa mensagem do Slack é construída usando o exemplo a seguir:
    Mensagem de exemplo do Slack sobre uma vulnerabilidade detectada em um servidor gerenciado
    {
    	"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. Após ter a mensagem do Slack estruturada corretamente, é possível substituir variáveis usando a sintaxe Mustache. Faça essas substituições para os parâmetros que você deseja enviar do 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"
          }
        ]
      }

Configurando a ação do webhook

Use a UI do Swagger WebSphere Automation para criar uma ação de webhook. Para obter mais informações, consulte como criar uma ação de webhook.

No parâmetro body , crie uma lista separada por vírgula dos elementos JSON que você criou no Slack Block Kit Builder. Aspas no valor do parâmetro body devem ser escapadas com o caractere de barra invertida. Use a notação Mustache (chaves duplas) para os nomes de variáveis criados.

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

Testando a ação do webhook

Para testar a ação de webhook, abra a UI do Swagger WebSphere Automation e use o controle PATCH /action/{actionId} para transmitir valores codificados permanentemente para o Slack. Para obter mais informações, consulte Criando uma ação.

Insira o ID de ação no campo de texto actionId . Use o valor actionId que a UI do Swagger designou à ação quando você a criou.

Insira o código JSON a seguir no campo Corpo da solicitação :

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

Clique em Executar..

Assegure-se de que o código de resposta do servidor tenha um valor de 200. Uma resposta bem-sucedida também tem"successful": trueno corpo de resposta

Abra o canal Slack e confirme se uma nova mensagem foi criada.

Criando o acionador de recurso

Siga as instruções para criar um gatilho de recurso. Consulte o acionador de recurso de exemplo a seguir

Configure o valor do parâmetro actionId para o ID de ação designado à ação pela IU do Swagger.

Na seção variableMappings , crie variáveis correspondentes àquelas definidas na tabela de ações e incidentes. Para cada variável, crie expressões JSONata que avaliem um booleano https://try.jsonata.org/Ícone de link externo ou um valor que você deseja passar para o 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"
    }
}

As descrições das várias expressões JSONata são as seguintes.

  • cveSummary: A descrição do CVE na notificação de recurso com a pontuação CVSS mais alta.
  • cveId: o ID do CVE para o CVE na notificação de recurso com a maior pontuação do CVSS.
  • icon: um ícone que é indicativo da urgência do CVE com a pontuação mais alta do CVSS; um símbolo de aviso é exibido para uma pontuação do CVSS de 3.9 ou menos, um aviso principal para 4.0 a 6.9e um alerta para maior que 7.0
  • cvssBaseScore: A pontuação CVSS mais alta dos CVEs na notificação de recursos.

As seguintes variáveis usam variáveis de contexto. Para obter mais informações, consulte Recurso de gatilho.

  • isJDK: um booleano que será avaliado como true se o CVE for configurado como afetando o Java Developer Kit.
  • productName: o nome do produto com a vulnerabilidade.
  • servername: o nome do servidor com a vulnerabilidade.
  • hostname: o nome do host do tempo de execução com a vulnerabilidade.
  • bulletinUrlURL do boletim de segurança da vulnerabilidade.

Ative o acionador de recurso usando a IU do Swagger para executar seu código JSON Para obter mais informações, consulte Criando um gatilho de recurso.

O quê fazer em seguida

Agora que o acionador de recurso está ativado, a ação de notificação do Slack é chamada somente quando o WebSphere Automation detecta um novo CVE em um ativo gerenciado Se você tiver instalado recentemente uma correção para tal CVE usando a UI do WebSphere Automation , será possível usar WebSphere Automation para desinstalar a correção para criar as condições apropriadas. Depois de verificar a operação apropriada da ação de notificação do Slack, reinstale a correção para evitar a exposição