Interview reference · Cortex XSOAR Automation Engineer

Playbooks,
Python,
and the wire between them.

Every fact maps to a line in the job description. Every abbreviation is spelled out in full the first time it appears, so nothing catches you mid-sentence. Search it, drill it, print it.

Cortex XSOAR 6.x / 8.x Python · REST · JSON SIEM · EDR · IAM · ITSM Linux · Git · CI/CD Preferred: XSIAM/XDR · Splunk · ServiceNow · Sentinel · CrowdStrike
No facts match that filter. Clear the search to see everything.
01

Core architecture

what the platform is made of

The platformorigin

Cortex XSOAR is Palo Alto Networks' Security Orchestration, Automation, and Response (SOAR) platform. It began as Demisto, acquired in 2019. The product name expands to eXtended Security Orchestration, Automation, and Response (XSOAR). It combines orchestration, automation, case management, and Threat Intelligence Management (TIM) in one platform.

Say the long form once in an interview and you sound like someone who knows what the letters mean, not someone repeating a product name.

XSOAR 6.x on-prem

Self-hosted on Linux. Single server, or distributed as an application server plus a database (DB). Uses Elasticsearch or the built-in BoltDB. You manage the container images and server configuration yourself.

XSOAR 8.x cloud

Software as a Service (SaaS), re-platformed onto the Cortex infrastructure that also runs Extended Security Intelligence and Automation Management (XSIAM). Multi-tenant for Managed Security Service Providers (MSSPs). Server configuration and container management move to Palo Alto's side.

Engines remote

Lightweight execution proxies installed in segmented networks or a demilitarized zone (DMZ) — integrations run locally there, so the main server never needs direct access to that segment. Load-balancing groups are supported.

Building blocks — know every one of these by name

Incident
The core case object. Created by an integration fetch, the Application Programming Interface (API), email, or manually.
Incident Type
Classification such as Phishing or Malware. Each type maps to a default playbook, layout, and Service Level Agreement (SLA).
Classifier
Decides the incident type from the raw ingested JavaScript Object Notation (JSON).
Mapper
Maps raw fields into incident fields. Configured per integration instance.
Incident Fields
Custom typed fields (short text, grid, tags) storing investigation data. Searchable and reportable.
Layout
The per-type user interface (UI): tabs, sections, buttons, and dynamic sections backed by scripts.
Playbook
A visual workflow — tasks connected in a graph.
Automation
A script (Python, JavaScript, or PowerShell) run inside a task or standalone from the command line interface (CLI) in the War Room.
Integration
A connector to an external product. It exposes commands such as !vt-comment-get.
War Room
The per-incident chat-operations timeline. Every command, output, note, and evidence entry lands here — this is the built-in audit trail.
Context Data
A per-incident JSON tree where all command outputs land. Playbook logic reads from and writes to it.
Indicators
Indicators of Compromise (IOCs) auto-extracted from incidents. Scored 0 None, 1 Good, 2 Suspicious, 3 Bad; enriched, aged, and shared through TIM and the External Dynamic List.
Lists
Shared key and value storage — allowlists, templates — usable across playbooks.
Jobs
Scheduled or feed-triggered playbook runs. Cron for playbooks.
Marketplace
Over 1,000 content packs bundling integrations, playbooks, layouts, and classifiers.
02

Playbooks

the job description's first line

Task types

  • Standard — runs an automation or an integration command.
  • Conditional — branches on context values, or runs a script returning a yes or no path.
  • Manual — an analyst action; can block the playbook until completed.
  • Data collection — sends a survey or form by email or Slack and waits for the response; answers land in context. This is how you gate containment on human approval.
  • Sub-playbook — a nested playbook with its own isolated context unless inputs and outputs are passed explicitly.
  • Section header — organization only, no execution.

Inputs, outputs, and loops

Playbooks declare inputs and outputs. Sub-playbooks receive inputs through filters and transformers from the parent context, and return declared outputs. Sub-playbooks can loop — "for each" over a context array, or loop until an exit condition. This is the standard pattern for iterating over multiple indicators or endpoints.

Filters and transformers

Inline data manipulation on any task input — filter on IP.Score >= 2, or transform with toLowerCase, Cut, Join, RegexExtract. Using these instead of a script avoids a container startup, which answers both a design question and a performance question.

Timers and service levels

