Skip to main content
Version: Next

Introduction

An Event is the runtime representation of an item being processed by crowdsec. It can represent:

  • a Log line being parsed: Type is set to log, and Line, Parsed and Meta are populated
  • an appsec rule match (Appsec holds the WAF rule match info)
  • an overflow being reprocessed (Overflow is used)

The Event object is modified by parsers, scenarios, and passed along. The representation of the object can be found here : Event object documentation.

Event Object : Log Line​

When Event is a log line, evt.GetType() returns log, and the following fields are used:

  • Meta and Parsed maps are holding parsing results.
  • Line holds the representation of the original Log line.

Event Object : Overflow​

When Event is an overflow being reprocessed (reprocess: true in the originating scenario), evt.GetType() returns appsec, and the Overflow object is used.

Event Object : Appsec​

When Event is an event from the WAF/Appsec engine, evt.GetType() returns appsec, and the Appsec field is used, more specifically Appsec.MatchedRules.

Event Methods​

Logs & Alerts Helpers​

Event.Time​

The event object holds a Time field that is set to the date of the event (in time-machine mode) or the time of event acquisition (in live mode). As it is a golang's time.Time object, all the time helpers are available, but only a few are showcased here.

Event.Time.Hour() int​

Returns the hour of the day of the event.

filter: "evt.Meta.log_type == '...' && (evt.Time.Hour() >= 20 || evt.Time.Hour() < 6)

Will detect if the event happened between 8pm and 6am (NWO).

Event.Time.Weekday().String() string​

Returns the day of the week as a string (Monday, Tuesday etc.).

filter: "evt.Meta.log_type == '...' && evt.Time.Weekday().String() in ['Saturday', 'Sunday']

Will detect if the event happend over the weekend (NWD).

GetMeta(Key) Value​

Returns the first value for the Key Meta if it exists in the event.

evt.GetMeta("foobar")

SetMeta(key, value) bool​

Sets the value of key to value in the Meta map.

evt.SetMeta('foobar', 'toto)

GetType() String​

Returns the type of event, overflow, appsec or log.

evt.GetType() in ["log", "appsec"]

ParseIPSources() []net.IP​

Returns the list of IPs attached to the event, for both overflow and log type.

SetParsed(key, value) bool​

Sets the value of key to value in the Parsed map.

Appsec Helpers​

If the Event is the result of a rule being, matched, Event.Appsec is present.

Appsec.GetVar(name) value​

Returns the value of the Appsec var name.

evt.Appsec.GetVar("foobar")

Appsec.MatchedRules​

MatchedRules is the list of rules that matched in the HTTP Request. It is an array of map, and each entry contains the following keys:

  • id, name, msg, rule_type, tags, file, confidence, revision, secmark, accuracy, severity, kind

evt.Appsec.MatchedRules and use below functions

Various filtering methods are available:

  • MatchedRules.ByAccuracy(accuracy string) MatchedRules
  • MatchedRules.ByDisruptiveness(is bool) MatchedRules
  • MatchedRules.ByID(id int) MatchedRules
  • MatchedRules.ByKind(kind string) MatchedRules
  • MatchedRules.BySeverity(severity string) MatchedRules
  • MatchedRules.ByTag(match string) MatchedRules
  • MatchedRules.ByTagRx(rx string) MatchedRules
  • MatchedRules.ByTags(match []string) MatchedRules
  • MatchedRules.GetField(field Field) []interface{}
  • MatchedRules.GetHash() string
  • MatchedRules.GetMatchedZones() []string
  • MatchedRules.GetMethod() string
  • MatchedRules.GetName() string
  • MatchedRules.GetRuleIDs() []int
  • MatchedRules.GetURI() string
  • MatchedRules.GetVersion() string
  • MatchedRules.Kinds() []string

Example usage would be to have on_match rules to alter the WAF remediation:

on_match:
- filter: |
any( evt.Appsec.MatchedRules, #.name == "crowdsecurity/vpatch-env-access") and
...
apply:
- SetRemediation("allow")

You can view detailed MatchedRules doc here.

Source specific helpers​

Source.GetValue() string​

Return the Source.Value field value of a Source.

Source.GetScope() string​

Return the Source.Scope field value of Source (ip, range ...)