Gå til hovedinnhold

ServiceNow

fremforge kan opprette en ServiceNow-hendelse for hver sikkerhetshendelse: et nytt kritisk eller høyt funn, et treff på skadevare, en blokkert pull, et brudd på en policy eller en risikoaksept som har utløpt. Målet sender rett til Table API (POST /api/now/table/incident), så ServiceNow trenger bare en integrasjonsbruker, og verken et skriptet REST-API eller en MID-server.

1. ServiceNow-siden: en integrasjonsbruker

  1. Opprett en bruker for fremforge, for eksempel fremforge.integration. Kryss av for Web service access only.
  2. Gi den en rolle som kan opprette hendelser via Table API, vanligvis itil, eller en smalere egendefinert rolle med create på incident.
  3. Velg hvordan fremforge skal autentisere seg:
    • Basic: brukerens navn og passord, sendt som Authorization: Basic <base64 of user:password>.
    • OAuth bearer: et OAuth-token for den brukeren, sendt som Authorization: Bearer <token>. Et OAuth-tilgangstoken i ServiceNow utløper, så et token som utløper, må byttes ut på målet før det går ut. Basic er det enkleste valget for en maskinbruker.
  4. Valgfritt: noter sys_id for tildelingsgruppen som skal motta hendelsene, og for innmelderen som skal registreres.

ServiceNow må godta forespørsler fra fremforges utgående adresse. Hvis instansen din begrenser kilde-IP-er, ber du support om gjeldende adresse.

2. fremforge-siden: et mål 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

Verdien i auth_header lagres kryptert og vises aldri igjen. Svaret sier "auth_header_set": true. For å bytte passord sender du en PATCH med en ny auth_header.

Send deretter en testhendelse og les 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"

En 201 i response_status betyr at ServiceNow opprettet hendelsen. En 401 betyr at legitimasjonen er feil. En 403 betyr at brukeren mangler rollen som trengs for å opprette hendelser.

Hva hendelsen inneholder

Felt i hendelsenVerdi
short_description[fremforge] etterfulgt av tittelen på hendelsen, for eksempel [fremforge] CVE-2026-12345 in lodash 4.17.20 (høyst 160 tegn)
descriptionNavn på hendelsen, organisasjon, repository, alvorlighetsgrad, tidspunkt, korrelasjonsnøkkel, en lenke til fremforge-konsollen og detaljene om hendelsen som JSON
urgency, impact1 for kritisk, 2 for høy, ellers 3
correlation_idfremforge: etterfulgt av funnets korrelasjonsnøkkel. En nøkkel som er for lang for feltet, erstattes av en stabil SHA-256 av den
correlation_displayfremforge
assignment_group, caller_id, category, subcategoryBare når de er satt på målet (objektet servicenow)

ServiceNow beregner prioriteten til hendelsen fra urgency og impact som vanlig.

Hver hendelse oppretter en ny ServiceNow-hendelse. Table API oppdaterer ikke en eksisterende post. Hendelser om samme funn har samme correlation_id. Ett eksempel er et funn som senere følges av at en risikoaksept for det utløper. Bruk den verdien i en business rule eller et listefilter i ServiceNow for å gruppere dem. Timesgrensen begrenser hvor mange hendelser ett mål kan opprette per time. Når grensen er nådd, kommer det én oppsummerende hendelse etter timen.

Forespørselen er også signert (X-Fremforge-Signature). Table API ignorerer signaturen; det er auth-headeren som autentiserer forespørselen.

Alternativ: egen logikk i et Scripted REST API

For å oppdatere en eksisterende hendelse i stedet for å opprette en ny, eller for å tilordne felt på en annen måte, beholder du formatet Generic på målet og peker det mot en Scripted REST API-ressurs. Skriptet mottar den generiske bodyen. Slå opp en åpen hendelse etter correlation_id og oppdater den, eller sett inn en ny. For å verifisere signaturen i skriptet beregner du HMAC-SHA256 over <X-Fremforge-Timestamp>.<raw body> med målets signeringshemmelighet og sammenligner med v1-delen av X-Fremforge-Signature. Beskytt ressursen med den samme integrasjonsbrukeren og auth_header.

Relatert