Inhoud

Inleiding

Voorwaarden

Vereisten

Gebruikte componenten

Conventies

Configuratieprocedure voor e-mailberichten

Schriften

3.x Sensor-scripts

4.x Sensor-scripts

5.x Sensor-scripts

Verifiëren

Problemen oplossen

Gerelateerde informatie

Inleiding

Security Monitor heeft de mogelijkheid om e-mailmeldingen te verzenden als er een regel voor gebeurtenissen is geactiveerd. De ingebouwde variabelen die in het e-mailbericht voor elke gebeurtenis kunnen worden gebruikt, omvatten geen dingen zoals de Signature ID, de bron en bestemming van de waarschuwing, enzovoort. Dit document bevat instructies die u kunt gebruiken om de Security Monitor te configureren om deze variabelen (en veel meer) in het e-mailwaarschuwing te bevatten.

Voorwaarden

Vereisten

Er zijn geen specifieke vereisten van toepassing op dit document.

Gebruikte componenten

Dit document is niet beperkt tot specifieke software- en hardware-versies. Zorg er echter voor dat u het juiste Perl-script gebruikt op basis van de Sensor-versies die in uw omgeving worden uitgevoerd.

Conventies

Raadpleeg de Cisco Technical Tips Convention voor meer informatie over documentconventies.

Configuratieprocedure voor e-mailberichten

Gebruik deze procedure om e-mailberichten te configureren.

Opmerking:  Als u e-mail naar het juiste e-mailadres wilt doorsturen, moet u het e-mailadres in het script wijzigen.

1. Kopieer een van deze scripts naar de $BASE\CSCOpx\MDC\etc\ids\scripts directory on the VPN/Security Management Solutions (VMS) server. Dit staat u toe om het later in het proces te selecteren wanneer u een gebeurtenis regel definieert. Sla het script op als e-mail.pl.

OPMERKING:  Als u een andere naam gebruikt, zorg er dan voor dat u die naam in de Event Rule gebruikt die in deze stappen wordt bepaald.

- Gebruik voor versie 3.x-sensoren het 3.x-sensorscripts

- Gebruik voor versie 4.x-sensoren het 4.x-sensorscripts

- Gebruik voor versie 5.x-sensoren het 5.x-sensorscripts

- Als u een combinatie van Sensor-versies hebt, raadt Cisco u aan een upgrade uit te voeren, zodat ze allemaal op hetzelfde versieniveau zijn. Dit is omdat slechts één van deze scripts tegelijk kan worden uitgevoerd.

2. Het script bevat opmerkingen die elk deel en elke vereiste input verklaren. Wijzig in het bijzonder de variabele $EmailRCPT (dichtbij de bovenkant van het bestand) om het e-mailadres te zijn van de persoon die de waarschuwingen moet ontvangen.

3. Defineer een Event Rule binnen Security Monitor om een nieuw Perl script te roepen. Kies in de hoofdpagina Security Monitor de optie Admin > Event Regels en voeg een nieuwe gebeurtenis toe.

4. In het venster Filter voor gebeurtenis specificeren, voegt u de filters toe die u het e-mailalarm wilt activeren (in de steekproef wordt een e-mail verzonden voor om het even welk alarm van de hoge ernst).

5. In het venster Opties selecteren, schakelt u het vakje in om een script uit te voeren en selecteert u de naam van het script in het uitrolvak.

6. Voer in de sectie Arguments in "$ {Query}" zoals hier getoond.

Opmerking: Dit moet precies worden ingevuld zoals het hier is, inclusief de dubbele quotes. Het is ook hoofdlettergevoelig.

7. Wanneer een alarm, zoals gedefinieerd in uw gebeurtenis filters (in dit voorbeeld, een hoge strengheidswaakzaamheid) wordt ontvangen, wordt het script genaamd emailalert.pl met een argument van $ {Query} opgeroepen. Dit bevat aanvullende informatie over de signalering. Het script scheidt alle aparte velden en gebruikt een programma dat 'blat' wordt genoemd om een e-mail naar de eindgebruiker te versturen.

