Gå til hovedindhold

ServiceNow

fremforge kan oprette en ServiceNow-incident for hver sikkerhedshændelse: et nyt kritisk eller højt fund, et malwarematch, et blokeret pull, en politikovertrædelse eller en udløbet risikoaccept. Destinationen sender direkte til Table API’et (POST /api/now/table/incident), så ServiceNow skal kun bruge en integrationsbruger – hverken et scripted REST API eller en MID-server.

1. ServiceNow-siden: en integrationsbruger

  1. Opret en bruger til fremforge, f.eks. fremforge.integration. Sæt flueben i Web service access only.
  2. Giv brugeren en rolle, der må oprette incidents via Table API’et, typisk itil, eller en snævrere brugerdefineret rolle med create på incident.
  3. Vælg, hvordan fremforge skal autentificere sig:
    • Basic: brugerens navn og adgangskode, sendt som Authorization: Basic <base64 of user:password>.
    • OAuth bearer: et OAuth-token til brugeren, sendt som Authorization: Bearer <token>. Et OAuth-adgangstoken fra ServiceNow udløber, så et udløbende token skal udskiftes på destinationen, før det løber ud. Basic er det enkleste valg til en maskinbruger.
  4. Valgfrit: notér sys_id for den assignment group, der skal modtage incidents, og for den caller, der skal registreres.

ServiceNow skal acceptere forespørgsler fra fremforges udgående adresse. Hvis din instans begrænser kilde-IP’er, så spørg supporten om den aktuelle adresse.

2. fremforge-siden: en destination i ServiceNow-format

Med API’et (scope webhooks:write):

AUTH="Basic $(printf '%s' 'fremforge.integration:<password>' | base64)"

curl -sS -X POST "https://frem.sh/_app/api/v1/orgs/acme/webhooks/destinations" \
  -H "Authorization: Bearer $FREMFORGE_TOKEN" -H "Content-Type: application/json" \
  -d @- <<EOF
{
  "name": "ServiceNow incidents",
  "target_url": "https://acme.service-now.com/api/now/table/incident",
  "events": ["security.finding.created", "security.malware.matched",
             "security.pull.blocked", "security.policy.violation",
             "security.exception.expired"],
  "payload_format": "servicenow",
  "security_min_severity": "critical",
  "security_hourly_cap": 50,
  "servicenow": { "assignment_group": "<sys_id>", "category": "security" },
  "auth_header": { "name": "Authorization", "value": "$AUTH" }
}
EOF

Værdien i auth_header gemmes krypteret og vises aldrig igen. Svaret indeholder "auth_header_set": true. Skift adgangskoden ved at sende en PATCH med en ny auth_header.

Send derefter en testincident, og læs resultatet:

curl -sS -X POST "https://frem.sh/_app/api/v1/orgs/acme/webhooks/destinations/$ID/test" \
  -H "Authorization: Bearer $FREMFORGE_TOKEN"
curl -sS "https://frem.sh/_app/api/v1/orgs/acme/webhooks/deliveries?destination_id=$ID&limit=1" \
  -H "Authorization: Bearer $FREMFORGE_TOKEN"

201 i response_status betyder, at ServiceNow har oprettet incidenten. 401 betyder, at legitimationsoplysningerne er forkerte. 403 betyder, at brugeren mangler rollen til at oprette incidents.

Hvad incidenten indeholder

Felt på incidentenVærdi
short_description[fremforge] efterfulgt af hændelsens titel, f.eks. [fremforge] CVE-2026-12345 in lodash 4.17.20 (højst 160 tegn)
descriptionHændelsens navn, organisation, repository, alvorlighed, tidspunkt, korrelationsnøgle, et link til fremforge-konsollen og hændelsens detaljer som JSON
urgency, impact1 ved kritisk, 2 ved høj, ellers 3
correlation_idfremforge: efterfulgt af fundets korrelationsnøgle. En nøgle, der er for lang til feltet, erstattes af en stabil SHA-256 af den
correlation_displayfremforge
assignment_group, caller_id, category, subcategoryKun når de er sat på destinationen (objektet servicenow)

ServiceNow beregner incidentens prioritet ud fra urgency og impact som normalt.

Hver hændelse opretter en ny incident. Table API’et opdaterer ikke en eksisterende post. Hændelser om det samme fund har samme correlation_id. Et eksempel er et fund, der senere efterfølges af, at en risikoaccept på det udløber. Brug den værdi i en business rule eller et listefilter i ServiceNow til at gruppere dem. Timeloftet begrænser, hvor mange incidents én destination kan oprette i timen. Når loftet er nået, kommer der én opsummerende incident efter timen.

Forespørgslen er også signeret (X-Fremforge-Signature). Table API’et ignorerer signaturen; det er auth-headeren, der autentificerer forespørgslen.

Alternativ: din egen logik i et Scripted REST API

Hvis du vil opdatere en eksisterende incident i stedet for at oprette en ny, eller mappe felterne anderledes, så behold destinationens format som Generic, og peg den mod en Scripted REST API-ressource. Scriptet modtager den generiske body. Slå en åben incident op på correlation_id, og opdatér den, eller indsæt en ny. Hvis scriptet skal verificere signaturen, så beregn HMAC-SHA256 over <X-Fremforge-Timestamp>.<raw body> med destinationens signeringssecret, og sammenlign med v1-delen af X-Fremforge-Signature. Beskyt ressourcen med den samme integrationsbruger og auth_header.

Relateret