Skip to main content

CrowdStrike Falcon Next-Gen SIEM

SIEM Platform

Synopsis

Creates a target that sends events to CrowdStrike Falcon Next-Gen SIEM over its HTTP Event Collector (HEC) ingestion endpoint. Supports batching, compression, and automatic load balancing across multiple endpoints.

Schema

- name: <string>
description: <string>
type: crowdstrike
pipelines: <pipeline[]>
status: <boolean>
properties:
endpoints:
- endpoint: <string>
auth_type: <string>
token: <string>
secret: <string>
index: <string>
source_type: <string>
source: <string>
batch_size: <numeric>
timeout: <numeric>
tcp_routing: <boolean>
use_compression: <boolean>
insecure_skip_verify: <boolean>
ca_name: <string>
server_name: <string>
cert_name: <string>
key_name: <string>
passphrase: <string>
min_tls_version: <string>
max_tls_version: <string>
field_format: <string>
debug:
status: <boolean>
dont_send_logs: <boolean>

Configuration

The following are the fields used to define the target:

FieldRequiredDefaultDescription
nameYTarget name
descriptionN-Optional description
typeYMust be crowdstrike
pipelinesN-Optional post-processor pipelines
statusNtrueEnable/disable the target

Endpoint

FieldRequiredDefaultDescription
endpointY-CrowdStrike HEC ingestion endpoint URL
auth_typeNtokenAuthentication type: token or secret
tokenY*-HEC token when using token auth
secretY*-Bearer token when using secret auth
max_bytesN4194304 (4 MB)Maximum size of a single request body or batch, in bytes
note

max_bytes caps the size of a single request body or batch. It behaves differently from max_size on the file-writing targets, and the difference is easy to get wrong:

  • An explicit max_bytes: 0 IS honoured and removes the ceiling. The value is read with Int64, which returns what you wrote — unlike max_size, which is read with MustInt64 and silently substitutes its default for a zero.
  • A negative value is rejected at configuration time with max_bytes must not be negative.

The ceiling is validated when the target is built and enforced again on every batch, so a value the receiving service will refuse fails early rather than per request.

* = token is required when auth_type is token; secret is required when auth_type is secret.

Event

FieldRequiredDefaultDescription
indexN-Default index
source_typeN-Default sourcetype for events
sourceN-Default source for events
batch_sizeN10000Number of events to batch before sending
timeoutN30Connection timeout in seconds

Connection

FieldRequiredDefaultDescription
tcp_routingNfalseEnable TCP routing header
use_compressionNtrueEnable gzip compression
field_formatN-Data normalization format. See applicable Normalization section

TLS

TLS is engaged by the endpoint URL scheme: an https:// endpoint enables it, an http:// endpoint does not. The CrowdStrike form writes a nested tls: block, so these keys are nested rather than top-level.

FieldRequiredDefaultDescription
tls.insecure_skip_verifyNfalseSkip server certificate verification. Use only for testing
tls.ca_nameN-CA bundle used to verify the server certificate. When unset, the host trust store is used; when set, it replaces the host trust store rather than adding to it
tls.server_nameN-SNI hostname override for the TLS handshake
tls.cert_nameN*-Client certificate for mutual TLS
tls.key_nameN*-Client private key for mutual TLS
tls.passphraseN-Passphrase for an encrypted private key
tls.min_tls_versionNtls1.2Minimum accepted TLS version (tls1.0, tls1.1, tls1.2, tls1.3)
tls.max_tls_versionNtls1.3Maximum accepted TLS version (tls1.0, tls1.1, tls1.2, tls1.3)

* = Mutual TLS requires both tls.cert_name and tls.key_name. Setting only one is a configuration error.

note

There is no tls.status. TLS is off when the tls: block is absent altogether; a status key inside the block is not read.

Targets saved before the nested block was introduced still carry the same keys at the root of properties, and the sender reads that older shape for as long as it is there. It migrates on the next save. The two shapes are never mixed: once a non-empty tls: block exists it is the complete statement, and any leftover flat key is ignored — with the single exception of insecure_skip_verify, which falls back to the root when the block does not set it.

note

TLS material fields (cert_name, key_name, ca_name, client_ca_name) accept any of the following:

  • File name — resolved relative to the service root directory. Nested paths such as certs/prod/server.pem are supported.
  • Absolute path — honored only if it resolves inside the service root. Any path that escapes the root is refused.
  • Inline PEM content — used verbatim when the value contains -----BEGIN.
  • Environment variable${ENV_VAR}.
  • Vault reference$secret{id=...} or $secret{store=...,ref=...}.

Scheduling

See Scheduling and Pool Behavior for interval and cron fields shared by all targets.

Debug Options

FieldRequiredDefaultDescription
debug.statusNfalseEnable debug logging
debug.dont_send_logsNfalseProcess logs but don't send to target (testing)

Details

HEC Modes: JSON and RAW

