Utilize the full power of Clickhouse to inspect and alert on your data. Wirespeed utilizes OCSF to ingest events. We support the full OCSF schema, but are only utilizing a subset of fields at the moment. If you do not see a table or field below that you need, please contact support.
Familiarize yourself with the OCSF schema before writing queries.
The events table is the largest and most verbose table in our SIEM. Large or unbounded queries to this table will likely timeout or hit resource limits. It is suggested to always include a time filter when querying this or any other table.
We stringify a majority of the JSON fields in the OCSF schema to optimize for storage and query performance. You will see this with fields like src_endpoint. To query these fields you will want to use utility fields from Clickhouse like JSONExtractString(src_endpoint, 'ip') to extract their unique fields. Utilize the OCSF schema docs for understanding what fields are available on those objects.
Show Schema
Column
Type
id
UUID
count
Int64
message
String
ttl
String
status
LowCardinality(String)
time
DateTime64(3)
metadata.version
String
metadata.product.vendor_name
String
metadata.correlation_uid
String
severity
LowCardinality(String)
activity_id
Int64
class_uid
Int64
type_uid
Int64
raw_data
String
unmapped
String
type_name
LowCardinality(String)
category_uid
Int64
observables
Array(Tuple(name String, reputation String, type LowCardinality(String), type_id Int64, value String))
authentication_events - All events with a class name of “Authentication”
The tables above are filtered to only include the declared events, when running a query for authentication events you will consume your limits much slower by querying the authentication_events table, since it will not require filtering all of your global events. All columns present in the events table are present in the respective class event tables as well.
authentication_email_asn - Tracks login patterns by ASN per user
authentication_email_location - Identifies common login locations per user
authentication_email_ip - Detects common IP access patterns per user
authentication_email_user_agent - Detects common browser/device usage per user
authentication_email_hour_of_day - Detects common login time patterns per user
Show example
Identify all successful logins from a new country
Copy
SELECT *FROM authentication_events aeWHERE status_id = 1 AND ( JSONExtractString(src_endpoint, 'location', 'country'), `user.email_addr` ) NOT IN ( SELECT country, email_addr FROM authentication_email_location GROUP BY country, email_addr HAVING sum(success_count) > 0 ) AND ingested_at > now() - INTERVAL 1 DAY;
authentication_team_ip - Detects suspicious IP sources across the organization
authentication_team_user_agent - Tracks browser/device usage across the organization
authentication_team_hour_of_day - Analyzes common hours of activity across the organization
Show example
Identify all successful logins happening out of hours from a new IP
Copy
SELECT *FROM authentication_events aeWHERE status_id = 1 AND JSONExtractString(src_endpoint, 'ip') NOT IN ( SELECT ip FROM authentication_team_ip WHERE success_rate > 0 ) AND toHour(time) NOT IN ( SELECT hour_of_day FROM authentication_team_hour_of_day WHERE success_count >= 20 ) AND ingested_at > now() - INTERVAL 1 DAY;
Storing null values in Clickhouse can be considered an anti-pattern. Instead, identifiable default values are used. For strings this would be the empty string "". For Int64 columns this would be -12341234.