8. Blat is een e-mailprogramma dat in Windows-systemen wordt gebruikt om e-mails van batchbestanden of draaiboeken te verzenden. Het maakt deel uit van de VMS-installatie in de $BASE\CSCOpx\bin directory. Om uw pad instellingen te controleren opent u een opdrachtvenster op de VMS-server en typt u blat.

Als u de fout van het bestand niet gevonden hebt, kopieert u het bestand blat.exe naar de map\system32 of vindt u het en opent u het bestand vanuit de map waarin het zich bevindt. Start als volgt om dit te installeren:

blat -install

Nadat dit programma is geïnstalleerd, bent u klaar.

Schriften

Dit zijn de scripts waarnaar wordt verwezen in stap 1 van de configuratieprocedure:

- 3.x Sensor-scripts

- 4.x Sensor-scripts

- 5.x Sensor-scripts

3.x Sensor-scripts

Gebruik dit script voor versie 3.x Sensors.

3.x sensoren

#!/usr/bin/perl

#***********************************************************************

#

# FILE NAME : emailalert.pl

#

# DESCRIPTION : This file is a perl script that will be executed as an

# action when an IDS-MC Event Rule triggers, and will send an

# email to $EmailRcpt with additional alert parameters (similar to

# the functionality available with CSPM notifications)

#

# NOTE:   this script only works with 3.x sensors, alarms from 4.0

#         sensors are stored differently and cannot be represented

#         in a similar format.

#

# NOTE:   check the "system" command in the script for the correct

#         format depending on whether you're using IDSMC/SecMon

#         v1.0 or v1.1, you may need the "-on" command-line option.

#

# NOTE :  This script takes the ${Query} keyword from the

#         triggered rule, extracts the set of alarms that caused

#         the rule to trigger. It then reads the last alarm of

#         this set, parses the individual alarm fields, and

#         calls the legacy script with the same set of command

#         line arguments as CSPM.

#

# The calling sequence of this script must be of the form:

#

#         emailalert.pl "${Query}"

#

# Where:

#

#         "${Query}" - this is the query keyword dynamically

#         output by the rule when it triggers.

#         It MUST be wrapped in double quotes when specifying it in the Arguments

#         box on the Rule Actions panel.

#

#

#***********************************************************************

##

## The following are the only two variables that need changing. $TempIDSFile can be any

## filename (doesn't have to exist), just make sure the directory that you specify

## exists. Make sure to use 2 backslashes for each directory, the first backslash is

## so the Perl interpretor doesn't error on the pathname.

##

## $EmailRcpt is the person that is going to receive the email notifications. Also

## make sure you escape the @ symbol by putting a backslash in front of it, otherwise

## you'll get a Perl syntax error.

##

$TempIDSFile = "c:\\temp\\idsalert.txt";

$EmailRcpt = "nobody\@cisco.com";

##

## pull out command line arg

##

$whereClause = $ARGV[0];

##

## extract all the alarms matching search expression

##

$tmpFile = "alarms.out";

## The following line will extract alarms from 1.0 IDSMC/SecMon database, if

## using 1.1 comment out the line below and un-comment the other system line

## below it.

## V1.0 IDSMC/SecMon version

system("IdsAlarms -s\"$whereClause\" -f\"$tmpFile\"");

## V1.1 IDSMC/SecMon version.

## system("IdsAlarms -on -s\"$whereClause\" -f\"$tmpFile\"");

##

# open matching alarm output

if (!open(ALARM_FILE, $tmpFile)) {

print "Could not open ", $tmpFile, "\n";

exit -1;

}

# read to last line

while (<ALARM_FILE>) {

$line = $_;

}

# clean up

close(ALARM_FILE);

unlink($tmpFile);

##

## split last line into fields

##

@fields = split(/,/, $line);

$eventType = @fields[0];

$recordId = @fields[1];

$gmtTimestamp = 0; # need gmt time_t

$localTimestamp = 0; # need local time_t

$localDate = @fields[4];

$localTime = @fields[5];

$appId = @fields[6];

$hostId = @fields[7];

$orgId = @fields[8];

$srcDirection = @fields[9];

$destDirection = @fields[10];

$severity = @fields[11];

$sigId = @fields[12];

$subSigId = @fields[13];

$protocol = "TCP/IP";

$srcAddr = @fields[15];

$destAddr = @fields[16];

