Collect ArcSight CEF logs
This document explains how to ingest ArcSight CEF logs to Google Security Operations using Bindplane agent.
ArcSight (now part of OpenText) uses the Common Event Format (CEF) for normalizing security events from multiple sources. The ArcSight SmartConnector collects events and forwards them in CEF format via syslog to downstream consumers including SIEM platforms.
Before you begin
Make sure you have the following prerequisites:
- A Google SecOps instance
- Windows Server 2016 or later, or Linux host with
systemd - Network connectivity between the Bindplane agent and the ArcSight SmartConnector host
- If running behind a proxy, ensure firewall ports are open per the Bindplane agent requirements
- Access to the OpenText support portal to download SmartConnector
- Administrative access to the SmartConnector server
Get Google SecOps ingestion authentication file
- Sign in to the Google SecOps console.
- Go to SIEM Settings > Collection Agents.
- Download the Ingestion Authentication File.
Save the file securely on the system where the Bindplane agent will be installed.
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 the Bindplane agent
Install the Bindplane agent on your Windows or Linux operating system according to the following instructions.
Windows installation
- Open Command Prompt or PowerShell as an administrator.
Run the following command:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietWait for the installation to complete.
Verify the installation by running:
sc query observiq-otel-collectorThe service should show as RUNNING.
Linux installation
- Open a terminal with root or sudo privileges.
Run the following command:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shWait for the installation to complete.
Verify the installation by running:
sudo systemctl status observiq-otel-collectorThe service should show as active (running).
Additional installation resources
For additional installation options and troubleshooting, see Bindplane agent installation guide.
Configure Bindplane agent to ingest syslog and send to Google SecOps
Locate the configuration file
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Edit the configuration file
Replace the entire contents of
config.yamlwith the following configuration:receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/arcsight_cef: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: '<customer_id>' endpoint: malachiteingestion-pa.googleapis.com log_type: ARCSIGHT_CEF raw_log_field: body service: pipelines: logs/arcsight_to_chronicle: receivers: - udplog exporters: - chronicle/arcsight_cef
Configuration parameters
Replace the following placeholders:
Receiver configuration:
listen_address: IP address and port to listen on:0.0.0.0to listen on all interfaces (recommended)- Port
514is the standard syslog port (requires root on Linux; use1514for non-root)
Exporter configuration:
creds_file_path: Full path to ingestion authentication file:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
customer_id: Customer ID copied from the Google SecOps consoleendpoint: Regional endpoint URL:- US:
malachiteingestion-pa.googleapis.com - Europe:
europe-malachiteingestion-pa.googleapis.com - Asia:
asia-southeast1-malachiteingestion-pa.googleapis.com - See Regional Endpoints for complete list
- US:
Save the configuration file
- After editing, save the file:
- Linux: Press
Ctrl+O, thenEnter, thenCtrl+X - Windows: Click File > Save
- Linux: Press
Restart the Bindplane agent to apply the changes
To restart the Bindplane agent in Linux, run the following command:
sudo systemctl restart observiq-otel-collectorVerify the service is running:
sudo systemctl status observiq-otel-collectorCheck logs for errors:
sudo journalctl -u observiq-otel-collector -f
To restart the Bindplane agent in Windows, choose one of the following options:
Command Prompt or PowerShell as administrator:
net stop observiq-otel-collector && net start observiq-otel-collectorServices console:
- Press
Win+R, typeservices.msc, and press Enter. - Locate observIQ OpenTelemetry Collector.
- Right-click and select Restart.
Verify the service is running:
sc query observiq-otel-collectorCheck logs for errors:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Press
Download ArcSight SmartConnector
- Sign in to the OpenText support portal.
- Find and download the latest ArcSight SmartConnector for Linux.
- Example filename:
ArcSight-Connector-Linux64-8.4.0.8499.0.bin.
Install the ArcSight SmartConnector
Upload the
.binfile to the SmartConnector server:scp ArcSight-Connector-Linux64-8.4.0.8499.0.bin user@your-smartconnector-host:/tmpSign in to the SmartConnector server using SSH and run:
cd /tmp chmod +x ArcSight-Connector-Linux64-8.4.0.8499.0.bin ./ArcSight-Connector-Linux64-8.4.0.8499.0.binFollow the interactive installer:
- Select installation directory (for example,
/opt/arcsight/connectors/current). - Accept the license.
- Select Install connector when prompted.
- Select installation directory (for example,
Configure ArcSight SmartConnector to send CEF to syslog
In the SmartConnector host, launch the destination wizard:
cd /opt/arcsight/connectors/current/bin ./arcsight connectorsIn the wizard, do the following:
- Select Add Destination.
- Select CEF Syslog.
Provide the following configuration details:
- Host/IP: Enter the Bindplane agent IP address.
- Port: Enter the Bindplane agent port number (for example,
514). - Protocol: Select UDP.
Finish the setup and restart the connector:
./arcsight agentsRun a check for connectivity (look for:
Successfully connected to syslog: X.X.X.X:514):tail -f /opt/arcsight/connectors/current/logs/agent.log
UDM mapping table
| Log field | UDM mapping | Logic |
|---|---|---|
| act | security_result.action_details | Directly mapped from the act field. |
| agt | principal.ip | Directly mapped from the agt field. |
| agt | principal.asset.ip | Directly mapped from the agt field. |
| app | network.application_protocol | Directly mapped from the app field. |
| art | metadata.event_timestamp.seconds | Directly mapped from the art field. |
| cs2 | additional.fields.value.string_value | Directly mapped from the cs2 field when cs2Label is EventlogCategory. |
| cs2Label | additional.fields.key | Directly mapped from the cs2Label field when its value is EventlogCategory. |
| cs3 | additional.fields.value.string_value | Directly mapped from the cs3 field when cs3Label is Process ID. |
| cs3Label | additional.fields.key | Directly mapped from the cs3Label field when its value is Process ID. |
| cs5 | additional.fields.value.string_value | Directly mapped from the cs5 field when cs5Label is Authentication Package Name. |
| cs5Label | additional.fields.key | Directly mapped from the cs5Label field when its value is Authentication Package Name. |
| cs6 | additional.fields.value.string_value | Directly mapped from the cs6 field when cs6Label is Logon GUID. |
| cs6Label | additional.fields.key | Directly mapped from the cs6Label field when its value is Logon GUID. |
| dhost | about.hostname | Directly mapped from the dhost field. |
| dhost | target.hostname | Directly mapped from the dhost field. |
| dntdom | about.administrative_domain | Directly mapped from the dntdom field. |
| dntdom | target.administrative_domain | Directly mapped from the dntdom field. |
| dproc | about.process.command_line | Directly mapped from the dproc field. |
| dproc | target.process.command_line | Directly mapped from the dproc field. |
| dst | principal.ip | Directly mapped from the dst field. |
| dst | principal.asset.ip | Directly mapped from the dst field. |
| dst | target.ip | Directly mapped from the dst field. |
| duid | target.user.userid | Directly mapped from the duid field. |
| duser | target.user.user_display_name | Directly mapped from the duser field. |
| dvc | about.ip | Directly mapped from the dvc field. |
| dvchost | about.hostname | Directly mapped from the dvchost field. |
| eventId | additional.fields.value.string_value | Directly mapped from the eventId field. |
| externalId | metadata.product_log_id | Directly mapped from the externalId field. |
| fname | additional.fields.value.string_value | Directly mapped from the fname field. |
| msg | metadata.description | Directly mapped from the msg field. |
| proto | network.ip_protocol | Directly mapped from the proto field. Translates protocol names to their respective constants (e.g., tcp to TCP). |
| rt | metadata.event_timestamp.seconds | Directly mapped from the rt field. |
| shost | about.hostname | Directly mapped from the shost field. |
| shost | principal.hostname | Directly mapped from the shost field. |
| src | principal.ip | Directly mapped from the src field. |
| src | principal.asset.ip | Directly mapped from the src field. |
| src | target.ip | Directly mapped from the src field. |
| sproc | principal.process.command_line | Directly mapped from the sproc field. |
| spt | principal.port | Directly mapped from the spt field. |
| spt | target.port | Directly mapped from the spt field. |
| additional.EventRecordID | additional.fields.value.string_value | Directly mapped from the ad.EventRecordID field. |
| additional.ThreadID | additional.fields.value.string_value | Directly mapped from the ad.ThreadID field. |
| additional.Opcode | additional.fields.value.string_value | Directly mapped from the ad.Opcode field. |
| additional.ProcessID | additional.fields.value.string_value | Directly mapped from the ad.ProcessID field. |
| additional.TargetDomainName | additional.fields.value.string_value | Directly mapped from the ad.TargetDomainName field. |
| additional.Version | additional.fields.value.string_value | Directly mapped from the ad.Version field. |
| deviceExternalId | about.asset.hardware.serial_number | Directly mapped from the deviceExternalId field. |
| deviceInboundInterface | additional.fields.value.string_value | Directly mapped from the deviceInboundInterface field. |
| deviceOutboundInterface | additional.fields.value.string_value | Directly mapped from the deviceOutboundInterface field. |
| PanOSConfigVersion | security_result.detection_fields.value | Directly mapped from the PanOSConfigVersion field. |
| PanOSContentVersion | security_result.detection_fields.value | Directly mapped from the PanOSContentVersion field. |
| PanOSDGHierarchyLevel1 | security_result.detection_fields.value | Directly mapped from the PanOSDGHierarchyLevel1 field. |
| PanOSDestinationLocation | target.location.country_or_region | Directly mapped from the PanOSDestinationLocation field. |
| PanOSRuleUUID | metadata.product_log_id | Directly mapped from the PanOSRuleUUID field. |
| PanOSThreatCategory | security_result.category_details | Directly mapped from the PanOSThreatCategory field. |
| PanOSThreatID | security_result.threat_id | Directly mapped from the PanOSThreatID field. |
| about.asset.asset_id | Generated by concatenating Palo Alto Networks., the vendor name (LF), and the deviceExternalId field. |
|
| extensions.auth.type | Set to AUTHTYPE_UNSPECIFIED if the event_name field contains logged on. |
|
| metadata.description | If the description field contains by followed by an IP address, the IP address is extracted and mapped to principal.ip and principal.asset.ip. |
|
| metadata.event_type | Determined based on a series of conditional checks on various fields, including event_name, principal_*, target_*, and device_event_class_id. The logic determines the most appropriate event type based on the available information. |
|
| metadata.log_type | Set to ARCSIGHT_CEF. |
|
| metadata.product_event_type | Generated by concatenating \[, the device_event_class_id field, \] -, and the name field. |
|
| metadata.product_name | Set to NGFW if the product_name field is LF. |
|
| principal.asset.ip | If the description field contains by followed by an IP address, the IP address is extracted and mapped to principal.ip and principal.asset.ip. |
|
| principal.ip | If the description field contains by followed by an IP address, the IP address is extracted and mapped to principal.ip and principal.asset.ip. |
|
| security_result.action | Set to ALLOW if the act field is alert, otherwise set to BLOCK. |
|
| security_result.severity | Set to HIGH if the sev field is greater than or equal to 7, otherwise set to LOW. |
Need more help? Get answers from Community members and Google SecOps professionals.