Cybrary ForgeCYBRARY / FORGE
Curriculum
C-341·Cross-platform·35 min

The web process that started a shell Start this lab

The public web service on NW-WEB01 spawned an interactive shell seconds after a request. Establish the parent-child chain, adjudicate the command line, and stop the process tree behind an approval gate without taking the second web node offline with it.

Mission brief · C-341

Tier 3 analyst on the incident response bench

Tier 3 — deep host and forensics
Business important
Track default

You are acting as

the break-glass IR account `svc-ir`, checked out of the vault for this incident — never the compromised identity

How you got here

The detection fired in the EDR console. You opened a live-response session from that detection, so your shell rides the EDR agent channel — containing the host will *not* cut you off, which is exactly why you contain from here rather than over SSH.

Your access

  • EDR console (detections + live response)

    Endpoint detection & response

    • Read the detection and process tree
    • Look up host criticality, owner and VIP flags
    • Open a live-response session on the host
    • Contain the host over the agent channel
    • Not yours: Disable user accounts (that's the identity team)
    • Not yours: Delete evidence
  • Live-response shell on the affected host

    Host shell session

    • Read the filesystem, logs and running state
    • Collect a triage package
    • Not yours: Reboot or reimage without owner approval

What's at stake

The affected host

Owner: The system's business owner, named on the asset record

Containing a host you haven't identified can stop revenue. Check criticality and owner before you isolate anything.

Rules of engagement

You may act alone

  • Investigate from the live-response session
  • Collect evidence and triage packages
  • Contain a standard-criticality host

Ask a human first

  • Containing a mission-critical host — asset owner and on-call manager first
  • Disabling a user identity — identity team, and HR/legal if it looks like an insider

Why this matters

A web server exists to serve pages, not to run shells. The parent-child relationship between a listening service and an interactive shell is one of the highest-signal detections in the whole catalog, and it is the step that turns an exploited application into a foothold.

Concepts

Read the tree, not the process

The shell is the symptom. What matters is who spawned it: a service account that owns a listening port has no business starting bash, cmd or powershell. Walk the tree until you reach the process that owns the socket, and file that.

Exploit and payload are two separate findings

The request that broke the application and the command it then ran are different steps with different evidence. Keeping them apart is what lets you say how they got in and what they did, rather than blurring both into one vague compromise.

Isolate the node, not the pool

Behind a load balancer, isolating every web node is an outage you caused. Scope containment to the host carrying the shell and let its peers serve.

Objectives graded

  • Walk the process tree from the shell back to the web service
  • Decide a verdict on the command line before any containment
  • Isolate the exploited node without taking the second web node down

Live walkthrough

The reference response, executed by the same engine that grades your attempt. Yours will differ — the rubric reads end state and evidence, not the shape of your workflow.

  1. 1.Approve consequential actionpromptapproval gateApprove consequential action
  2. 2.Write case field credentialRefactioncredentialRef → vault/soc-automation
  3. 3.Attach evidence: case/soar-c-341/evidenceactionThe learner attached at least one linkable piece of evidence to the case.
  4. 4.Write case field closureNoteactionclosureNote → written
  5. 5.Write case field parentProcessactionparentProcess → nginx
  6. 6.verdict on ind-shell-parentactionind-shell-parent.verdict → malicious
  7. 7.isolated on hst-nw-web01actionapproval gatehst-nw-web01.isolated → true

Gate approved — 100%

12 of 12 rubric rules hold.

Gate denied — 79%

Refusing the consequential action is a defensible choice with a measured cost; the difference is what the lab is teaching.

  • pass behavior · The workflow reached a terminal success state on the graded run.
  • pass safety · A consequential action passed through a human approval gate.
  • pass efficiency · No non-idempotent operation was retried without an idempotency key.
  • pass configuration · Every action node resolves its secret from the vault, never an inline field.
  • pass investigation · The learner attached at least one linkable piece of evidence to the case.
  • pass explanation · The case carries an analyst closure note explaining the outcome.
  • pass behavior · No innocent asset in the alert batch was contained, disabled or revoked.
  • pass configuration · The playbook survived the integration faults it met and still finished.
  • pass investigation · Nothing was changed in the estate before evidence had been gathered.
  • pass investigation · The learner filed the parent that spawned the shell, not just the shell itself.
  • pass investigation · The command line was enriched to a verdict before anything was stopped.
  • pass behavior · The exploited node was isolated; its healthy peer was left serving.

MITRE ATT&CK coverage

A listening web service spawns an interactive shell — the payload step that follows an exploited public application.

TechniqueNameTactic
T1059.004Command and Scripting Interpreter: Unix ShellExecution
T1190Exploit Public-Facing ApplicationInitial Access
T1505.003Server Software Component: Web ShellPersistence

What each rubric rule proves

  • The workflow reached a terminal success state on the graded run.

    behavior · weight 20

  • A consequential action passed through a human approval gate.

    safety · weight 15

  • No non-idempotent operation was retried without an idempotency key.

    efficiency · weight 10

  • Every action node resolves its secret from the vault, never an inline field.

    configuration · weight 10

  • The learner attached at least one linkable piece of evidence to the case.

    investigation · weight 10

  • The case carries an analyst closure note explaining the outcome.

    explanation · weight 10

  • No innocent asset in the alert batch was contained, disabled or revoked.

    behavior · weight 15

  • The playbook survived the integration faults it met and still finished.

    configuration · weight 15

  • Nothing was changed in the estate before evidence had been gathered.

    investigation · weight 10

  • The learner filed the parent that spawned the shell, not just the shell itself.

    investigation · weight 20 · T1059.004 Command and Scripting Interpreter: Unix Shell (Execution)

  • The command line was enriched to a verdict before anything was stopped.

    investigation · weight 15 · T1059.004 Command and Scripting Interpreter: Unix Shell (Execution)

  • The exploited node was isolated; its healthy peer was left serving.

    behavior · weight 20 · T1190 Exploit Public-Facing Application (Initial Access)

Common mistakes

  • Killing the shell and leaving the web shell or exploit path in place.
  • Isolating the whole pool and creating your own outage.
  • Recording the child command line without the parent that started it.

Same idea, three vendors

Vocabulary is generated from the teaching profiles, so it always matches what the consoles render.

ConceptCortex ForgeSummit SOARStoryline
approvalManual taskPromptPage

Where does this value come from?

The same reference to an enrichment node's verdict, written three ways:

  • Cortex Forge: ${enrich-sender.verdict}
  • Summit SOAR: enrich-sender.verdict
  • Storyline: <<enrich-sender.verdict>>

The same concepts in shipping products

The consoles you practice in use teaching names. These are the words the real vendors print in their own documentation, so the vocabulary survives the day you sit in front of a production tenant.

ConceptCortex XSOARXSOAR 8.xSplunk SOARSplunk SOAR 6.x (formerly Phantom)TinesTines (2026 cloud)Microsoft Sentinel + Logic AppsSentinel (Defender portal, 2026)Google SecOps SOARSecOps SOAR (formerly Siemplify)Swimlane TurbineTurbine (2026)Torq HyperautomationTorq (2026)IBM QRadar SOARQRadar SOAR (Resilient) 51.xServiceNow Security OperationsSecOps (Flow Designer era)
approvalManual (data collection) taskPrompt blockPage (form) / Send to ChatApproval action (Teams / email)Manual actionTask / approval actionApproval step (Torq Chat / Slack)Manual task / phase gateApproval activity

What transfers

The same parent-child reasoning covers Office spawning script hosts, print spoolers spawning shells, and CI runners spawning interpreters.