新しい脆弱性が検出された場合の Slack 通知の作成

WebSphere Automation Swagger UI、Slack ブロック・キット・ビルダー、および Mustache 構文を使用して、Slack メッセージを生成する通知を Web フックに送信するプロセスを作成します。 この通知には、 WebSphere Automation が検出した新しい脆弱性の詳細が含まれます。

開始前に

変数や条件分岐を実装する場合は、必ずその仕組みを理解している マスタッシュ構文 外部リンク・アイコンことを確認してください。

WebSphere Automation リソース通知の調査

このチュートリアルの予期される結果は、 WebSphere Automationで新しく作成されたリソース通知から渡された情報を含むメッセージが Slack に表示されることです。 このチュートリアルの場合、リソース通知には、管理対象サーバーで新しい脆弱性が検出されたときの新しい脆弱性レコードの作成に関する詳細が含まれています。 以下のリソース通知の例では、 type パラメーターの値は createです。作成されるオブジェクトは 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
    }
}

興味深い情報には、CVE ID、CVSS スコア、影響を受けるサーバー、脆弱性の説明、セキュリティ勧告URL などが含まれます。

プロセスと予期される結果の定義

その結果、Slack Webhook ターゲットが新しい重大度の高い CVE に関する情報を受け取り、その情報を新しい Slack メッセージに表示します。

  1. Web ブラウザーで Slack ブロック・キット・ビルダーを開きます。
    https://app.slack.com/block-kit-builder/
  2. ブロック・キット・ビルダーを使用して、希望する形式でテキストを表示するメッセージを作成します。 この Slack メッセージは、以下の例を使用して構成されます。
    管理対象サーバーで検出された脆弱性に関する Slack メッセージの例
    {
    	"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. Slack メッセージが正しく構造化されたら、Mustache 構文を使用して変数を置換できます。 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"
          }
        ]
      }

Webhook アクションのセットアップ

WebSphere Automation Swagger UI を使用して、Webhook アクションを作成します。 詳細については、 Webhookアクションの作成を参照してください。

body パラメーターで、Slack ブロック・キット・ビルダーで作成した JSON エレメントのコンマ区切りリストを作成します。 本体パラメーターの値の引用符は、円記号文字でエスケープする必要があります。 作成した変数名には Mustache 表記 (二重中括弧) を使用します。

{
    "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 アクションのテスト

Webhook アクションをテストするには、 WebSphere Automation Swagger UI を開き、 PATCH /action/{actionId} コントロールを使用して、ハードコーディングされた値を Slack に渡します。 詳細については、 「アクションの作成」 を参照してください。

actionId テキスト・フィールドにアクション ID を入力します。 Swagger UI が作成時にアクションに割り当てた actionId 値を使用します。

以下の JSON コードを 「要求本文」 フィールドに入力します。

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

「実行」をクリックします。

サーバー応答コードの値が 200であることを確認してください。 成功した応答には以下も含まれます。"successful": true応答本体の中にあります。

Slack チャネルを開き、新規メッセージが作成されたことを確認します。

リソース・トリガーの作成

指示に従ってリソーストリガーを作成してください。 以下のリソース・トリガーの例を参照してください。

actionId パラメーターの値を、Swagger UI によってアクションに割り当てられたアクション ID に設定します。

variableMappings セクションで、アクションおよびインシデント・テーブルで定義されている変数と一致する変数を作成します。 各変数に対して、ブールhttps://try.jsonata.org/ 外部リンク・アイコン 値またはWebhookに渡す値として評価されるJSONata式を作成します。

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

各種 JSONata 式の説明は以下のとおりです。

  • cveSummary: 最も高い CVSS スコアを持つリソース通知内の CVE の説明。
  • cveId: 最も高い CVSS スコアを持つリソース通知内の CVE の CVE ID。
  • icon: CVSS スコアが最も高い CVE の緊急度を示すアイコン。CVSS スコアが 3.9 以下の場合は警告シンボルが表示され、 4.0 から 6.9の場合は主要な警告が表示され、 7.0 より大きい場合はアラートが表示されます。
  • cvssBaseScore: リソース通知内の CVE の最も高い CVSS スコア。

以下の変数はコンテキスト変数を使用します。 詳細については、 トリガー リソースを参照してください。

  • isJDK: CVE が Java Developer Kit に影響を与えるように設定されている場合に true と評価されるブール値。
  • productName: 脆弱性がある製品の名前。
  • servername: 脆弱性があるサーバーの名前。
  • hostname: 脆弱性のあるランタイムのホスト名。
  • bulletinUrl:脆弱性に関するセキュリティ勧告URL。

Swagger UI を使用して JSON コードを実行することにより、リソース・トリガーを有効にします。 詳細については、 「リソーストリガーの作成」 を参照してください。

次のタスク

リソース・トリガーが有効になったため、 WebSphere Automation が管理対象資産で新規 CVE を検出した場合にのみ、Slack 通知アクションが呼び出されます。 WebSphere Automation UI を使用してそのような CVE のフィックスを最近インストールした場合は、 WebSphere Automation を使用してそのフィックスをアンインストールし、適切な条件を作成することができます。 Slack 通知アクションが適切に動作していることを確認した後、フィックスを再インストールして機密漏れを回避します。