Tasks can start, pause, and stop timer fields. This is how Mean Time To Respond (MTTR) and time-to-containment get measured per incident. SLA fields support breach actions.

Error handling

Tasks can be set to continue on error, and error paths can branch to retry or notification logic. Best practice is a dedicated error-handling sub-playbook rather than per-task patches.

Quiet mode

Suppresses War Room output per task or per playbook. On high-volume playbooks this is the single biggest control on database growth.

Execution model

Tasks run on the server, and each script executes inside its own Docker container tied to the integration or script image. Parallel branches execute concurrently.

Debugger

The built-in playbook debugger runs a playbook against a test incident with breakpoints, skipped tasks, and mocked inputs — validate before promoting to production.

03

Automations in XSOAR

where interviewers probe hardest

Script anatomy

  • Every script imports demistomock as demisto and from CommonServerPython import *.
  • demisto.args() — a dictionary of the task's arguments.
  • demisto.context() and demisto.incident() — read context and incident fields.
  • demisto.executeCommand("cmd", args) — call another command from inside a script.
  • return_results(CommandResults(...)) — the modern return path.
  • return_error("msg") — fail the task with an error.
# CommandResults — the four arguments that matter
return_results(CommandResults(
    outputs_prefix='VirusTotal.IP',   # where it lands in context
    outputs_key_field='id',           # dedup key on repeat runs
    outputs=data,                     # the structured dictionary
    readable_output=tableToMarkdown('Result', data),  # War Room view
    raw_response=raw                  # untouched API response
))

DBotScore — short for Demisto Bot Score — is the standard context object for reputation: Indicator, Type, Vendor, Score (0 to 3). Writing DBotScore is how an integration feeds platform-wide indicator scoring, and it is what makes verdicts vendor-agnostic.

Integration anatomy — the BaseClient pattern

class Client(BaseClient):          # BaseClient from CommonServerPython
    def get_alert(self, alert_id):
        return self._http_request('GET', f'/alerts/{alert_id}')

def main():
    command = demisto.command()      # dispatch on the command name
    if command == 'test-module':      # the "Test" button
        return_results('ok')
    elif command == 'fetch-incidents':
        last = demisto.getLastRun()  # dedup + pagination state
        ...
        demisto.setLastRun({'time': newest})
  • BaseClient handles the base Uniform Resource Locator (URL), certificate verification and proxy flags, retries, and authentication headers.
  • test-module backs the Test button — return 'ok' on success.
  • fetch-incidents pulls new alerts on a schedule, roughly every minute by default, and must manage last-run state with getLastRun and setLastRun for deduplication and pagination.

Mirroring

Two-way synchronization of incident fields and comments with an external system such as ServiceNow or Cortex XDR, using get-remote-data and update-remote-data, with the mapper direction set to incoming or outgoing.

Docker images

Each script declares an image, for example demisto/python3:3.11.x. Custom dependencies mean a custom image (demisto/py3-tools or your own). In 6.x you manage images on the server; in 8.x Palo Alto hosts them.

Development workflow — the job description's "automation best practices"

  • demisto-sdk — the official software development kit (SDK) command line tool: init, validate, lint, format, upload, download, run. It lints with flake8, mypy, and bandit, and runs unit tests inside Docker.
  • Content as code: custom content lives in Git as packs in the standard directory structure. Continuous Integration and Continuous Delivery (CI/CD) — GitHub Actions or Jenkins — runs validate, lint, and pytest, then uploads to a development instance and promotes to production. This is SOAR as code, the same discipline as detection as code.
  • Remote repositories — XSOAR can synchronize content directly from a Git repository for development-to-production promotion.
  • Unit testing: pytest with demistomock, mocking client._http_request, with fixtures stored as JSON files in test_data/.
  • Packs are semantically versioned in pack_metadata.json.
04

REST API & JSON

job description line two

What the letters mean

Representational State Transfer (REST) is an architectural style for web services: resources addressed by URL, acted on with HyperText Transfer Protocol (HTTP) verbs — GET to read, POST to create, PUT or PATCH to update, DELETE to remove — and stateless requests, meaning each call carries everything the server needs. JavaScript Object Notation (JSON) is the text format those calls carry: nested objects in braces, arrays in brackets, key and value pairs.

