Rules Syntax

Overview

Order of execution

First, the rules with 0 levels are tried, and then all the other rules in a decreasing order by their level. If the level is the same, the order will be decided based on the rules list in /var/ossec/etc/ossec.conf file. Note, for rules which have some requirement (for example if_sid), the requirement is tried first.

Options

  • rule

    Defines a rule

    Attributes:

    • level

      • Specifies the level of the rule. Alerts and responses use this value.

      • Allowed: Any number (0 to 16)

    • id

      • Specifies the ID of the rule.

      • Allowed: Any number from 100 to 99999

    • maxsize

      • Specifies the maximum size of the event.

      • Allowed: Any number from 1 to 99999

    • frequency

      • Specifies the number of times the rule must have matched before firing. The number that triggers the rule is actually 2 more than this setting.

      • Allowed: Any number from 1 to 999

      • Example: frequency=”2” would mean the rule must be matched 4 times

      Note

      More information about how frequency is counted can be found in this thread.

    • noalert

      • Specifies whether the rule generates an alert or not in a sense, that if it does, no new rules are tried, except the rules which specify this in their if_sid. Setting this to 1 is useful if trying other rules are the sensible thing to do if this one matches, but it’s child rules (rules which specify this in their if_sid) do not.

      • Allowed: 0 or 1

      • Default: 0

    • timeframe

      • The timeframe in seconds.

      • This option is intended to be used with the frequency option.

      • Allowed: Any number from 1 to 9999

    • ignore

      • The time (in seconds) to ignore this rule after firing it (to avoid floods).

      • Allowed: Any number from 1 to 9999

    • overwrite

      • Used to supercede an OSSEC rule with local changes.

      • This is useful to change the level or other options of rules included with OSSEC.

      • Allowed yes

  • match

  • regex

  • pcre2

    • A string using the pcre2 syntax to match a log message.

    • Allowed: Any pcre2 valid string

  • decoded_as

  • category

    • The decoded category to match (ids, syslog, firewall, web-log, squid or windows).

    • Allowed: Any category categories

  • srcip

    • Any IP address or CIDR block to be compared to an IP decoded as srcip.

    • Use “!” to negate it.

    • Allowed: Any srcip

  • dstip

    • Any IP address or CIDR block to be compared to an IP decoded as dstip.

    • Use “!” to negate it.

    • Allowed: Any dstip

  • extra_data

    • Any string that is decoded into the extra_data field.

    • Allowed: Any string.

  • user

  • program_name

  • hostname

  • time

    • Time that the event was generated.

    • Allowed: Any time range (hh:mm-hh:mm)

    • Example: <time>6 am - 6 pm</time>

  • weekday

    • Week day that the event was generated. Multiple entries can be separated by commas.

    • Allowed: monday - sunday, weekdays, weekends

  • id

  • url

  • if_sid

    • Matches if the ID has matched.

    • Allowed: Any rule id

  • if_group

    • Matches if the group has matched before.

    • Allowed: Any Group

  • if_level

    • Matches if the level has matched before.

    • Allowed: Any level from 1 to 16

  • if_matched_sid

    • Matches if an alert of the defined ID has been triggered in a set number of seconds.

    • This option is used in conjunction with frequency and timeframe.

    Note

    Rules at level 0 are discarded immediately and will not be used with the if_matched_ rules. The level must be at least 1, but the <no_log> option can be added to the rule to make sure it does not get logged.

    • Allowed: Any rule id

  • if_matched_group

    • Matches if an alert of the defined group has been triggered in a set number of seconds.

    • This option is used in conjunction with frequency and timeframe.

    • Allowed: Any group

  • same_id

    • Specifies that the decoded id must be the same.

    • This option is used in conjunction with frequency and timeframe.

    • Example: <same_id />

  • same_source_ip

    • Specifies that the decoded source ip must be the same.

    • This option is used in conjunction with frequency and timeframe.

    • Example: <same_source_ip />

  • same_source_port

    • Specifies that the decoded source port must be the same.

    • This option is used in conjunction with frequency and timeframe.

    • Example: <same_source_port />

  • same_dst_port

    • Specifies that the decoded destination port must be the same.

    • This option is used in conjunction with frequency and timeframe.

    • Example: <same_source_port />

  • same_location

    • Specifies that the location must be the same.

    • This option is used in conjunction with frequency and timeframe.

    • Example: <same_location />

  • same_user

    • Specifies that the decoded user must be the same.

    • This option is used in conjunction with frequency an timeframe.

    • Example: <same_user />

  • description

    • Rule description.

    • Allowed: Any string

  • list

    Preform a CDB lookup using an ossec list. This is a fast on disk database which will always find keys within two seeks of the file.

    Attributes:

    • field

      Field that is used as the key to look up in the CDB file:

      • Value: srcip

      • Value: srcport

      • Value: dstip

      • Value: dstport

      • Value: extra_data

      • Value: user

      • Value: url

      • Value: id

      • Value: hostname

      • Value: program_name

      • Value: status

      • Value: action

    • lookup

      This is the type of lookup that is preformed:

      • Value: match_key

        • Positive key match: field is the key to search within the cdb and will match if they key is present.

        • This is the default if no lookup is specified.

      • Value: not_match_key

        • Negative key match: field is the key to search and will match if it IS NOT present in the database.

      • Value: match_key_value

        • Key and Value Match: field is searched for in the cdb and if found the value will be compared with regex from attribute check_value.

        Note

        This feature is not yet complete.

      • Value: address_match_key

        • Positive key match: field is an IP address and the key to search within the cdb and will match if they key is present.

      • Value: not_address_match_key

        • Negative key match: field is an IP address the key to search and will match if it IS NOT present in the database.

      • Value: address_match_key_value

        • Key and Value Match: field is an IP address searched for in the cdb and if found the value will be compared with regex from attribute check_value.

        Note

        This feature is not yet complete.

    • check_value

      • regex pattern for matching on the value pulled out of the cdb when using lookup types: address_match_key_value, match_key_value

    Allowed:

    Path to the CDB file to be used for lookup from the OSSEC directory. This file must also be included in the ossec.conf file.

    Example:

    <rule id="100000" level="7">
      <list lookup="match_key" field="srcip">path/to/list/file</list>
      <description>Checking srcip against cdb list file</description>
    </rule>
    
  • info

    Extra information may be added through the following attributes:

    Attributes:

    • type

      • Value: text

        This is the default when no type is selected. Just used for additional information about the alert/event.

      • Value: link

        Link to more information about the alert/event.

      • Value: cve

        The CVE Number related to this alert/event.

      • Value: ovsdb

        The osvdb id related to this alert/event.

    Allowed: String but content is dependent on the type attribute.

    Example:

    <rule id="502" level="3">
        <if_sid>500</if_sid>
        <options>alert_by_email</options>
        <match>Ossec started</match>
        <description>Ossec server started.</description>
        <info type="link">http://ossec.net/wiki/Rule:205</info>
        <info type="cve">2009-1002</info>
        <info type="osvdb"> 61509</info>
        <info type="text">Internal Why we are running this run in our company</info>
        <info>Type text is the default</info>
    </rule>
    
  • options

    Additional rule options

    Allowed:

    • alert_by_email
      • Always alert by email.

      • Example: <options>alert_by_email</options>

    • no_email_alert
      • Never alert by email.

      • Example: <options>no_email_alert</options>

    • no_log
      • Do not log this alert.

      • Example: <options>no_log</options>

  • check_diff

    Used to determine when the output of a command changes.

    Usage: <check_diff />

  • group

    • Add additional groups to the alert. Groups are optional tags added to alerts. They can be used by other rules by using if_group or if_matched_group, or by alert parsing tools to categorize alerts.

    Example: <group>group1, group2</group>