Issue #848 - Security Analyst Quick Reference
Start your shift by checking the dashboard:
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://api.expenseflow.com/api/attack-graph/dashboardWhat to look for:
- New critical/high severity incidents
- High-risk entities requiring investigation
- Unusual activity spikes in the last 24 hours
List new incidents:
curl -H "Authorization: Bearer YOUR_TOKEN" \
"https://api.expenseflow.com/api/attack-graph/incidents?status=NEW&sortBy=severity"Priority Order:
- Critical severity + high confidence (>80)
- High severity + medium/high confidence (>60)
- Medium severity incidents
- Low severity incidents
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
https://api.expenseflow.com/api/attack-graph/incidents/INC-20260301-ABC123/assignThis automatically changes status from NEW → INVESTIGATING
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://api.expenseflow.com/api/attack-graph/incidents/INC-20260301-ABC123Key Fields to Review:
confidenceScore- How certain the system is (0-100)incidentType- Type of attack detectedcampaignMetrics- Scale of attack (IPs, devices, users)clusteringReasoning- Why events were grouped togetherevidence.evidenceChain- Timeline of events
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://api.expenseflow.com/api/attack-graph/incidents/INC-20260301-ABC123/graphLook for:
- Central nodes (high degree count) = key infrastructure
- Clusters of related entities
- Unusual relationship patterns
- Geographic anomalies
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"note": "Reviewing distributed credential stuffing from 12 IPs",
"noteType": "OBSERVATION"
}' \
https://api.expenseflow.com/api/attack-graph/incidents/INC-20260301-ABC123/notesIndicators:
incidentType: DISTRIBUTED_CREDENTIAL_STUFFING- Multiple IPs (>=5) targeting same accounts
- Low event velocity (<20/hour)
- Extended timeframe (hours or days)
Response Actions:
- Verify targeted accounts are legitimate
- Check if credentials match known breaches
- Blocklist attacking IPs
- Force password reset for targeted users
- Enable mandatory 2FA for affected accounts
Commands:
# Blocklist all attacking IPs
for ip_entity_id in $(cat suspicious_ips.txt); do
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"reason": "Distributed credential stuffing campaign",
"expiresInHours": 168
}' \
https://api.expenseflow.com/api/attack-graph/entities/$ip_entity_id/blocklist
done
# Mass revoke sessions
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"reason": "Incident INC-20260301-ABC123 - credential stuffing"
}' \
https://api.expenseflow.com/api/attack-graph/incidents/INC-20260301-ABC123/revoke-sessionsIndicators:
incidentType: RAPID_BURST_ATTACK- High event velocity (>50/hour)
- Short timeframe (minutes)
- Usually automated/botnet
Response Actions:
- IMMEDIATE: Mass revoke all related sessions
- Blocklist all attacking infrastructure
- Check for successful logins (compromised accounts)
- Alert affected users
- Monitor for attack shift to new IPs
Quick Response:
# Immediate session revocation
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"reason": "Active burst attack - immediate response"}' \
https://api.expenseflow.com/api/attack-graph/incidents/INC-20260301-ABC123/revoke-sessions
# Update status to MITIGATED
curl -X PUT -H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"status": "MITIGATED",
"notes": "All sessions revoked, IPs blocklisted"
}' \
https://api.expenseflow.com/api/attack-graph/incidents/INC-20260301-ABC123/statusIndicators:
incidentType: COORDINATED_ATTACK- High graph density (>50%)
- Multiple entity types involved
- Sophisticated patterns
Response Actions:
- DEEP INVESTIGATION: Understand full scope
- Identify command and control infrastructure
- Trace attack timeline
- Look for compromised insider accounts
- Check for successful data exfiltration
- May require legal/law enforcement notification
Investigation Commands:
# Get all high-risk entities
curl -H "Authorization: Bearer YOUR_TOKEN" \
"https://api.expenseflow.com/api/attack-graph/entities/high-risk?minRiskScore=80"
# For each suspicious entity, traverse the graph
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"maxDepth": 4,
"direction": "both"
}' \
https://api.expenseflow.com/api/attack-graph/entities/ENTITY_ID/traverse# Get IP entity details
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://api.expenseflow.com/api/attack-graph/entities/ENTITY_ID
# Check for:
# - Recent activity (lastSeen)
# - Risk score
# - Number of failed login attempts
# - Associated incidents
# - Enrichment data (proxy, VPN, Tor)Blocklist if:
- Risk score >80
- Multiple failed attempts (>20)
- Associated with confirmed incidents
- Known proxy/VPN/Tor exit node with suspicious activity
# Get device entity details
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://api.expenseflow.com/api/attack-graph/entities/DEVICE_ENTITY_IDRed flags:
- Same device accessing multiple unrelated accounts
- Device metadata inconsistencies
- Rapid switching between locations
- Unusual browser/OS combinations
# Get user entity
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://api.expenseflow.com/api/attack-graph/entities/USER_ENTITY_ID
# Check related events
# Look at devices and IPs usedPotential compromise indicators:
- Successful login after many failures
- Access from new device/location
- Unusual transaction patterns
- Session from high-risk IP
IP Address:
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"reason": "Confirmed malicious activity - [incident ID]",
"expiresInHours": 168
}' \
https://api.expenseflow.com/api/attack-graph/entities/IP_ENTITY_ID/blocklistDevice Fingerprint:
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"reason": "Compromised or spoofed device",
"expiresInHours": null
}' \
https://api.expenseflow.com/api/attack-graph/entities/DEVICE_ENTITY_ID/blocklistMass Revocation:
# Revoke all sessions for incident
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"reason": "Security incident response"}' \
https://api.expenseflow.com/api/attack-graph/incidents/INCIDENT_ID/revoke-sessionsWorkflow:
- NEW → INVESTIGATING (automatic on assignment)
- INVESTIGATING → CONFIRMED (after verification)
- CONFIRMED → MITIGATED (after response actions)
- MITIGATED → RESOLVED (after monitoring period)
Or: INVESTIGATING → FALSE_POSITIVE (if benign)
Update Status:
curl -X PUT -H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"status": "CONFIRMED",
"notes": "Verified attack pattern, initiated response"
}' \
https://api.expenseflow.com/api/attack-graph/incidents/INCIDENT_ID/statusAlways document your investigation:
# Observation
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"note": "Detected botnet pattern using rotating residential proxies",
"noteType": "OBSERVATION"
}' \
https://api.expenseflow.com/api/attack-graph/incidents/INCIDENT_ID/notes
# Hypothesis
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"note": "Suspect compromised residential proxy network, investigating source",
"noteType": "HYPOTHESIS"
}' \
https://api.expenseflow.com/api/attack-graph/incidents/INCIDENT_ID/notes
# Action Taken
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"note": "Blocklisted 47 IP addresses, revoked 12 sessions, alerted 3 users",
"noteType": "ACTION_TAKEN"
}' \
https://api.expenseflow.com/api/attack-graph/incidents/INCIDENT_ID/notes
# Conclusion
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"note": "Attack mitigated. No data breach. Recommended enhanced monitoring for 72h",
"noteType": "CONCLUSION"
}' \
https://api.expenseflow.com/api/attack-graph/incidents/INCIDENT_ID/notesImportant: Always validate incidents to improve detection accuracy:
# True Positive
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"isTruePositive": true,
"notes": "Confirmed credential stuffing campaign"
}' \
https://api.expenseflow.com/api/attack-graph/incidents/INCIDENT_ID/validate
# False Positive
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"isTruePositive": false,
"notes": "Legitimate user behavior from corporate VPN"
}' \
https://api.expenseflow.com/api/attack-graph/incidents/INCIDENT_ID/validatecurl -H "Authorization: Bearer YOUR_TOKEN" \
https://api.expenseflow.com/api/attack-graph/metricsKPIs to Track:
- Precision (true positives / total incidents)
- Active incident count
- Incidents by type and severity
- High-risk entity count
- Response time (detection to mitigation)
Generate weekly summary:
- Total incidents detected
- Incidents by type
- Response times
- Entities blocklisted
- Sessions revoked
- False positive rate
- Trends and patterns
Escalate to Senior Analyst if:
- Critical severity + high confidence (>90)
- Attack still active after initial mitigation
- Potential data breach detected
- Insider threat suspected
- Legal/compliance implications
- Nation-state level sophistication
Escalate to Management if:
- Multiple critical incidents
- Widespread compromise
- Customer data at risk
- Media attention likely
- Law enforcement notification needed
Today's critical incidents:
curl -H "Authorization: Bearer YOUR_TOKEN" \
"https://api.expenseflow.com/api/attack-graph/incidents?severity=critical&status=NEW,INVESTIGATING&sortBy=confidenceScore&sortOrder=desc"High-confidence unassigned incidents:
curl -H "Authorization: Bearer YOUR_TOKEN" \
"https://api.expenseflow.com/api/attack-graph/incidents?minConfidence=80&status=NEW"Recent false positives (learn from them):
curl -H "Authorization: Bearer YOUR_TOKEN" \
"https://api.expenseflow.com/api/attack-graph/incidents?status=FALSE_POSITIVE&limit=20"To understand attack infrastructure:
- Find central high-risk IP
- Traverse graph depth 3-4
- Look for ASN clustering (same provider)
- Check temporal patterns (coordinated timing)
- Identify C2 infrastructure patterns
Create shell scripts for common tasks:
- Daily incident triage
- Blocklist high-risk IPs automatically
- Alert on critical incidents
- Generate weekly reports
- Monitor specific entity types
❌ Don't:
- Mark incidents as resolved without validation
- Blocklist without investigation (especially users)
- Ignore low-confidence incidents entirely
- Forget to document your actions
- Revoke sessions during business hours without user notification
✅ Do:
- Validate all incidents (true/false positive)
- Document investigation findings
- Use graph visualization for complex incidents
- Check for collateral impact before blocking
- Monitor after mitigation
- Learn from false positives
- Technical Documentation:
ISSUE_848_IMPLEMENTATION_SUMMARY.md - API Reference: Full endpoint documentation in main docs
- Graph Theory: Understanding centrality, clustering
- MITRE ATT&CK: Map incidents to ATT&CK framework
- Team Chat: #security-incidents Slack channel
- DO NOT WAIT - Mass revoke sessions immediately
- Blocklist all attacking infrastructure
- Alert security team on emergency channel
- Document actions in real-time
- Prepare incident report for management
- Preserve evidence (don't delete anything)
- Escalate immediately to senior analyst + management
- Notify legal/compliance team
- Follow breach response playbook
- Prepare for potential disclosure requirements
Remember: Speed matters in incident response, but accuracy matters more. When in doubt, escalate.
Stay Updated: This playbook is a living document. Contribute improvements based on your experience.