§1 — SecOps overview: SIR + VR + TI + CTD
At a glance — one platform, four missions
Security Incident Response — cases, MITRE, playbooks, containment tasks tied to CIs and IoCs.
Vulnerability Response — CVE master, per-asset vulnerable items, assignment, remediation change, verify, close.
Threat Intelligence (IoC/STIX) + Configuration Compliance (CIS/SCAP) feeding prioritization and SIR enrichment.
SIR — Security Incident Response
- Plugin:
com.snc.security_incident - Tables:
sn_si_incident, tasks, observables - Workspace: SIR agent / analyst view
- Automation: Playbooks (Workflow Studio), not legacy WF for new
VR — Vulnerability Response (VRO)
- Plugin:
com.snc.vulnerability - Master + item:
sn_vul_vulnerability,sn_vul_vulnerable_item - Import: IntegrationHub spokes + import sets
- Outcome: Change / remediation task → closed VI
TI + CTD
- TI:
com.snc.threat.intel— indicators, feeds - CTD:
com.snc.sn_vul_config_test— benchmarks - Cross-link: exploit intel → VR priority; CTD fail → VI
- Roles: separate from ITSM admin — use SecOps groups
| App | Primary persona | Typical entry | Plugin (activate on PDI) |
|---|---|---|---|
| SIR | SOC tier 1–3 | {BASE}/now/sir/workspace | com.snc.security_incident |
| VR / VRO | Vuln manager · patch owner | {BASE}/now/vulnerability/overview | com.snc.vulnerability |
| TI | Threat hunter | {BASE}/sn_ti_indicator_list.do | com.snc.threat.intel |
| CTD | Compliance engineer | {BASE}/sn_vul_ctd_test_list.do | com.snc.sn_vul_config_test |
§2 — Full VRO description cycle (scanner → close)
2.1 Scanner → import
Production: IntegrationHub spoke (Qualys, Tenable, Rapid7, CrowdStrike VM, Microsoft Defender) schedules pull or receives push. PDI lab: CSV/XML import set mimics the same transform targets.
2.2 Vulnerability master (CVE catalog)
sn_vul_vulnerability holds one record per CVE (or vendor vuln ID): title, CVSS, published dates, exploit flags, solutions references. Many VIs point to one master.
2.3 Vulnerable item (asset × vulnerability)
sn_vul_vulnerable_item is the work unit: state, priority, risk score, assignment group, link to cmdb_ci, link to master vulnerability, remediation dates.
2.4 Assignment → remediation change → close
Close criteria (lab): VI state Closed when scanner no longer reports finding on that CI or accepted risk with approval (deferral workflow). Never close master while open VIs exist unless retiring CVE record intentionally.
Common PDI mistake: Import succeeds but VI has empty cmdb_ci — fix IRE identification or manual CI match before testing assignment rules.
2.5 Supporting VR objects in the cycle
sn_vul_entry— raw/normalized entries from imports before master/VI upsert.sn_vul_software— software products tied to findings (library / package context).sn_vul_solution— vendor fix text, KB, patch links referenced from master/VI.sn_vul_third_party_entry— NVD/exploit intel overlays (exploit available boosts priority).
2.6 Cross-app touchpoints
Example: default credentials VI may auto-create SIR; TI indicator on C2 IP enriches SIR; CTD CIS failure creates configuration-related VI.
§3 — Related tables (purpose + CMDB / SIR / TI links)
| Table | Role in VRO | Key relationships | List URL |
|---|---|---|---|
sn_vul_vulnerability |
CVE / vuln master catalog; CVSS, title, global status | 1:N → sn_vul_vulnerable_item; solutions; third-party intel |
{BASE}/sn_vul_vulnerability_list.do |
sn_vul_vulnerable_item |
Per-asset finding; assignment, SLA, remediation state | → sn_vul_vulnerability, → cmdb_ci, → change/task |
{BASE}/sn_vul_vulnerable_item_list.do |
sn_vul_entry |
Intermediate import/normalized rows from scanners | Feeds transform → master/VI | {BASE}/sn_vul_entry_list.do |
sn_vul_software |
Software/component implicated in findings | Links entries/VIs to product versions | {BASE}/sn_vul_software_list.do |
sn_vul_third_party_entry |
External intel (exploit status, references) | Matched on CVE; drives risk score | {BASE}/sn_vul_third_party_entry_list.do |
sn_vul_assignment_rule |
Auto-route VIs by CI class, tag, location, severity | Sets group/user on insert/update | {BASE}/sn_vul_assignment_rule_list.do |
sn_vul_solution |
Remediation guidance (patch, config, workaround) | Referenced from vulnerability/VI | {BASE}/sn_vul_solution_list.do |
sn_vul_remediation_task |
Work breakdown for fix (may precede change) | Parent VI; assigned owner tasks | {BASE}/sn_vul_remediation_task_list.do |
sn_si_incident |
Security incident when exploit/active threat | Related CIs overlap with VI cmdb_ci | {BASE}/sn_si_incident_list.do |
sn_ti_indicator |
IoC (IP, hash, domain) for hunt/enrichment | SIR observables; optional VR context | {BASE}/sn_ti_indicator_list.do |
cmdb_ci (+ classes) |
Asset anchor for every VI; criticality drives priority | IRE identification from scan host keys | {BASE}/cmdb_ci_list.do |
change_request |
Controlled remediation window | Linked from VI / vulnerability group | {BASE}/change_request_list.do |
// PDI: prove VI → CI join (Scripts - Background)
var vi = new GlideRecord('sn_vul_vulnerable_item');
vi.addNotNullQuery('cmdb_ci');
vi.setLimit(5);
vi.query();
while (vi.next()) {
gs.info(vi.number + ' → ' + vi.cmdb_ci.getDisplayValue() +
' | CVE ' + vi.vulnerability.cve_id);
}
§4 — Direct {BASE} URLs (major pages)
| Area | Navigation (classic) | Direct URL |
|---|---|---|
| VR Workspace | All → Vulnerability Response → Overview | {BASE}/now/vulnerability/overview |
| SIR Workspace | Security Incident Response workspace | {BASE}/now/sir/workspace |
| Vulnerabilities (master) | VR → Vulnerabilities | {BASE}/sn_vul_vulnerability_list.do |
| Vulnerable Items | VR → Vulnerable Items | {BASE}/sn_vul_vulnerable_item_list.do |
| Assignment rules | VR → Administration → Assignment Rules | {BASE}/sn_vul_assignment_rule_list.do |
| Remediation tasks | VR → Remediation Tasks | {BASE}/sn_vul_remediation_task_list.do |
| Security incidents | SecOps → Incidents | {BASE}/sn_si_incident_list.do |
| TI indicators | Threat Intelligence → Indicators | {BASE}/sn_ti_indicator_list.do |
| CTD tests | Configuration Compliance | {BASE}/sn_vul_ctd_test_list.do |
| CTD results | Compliance results | {BASE}/sn_vul_ctd_result_list.do |
| Guided Setup (SecOps) | Guided Setup application | {BASE}/now/guided-setup |
| Flow Designer | Process Automation → Flow Designer | {BASE}/now/flow-designer |
| Flows (list) | Process Automation → Flows | {BASE}/sys_hub_flow_list.do |
| Playbooks (SIR) | Workflow Studio | {BASE}/now/workflow-studio/home |
| IntegrationHub spokes | IntegrationHub → Spokes | {BASE}/sys_hub_spoke_list.do |
| Connections | IntegrationHub → Connections | {BASE}/sys_hub_connection_list.do |
| Plugins (activate VR) | System Definition → Plugins | {BASE}/sys_plugins_list.do |
| CMDB CIs | Configuration → Computers / Servers | {BASE}/cmdb_ci_server_list.do |
| IRE identifiers | CMDB → Identification/Reconciliation | {BASE}/cmdb_identifier_list.do |
| SecOps PA dashboard | Performance Analytics | {BASE}/$pa_dashboard.do |
| Roles (SecOps) | User Administration → Roles | {BASE}/sys_user_role_list.do |
| Groups (owners) | User Administration → Groups | {BASE}/sys_user_group_list.do |
VR Workspace
Analyst queue · aging · assignment
Open →Assignment rules
Implement routing matrix
Open →Flow Designer
Auto-assign · change · notify
Open →Scanner spokes
Vendor integration
Open →CMDB servers
CI targets for VIs
Open →Changes
Remediation execution
Open →SECOPS.html
Full module reference (AR+EN)
Local doc →SDK docs
Scoped dev boundaries
Local doc →§5 — PDI lab steps (SOC analyst + implementer)
Lab A — Enable SecOps stack
- Open VR + SIR + TI + CTD plugins; activate (PDI may take several minutes).
- Run Guided Setup SecOps/Vulnerability tiles until green checks (groups, properties, sample data if offered).
- Create groups:
Vulnerability Managers,Unix Admins,Windows Adminsvia Groups; assign test users. - Confirm roles: e.g.
sn_vul.vulnerability_read,sn_vul.vulnerability_write(names vary by version — search role list).
Lab B — CMDB anchor (before scan data)
- Create or pick two servers in cmdb_ci_server; set
name,ip_address,business_criticality. - Note FQDN/IP — import transform will match on these keys.
- Optional: open IRE identifiers and trace which fields identify a Linux server.
Lab C — Simulate scanner import
- Locate VR import set table (often vendor-specific staging) via tables sn_vul% or use OOB sample import if Guided Setup loaded one.
- Load 2 rows: same CVE, two different hostnames matching your CIs.
- Run transform; open Vulnerabilities — expect one master.
- Open Vulnerable Items — expect two VIs with CI populated.
// Optional: adjust risk on a VI (Background script)
var vi = new GlideRecord('sn_vul_vulnerable_item');
vi.addQuery('state', 'open');
vi.setLimit(1);
vi.query();
if (vi.next()) {
vi.setValue('priority', '1');
vi.update();
gs.info('Updated ' + vi.number);
}
Lab D — Assignment rule
- Open Assignment rules; New.
- Condition: CI class = Linux Server OR tag = production.
- Action: Assignment group = Unix Admins.
- Re-import or update VI; confirm group changed on form.
Lab E — Analyst workflow (workspace)
- Open VR workspace as vulnerability manager.
- Filter open P1; open one VI; review linked CVE master and solution.
- Create Change Request (category security); link from VI related lists.
- Move VI to In progress; set planned remediation date.
Lab F — Close loop
- Simulate rescan: update VI state to Closed with close code Fixed (or import absent row per OOB logic).
- Verify master still shows correct open VI count.
- Document SLA: compare opened vs closed timestamps on VI.
Lab G — Cross-app (optional 30 min)
- Create TI indicator on sn_ti_indicator; relate to SIR test incident.
- Run one CTD test from CTD tests; observe failing CI → VI pattern if configured.
- Open SIR workspace; confirm shared CI appears on both SIR and VI.
| Lab | Pass gate | Evidence screenshot |
|---|---|---|
| A Plugins | VR lists accessible without ACL error | Plugin active + workspace load |
| B CMDB | 2 CIs with criticality set | CI form |
| C Import | 1 master, 2 VIs, CI linked | VI list + form |
| D Assign | Correct group auto-set | Assignment rule + VI |
| E Remediate | CHG linked, state in progress | VI + change |
| F Close | VI closed, counts correct | Closed VI audit |
§6 — Best practice chips (VR / SecOps)
§7 — Flow Designer automates VR
OOB VR ships flows and subflows for common patterns. Custom implementations typically add: auto-assign on VI insert, create change when priority=1, notify owner on assignment or SLA warning.
7.1 Implementer click-path (PDI)
Flow name: VR - Critical VI - Assign and Change
Scope: Global (OOB VR) OR your scoped app for extensions only
Trigger: Record Created — sn_vul_vulnerable_item
Condition: priority IN 1,2
Actions:
1) Lookup assignment_group (from CI.support_group or assignment rule output)
2) Update Record (VI.assignment_group, VI.state = in_progress)
3) Create Record change_request (short_description, cmdb_ci, category=security)
4) Create Record task_ci (link CI to change if needed)
5) Send Notification (template: include VI.number, CVE, CI name, {BASE} link)
Do: Keep OOB VR flows active; add **new** flows for customer-specific notify/ITSM integration. Use subflows for "create change" so SIR and VR can reuse.
Don't: Clone and edit vendor-owned global flows in production without update set discipline — prefer extension flows triggered on same table with order/conditions that complement OOB.
§8 — ServiceNow SDK: CAN vs CANNOT for VR/SecOps
See full toolchain: SDK_CURSOR_FULL_DOCUMENTATION.html · SDK Windows full cycle · Flow labs: PRACTICAL_FLOW_DESIGNER_FROM_SCRATCH.html · events: 06_NOTIFICATIONS_EVENTS_JOBS.html.
SDK CAN
- Custom **scoped app** wrappers around VR APIs (Script Includes, REST)
- Fluent Flow (where supported) for remediation automation in your scope
- Record() metadata for **your** tables, properties, roles in scope
- ATF tests that assert VI state transitions in PDI
- Integration outbound from scoped app to ticketing/SOAR
- Custom notifications referencing VI fields via mail scripts in scope
SDK CAN (config)
- Export/update sets for scoped artifacts only
- CI/CD pipeline for scoped application code
- Scripted REST facade: accept scanner JSON → call OOB API
- Custom dashboards/widgets reading
sn_vul_vulnerable_item(read ACLs) - Wrapper SI: prioritize() pattern in scoped include calling GlideRecord
SDK CANNOT
- Redefine or patch **OOB**
sn_vulstore apps/plugins via SDK - Replace **scanner IntegrationHub spoke** UI or closed vendor actions
- Ship **Playbook Designer / Workflow Studio** graphs from SDK repo
- Alter CMDB IRE OOB identifiers as scoped Fluent records (use instance config)
- Clone VR workspace UX components as unsupported overrides
- Grant cross-scope VR admin without platform governance
| Goal | Recommended approach | Avoid |
|---|---|---|
| Auto-assign VI | OOB assignment rules + optional scoped Flow | Global BR duplicating OOB VR engine |
| Scanner ingest | IH spoke + import/transform (OOB) | Direct JDBC insert into sn_vul_* from SDK job |
| Priority score | OOB calc + scoped SI extension | Overwrite master CVSS in global script |
| Remediation | Change + task templates; Flow create record | Scoped table replacing change_request |
| SIR correlation | OOB related lists / playbooks | SDK-only incident engine |
// Scoped app pattern (conceptual — lives in YOUR scope, not sn_vul) // tables.now.ts — custom integration log // business-rules.now.ts — on insert x_scope_scan_event → call OOB Import API // flows — trigger on x_scope_scan_event, not fork sn_vul_vulnerable_item OOB flows // CANNOT: npm package that rewrites com.snc.vulnerability plugin tables
§9 — Related documentation
modules/SECOPS.html
SIR + VR + TI + CTD deep reference, scripts, exam labs
Open →SDK_CURSOR_FULL_DOCUMENTATION.html
Cursor + SDK workflow, limits, project layout
Open →06 Notifications / Flows
Events, notifications, Flow Designer basics
Open →MODULE_FULL_E2E_PRACTICE
Cross-module SecOps summary lab
Open →VISUAL_FROM_SCRATCH_00_16
Visual tutorial system (same CSS classes)
Open →09 Modules & Integration
Module map including SecOps slot
Open →VR description cycle — single-page recap flow
SIR ↔ VR ↔ TI ↔ CTD — operator glance board
When to open which app
VR VI + likely SIR incident; TI enrichment; emergency change.
VR vulnerability group / patch rollup → one change many CIs.
CTD fail → VI or config task; not always SIR unless policy breach incident.
Appendix — State vocabulary (typical VI)
| Phase | VI state (conceptual) | Owner action |
|---|---|---|
| Triage | Open / New | Validate CI, priority, false positive check |
| Plan | In progress | Schedule change, assign remediation task |
| Execute | In progress | Implement patch/config; link CHG |
| Verify | Pending verification | Rescan import confirms fix |
| Done | Closed | Document close code; master counts update |
| Exception | Deferred / risk accepted | Approval + expiry date; monitor |
Appendix — Priority ↔ SLA (OOB reference bands)
| Priority | Label | Typical SLA target |
|---|---|---|
| 1 | Critical | 7 days |
| 2 | High | 30 days |
| 3 | Medium | 90 days |
| 4 | Low | 180 days |
| 5 | Info | Best effort |
Appendix — Scanner integration checklist
- Connection credentials in IH Connection (mid-server if on-prem scanner).
- Spoke actions scheduled via Scheduled job or vendor pull frequency.
- Transform errors: Import set runs → error rows.
- Duplicate VI prevention: OOB dedupe on CI + vulnerability; do not disable without design.
- Post-import: run VR prioritization job if enabled (check Jobs named Vulnerability).
Appendix — CMDB fields that affect VR score
| cmdb_ci field | Why VR cares |
|---|---|
business_criticality | Weight in risk score / priority |
support_group | Default assignment when rule matches |
location | Regional assignment rules |
os / class | Route to Unix vs Windows admins |
install_status | Filter retired CIs from open VIs |
| Service mapping | Business impact via dependent services |
Appendix — sn_si_incident vs VR
Create SIR when human response is required for active threat (malware, exfil, account compromise). VR handles exposure management (vuln present). Same CI may appear on both; use related records instead of duplicating work in ITSM incident unless policy requires.
Appendix — Third-party intel (sn_vul_third_party_entry)
Feeds update exploit availability on CVE masters. Implementers schedule intel pull (NVD, vendor APIs). Analysts use exploit flag to escalate priority without manual CVE research.
Appendix — Vulnerability groups (bulk remediation)
Group VIs by host, application, or patch ID to open one change for many items. Search lists/filters on VI for shared vulnerability.patch_id or business service. Pattern documented in SECOPS.html §4.5.
// Bulk change pattern (background — adapt thresholds)
var agg = new GlideAggregate('sn_vul_vulnerable_item');
agg.addQuery('state', 'open');
agg.addQuery('priority', 'IN', '1,2');
agg.addAggregate('COUNT');
agg.groupBy('vulnerability.patch_id');
agg.query();
while (agg.next()) {
var patchId = agg.getValue('vulnerability.patch_id');
var count = parseInt(agg.getAggregate('COUNT'), 10);
if (patchId && count >= 5) {
gs.info('Consider bulk CHG for patch ' + patchId + ' (' + count + ' VIs)');
}
}
Appendix — Roles smoke test (impersonation)
- Impersonate vulnerability manager → workspace + edit VI.
- Impersonate CI owner → see only assigned VIs (ACL check).
- Impersonate unauthorized user → expect read denial on admin lists.
Next depth: For certification-style labs and 30-question drills, continue in SECOPS §19. For HR Leave scoped SDK examples, use scoped tables only — do not merge with OOB sn_vul store apps.