SIEM Export¶
ARX supports exporting audit events and security telemetry to external SIEM (Security Information and Event Management) systems. This guide covers configuring each supported SIEM destination, testing connectivity, HMAC signature verification for webhooks, and error tracking.
Supported Destinations¶
| Type | integration_type |
Description |
|---|---|---|
| Splunk HEC | splunk |
Splunk HTTP Event Collector |
| Microsoft Sentinel | sentinel |
Azure Monitor / Log Analytics workspace |
| Syslog (CEF) | syslog |
Common Event Format over syslog protocol |
| Generic Webhook | webhook |
Any HTTP endpoint with HMAC signature verification |
Managing SIEM Integrations¶
All SIEM endpoints require the admin role and are accessed under /v1/settings/siem.
List Integrations¶
GET /v1/settings/siem
Returns all configured SIEM integrations for the organization.
Create an Integration¶
POST /v1/settings/siem
{
"integration_type": "splunk",
"name": "Production Splunk",
"config": {
"endpoint": "https://splunk.example.com:8088/services/collector",
"token": "your-hec-token",
"index": "arxsec",
"source": "arxsec-api",
"sourcetype": "_json"
},
"enabled": true
}
Update an Integration¶
PUT /v1/settings/siem/{integration_id}
Supports partial updates -- only include the fields you want to change.
Delete an Integration¶
DELETE /v1/settings/siem/{integration_id}
Returns 204 No Content.
Test an Integration¶
POST /v1/settings/siem/{integration_id}/test
Sends a test event to verify connectivity. Returns:
{
"success": true,
"message": "Test event sent successfully"
}
or:
{
"success": false,
"message": "Connection test failed: <error details>"
}
Configuring Splunk HEC¶
Prerequisites¶
- Enable HTTP Event Collector (HEC) on your Splunk instance.
- Create a new HEC token with the target index configured.
- Ensure the ARX API server can reach the Splunk HEC endpoint.
Configuration¶
{
"integration_type": "splunk",
"name": "Splunk HEC",
"config": {
"endpoint": "https://splunk.example.com:8088/services/collector",
"token": "your-hec-token",
"index": "arxsec",
"source": "arxsec-api",
"sourcetype": "_json"
}
}
| Field | Required | Description |
|---|---|---|
endpoint |
Yes | Full URL of the Splunk HEC endpoint |
token |
Yes | HEC authentication token |
index |
No | Target Splunk index (defaults to HEC token's default index) |
source |
No | Source identifier for events |
sourcetype |
No | Splunk sourcetype (default: _json) |
Splunk Search¶
After configuration, events appear in Splunk and can be searched:
index=arxsec source=arxsec-api | stats count by action_type
Configuring Microsoft Sentinel¶
Prerequisites¶
- Create a Log Analytics workspace in Azure.
- Note the Workspace ID and generate a Shared Key (primary or secondary).
- Ensure the ARX API server can reach
https://<workspace-id>.ods.opinsights.azure.com.
Configuration¶
{
"integration_type": "sentinel",
"name": "Azure Sentinel",
"config": {
"workspace_id": "your-workspace-id",
"shared_key": "your-shared-key",
"log_type": "ARXSecAudit"
}
}
| Field | Required | Description |
|---|---|---|
workspace_id |
Yes | Log Analytics workspace ID |
shared_key |
Yes | Log Analytics shared key |
log_type |
No | Custom log type name (default: ARXSecAudit). Appears as ARXSecAudit_CL in Sentinel. |
Querying in Sentinel¶
ARXSecAudit_CL
| where action_type_s == "agent.deployed"
| summarize count() by user_email_s, bin(TimeGenerated, 1h)
Configuring Syslog (CEF)¶
Prerequisites¶
- A syslog collector that accepts CEF-formatted messages (e.g., ArcSight, QRadar, rsyslog).
- Network connectivity from the ARX API server to the syslog endpoint.
Configuration¶
{
"integration_type": "syslog",
"name": "Syslog CEF",
"config": {
"host": "syslog.example.com",
"port": 514,
"protocol": "tcp",
"facility": "local0"
}
}
| Field | Required | Description |
|---|---|---|
host |
Yes | Syslog server hostname or IP |
port |
No | Syslog server port (default: 514) |
protocol |
No | tcp or udp (default: tcp) |
facility |
No | Syslog facility (default: local0) |
Events are formatted in CEF (Common Event Format):
CEF:0|ARXsec|ARX|1.0|agent.deployed|Agent Deployed|5|src=10.0.0.1 ...
Configuring Generic Webhook¶
Prerequisites¶
- An HTTP endpoint that accepts POST requests with JSON payloads.
- A shared secret for HMAC signature verification (recommended).
Configuration¶
{
"integration_type": "webhook",
"name": "Custom SIEM Webhook",
"config": {
"endpoint": "https://siem.example.com/api/events",
"secret": "your-hmac-secret",
"headers": {
"X-Custom-Header": "custom-value"
}
}
}
| Field | Required | Description |
|---|---|---|
endpoint |
Yes | Target webhook URL |
secret |
No | HMAC-SHA256 signing secret for payload verification |
headers |
No | Additional HTTP headers to include in requests |
HMAC Signature Verification¶
When a secret is configured, each webhook delivery includes an X-ARX-Signature header containing the HMAC-SHA256 signature of the request body:
X-ARX-Signature: sha256=a1b2c3d4e5f6...
To verify the signature on the receiving end:
import hashlib
import hmac
def verify_signature(payload_body: bytes, signature_header: str, secret: str) -> bool:
expected = "sha256=" + hmac.new(
secret.encode(), payload_body, hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature_header)
Always use a constant-time comparison function to prevent timing attacks.
Error Tracking¶
ARX tracks delivery errors for each SIEM integration:
| Field | Description |
|---|---|
error_count |
Number of consecutive delivery failures |
last_error |
Error message from the most recent failure |
last_event_at |
Timestamp of the last successfully delivered event |
When a test or delivery succeeds, the error_count is reset to 0 and last_error is cleared. This allows administrators to monitor integration health.
Audit Logging¶
All SIEM integration changes are recorded in the audit log:
| Event | Description |
|---|---|
siem.integration.created |
A new SIEM integration was configured |
siem.integration.updated |
An existing integration was modified |
siem.integration.deleted |
An integration was removed |
Sensitive configuration fields (token, shared_key, secret, password, api_key) are redacted in audit log entries.
Best Practices¶
- Test after creation. Always use the test endpoint to verify connectivity before relying on the integration.
- Monitor error counts. Set up alerting on
error_countincreases to catch delivery failures early. - Use HMAC verification for webhook destinations to ensure event integrity.
- Rotate credentials (HEC tokens, shared keys) on a regular schedule.
- Use TLS for all SIEM endpoints. Avoid sending security telemetry over unencrypted connections.