$srcPort = @fields[17];

$destPort = @fields[18];

$routerAddr = @fields[19];

$contextString = @fields[20];

## Open temp file to write alert data into,

open(OUT,">$TempIDSFile") || warn "Unable to open output file!\n";

## Now write your email notification message. You're writing the following into

## the temporary file for the moment, but this will then be emailed. Use the format:

##

## print (OUT "Your text with any variable name from the list above \n");

##

## Again, make sure you escape special characters with a backslash (note the : in between $sigId

## and $subSigId has a backslash in front of it)

print(OUT "\n");

print(OUT "Received severity $severity alert at $localDate $localTime\n");

print(OUT "Signature ID $sigId\:$subSigId from $srcAddr to $destAddr\n");

print(OUT "$contextString");

close(OUT);

## then call "blat" to send contents of that file in the body of an email message.

## Blat is a freeware email program for WinNT/95, it comes with VMS in the

## $BASE\CSCOpx\bin directory, make sure you install it first by running:

##

## blat -install <SMTP server address> <source email address>

##

## For more help on blat, just type "blat" at the command prompt on your VMS system (make

## sure it's in your path (feel free to move the executable to c:\winnt\system32 BEFORE

## you run the install, that'll make sure your system can always find it).

system ("blat \"$TempIDSFile\" -t \"$EmailRcpt\" -s \"Received IDS alert\"");

4.x Sensor-scripts

Gebruik dit script voor versie 4.x Sensors.

4.x Sensoren

#!/usr/bin/perluse Time::Local;#***********************************************************************

#

# FILE NAME : emailalert.pl

#

# DESCRIPTION : This file is a perl script that will be executed as an

# action when an IDS-MC Event Rule triggers, and will send an

# email to $EmailRcpt with additional alert parameters (similar to

# the functionality available with CSPM notifications)

#

# NOTE: this script only works with 4.x sensors. It will

# not work with 3.x sensors.

#

# NOTES : This script takes the ${Query} keyword from the

# triggered rule, extracts the set of alarms that caused

# the rule to trigger. It then reads the last alarm of

# this set, parses the individual alarm fields, and

# calls the legacy script with the same set of command

# line arguments as CSPM.

#

# The calling sequence of this script must be of the form:

#

# emailalert.pl "${Query}"

#

# Where:

#

# "${Query}" - this is the query keyword dynamically

# output by the rule when it triggers.

# It MUST be wrapped in double quotes

# when specifying it in the Arguments

# box on the Rule Actions panel.

#

#

#***********************************************************************

##

## The following are the only two variables that need changing. $TempIDSFile can be any

## filename (doesn't have to exist), just make sure the directory that you specify

## exists. Make sure to use 2 backslashes for each directory, the first backslash is

## so the Perl interpretor doesn't error on the pathname.

##

## $EmailRcpt is the person that is going to receive the email notifications. Also

## make sure you escape the @ symbol by putting a backslash in front of it, otherwise

## you'll get a Perl syntax error.

##

$TempIDSFile = "c:\\temp\\idsalert.txt";

$EmailRcpt = "yourname\@yourcompany.com";

# subroutine to add leading 0's to any date variable that's less than 10.

sub add_zero {

my ($var) = @_;

if ($var < 10) {

$var = "0" .$var

}

return $var;

}

# subroutine to find one or more IP addresses within an XML tag (we can have multiple

# victims and/or attackers in one alert now).

sub find_addresses {

my ($var) = @_;

my @addresses = ();

if (m/$var/) {

$raw = $&;

while ($raw =~ m/(\d{1,3}\.){3}\d{1,3}/) {

push @addresses,$&;

$raw = $';

}

$var = join(', ',@addresses);

return $var;

}

}

# pull out command line arg

$whereClause = $ARGV[0];

# extract all the alarms matching search expression

$tmpFile = "alarms.out";

# Extract the XML alert/event out of the database.

system("IdsAlarms -s\"$whereClause\" -f\"$tmpFile\"");

# open matching alarm output

if (!open(ALARM_FILE, $tmpFile)) {

print "Could not open $tmpFile\n";

exit -1;

}

# read to last line

while (<ALARM_FILE>) {

chomp $_;

push @logfile,$_;

}