XSOAR's own REST API

  • Authentication uses an API key header in 6.x; 8.x uses a key plus a key identifier, with standard and advanced key types.
  • POST /incident — create an incident.
  • POST /incidents/search — query incidents.
  • POST /entry — add a War Room entry.
  • POST /entry/execute/sync — run a command and get results back.
  • The Generic Webhook integration receives inbound pushes from tools that cannot be polled, and creates incidents from the JSON body.

Third-party API patterns

  • Authentication: an API key header; Open Authorization 2.0 (OAuth2) client credentials, where you fetch, refresh, and cache the token in integration context; or Hash-based Message Authentication Code (HMAC) request signing on some endpoint products.
  • Pagination: offset and limit, cursor, or Link headers — handled inside the fetch loop.
  • Rate limits: honor HTTP 429 and the Retry-After header; _http_request supports retry and backoff parameters.
  • Everything crossing the boundary is JSON — and XSOAR context is literally a JSON document, queried with dot notation and [] filters.
05

Integration targets

one-liners that prove fluency

Security Information and Event Management (SIEM)

Splunk
The SplunkPy integration fetches notable events from Enterprise Security (ES) using the notable macro. !splunk-search runs Search Processing Language (SPL) from inside a playbook, and mirroring pushes status and owner back to the notable. Splunk-side adaptive response actions can also trigger XSOAR.
Microsoft Sentinel
Pulls incidents through the Azure REST API and Microsoft Graph. Run Kusto Query Language (KQL) with azure-log-analytics-execute-query.
Cortex XSIAM
The same playbook engine is built into XSIAM. Standalone XSOAR reaches XSIAM and XDR through the Cortex XDR integration.

Endpoint Detection and Response (EDR)

Cortex XDR
Extended Detection and Response (XDR). Commands: xdr-get-incident-extra-data, xdr-isolate-endpoint, xdr-blocklist-files, xdr-run-script for Live Terminal, plus two-way incident mirroring.
CrowdStrike
Fetch detections, contain a host with cs-falcon-contain-host, upload indicators, and execute commands through Real Time Response (RTR).

Identity and Access Management (IAM)

Active Directory
Active Directory (AD) over the Lightweight Directory Access Protocol (LDAP): ad-disable-account, ad-set-new-password, ad-expire-password, and group removal — the standard compromised-account containment set.
Okta / Entra ID
Suspend a user, revoke sessions and refresh tokens, and reset Multi-Factor Authentication (MFA) factors.
IAM packs
A content-pack family for identity lifecycle — provisioning and deprovisioning across connected applications.

Information Technology Service Management (ITSM)

ServiceNow: servicenow-create-ticket, query and update, plus mirroring — two-way synchronization of state, work notes, comments, and attachments between the ServiceNow ticket and the XSOAR incident. Jira follows the same pattern.

Enrichment and communications

VirusTotal version 3, AbuseIPDB, urlscan.io, Whois, and IPinfo, plus Recorded Future, Anomali, and the Malware Information Sharing Platform (MISP) through TIM. Slack and Microsoft Teams integrations send messages, ask questions through data-collection tasks, and mirror the War Room into a channel.

06

Standard response flow

the "walk me through a playbook" answer

Canonical phishing and alert playbook — matches out-of-the-box content

  1. Ingestfetch-incidents from the SIEM, EDR, or a mail listener. The classifier sets the type, the mapper fills the fields.
  2. DeduplicateFindSimilarIncidents and deduplication playbooks link or close duplicates.
  3. Extract and enrich — auto-extraction pulls indicators, then entityEnrichment sub-playbooks for Internet Protocol (IP) address, URL, file, and domain produce DBotScore verdicts.
  4. Triage and verdict — conditional tasks on scores and severity, using calculate-severity sub-playbooks.
  5. Contain — usually gated by a manual approval or data-collection task: isolate the endpoint through Cortex XDR or CrowdStrike, disable the account through Active Directory or Okta, and block the indicator at the firewall or proxy.
  6. Ticket and notify — create the ServiceNow ticket with mirroring enabled, and notify by Slack or email.
  7. Close — close notes, root-cause field, timers stopped, post-incident report generated. Service-level metrics feed the dashboards.

Threat Intelligence Management (TIM)

Feed integrations ingest indicators on a schedule. Indicators carry expiration, verdicts, and relationships. An External Dynamic List (EDL) publishes block lists over HTTP for Palo Alto Networks firewalls and proxies to consume directly — that is the loop from intelligence to enforcement without a human in the middle.

