Cette rubrique décrit comment définir un modèle pour les notifications d'alerte. Event Stream Analysis (ESA) vous permet de définir des modèles utiles pour les alertes. Vous devez avoir une bonne compréhension de FreeMarker et le modèle de données ESA pour définir un modèle. Pour plus d'informations sur FreeMarker, reportez-vous au FreeMarker Template Author's Guide.
Une règle d'alerte ESA se présente comme suit :
@
Name
(
'module_144d43f5_f0b4_4cd0_8c6c_5ce65c37e624_Alert'
)
@Description(
'Brute Force Login To Same Destination'
)
@RSAAlert(oneInSeconds=0, identifiers={
"ip_dst"
})
SELECT
*
FROM
Event (ec_activity =
'Logon'
,ec_theme =
'Authentication'
,ec
outcome = 'Failure'
,ip_dst
IS
NOT
NULL
)
.std:groupwin(ip_dst)
.win:time_length_batch(60 seconds, 2)
GROUP
BY
ip_dst
HAVING
COUNT
(*) = 2;
Lorsqu'une règle comme celle précitée est déclenchée, l'alerte générée comportera deux événements constitutifs, chacun s'apparentant à une session NextGen avec plusieurs métavaleurs. L'objet associé aux données de l'alerte transmis à l'évaluateur du modèle FreeMarker se présente comme suit :
(root) | +- id = "4e67012f-9c53-4f0b-ac44-753e2c982b79" // Unique identifier for each alert | +- severity = 1 // The severity of the alert +- time = 2013-12-31T11:02Z // The alert time (needs a ?datetime for proper rendering) | +- moduleType = "ootb" // The module type | +- moduleName = "Brute Force Login To Same Destination" // A description of the module | +- statement = "module_144d43f5_f0b4_4cd0_8c6c_5ce65c37e624_Alert" // The name of the EPL statement | +- events // The constituent events - as a sequence of event maps | +- [0] // offset 0 (i.e. the first constituent event) | | | | | +- event_cat_name = "User.Activity.Failed Logins" | +- device_class = "Firewall" // event meta (accessible as ${events[0].device_class}$) | | | +- event_source_id = "uttam:50002:1703395" // Investigation URI to the individual session (used by SA) | | | +- ... // Other meta | | | +- sessionid = 1703395 // NextGen sessionid | | | +- time = 1388487764 // event/session time at NextGen source (as a long Unix timestamp) | | | +- user_dst = "user5" | +- [1] // offset 1 (i.e. the second consituent event) | +- device_class = "Firewall" | +- event_cat_name = "User.Activity.Failed Logins" | +- event_source_id = "uttam:50002:1703405" | +- ... | +- sessionid = 1703405 | +- time = 1388487766 | +- user_dst = "user5"
Il existe deux types de variables de modèle disponibles dans le modèle de données :
${moduleName}
. Le méta time
est spécial car il est du type Date
et doit être un suffixe de ?datetime
pour pouvoir s'afficher correctement. ${events[0].event_source_id}
et le même pour le deuxième est accessible en tant que ${events[1].event_source_id
.}. Vous devez également savoir quels champs méta sont à valeurs multiples, car ils doivent être traités en tant que séquences ; par exemple ${events[0].alias_host}
ne fonctionne pas, car il s'agit d'une séquence.Remarque : Les métadonnées disponibles dans les événements constitutifs pour une alerte donnée sont déterminés par la clause EPL SELECT. Par exemple, les alertes issues de SELECT sessionid, time FROM ...
auront seulement deux métavaleurs disponibles (sessionid, time). Les événements constitutifs dans SELECT * FROM Event ...
porteront tous les champs de métadonnées du type Event
avec des valeurs qui ne sont pas nulles.
Si votre modèle utilise les métaclés qui ne sont pas présentes dans tous les résultats d'alerte, vous devez envisager d'utiliser les provisions de FreeMarker pour les valeurs par défaut.
Par exemple, si un modèle avec le texte Id=${id},ec_outcome=${ec_outcome} est évalué pour une alerte qui n’inclut pas la métaclé ec_outcome
, alors l'évaluation du modèle échouera. Dans de tels cas, vous pouvez utiliser l'espace réservé à la valeur manquante ${ec_outcome!”default”}
.