# clean up

close(ALARM_FILE);

unlink($tmpFile);

# Open temp file to write alert data into,

open(OUT,">$TempIDSFile");

# split XML output into fields

$oneline = join('',@logfile);

$oneline =~ s/\<\/events\>//g;

$oneline =~ s/\<\/evAlert\>/\<\/evAlert\>,/g;

@items = split(/,/,$oneline);

# If you want to see the actual database query result in the email, un-comment out the

# line below (useful for troubleshooting):

# print(OUT "$oneline\n");

# Loop until there's no more alerts

foreach (@items) {

if (m/\<hostId\>(.*)\<\/hostId\>/) {

$hostid = $1;

}

if (m/severity="(.*?)"/) {

$sev = $1;

}

if (m/Zone\=".*"\>(.*)\<\/time\>/) {

$t = $1;

if ($t =~ m/(.*)(\d{9})/) {

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($1);

# Year is reported from 1900 onwards (eg. 2003 is 103).

$year = $year + 1900;

# Months start at 0 (January = 0, February = 1, etc), so add 1.

$mon = $mon + 1;

$mon = add_zero ($mon);

$mday = add_zero ($mday);

$hour = add_zero ($hour);

$min = add_zero ($min);

$sec = add_zero ($sec);

}

}

if (m/sigName="(.*?)"/) {

$SigName = $1;

}

if (m/sigId="(.*?)"/) {

$SigID = $1;

}

if (m/subSigId="(.*?)"/) {

$SubSig = $1;

}

$attackerstring = "\<attacker.*\<\/attacker";

if ($attackerstring = find_addresses ($attackerstring)) {

}

$victimstring = "\<victim.*\<\/victim";

if ($victimstring = find_addresses ($victimstring)) {

}

if (m/\<alertDetails\>(.*)\<\/alertDetails\>/) {

$AlertDetails = $1;

}

@actions = ();

if (m/\<actions\>(.*)\<\/actions\>/) {

$rawaction = $1;

while ($rawaction =~ m/\<(\w*?)\>(.*?)\</) {

$rawaction = $';

if ($2 eq "true") {

push @actions,$1;

}

}

if (@actions) {

$actiontaken = join(', ',@actions);

}

}

else {

$actiontaken = "None";

}

## Now write your email notification message. You're writing the following into

## the temporary file for the moment, but this will then be emailed.

##

## Again, make sure you escape special characters with a backslash (note the : between

## the SigID and the SubSig).

##

## Put your VMS servers IP address in the NSDB: line below to get a direct link

## to the signature details within the email.

print(OUT "\n$hostid reported a $sev severity alert at $hour:$min:$sec on $mon/$mday/$year\n");

print(OUT "Signature: $SigName \($SigID\:$SubSig\)\n");

print(OUT "Attacker: $attackerstring ---> Victim: $victimstring\n");

print(OUT "Alert details: $AlertDetails \n");

print(OUT "Actions taken: $actiontaken \n");

print(OUT "NSDB: https\://<your VMS server IP address>/vms/nsdb/html/expsig_$SigID.html\n\n");

print(OUT "----------------------------------------------------\n");

}

close(OUT);

## Now call "blat" to send contents of the file in the body of an email message.

## Blat is a freeware email program for WinNT/95, it comes with VMS in the

## $BASE\CSCOpx\bin directory, make sure you install it first by running:

##

## blat -install <SMTP server address> <source email address>

##

## For more help on blat, just type "blat" at the command prompt on your VMS system (make

## sure it's in your path (feel free to move the executable to c:\winnt\system32 BEFORE

## you run the install, that'll make sure your system can always find it).

system ("blat \"$TempIDSFile\" -t \"$EmailRcpt\" -s \"Received IDS alert\"");

5.x Sensor-scripts

Gebruik dit script voor versie 5.x Sensors.

5.x sensoren

#!/usr/bin/perl

use Time::Local;

#***********************************************************************

#

#  FILE NAME   : emailalertv5.pl

#

#  DESCRIPTION : This file is a perl script that will be executed as an

#                action when an IDS-MC Event Rule triggers, and will send an

#                email to $EmailRcpt with additional alert parameters (similar to

#                the functionality available with CSPM notifications)