07

Troubleshoot & optimize

the volume tell

Troubleshooting toolbox

  • /debug-mode on an integration instance gives full request and response logging.
  • The playbook debugger, with mocked context and breakpoints.
  • Server logs at /var/log/demisto in 6.x, plus !GetServerInfo and the system diagnostics page.
  • Classic failed-fetch causes: expired credentials or token, certificate verification failure, proxy blocking, a mapper or classifier mismatch, or corrupted last-run state — which is fixed by resetting last run.
  • Container issues: a missing dependency means the wrong image; in hardened environments, check the container's outbound network rules.

Optimization levers — concrete, in order of impact

  • Quiet mode and limiting War Room writes — the biggest database win on high-volume playbooks.
  • Pre-processing rules — server-side rules at ingest that link, drop, or run a script before a playbook ever starts. The cheapest place to kill noise.
  • Prefer filters and transformers over spawning scripts for trivial logic; every script means a container startup.
  • Batch API calls inside integrations — one call for many indicators, not one call each.
  • Context hygiene: use outputs_key_field to deduplicate, DeleteContext to drop bulky raw responses after use, and never park full email bodies or packet captures in context.
  • Sizing reality: incident volume multiplied by playbook complexity drives database growth, so archive and purge policies on old incidents are part of the job.
08

Platform: Linux & Git

how the server and the content are managed

Linux

XSOAR 6.x runs on Red Hat Enterprise Linux (RHEL), CentOS, Ubuntu, or Oracle Linux. It is installed by a shell installer and runs as the demisto systemd service. Engines follow the same pattern.

Git

Content packs live in GitHub. demisto-sdk validate and lint run in GitHub Actions, then a pull request (PR) review, upload to a development instance, and promotion to production. Branch per change, semantic version per pack.

09

Linux commands

the basics, and the ones that matter on a security box

Moving around and looking at files

pwd
Print working directory — where am I right now.
ls -lah
List files. -l long form with permissions, -a include hidden files, -h human-readable sizes.
cd /var/log
Change directory. cd .. goes up one, cd ~ goes home, cd - returns to the previous directory.
cat file.log
Print a whole file to the screen.
less file.log
Page through a large file. /word searches, q quits, G jumps to the end.
head -n 20 file.log
First 20 lines. tail -n 20 gives the last 20.
tail -f /var/log/demisto/server.log
Follow a log live as new lines are written. The single most-used troubleshooting command.
wc -l file.log
Word count. -l counts lines — useful for "how many events."

Creating, copying, moving, deleting

touch file.txt
Create an empty file, or update its timestamp.
mkdir -p a/b/c
Make a directory. -p creates every missing parent in the path.
cp -r src/ dst/
Copy. -r means recursive, required for directories.
mv old.txt new.txt
Move or rename — same command for both.
rm -rf dir/
Remove recursively and forcibly. No undo. Verify the path before you press enter.
ln -s /path/target linkname
Create a symbolic link — a pointer to a file elsewhere.

Permissions and ownership

chmod 750 script.sh
Change mode. Three digits: owner, group, others. 4 = read, 2 = write, 1 = execute, added together. So 750 is owner read/write/execute, group read/execute, others nothing.
chmod +x script.sh
Add the execute bit so a script can run.
chown user:group file
Change the owning user and group.
sudo command
Substitute user do — run one command as root. sudo -l lists what you are allowed to run.
id / whoami
Show your user, groups, and identifiers.
/etc/passwd · /etc/shadow · /etc/sudoers
User accounts, password hashes, and sudo rules. Changes to these three are high-severity file-integrity events.

Searching and text processing — the analyst's toolkit

grep -i "failed" auth.log
Find matching lines. -i ignores case, -v inverts the match, -r searches recursively, -c counts, -E enables extended regular expressions.
grep -rn "api_key" /opt/app/
Recursive search showing the file name and line number for each hit.
awk '{print $1, $9}' access.log
Field extraction. $1 is the first whitespace-separated column. Use -F, to split on commas instead.
sed 's/old/new/g' file
Stream editor — find and replace. g means every occurrence on the line, not just the first.
sort | uniq -c | sort -rn
The classic top-talkers pipeline: sort, count duplicates, then sort by count descending.
cut -d',' -f2,5 data.csv
Cut columns by delimiter — field 2 and 5 from a comma-separated file.
find / -name "*.conf" -mtime -1
Find files by name, and by modification time — here, changed in the last day.
jq '.items[] | .name' out.json
Query JSON on the command line. Essential when testing an API response before writing the integration.

