Group Cases Workflow

Group Cases Workflow#

From the last 5 cases, examine the underlying entities in the alerts and events and group the cases logically. Then, extract details from each case in each cluster to build a high fidelity understanding of each cases’ disposition and involved entities. Make sure you have an in depth understanding of each case before moving on to the next step.

Then determine the priority of each case “grouping”. Then for each grouping analyze and interpret the alerts to understand why each case might be relevant. Then assess the impact of each case grouping and prioritize the cases with the highest potentialy impact. Then for each case grouping examine the underlying entities and enrich any observables with GTI. Finally, search for any related security events that may be relevant to a case based on their entities (hostnames) and include those as part of your case analysis. Finally, create a comprehensive analysis report in markdown in which you present the prioritized case list, your justification, and your analysis of each case or case cluster.

Do not treat internal domains as indicators (such as those extracted from email addresses, or usernames)

Graphviz Dotfile#

digraph CaseAnalysisFlow { rankdir=TB; // Default node style (applied if not overridden) node [shape=box, style=rounded, fontname="Helvetica"]; // --- Legend / Key --- subgraph cluster_legend { label = "Key / Legend"; style = filled; fillcolor = whitesmoke; // Light background for the legend box fontsize = 10; fontcolor = darkslategray; node [shape=box, fontname="Helvetica", fontsize=9]; // Default style within legend key_step [label="Step / Action", shape=box, style=rounded]; key_plan [label="Planning Step", shape=box, style="rounded,filled", fillcolor=lightyellow]; key_tool [label="Tool Execution", shape=ellipse, style=filled, fillcolor=lightblue]; key_result [label="Result / Summary", shape=note, align=left]; key_report [label="Final Report", shape=note, style=filled, fillcolor=lightgrey]; key_failed [label="Tool Not Found", shape=ellipse, style=filled, fillcolor=lightcoral]; // Added for completeness key_cluster [label="Phase / Grouping\n(Subgraph Border)", shape=box, style=dashed, color=gray]; // Arrange legend items vertically using invisible edges key_step -> key_plan -> key_tool -> key_result -> key_report -> key_failed -> key_cluster [style=invis]; } // --- End Legend --- // Start Start [label="Start Task:\nAnalyze Last 5 Cases"]; // Planning Phase PlanMode1 [label="PLAN MODE:\nOutline 7-step analysis plan", shape=box, style="rounded,filled", fillcolor=lightyellow]; PlanResponse1 [label="plan_mode_respond:\nPresent plan, request ACT MODE", shape=ellipse, style=filled, fillcolor=lightyellow]; // Style similar to plan PlanResult1 [label="User switches to ACT MODE", shape=note]; Start -> PlanMode1; PlanMode1 -> PlanResponse1; PlanResponse1 -> PlanResult1; // Step 1: List Cases ListCases [label="Step 1: List Recent Cases"]; // Uses default style ListCasesTool [label="secops-soar.list_cases", shape=ellipse, style=filled, fillcolor=lightblue]; ListCasesResult [label="Result:\nTop 5 Case IDs:\n553, 552, 551, 550, 549", shape=note]; PlanResult1 -> ListCases; ListCases -> ListCasesTool; ListCasesTool -> ListCasesResult; // Step 2: Examine Cases (Parallel) Step2_Label [label="Step 2: Examine Cases (Parallel)", shape=box, style=rounded]; // Explicitly default style ListCasesResult -> Step2_Label; // Case 553 Examination subgraph cluster_case_553 { label = "Examine Case 553"; style=dashed; color=gray; Examine553_DetailsTool [label="Get Details (553)\nsecops-soar.get_case_full_details", shape=ellipse, style=filled, fillcolor=lightblue]; Examine553_EntitiesTool [label="Get Entities (553)\nsecops-soar.get_entities_by_alert_group_identifiers", shape=ellipse, style=filled, fillcolor=lightblue]; Examine553_EventsTool [label="List Events (553)\nsecops-soar.list_events_by_alert", shape=ellipse, style=filled, fillcolor=lightblue]; Examine553_Summary [label="Summary (553):\nImpossible Travel", shape=note]; Examine553_DetailsTool -> Examine553_EntitiesTool -> Examine553_EventsTool -> Examine553_Summary; } // Case 552 Examination subgraph cluster_case_552 { label = "Examine Case 552"; style=dashed; color=gray; Examine552_DetailsTool [label="Get Details (552)\nsecops-soar.get_case_full_details", shape=ellipse, style=filled, fillcolor=lightblue]; Examine552_EntitiesTool [label="Get Entities (552)\nsecops-soar.get_entities_by_alert_group_identifiers", shape=ellipse, style=filled, fillcolor=lightblue]; Examine552_Events1Tool [label="List Events (Alert 793)\nsecops-soar.list_events_by_alert", shape=ellipse, style=filled, fillcolor=lightblue]; Examine552_Events2Tool [label="List Events (Alert 792)\nsecops-soar.list_events_by_alert", shape=ellipse, style=filled, fillcolor=lightblue]; Examine552_Summary [label="Summary (552):\nChrome DLP", shape=note]; Examine552_DetailsTool -> Examine552_EntitiesTool -> Examine552_Events1Tool -> Examine552_Events2Tool -> Examine552_Summary; } // Case 551 Examination subgraph cluster_case_551 { label = "Examine Case 551"; style=dashed; color=gray; Examine551_DetailsTool [label="Get Details (551)\nsecops-soar.get_case_full_details", shape=ellipse, style=filled, fillcolor=lightblue]; Examine551_EntitiesTool [label="Get Entities (551)\nsecops-soar.get_entities_by_alert_group_identifiers", shape=ellipse, style=filled, fillcolor=lightblue]; Examine551_Events1Tool [label="List Events (Alert 791)\nsecops-soar.list_events_by_alert", shape=ellipse, style=filled, fillcolor=lightblue]; Examine551_Events2Tool [label="List Events (Alert 790)\nsecops-soar.list_events_by_alert", shape=ellipse, style=filled, fillcolor=lightblue]; Examine551_Summary [label="Summary (551):\nSideload/Malware DL", shape=note]; Examine551_DetailsTool -> Examine551_EntitiesTool -> Examine551_Events1Tool -> Examine551_Events2Tool -> Examine551_Summary; } // Case 550 Examination subgraph cluster_case_550 { label = "Examine Case 550"; style=dashed; color=gray; Examine550_DetailsTool [label="Get Details (550)\nsecops-soar.get_case_full_details", shape=ellipse, style=filled, fillcolor=lightblue]; Examine550_EntitiesTool [label="Get Entities (550)\nsecops-soar.get_entities_by_alert_group_identifiers", shape=ellipse, style=filled, fillcolor=lightblue]; Examine550_EventsTool [label="List Events (550)\nsecops-soar.list_events_by_alert", shape=ellipse, style=filled, fillcolor=lightblue]; Examine550_Summary [label="Summary (550):\nJenkins CVE", shape=note]; Examine550_DetailsTool -> Examine550_EntitiesTool -> Examine550_EventsTool -> Examine550_Summary; } // Case 549 Examination subgraph cluster_case_549 { label = "Examine Case 549"; style=dashed; color=gray; Examine549_DetailsTool [label="Get Details (549)\nsecops-soar.get_case_full_details", shape=ellipse, style=filled, fillcolor=lightblue]; Examine549_EntitiesTool [label="Get Entities (549)\nsecops-soar.get_entities_by_alert_group_identifiers", shape=ellipse, style=filled, fillcolor=lightblue]; Examine549_EventsTool [label="List Events (549)\nsecops-soar.list_events_by_alert", shape=ellipse, style=filled, fillcolor=lightblue]; Examine549_Summary [label="Summary (549):\nPhishing Sim", shape=note]; Examine549_DetailsTool -> Examine549_EntitiesTool -> Examine549_EventsTool -> Examine549_Summary; } // Edges for Parallel Step 2 - Fork Step2_Label -> Examine553_DetailsTool; Step2_Label -> Examine552_DetailsTool; Step2_Label -> Examine551_DetailsTool; Step2_Label -> Examine550_DetailsTool; Step2_Label -> Examine549_DetailsTool; // Step 3 & 4: Grouping and Prioritization GroupPrioritize [label="Steps 3 & 4:\nAnalyze Case Summaries,\nGroup Logically &\nPrioritize Groups"]; // Uses default style GroupPrioritizeResult [label="Prioritized Groups:\n1. CVE (550) - Critical\n2. Phishing (549) - High\n3. User Activity (551, 552) - Med\n4. Travel (553) - Low", shape=note, width=3]; // Edges for Parallel Step 2 - Join Examine553_Summary -> GroupPrioritize; Examine552_Summary -> GroupPrioritize; Examine551_Summary -> GroupPrioritize; Examine550_Summary -> GroupPrioritize; Examine549_Summary -> GroupPrioritize; GroupPrioritize -> GroupPrioritizeResult; // Step 5: Enrichment (Iterative) Enrichment [label="Step 5: Enrich Indicators (Iterative)\n(Processing Groups 1 -> 2 -> 3 -> 4)"]; // Uses default style GroupPrioritizeResult -> Enrichment; // Group 1 Enrichment subgraph cluster_enrich_g1 { label = "Enrich Group 1 (CVE)"; style=dashed; color=gray; EnrichG1_IP_GTI [label="gti.get_ip_address_report\n(104.130.139.139)", shape=ellipse, style=filled, fillcolor=lightblue]; EnrichG1_URL_GTI [label="gti.get_url_report\n(...:8080)", shape=ellipse, style=filled, fillcolor=lightblue]; EnrichG1_CVE_GTI [label="gti.search_vulnerabilities\n(CVE-2024-23897)", shape=ellipse, style=filled, fillcolor=lightblue]; EnrichG1_IP_Chron [label="secops.lookup_entity\n(104.130.139.139)", shape=ellipse, style=filled, fillcolor=lightblue]; EnrichG1_Summary [label="Summary (G1):\nCVE Exploited, IP/URL Malicious", shape=note]; EnrichG1_IP_GTI -> EnrichG1_URL_GTI -> EnrichG1_CVE_GTI -> EnrichG1_IP_Chron -> EnrichG1_Summary; } // Group 2 Enrichment subgraph cluster_enrich_g2 { label = "Enrich Group 2 (Phishing)"; style=dashed; color=gray; EnrichG2_Domain_GTI [label="gti.get_domain_report\n(bonesinoffensivebook.com)", shape=ellipse, style=filled, fillcolor=lightblue]; EnrichG2_URL_GTI [label="gti.get_url_report\n(...invoke.js)", shape=ellipse, style=filled, fillcolor=lightblue]; // Use specific color for failed/not found lookups EnrichG2_Hash1_GTI [label="gti.get_file_report\n(HTM hash) - Not Found", shape=ellipse, style=filled, fillcolor=lightcoral]; EnrichG2_Hash2_GTI [label="gti.get_file_report\n(PNG hash) - Not Found", shape=ellipse, style=filled, fillcolor=lightcoral]; EnrichG2_Domain_Chron [label="secops.lookup_entity\n(bonesinoffensivebook.com)", shape=ellipse, style=filled, fillcolor=lightblue]; EnrichG2_Summary [label="Summary (G2):\nDomain/URL Malicious", shape=note]; EnrichG2_Domain_GTI -> EnrichG2_URL_GTI -> EnrichG2_Hash1_GTI -> EnrichG2_Hash2_GTI -> EnrichG2_Domain_Chron -> EnrichG2_Summary; } // Group 3 Enrichment subgraph cluster_enrich_g3 { label = "Enrich Group 3 (User Activity)"; style=dashed; color=gray; EnrichG3_URL_GTI [label="gti.get_url_report\n(testsafebrowsing...)", shape=ellipse, style=filled, fillcolor=lightblue]; EnrichG3_Hash_GTI [label="gti.get_file_report\n(test file hash)", shape=ellipse, style=filled, fillcolor=lightblue]; EnrichG3_Summary [label="Summary (G3):\nSafe Browsing Test File/URL", shape=note]; EnrichG3_URL_GTI -> EnrichG3_Hash_GTI -> EnrichG3_Summary; } // Group 4 Enrichment subgraph cluster_enrich_g4 { label = "Enrich Group 4 (Travel)"; style=dashed; color=gray; EnrichG4_IP1_GTI [label="gti.get_ip_address_report\n(SG IP)", shape=ellipse, style=filled, fillcolor=lightblue]; EnrichG4_IP2_GTI [label="gti.get_ip_address_report\n(US IP)", shape=ellipse, style=filled, fillcolor=lightblue]; EnrichG4_Summary [label="Summary (G4):\nIPs Benign", shape=note]; EnrichG4_IP1_GTI -> EnrichG4_IP2_GTI -> EnrichG4_Summary; } // Edges for Enrichment Flow Enrichment -> EnrichG1_IP_GTI [label="Group 1"]; EnrichG1_Summary -> EnrichG2_Domain_GTI [label="Group 2"]; EnrichG2_Summary -> EnrichG3_URL_GTI [label="Group 3"]; EnrichG3_Summary -> EnrichG4_IP1_GTI [label="Group 4"]; // Step 6: Related Event Search RelatedEvents [label="Step 6: Search Related Events\n(Processing G3 - Host CYMBAL)"]; // Uses default style EnrichG4_Summary -> RelatedEvents; RelatedEvents_Tool [label="secops.search_security_events\n(hostname=CYMBAL, hours_back=72)", shape=ellipse, style=filled, fillcolor=lightblue]; RelatedEvents_Result [label="Result: No events found", shape=note]; RelatedEvents -> RelatedEvents_Tool; RelatedEvents_Tool -> RelatedEvents_Result; // Step 7: Generate Report GenerateReport [label="Step 7: Generate Final Report"]; // Uses default style RelatedEvents_Result -> GenerateReport; FinalReport [label="Final Markdown Report\n(attempt_completion)", shape=note, style=filled, fillcolor=lightgrey]; // Explicit style for report GenerateReport -> FinalReport; }