SIEM Integration¶
Send Rampart audit events to your existing security stack. Three output formats, works with any SIEM.
Output Formats¶
Works with: Splunk, QRadar, ArcSight, Exabeam
SIEM outputs supplement the default local JSONL audit trail. Delivery is best effort: the bounded secondary queue can drop exported events when full, and --syslog uses UDP without an authenticated delivery receipt. A local CEF file does not create a separate trust boundary. Configure a separately controlled collector and its retention/access policy when independent evidence is needed; export alone does not make stored events immutable. rampart audit verify checks local history and checkpoints, not remote SIEM evidence.
Wazuh Integration¶
Complete setup guide for Wazuh, the most popular open-source SIEM.
1. Configure Wazuh Agent¶
Add to /var/ossec/etc/ossec.conf:
<localfile>
<log_format>json</log_format>
<location>/home/YOUR_USER/.rampart/audit/*.jsonl</location>
<label key="source">rampart</label>
</localfile>
2. Add Custom Decoder¶
Create /var/ossec/etc/decoders/rampart_decoder.xml:
<decoder name="rampart">
<prematch>^{"id":</prematch>
<plugin_decoder>JSON_Decoder</plugin_decoder>
</decoder>
3. Add Custom Rules¶
Create /var/ossec/etc/rules/rampart_rules.xml:
<group name="rampart,ai_agent_security">
<!-- Base rule -->
<rule id="100300" level="0">
<decoded_as>json</decoded_as>
<field name="source">rampart</field>
<description>Rampart audit event</description>
</rule>
<!-- Allow (informational) -->
<rule id="100301" level="3">
<if_sid>100300</if_sid>
<field name="action">allow</field>
<description>Rampart: AI agent tool call allowed</description>
</rule>
<!-- Log (notable) -->
<rule id="100302" level="5">
<if_sid>100300</if_sid>
<field name="action">log</field>
<description>Rampart: AI agent tool call logged</description>
</rule>
<!-- Deny (alert) -->
<rule id="100303" level="10">
<if_sid>100300</if_sid>
<field name="action">deny</field>
<description>Rampart: AI agent tool call BLOCKED</description>
</rule>
<!-- High-frequency denials (possible attack) -->
<rule id="100305" level="12" frequency="5" timeframe="60">
<if_matched_sid>100303</if_matched_sid>
<description>Rampart: Multiple blocks in 60s — possible prompt injection</description>
</rule>
<!-- Credential access attempt -->
<rule id="100306" level="12">
<if_sid>100303</if_sid>
<field name="policy_name">protect-credentials|block-credential</field>
<description>Rampart: AI agent attempted credential access</description>
</rule>
<!-- Exfiltration attempt -->
<rule id="100307" level="13">
<if_sid>100303</if_sid>
<field name="policy_name">block-exfil|encoded-data-exfil</field>
<description>Rampart: AI agent attempted data exfiltration</description>
</rule>
</group>
4. Restart Services¶
Alert Levels¶
| Rampart Action | Wazuh Level | Description |
|---|---|---|
| allow | 3 | Informational |
| log | 5 | Notable |
| ask | 8 | Needs human review |
| deny | 10 | Blocked by policy |
| deny (credentials) | 12 | Credential access attempt |
| deny (exfiltration) | 13 | Data exfiltration attempt |
| 5+ denials in 60s | 12 | Possible prompt injection |
FIM Recommendations¶
AI agent hosts generate many files. Bump the FIM limit and exclude noise:
<syscheck>
<file_limit>
<enabled>yes</enabled>
<entries>500000</entries>
</file_limit>
<!-- Realtime on security-critical paths -->
<directories check_all="yes" realtime="yes">/home/*/.ssh</directories>
<directories check_all="yes" realtime="yes">/home/*/.rampart/policies</directories>
<!-- Skip build noise -->
<ignore type="sregex">node_modules|\.cache|\.npm|__pycache__|\.git/objects</ignore>
</syscheck>
Platform Support¶
| Feature | Linux | macOS | Windows |
|---|---|---|---|
--syslog | ✅ | ✅ | ❌ |
--cef (file) | ✅ | ✅ | ✅ |
| JSONL audit | ✅ | ✅ | ✅ |