Pipes and redirection — how commands chain

cmd1 | cmd2
Pipe: send the output of the first command as input to the second.
cmd > file
Redirect output to a file, overwriting it. >> appends instead.
cmd 2> err.log
Redirect only errors. 2>&1 merges errors into normal output.
cmd && cmd2
Run the second command only if the first succeeded. || runs it only if the first failed.

Processes, services, and resources

ps aux | grep python
List all running processes and filter them.
top / htop
Live view of processor and memory use by process.
kill -9 1234
Terminate a process by its identifier. -9 is the forced kill.
systemctl status demisto
Check a service. Also start, stop, restart, and enable for boot persistence.
journalctl -u demisto -f
Follow a systemd service's logs live.
df -h / du -sh dir/
Disk free by filesystem, and disk used by a directory. First thing to check when ingestion stops.
free -h
Memory in use and available.
crontab -e
Edit scheduled jobs for the current user.

Networking and transfer

ip a
Show network interfaces and addresses. The modern replacement for ifconfig.
ss -tulpn
Socket statistics — listening ports with the owning process. Replaces netstat.
curl -s -H "Authorization: Bearer $TOK" https://api/x
Make an HTTP request. -s silent, -H header, -X POST sets the method, -d sends a body. This is how you prove an API works before coding the integration.
dig example.com
Query the Domain Name System. nslookup is the older equivalent.
ping / traceroute host
Reachability and the path packets take to get there.
ssh user@host
Secure Shell — remote login. scp file user@host:/path copies files over the same channel.
tcpdump -i eth0 port 443 -w out.pcap
Capture packets to a packet capture (PCAP) file for later analysis.

Packages, archives, and containers

yum install pkg / dnf install pkg
Install a package on Red Hat family systems. apt install pkg on Debian and Ubuntu.
tar -czf out.tar.gz dir/
Create a compressed archive. -xzf extracts one.
docker ps -a
List containers, including stopped ones. docker logs <id> shows their output — how you debug a failing automation image.
docker exec -it <id> /bin/bash
Open a shell inside a running container.
10

Python language

the fundamentals every automation uses

Data types — what you will be asked to name

str
Text. "hello". Immutable — you cannot change it in place, only build a new one.
int / float
Whole numbers and decimals.
bool
True or False, capitalized.
list
Ordered, changeable sequence: [1, 2, 3]. Indexed from zero.
tuple
Ordered but unchangeable: (1, 2).
dict
Key and value pairs: {"ip": "1.2.3.4"}. This is what JSON becomes when parsed — the single most important type in this job.
set
Unordered collection of unique values: {1, 2}. Useful for deduplicating indicators.
None
The absence of a value. Test it with if x is None, not == None.

Control flow and functions

# Indentation defines blocks — Python has no braces
if score >= 3:
    verdict = 'malicious'
elif score == 2:
    verdict = 'suspicious'
else:
    verdict = 'benign'

# Loop over a list; enumerate() gives you the index too
for i, ip in enumerate(ip_list):
    print(f'{i}: {ip}')        # f-string: inline variables

# while loops until the condition is false
while has_more_pages:
    page += 1

# A function: def, name, parameters, optional default, return
def score_indicator(value, threshold=2):
    """Docstring — what this does."""
    return value >= threshold
  • break exits a loop early; continue skips to the next iteration.
  • Comparison: == equal, != not equal, and, or, not, and in for membership.
  • Indentation is syntax, not style. Four spaces is the standard.

Working with dictionaries and lists — the daily work

alert = {'id': 101, 'src': '10.0.0.5', 'tags': ['c2', 'beacon']}

alert['src']                 # direct access — errors if the key is missing
alert.get('user', 'unknown')  # safe access with a default — use this
alert.keys()  alert.values()  alert.items()   # iterate over parts

for key, value in alert.items():
    print(key, value)

# List comprehension — build a new list in one line
bad = [i for i in indicators if i['score'] >= 2]