#

#                NOTE: this script only works with 5.x sensors.

#

#  NOTES       : This script takes the ${Query} keyword from the

#                triggered rule, extracts the set of alarms that caused

#                the rule to trigger.  It then reads the last alarm of

#                this set, parses the individual alarm fields, and

#                calls the legacy script with the same set of command

#                line arguments as CSPM.

#

#                The calling sequence of this script must be of the form:

#

#                emailalert.pl "${Query}"

#

#                Where:

#

#                   "${Query}"  - this is the query keyword dynamically

#                                 output by the rule when it triggers.

#                                 It MUST be wrapped in double quotes

#                                 when specifying it in the Arguments

#                                 box on the Rule Actions panel.

#

#

#***********************************************************************

##

## The following are the only two variables that need changing.  $TempIDSFile can be any

## filename (doesn't have to exist), just make sure the directory that you specify

## exists.  Make sure to use 2 backslashes for each directory, the first backslash is

## so the Perl interpretor doesn't error on the pathname.

##

## $EmailRcpt is the person that is going to receive the email notifications.  Also

## make sure you escape the @ symbol by putting a backslash in front of it, otherwise

## you'll get a Perl syntax error.

##

$TempIDSFile = "c:\\temp\\idsalert.txt";

$EmailRcpt = "gfullage\@cisco.com";

# subroutine to add leading 0's to any date variable that's less than 10.

sub add_zero {

my ($var) = @_;

if ($var < 10) {

$var = "0" .$var

}

return $var;

}

# subroutine to find one or more IP addresses within an XML tag (we can have multiple

# victims and/or attackers in one alert now).

sub find_addresses {

my ($var) = @_;

my @addresses = ();

if (m/$var/) {

$raw = $&;

while ($raw =~ m/(\d{1,3}\.){3}\d{1,3}/) {

push @addresses,$&;

$raw = $';

}

$var = join(', ',@addresses);

return $var;

}

}

# pull out command line arg

$whereClause = $ARGV[0];

# extract all the alarms matching search expression

$tmpFile = "alarms.out";

# Extract the XML alert/event  out of the database.

system("IdsAlarms -os -s\"$whereClause\" -f\"$tmpFile\"");

# open matching alarm output

if (!open(ALARM_FILE, $tmpFile)) {

print "Could not open $tmpFile\n";

exit -1;

}

# read to last line

while (<ALARM_FILE>) {

chomp $_;

push @logfile,$_;

}

# clean up

close(ALARM_FILE);

unlink($tmpFile);

# Open temp file to write alert data into,

open(OUT,">$TempIDSFile");

# split XML output into fields

$oneline = join('',@logfile);

$oneline =~ s/\<\/sd\:events\>//g;

$oneline =~ s/\<\/sd\:evIdsAlert\>/\<\/sd\:evIdsAlert\>,/g;

@items = split(/,/,$oneline);

# If you want to see the actual database query result in the email, un-comment out the

# line below (useful for troubleshooting):

# print(OUT "$oneline\n");

# Loop until there's no more alerts