The target supports both JSON and RAW HEC ingestion modes. The mode is determined by the endpoint URL path, not by a separate configuration field.

An endpoint URL ending in /services/collector/event (or the default /services/collector) uses JSON mode, where each event is sent as a structured JSON object with metadata fields (index, sourcetype, source) embedded in the payload.

An endpoint URL ending in /services/collector/raw uses RAW mode, where events are sent as plain text with metadata passed as query parameters. RAW mode is useful for forwarding pre-formatted log lines that should not be wrapped in JSON structure. When the incoming pipeline data contains a _raw field, the target extracts its value and sends it as the raw event body.

Named Streams

Endpoint URLs can include a query parameter to define a named stream. For example, https://hec.example.com:8088/services/collector/raw?paloalto creates a stream named paloalto using RAW mode, while https://hec.example.com:8088/services/collector/event?winevent creates a stream named winevent using JSON mode.

Named streams allow routing different event types through separate HEC paths within a single target configuration. A pipeline selects the stream for an event by setting index or table.

Events carrying neither are delivered to the endpoint configured without a query parameter, which acts as the catch-all stream. An event naming a stream that no endpoint defines also falls back to the catch-all; if no catch-all exists, the event is rejected.

All endpoints sharing a stream name must use the same mode. Mixing a /raw endpoint and an /event endpoint under one stream is a configuration error and the target fails to initialize.

Content Hub Pipeline Pack

The siem_crowdstrike Content Hub pack ("CrowdStrike Falcon Next-Gen SIEM Automation Pack") processes Windows Event Logs, Linux Event Logs, and Syslog, normalizes them, and converts everything to CEF. It finishes by keeping only the _raw field, reducing each record to a single CEF-formatted string.

Endpoints receiving output from this pack should use RAW mode. RAW mode extracts _raw and sends it directly as the request body, whereas JSON mode would wrap the CEF string in a JSON envelope.

Stream Names

The pack assigns a stream name per log category, which the target resolves to a named HEC stream:

StreamLog category
SyslogSyslog messages (CEF, LEEF, or native, with vendor autodiscovery)
WinEventWindows Event Logs
WinSecurityWindows Security Event Logs
WinDNSWindows DNS logs
WinFirewallWindows Firewall logs
LinuxEventLinux Event Logs

Configure one RAW endpoint per stream to keep, using the stream name as the query parameter.

Each name is configurable in the pack through its matching *_stream field: syslog_stream, windows_event_stream, windows_security_stream, windows_dns_stream, windows_firewall_stream, and linux_event_stream. Each category can also be switched off through its keep_* toggle — keep_syslog, keep_windows_event, keep_windows_security, keep_windows_dns, keep_windows_firewall, and keep_linux_event — all of which default to true.

Delivery

When multiple endpoints are configured for a stream, the target shuffles them and tries each in turn until one accepts the batch. If every endpoint fails, the batch is retained for retry.

Examples

Basic

Send events to a single RAW endpoint using token auth...

targets:
- name: basic_crowdstrike
type: crowdstrike
properties:
endpoints:
- endpoint: "https://ingest.example.com/services/collector/raw"
auth_type: token
token: "YOUR-HEC-TOKEN"

Content Hub Pack Streams

Configure one RAW endpoint per stream produced by the siem_crowdstrike pack, plus a catch-all endpoint for events without a named stream...

targets:
- name: crowdstrike_streams
type: crowdstrike
properties:
endpoints:
- endpoint: "https://ingest.example.com/services/collector/raw?Syslog"
auth_type: token
token: "YOUR-HEC-TOKEN"
- endpoint: "https://ingest.example.com/services/collector/raw?WinEvent"
auth_type: token
token: "YOUR-HEC-TOKEN"
- endpoint: "https://ingest.example.com/services/collector/raw?WinSecurity"
auth_type: token
token: "YOUR-HEC-TOKEN"
- endpoint: "https://ingest.example.com/services/collector/raw?WinDNS"
auth_type: token
token: "YOUR-HEC-TOKEN"
- endpoint: "https://ingest.example.com/services/collector/raw?WinFirewall"
auth_type: token
token: "YOUR-HEC-TOKEN"
- endpoint: "https://ingest.example.com/services/collector/raw?LinuxEvent"
auth_type: token
token: "YOUR-HEC-TOKEN"
- endpoint: "https://ingest.example.com/services/collector/raw"
auth_type: token
token: "YOUR-HEC-TOKEN"

Mutual TLS

Authenticate to the endpoint with a client certificate and key, verified against a custom CA...

targets:
- name: crowdstrike_mtls
type: crowdstrike
properties:
endpoints:
- endpoint: "https://ingest.example.com/services/collector/raw"
auth_type: token
token: "YOUR-HEC-TOKEN"
cert_name: "client.crt"
key_name: "client.key"
ca_name: "ca-bundle.crt"