# Common list operations
items.append(x)      # add one to the end
items.extend(other)  # add all of another list
len(items)           # how many
items[0]  items[-1]  items[1:3]   # first, last, slice
sorted(items, key=lambda x: x['score'], reverse=True)

The interview trap: alert['user'] raises a KeyError if the key does not exist. alert.get('user') returns None instead. In an integration parsing an unpredictable API response, always use .get().

JSON and API calls — the two libraries you will name

import json, requests

# JSON: loads = text into Python, dumps = Python into text
data = json.loads(response_text)          # string  -> dict
text = json.dumps(data, indent=2)         # dict    -> string

# A basic REST call with requests
resp = requests.get(
    'https://api.example.com/alerts',
    headers={'Authorization': f'Bearer {token}'},
    params={'limit': 50},
    timeout=30,              # always set a timeout
    verify=True               # certificate validation on
)
resp.raise_for_status()      # raise an error on 4xx / 5xx
alerts = resp.json()         # parse the body into a dict

Inside XSOAR you normally use BaseClient._http_request instead of calling requests directly, because it already handles proxy settings, certificate verification, retries, and error formatting. Knowing both, and saying why you prefer the platform one, is the strong answer.

Errors, files, and classes

# Exception handling — never let an integration die silently
try:
    result = risky_call()
except requests.Timeout:
    result = None                 # handle a specific error first
except Exception as e:
    return_error(f'Call failed: {e}')  # broad catch last
finally:
    cleanup()                     # runs either way

# Files — "with" closes the handle automatically
with open('/tmp/out.json', 'w') as f:
    f.write(json.dumps(data))

# A class: blueprint, constructor, method
class Client:
    def __init__(self, base_url, token):   # runs on creation
        self.base_url = base_url
        self.token = token

    def get(self, path):                   # self = this instance
        return requests.get(self.base_url + path)

Idioms worth having ready

f'{name} scored {score}'
An f-string — the modern way to build text with variables inside.
', '.join(list_of_strings)
Join a list into one string with a separator.
text.split(',')
Split a string into a list on a delimiter.
text.strip()
Remove leading and trailing whitespace. Also .lower(), .upper(), .replace().
isinstance(x, dict)
Type check before you index into something an API returned.
list(set(indicators))
Deduplicate a list by converting to a set and back.
re.search(r'\d+', text)
Regular expression search from the re module. The r prefix means a raw string, so backslashes stay literal.
datetime.utcnow().isoformat()
Timestamps for last-run state and event times. Keep everything in Coordinated Universal Time (UTC).
pip install requests
Install a package. pip freeze > requirements.txt records exact versions for reproducible builds.
11

Your defensible numbers

say these; back them up
  • 15+ years in security. Top Secret / Sensitive Compartmented Information (TS/SCI) clearance. Department of Defense, Federal, Enterprise, Health, and Finance.
  • XSOAR playbook engineering at RedMatter and Palo Alto Networks — Federal Housing Finance Agency Splunk Enterprise Security notables feeding XSOAR response pipelines — and at Xbitium across XSIAM and XDR.
  • 12 terabytes per day at 150,000+ events per second (EPS); 40% reduction in Mean Time To Respond; 25 to 50% false-positive reduction.
  • Python microservices built with FastAPI and Flask, REST APIs, and webhooks; detection as code through GitHub Actions — the same continuous-integration discipline that SOAR content needs.
  • Preferred-skill coverage: Splunk Enterprise Security (deep), Cortex XSIAM and XDR, ServiceNow ticketing flows, and Amazon Web Services and Microsoft Azure integrations.
12

Rapid-fire drill

30-second answers

Click a card to reveal the answer. These are the classic screening questions.

