Collect CyberArk EPM logs
Supported in:
This parser code transforms CyberArk EPM log data into a unified data model (UDM). It iterates through each event in the log, maps relevant fields to their corresponding UDM fields, handles specific data structures like "exposedUsers", and enriches the output with static vendor and product information.
Before you begin
- Ensure that you have a Google Security Operations instance.
- Ensure that you are using Windows 2016 or later, or a Linux host with systemd.
- If running behind a proxy, ensure firewall ports are open.
- Ensure that you have privileged access to the EPM Server Management Console.
Get Google SecOps ingestion authentication file
- Sign in to the Google SecOps console.
- Go to SIEM Settings > Collection Agents.
- Download the Ingestion Authentication File.
Get Google SecOps customer ID
- Sign in to the Google SecOps console.
- Go to SIEM Settings > Profile.
- Copy and save the Customer ID from the Organization Details section.
Install BindPlane Agent
- For Windows installation, run the following script:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
- For Linux installation, run the following script:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
- Additional installation options can be found in this installation guide.
Configure BindPlane Agent to ingest Syslog and send to Google SecOps
- Access the machine where BindPlane is installed.
Edit the
config.yaml
file as follows:receivers: tcplog: # Replace the below port <54525> and IP <0.0.0.0> with your specific values listen_address: "0.0.0.0:54525" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the creds location below according the placement of the credentials file you downloaded creds: '{ json file for creds }' # Replace <customer_id> below with your actual ID that you copied customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # You can apply ingestion labels below as preferred ingestion_labels: log_type: SYSLOG namespace: Cyberark_EPM raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog exporters: - chronicle/chronicle_w_labels
Restart the BindPlane Agent to apply the changes:
sudo systemctl restart bindplane
Configure Third-Party Event Forwarding in EPM
- Sign in to the EPM Server Management console.
- Go to Advanced > Server Configuration.
- In the Event Listeners section, locate the Third-party Listeners setting.
- Set the value to On to activate third-party listeners.
- Configure Syslog listener by providing the following details:
- Syslog Server IP: enter the IP address of the syslog server (Bindplane).
- Syslog Port: specify the port number of the syslog server (Bindplane).
- Protocol: choose the protocol configured in the syslog server (TCP or UDP).
- Format: select Syslog as the format for the logs.
- Click Save.
UDM Mapping Table
Log Field | UDM Mapping | Logic |
---|---|---|
agentId | principal.asset.asset_id | Concatenates "agentId:" with the value of the agentId field. |
computerName | principal.hostname | Directly maps the computerName field. |
displayName | metadata.description | Directly maps the displayName field. |
eventType | metadata.product_event_type | Directly maps the eventType field. |
exposedUsers.[].accountName | target.user.attribute.labels | Creates a label with key "accountName_[index]" and value from exposedUsers.[index].accountName. |
exposedUsers.[].domain | target.user.attribute.labels | Creates a label with key "domain_[index]" and value from exposedUsers.[index].domain. |
exposedUsers.[].username | target.user.attribute.labels | Creates a label with key "username_[index]" and value from exposedUsers.[index].username. |
filePath | target.file.full_path | Directly maps the filePath field. |
hash | target.file.sha1 | Directly maps the hash field. |
operatingSystemType | principal.platform | Maps "Windows" to "WINDOWS" if the operatingSystemType field is "Windows". |
policyName | security_result.rule_name | Directly maps the policyName field. |
processCommandLine | target.process.command_line | Directly maps the processCommandLine field. |
publisher | additional.fields | Creates a field with key "Publisher" and string_value from the publisher field. |
sourceProcessCommandLine | target.process.parent_process.command_line | Directly maps the sourceProcessCommandLine field. |
sourceProcessHash | target.process.parent_process.file.sha1 | Directly maps the sourceProcessHash field. |
sourceProcessSigner | additional.fields | Creates a field with key "sourceProcessSigner" and string_value from the sourceProcessSigner field. |
threatProtectionAction | security_result.action_details | Directly maps the threatProtectionAction field. |
metadata.event_timestamp | Sets the event timestamp to the log entry's create_time. | |
metadata.event_type | Hardcoded to "STATUS_UPDATE". | |
metadata.log_type | Hardcoded to "CYBERARK_EPM". | |
metadata.product_name | Hardcoded to "EPM". | |
metadata.vendor_name | Hardcoded to "CYBERARK". | |
security_result.alert_state | Hardcoded to "ALERTING". | |
userName | principal.user.userid | Directly maps the userName field. |
Changes
2023-08-22
- Newly created parser