foreach (@items) {

unless ($_ =~ /\<\/env\:Body\>/) {

if (m/\<sd\:hostId\>(.*)\<\/sd\:hostId\>/) {

$hostid = $1;

}

if (m/severity="(.*?)"/) {

$sev = $1;

}

if (m/Zone\=".*"\>(.*)\<\/sd\:time\>/) {

$t = $1;

if ($t =~ m/(.*)(\d{9})/) {

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($1);

# Year is reported from 1900 onwards (eg. 2003 is 103).

$year = $year + 1900;

# Months start at 0 (January = 0, February = 1, etc), so add 1.

$mon = $mon + 1;

$mon = add_zero ($mon);

$mday = add_zero ($mday);

$hour = add_zero ($hour);

$min = add_zero ($min);

$sec = add_zero ($sec);

}

}

if (m/description="(.*?)"/) {

$SigName = $1;

}

if (m/\ id="(.*?)"/) {

$SigID = $1;

}

if (m/\<cid\:subsigId\>(.*)\<\/cid\:subsigId\>/) {

$SubSig = $1;

}

if (m/\<cid\:riskRatingValue\>(.*)\<\/cid\:riskRatingValue\>/) {

$RR = $1;

}

if (m/\<cid\:interface\>(.*)\<\/cid\:interface\>/) {

$Intf = $1;

}

$attackerstring = "\<sd\:attacker.*\<\/sd\:attacker";

if ($attackerstring = find_addresses ($attackerstring)) {

}

$victimstring = "\<sd\:target.*\<\/sd\:target";

if ($victimstring = find_addresses ($victimstring)) {

}

if (m/\<cid\:alertDetails\>(.*)\<\/cid\:alertDetails\>/) {

$AlertDetails = $1;

}

@actions = ();

if (m/\<sd\:actions\>(.*)\<\/sd\:actions\>/) {

$rawaction = $1;

while ($rawaction =~ m/\<\w*?:(\w*?)\>(.*?)\</) {

$rawaction = $';

if ($2 eq "true") {

push @actions,$1;

}

}

if (@actions) {

$actiontaken = join(', ',@actions);

}

}

else {

$actiontaken = "None";

}

## Now write your email notification message. You're writing the following into

## the temporary file for the moment, but this will then be emailed.

##

## Again, make sure you escape special characters with a backslash (note the : between

## the SigID and the SubSig).

##

## Put your VMS servers IP address in the NSDB: line below to get a direct link

## to the signature details within the email.

print(OUT "\n$hostid reported a $sev severity alert at $hour:$min:$sec on $mon/$mday/$year\n");

print(OUT "Signature: $SigName \($SigID\:$SubSig\)\n");

print(OUT "Attacker: $attackerstring  --->  Victim: $victimstring\n");

print(OUT "Alert details: $AlertDetails \n");

print(OUT "Risk Rating: $RR,  Interface: $Intf \n");

print(OUT "Actions taken: $actiontaken \n");

print(OUT "NSDB: https\://sec-srv/vms/nsdb/html/expsig_$SigID.html\n\n");

print(OUT "----------------------------------------------------\n");

}

}

close(OUT);

## Now call "blat" to send contents of the file in the body of an email message.

## Blat is a freeware email program for WinNT/95, it comes with VMS in the

## $BASE\CSCOpx\bin directory, make sure you install it first by running:

##

##     blat -install <SMTP server address> <source email address>

##

## For more help on blat, just type "blat" at the command prompt on your VMS system (make

## sure it's in your path (feel free to move the executable to c:\winnt\system32 BEFORE

## you run the install, that'll make sure your system can always find it).

system ("blat \"$TempIDSFile\" -t \"$EmailRcpt\" -s \"Received IDS alert\"");

Verifiëren

Er is momenteel geen verificatieprocedure beschikbaar voor deze configuratie.

Problemen oplossen

Volg deze instructies om uw configuratie problemen op te lossen.

1. Start deze opdracht vanuit een opdrachtmelding om te controleren of de flap goed werkt:

blat

-t

-s "Test message"

<filename> is het volledige pad naar een tekstbestand op het VMS-systeem. Als de gebruiker naar wie het e-mailscript is gericht dit bestand in de tekst van een e-mail ontvangt, dan weet u dat het zwart werkt.

2. Als er geen e-mail wordt ontvangen nadat er een waarschuwing is geactiveerd, probeer dan het Perl script uit een opdrachtprompt venster uit te voeren.

Dit belicht problemen met Perl- of padtype. Om dit te doen, open een bevelherinnering en voer in:

>cd Program Files/CSCOpx/MDC/etc/ids/scripts

>emailalert.pl ${Query}

U kunt mogelijk een Sybase-fout ontvangen, vergelijkbaar met dit voorbeeld. Dit is te wijten aan het feit dat de $ {Query} die u doorgeeft geen informatie bevat, in tegenstelling tot wanneer het van de Security Monitor overgaat.

Behalve deze fout, draait het script correct en wordt er een e-mail verzonden. Alle alarmparameters in de e-mailinstantie zijn leeg. Als u Perl- of padfouten ontvangt, moeten deze worden gerepareerd voordat er een e-mail wordt verstuurd.

Gerelateerde informatie

- Cisco-pagina voor beveiligde inbraakpreventie

- Technische ondersteuning en documentatie – Cisco Systems