From ChekMate Security Group
<?php
#################################################################################
#
# base_summary.php - Reports events from BASE in more meaningful presentation
# Copyright (C) 2005 Shannon McNaught
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
#################################################################################
###################################
#
# Change the following parameters
#
###################################
$db_server = 'localhost';
$db_user = 'username';
$db_pwd = 'password';
$db_name = 'database';
$URL = $_SERVER['PHP_SELF'];
$db_link = @mysql_pconnect($db_server, $db_user, $db_pwd) or exit('Could not connect: ' . mysql_error());
$db = @mysql_select_db($db_name, $db_link) or exit('Could not select database: ' . mysql_error());
if (!isset($_GET['timeperiod'])) {
$timeperiod = 21600;
} else {
$timeperiod = $_GET['timeperiod'];
}
$friendly_time = $timeperiod / 60;
if ($friendly_time < 60) {
$friendly_time = "$friendly_time minutes";
} else {
$friendly_time = $friendly_time / 60;
if ($friendly_time < 24) {
$friendly_time = "$friendly_time hour(s)";
} else {
$friendly_time = $friendly_time / 24;
$friendly_time = "$friendly_time day(s)";
}
}
$timewindow = "(timestamp > (NOW() - INTERVAL $timeperiod SECOND))";
$select =mysql_query("SELECT * FROM acid_event WHERE $timewindow") or die(mysql_error());
$total_events = mysql_num_rows($select);
$select =mysql_query("SELECT DISTINCT signature FROM acid_event WHERE $timewindow") or die(mysql_error());
$total_sigs = mysql_num_rows($select);
$select =mysql_query("SELECT DISTINCT ip_src FROM acid_event WHERE $timewindow") or die(mysql_error());
$total_src = mysql_num_rows($select);
$select =mysql_query("SELECT DISTINCT ip_dst FROM acid_event WHERE $timewindow") or die(mysql_error());
$total_dst = mysql_num_rows($select);
$select =mysql_query("SELECT max(timestamp) AS max, min(timestamp) AS min FROM acid_event WHERE $timewindow") or die(mysql_error());
$row=mysql_fetch_object($select);
$max = $row->max;
$min = $row->min;
echo "<font size=1 face=\"Verdana, Arial, sans-serif, Helvetica\"><hr noshade><br>\n";
echo "<center><font size=3><b>BASE Summary Report</b></font></center>\n";
echo "<center><font size=3><b>Time window: $friendly_time between $min and $max.</b></font></center>\n";
echo "<br><hr noshade><br>\n";
echo "Alert Protocol Type : [ <a href=#TCP>TCP</a> ] - [ <a href=#UDP>UDP</a> ] - [ <a href=#ICMP>ICMP</a> ] - [ <a href=#Portscan>Portscan</a> ] <br>\n";
echo "Alert Time Window : [ <a href=$URL?timeperiod=900>15 Mins</a> ] - [ <a href=$URL?timeperiod=3600>1 Hour</a> ] - [ <a href=$URL?timeperiod=7200>2 Hours</a> ] - [ <a href=$URL?timeperiod=21600>6 Hours</a> ] - [ <a href=$URL?timeperiod=43200>12 Hours</a> ] - [ <a href=$URL?timeperiod=86400>1 Day</a> ] - [ <a href=$URL?timeperiod=172800>2 Days</a> ] - [ <a href=$URL?timeperiod=604800>7 Days</a> ] - [ <a href=$URL?timeperiod=1209600>14 Days</a> ] - [ <a href=$URL?timeperiod=31536000>All Alerts</a> ]<br>\n";
echo "<br><hr noshade><br>\n";
echo "<table border=1 width=100%>\n";
echo "<tr><th align=left><font size=1 face=\"Verdana, Arial, sans-serif, Helvetica\">Signature</font></th><th align=right width=11%><font size=1 face=\"Verdana, Arial, sans-serif, Helvetica\">Alerts</font></th><th align=right width=11%><font size=1>IP Src Addr</font></th><th align=right width=11%><font size=1>IP Dst Addr</font></th><th align=right width=11%><font size=1>Last Timestamp</font></th></tr>\n";
echo "<tr><th align=left><font size=1 face=\"Verdana, Arial, sans-serif, Helvetica\"> Total Number of Unique Alerts: $total_sigs </font></th><th align=right><font size=1 face=\"Verdana, Arial, sans-serif, Helvetica\">" . $total_events . "</font></th><th align=right><font size=1 face=\"Verdana, Arial, sans-serif, Helvetica\">" . $total_src . "</font></th><th align=right><font size=1 face=\"Verdana, Arial, sans-serif, Helvetica\">" . $total_dst . "</font></th><th align=right><font size=1 face=\"Verdana, Arial, sans-serif, Helvetica\">" . $max . "</font></th></tr>\n";
build_proto_summary($timewindow, $timeperiod, 6,"TCP","#FFFFFF","#FFFFAA","#FFFF66") ;
build_proto_summary($timewindow, $timeperiod, 17,"UDP","#FFFFFF","#FFC0C0","#FF8080");
build_proto_summary($timewindow, $timeperiod,1,"ICMP","#FFFFFF","#C0FFFF","#80FFFF");
build_proto_summary($timewindow, $timeperiod,255,"Portscan","#FFFFFF","#C0C0FF","#8080FF");
echo "</table></font>\n";
function build_proto_summary($timewindow, $timeperiod, $ip_proto, $ip_proto_name, $abgcolor, $bbgcolor, $bgheader) {
$select =mysql_query("SELECT * FROM acid_event WHERE $timewindow AND ip_proto = $ip_proto") or die(mysql_error());
$total_events = mysql_num_rows($select);
$select =mysql_query("SELECT DISTINCT ip_src FROM acid_event WHERE $timewindow AND ip_proto = $ip_proto") or die(mysql_error());
$total_src = mysql_num_rows($select);
$select =mysql_query("SELECT DISTINCT ip_dst FROM acid_event WHERE $timewindow AND ip_proto = $ip_proto") or die(mysql_error());
$total_dst = mysql_num_rows($select);
$select =mysql_query("SELECT MAX(timestamp) as LastTimestamp FROM acid_event WHERE $timewindow AND ip_proto = $ip_proto") or die(mysql_error());
$row=mysql_fetch_object($select);
$last_ts = $row->LastTimestamp;
$select =mysql_query("SELECT DISTINCT signature, sig_name, count(cid) AS Num FROM acid_event WHERE $timewindow AND ip_proto = $ip_proto GROUP BY signature ORDER BY Num DESC ") or die(mysql_error());
$total_proto = mysql_num_rows($select);
echo "<tr><td colspan=5> </td></tr>\n";
echo "<tr bgcolor=$bgheader><th align=left><font size=1 face=\"Verdana, Arial, sans-serif, Helvetica\"><A NAME=$ip_proto_name>$ip_proto_name</a> ($total_proto) </font></th><th align=right><font size=1 face=\"Verdana, Arial, sans-serif, Helvetica\">" . $total_events . "</font></th><th align=right><font size=1 face=\"Verdana, Arial, sans-serif, Helvetica\">" . $total_src . "</font></th><th align=right><font size=1 face=\"Verdana, Arial, sans-serif, Helvetica\">" . $total_dst . "</font></th><th align=right nowrap><font size=1 face=\"Verdana, Arial, sans-serif, Helvetica\">" . $last_ts . "</font></th></tr>\n";
while($row=mysql_fetch_object($select)) {
$signature = $row->signature;
$sig_name = $row->sig_name;
$oselect =mysql_query("SELECT * FROM acid_event WHERE $timewindow AND ip_proto = $ip_proto AND signature = $signature") or die(mysql_error());
$total_events = mysql_num_rows($oselect);
$oselect =mysql_query("SELECT DISTINCT ip_src FROM acid_event WHERE $timewindow AND ip_proto = $ip_proto AND signature = $signature") or die(mysql_error());
$total_src = mysql_num_rows($oselect);
$oselect =mysql_query("SELECT DISTINCT ip_dst FROM acid_event WHERE $timewindow AND ip_proto = $ip_proto AND signature = $signature") or die(mysql_error());
$total_dst = mysql_num_rows($oselect);
$oselect =mysql_query("SELECT MAX(timestamp) as LastTimestamp FROM acid_event WHERE $timewindow AND ip_proto = $ip_proto AND signature = $signature") or die(mysql_error());
$vrow=mysql_fetch_object($oselect);
$last_timestamp = $vrow->LastTimestamp;
$oselect =mysql_query("SELECT sig_sid FROM signature WHERE sig_id = $signature") or die(mysql_error());
$vrow=mysql_fetch_object($oselect);
$sig_sid = $vrow->sig_sid;
if ($bgcolor == $bbgcolor) { $bgcolor = $abgcolor; } else { $bgcolor = $bbgcolor; }
echo "<tr bgcolor=$bgcolor><td><table border=0 cellspacing=0 cellpadding=0 width=100%><tr><td align=left nowrap><font size=1 face=\"Verdana, Arial, sans-serif, Helvetica\"> $sig_name</td><td align=right nowrap><font size=1> <a href=\"base_details.php?timeperiod=$timeperiod&sid=$sig_sid\" ><font color=\"#000000\">Details</font></a> <a href=\"http://www.snort.org/pub-bin/sigs.cgi?sid=$sig_sid \" target=\"_new\"><font color=\"#000000\">Snort.org</font></a></font></td></tr></table></td><td align=right><font size=1 face=\"Verdana, Arial, sans-serif, Helvetica\"><a href=\"/base/base_qry_main.php?new=1&sig_type=1&sig[0]==&sig[1]=$signature&submit=Query+DB&num_result_rows=-1\"><font color=\"#000000\">$total_events</font></a></font></td><td align=right><font size=1 face=\"Verdana, Arial, sans-serif, Helvetica\"><a href=\"/base/base_stat_uaddr.php?addr_type=1&sig_type=1&sig[0]==&sig[1]=$signature\"><font color=\"#000000\">$total_src</font></a></font></td><td align=right><font size=1 face=\"Verdana, Arial, sans-serif, Helvetica\"><a href=\"/base/base_stat_uaddr.php?addr_type=2&sig_type=1&sig[0]==&sig[1]=$signature\"><font color=\"#000000\">$total_dst</font></a></font></td><td align=right nowrap><font size=1 face=\"Verdana,Arial, sans-serif, Helvetica\">$last_timestamp</font></td></tr>\n";
}
}
?>