1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214
|
#
# Rule format :
#
# For more information about the fields described above and their meaning,
# please have a look to the IDMEF Draft located at :
#
# http://www.ietf.org/internet-drafts/draft-ietf-idwg-idmef-xml-14.txt
#
# If one of the IDMEF field you wish to add information too isn't covered in
# the rule language, please take the 5 minutes needed to implement a simple
# parsing function to the simple.c plugin distributed with Prelude LML.
#
# CREATING AND CONTRIBUTING RULES:
# Rulesets that you contribute to the Prelude-LML maintainer should follow
# these guidelines:
# - Avoid using .+ or .* in regex entries unless actually neccessary. Doing so
# will make your rule CPU-costly to implement.
# - Avoid capturing variables which you don't use. This causes unneccessary
# memory consumption.
# - At a minimum, include regex, classification().text,
# assessment.impact.severity, assessment.impact.type,
# assessment.impact.description.
# - If it's correct for this application, include last.
# - Put only a single field on each line of your rules.
# - Include a sample log entry with each rule.
# - Gather as many pieces of data, and fill as many IDMEF fields as possible
# from the log entry.
# - If a similar rule exists in another ruleset (same function, different
# software), use the classification().text from the other rule.
# - Use only the actual log message, none of the syslog headers (this generally
# includes timestamp, originating node, originating process, and pid).
# - Submit new rulesets to the prelude-devel mailing list for consideration.
#
#
# Below you will find a listing of most of the IDMEF fields Prelude-LML
# accepts. Where you see an item listed with (), it means that item is
# indexed. Indexing starts at 0, so, for example, an event with multiple
# targets would have the first target listed as target(0), followed by whatever
# IDMEF fields you use. See the existing rulesets for examples.
#
# - regex:
# A PCRE regex that should be matched to trigger the alert.
#
# - classification.text:
# The name of the alert, from one of the origins listed below.
#
# - classification.url:
# A URL at which the manager (or the human
# operator of the manager) can find additional information about the
# alert. The document pointed to by the URL may include an in-depth
# description of the attack, appropriate countermeasures, or other
# information deemed relevant by the vendor.
#
# - assessment.impact.severity:
# An estimate of the relative severity of the event.
# Possible values are: low, medium, high.
#
# - assessment.impact.completion:
# An indication of whether the analyzer believes the attempt that
# the event describes was successful or not.
# The permitted values are: failed, succeeded.
#
# - assessment.impact.type:
# The type of attempt represented by this event, in relatively broad
# categories.
# The permitted values are: admin, dos, file, recon, user, other.
#
# - assessment.impact.description:
# May contain a textual description of the impact, if the analyzer
# is able to provide additional details.
#
# - source().node.address().address,
# target().node.address().address:
# Address that has been attacked/Address that issued the attack.
# There can be more than one.
#
# - source().node.address().category
# target().node.address().category
# The type of address provided.
# Possible values: unknown, atm, e-mail, lotus-notes, mac, sna, vm,
# ipv4-addr, ipv4-addr-hex, ipv6-addr, ipv6-addr-hex, ipv6-net, ipv6-net-mask
#
# - source().node.name,
# target().node.name:
# The name of the equipment. This information MUST be provided if no Address
# information is given.
#
# - source().node.category,
# target().node.category:
# The domain from which the name information was obtained.
# Possible values are: unknown, ads, afs, coda, dfs, dns, hosts, kerberos,
# nds, nis, nisplus, nt, wfw
#
# - source().node.location,
# target().node.location:
# The location of the equipment.
#
# - source().spoofed,
# target().decoy:
# An indication of wheter the source/target is a decoy.
# The permitted values are: unknown, yes, no.
#
# - source().interface,
# target().interface:
# May be used by a network-based analyzer with multiple interfaces to
# indicate which interfaces this source/target was seen on.
#
# - source().service.name,
# target().service.name:
# The name of the service. Whenever possible, the name from the IANA list
# of well-known ports SHOULD be used.
#
# - source().service.port,
# target().service.port:
# The port number being used.
#
# - source().service.iana_protocol_name,
# target().service.iana_protocol_name:
# The IANA protocol being used (tcp/udp/icmp/etc)
#
# - source().service.portlist,
# target().service.portlist:
# A list of port numbers beeing used.
#
# - source().user.category,
# target().user.category:
# The type of user represented (unknown, application, os-device).
#
# - source().user.userid().
# target().user.userid().
# Create a new UserId inside an User object (that may contain several UserId).
#
# - source().user.userid().type,
# target().user.userid().type:
# The type of user information represented (current-user, original-user,
# target-user, user-privs, current-group, group-privs, other-privs).
#
# - source().user.userid().name,
# target().user.userid().name:
# A user or group name.
#
# - source().user.userid().number,
# target().user.userid().number:
# A user or group number.
#
# - source().process.name,
# target().process.name:
# A process name
#
# - source().process.pid,
# target().process.pid:
# A process number
#
# - id:
# The rule ID associated with this rule.
#
# - revision:
# The current revision number of this rule.
#
# - last:
# Indicates to LML that if this rule is triggered, stop checking for further
# regex matches.
regex=EMU; include = apc-emu.rules;
regex=(anomaly|since|firstSeen); include = arbor.rules;
regex=arpwatch; include = arpwatch.rules;
regex=(bigconf|kernel); include = f5-bigip.rules;
regex=%PIX; include = cisco-pix.rules;
regex=%[A-Z]+-\d+-[A-Z]; include = cisco-router.rules;
regex=SEV=; include = cisco-vpn.rules;
# Using this regex rather than simpler clamd to handle events from clamav
# logging format
regex=(FOUND|virus); include = clamav.rules;
regex=server administrator; include = dell-om.rules
regex=(kernel|grsec); include = grsecurity.rules;
regex=kernel; include = netfilter.rules; \
include = ipchains.rules;
regex=honeyd; include = honeyd.rules;
# Using this somewhat complex regex instead of the simpler httpd due to the
# fact that we might be directly monitoring httpd logs instead of httpd syslog
# entries (in which case we won't have the process name to match against)
regex=(\[error\]|Pass|httpd); include = httpd.rules; \
include = modsecurity.rules;
regex=ipfw; include = ipfw.rules;
regex=[Ww]ireless; include = linksys-wap11.rules;
regex=mssql; include = ms-sql.rules;
regex=nagios; include = nagios.rules;
regex=norton; include = navce.rules;
regex=\[[^:]*:[^\]]*\]:; include = netapp-ontap.rules;
regex=system-(emergency|alert)-; include = netscreen.rules;
regex=security\[; include = ntsyslog.rules;
# This next regex isn't specific enough for my liking, but there doesn't seem
# to be a better solution based on the log samples
regex=[a-z0-9]+:; include = openhostapd.rules;
regex=[Pp][Aa][Mm]_; include = pam.rules;
regex=pcanywhere; include = pcanywhere.rules;
regex=portsentry; include = portsentry.rules;
regex=postfix/; include = postfix.rules;
regex=proftpd; include = proftpd.rules;
regex=popper; include = qpopper.rules;
regex=avc:; include = selinux.rules;
regex=sendmail; include = sendmail.rules;
regex=(user|group)(mod|add); include = shadow-utils.rules;
# More complex regex to handle data coming directly from Squid log files
regex=(Acceptin|Squid|Disabled|DENIED); include = squid.rules;
regex=sshd; include = ssh.rules;
regex=sudo; include = sudo.rules;
regex=tripwire; include = tripwire.rules;
regex=[wl]an @Group:; include = vigor.rules;
regex=vpopmail; include = vpopmail.rules;
regex=webmin; include = webmin.rules;
regex=ftpd; include = wu-ftp.rules;
include = single.rules;
|