What does SOAR stand for?reveal
Security Orchestration, Automation, and Response. Orchestration connects the tools, automation removes the manual steps, response is the containment and remediation at the end.
Context vs. incident fields?reveal
Context is the working JSON scratchpad per investigation — machine-readable, and what playbook logic operates on. Fields are curated, typed, searchable, reportable data surfaced in layouts.
Classifier vs. mapper?reveal
The classifier picks the incident type. The mapper populates the fields.
What is DBotScore?reveal
Demisto Bot Score — a vendor-agnostic reputation object scored 0 to 3 (None, Good, Suspicious, Bad) that unifies verdicts across enrichment sources and drives indicator verdicts platform-wide.
What is an engine?reveal
A remote execution proxy for segmented networks — integrations run on the engine, so the main server never needs direct access to that segment.
What is a job?reveal
A scheduled or feed-triggered playbook run that is not tied to a fetched incident. Cron for playbooks.
What is mirroring?reveal
Continuous two-way synchronization of fields and comments with an external system, using get-remote-data and update-remote-data with a directional mapper.
What is an External Dynamic List?reveal
An indicator list served over HTTP that firewalls and proxies consume directly for blocking — intelligence turned into enforcement with no human step.
What is a data collection task?reveal
A form sent to a human by email or chat. The playbook waits, and the response feeds back into context. This is how you gate containment on approval.
What is a pre-processing rule?reveal
Ingest-time logic that drops, links, or runs a script on an incoming incident before any playbook runs. The cheapest place to kill noise.
What is demisto-sdk?reveal
The official command line tool for linting, validating, testing, and uploading content — the backbone of SOAR continuous integration and delivery.
How does fetch-incidents avoid duplicates?reveal
By storing and advancing last-run state with demisto.getLastRun() and demisto.setLastRun() every cycle, with pre-processing rules or deduplication playbooks as a second layer.
Why does outputs_key_field matter?reveal
It tells XSOAR which field uniquely identifies a record, so repeat runs update the existing context entry instead of appending duplicates.
Python: list vs. dictionary?reveal
A list is an ordered sequence accessed by numeric position. A dictionary is key and value pairs accessed by name. Parsed JSON becomes dictionaries and lists nested together.
Python: why use .get() instead of brackets?reveal
Bracket access raises a KeyError if the key is missing and kills the script. .get() returns None or a default you supply — essential when parsing an API response you do not fully control.
Linux: how do you check a stuck service?reveal
systemctl status <service> for state, journalctl -u <service> -f to follow its logs live, df -h for a full disk, and ss -tulpn to confirm it is actually listening.
Linux: what does chmod 750 mean?reveal
Owner gets read, write, and execute (4+2+1). Group gets read and execute (4+1). Others get nothing.
13

Abbreviation decoder

every short form on this page, spelled out
SOAR
Security Orchestration, Automation, and Response
XSOAR
eXtended Security Orchestration, Automation, and Response
XSIAM
Extended Security Intelligence and Automation Management
SIEM
Security Information and Event Management
EDR
Endpoint Detection and Response
XDR
Extended Detection and Response
NDR
Network Detection and Response
IAM
Identity and Access Management
ITSM
Information Technology Service Management
TIM
Threat Intelligence Management
IOC
Indicator of Compromise
EDL
External Dynamic List
SOC
Security Operations Center
IR
Incident Response
MTTR
Mean Time To Respond (or Resolve)
SLA
Service Level Agreement
API
Application Programming Interface
REST
Representational State Transfer
JSON
JavaScript Object Notation
HTTP
HyperText Transfer Protocol
URL
Uniform Resource Locator
OAuth2
Open Authorization, version 2
HMAC
Hash-based Message Authentication Code
MFA
Multi-Factor Authentication
LDAP
Lightweight Directory Access Protocol
AD
Active Directory
SPL
Search Processing Language (Splunk)
KQL
Kusto Query Language (Microsoft)
XQL
XQL Query Language (Cortex XSIAM and XDR)
ES
Enterprise Security (the Splunk premium application)
CIM
Common Information Model (Splunk's normalization standard)
MISP
Malware Information Sharing Platform
STIX / TAXII
Structured Threat Information eXpression / Trusted Automated eXchange of Intelligence Information
RTR
Real Time Response (CrowdStrike)
CLI
Command Line Interface
SDK
Software Development Kit
CI/CD
Continuous Integration and Continuous Delivery (or Deployment)
PR
Pull Request
UI
User Interface
DB
Database
SaaS
Software as a Service
MSSP
Managed Security Service Provider
DMZ
Demilitarized Zone (a screened network segment)
RHEL
Red Hat Enterprise Linux
SSH
Secure Shell
DNS
Domain Name System
IP
Internet Protocol
PCAP
Packet Capture
EPS
Events Per Second
UTC
Coordinated Universal Time
TS/SCI
Top Secret / Sensitive Compartmented Information
RBA
Risk-Based Alerting
UEBA
User and Entity Behavior Analytics
NSM
Network Security Monitoring