Fwd: Some useful Argus scripts for detecting traffic anomalies in ranges of data

Terry Burton tez at terryburton.co.uk
Thu Feb 21 18:09:09 EST 2008


Oops. Forgot to cc: the list...

---------- Forwarded message ----------
From: Terry Burton <tez at terryburton.co.uk>
Date: Thu, Feb 21, 2008 at 5:00 PM
Subject: Re: [ARGUS] Some useful Argus scripts for detecting traffic
anomalies in ranges of data
To: Carter Bullard <carter at qosient.com>


On Sat, Feb 9, 2008 at 3:59 PM, Carter Bullard <carter at qosient.com> wrote:
 >  These are great!!!  Simple and are doing a very specific job.
 >  We will have a ./contrib directory in the distribution, and as long
 >  as the code can be released under a GNU license (that's what
 >  argus is distributed under) then all is cool.

 Hi Carter,

 Thanks for your thorough responses. Apologies for not responding to
 them sooner - simply due to lack of time.

 Feel free to distribute them under any GNU or OSI-approved license
 that suits the project.


 >  What I would like is discussion on what is the intent/goal, so we can
 >  know if there are faster, more efficient ways of getting these numbers.
 >  Is this something that would lend itself to near realtime alert and
 >  alarming, is there any opportunity for persistent intermediate data
 >  to be available in realtime for high performance streams processing!!!!

 I am operating Argus on a university network that has thousands of
 hosts with varying degrees of host management:

 Tightly managed - central services where we have full administrative control
 Loosely managed - departmental services where our administrative
 control extends as far as the centrally managed switch port that is in
 closest proximity to the device, but for which we have a defined point
 of contact with which to raise issues.
 Not managed - private laptops, hosts on the wireless network where the
 above description applies, but be have no particular point of contact
 responsible for the host.

 In this environment I am using Argus to supplement the signature-based
 analysis (Snort) that we perform at the gateway and at several
 strategic points within the network. The overall goal would be to
 provide (as near as possible to) real-time alerting of strange traffic
 flows within the network in order to pro-actively reduce threat to and
 from our network.

 The scripts that I have provided help to identify the "strange"
 traffic patterns and so allow us to take prompt (sometimes automatic)
 action against bad traffic, both in and out of our network. For
 incoming traffic we can automatically add temporary drop rules into
 our campus firewall (to thwart scanning), generate abuse emails based
 on whois data, etc. We can do similar things for outgoing traffic but
 rather than block the traffic entirely we might automatically
 rate-limit it until the traffic is reviewed by an alerted network
 administrator who can decide on the best course of action.

 Having real-time analysis and alarming to achieve these ends would be
 excellent since there are substantial CPU and IO requirements for our
 current processing of 15 mins of flow data every 5 mins.

 You can get a feel for the kinds of activities that I am interesting
 from the script: port scanning (in and out), frequent connections to
 uncommon ports, etc. I'm sure that there are plenty of other
 activities that I will want to detect in time. One future extension of
 our monitoring that has recently come to mind but not yet
 crystalised...

 Roughly speaking our /16 network is divided into /8 subnets (separated
 by VLANS) that serve individual departments, services, etc. We can
 export the netflow information for most routed connections between
 these subnets. Some of these subnets host central services, whilst
 others host no services or services that are specific to just a few
 other subnets. It would be useful to analyse these inter-subnet flows
 to alert on suddenly increases in usage between unrelated subnets. Has
 anybody previously used Argus to do something similar to this?


 >  Best example is the arg_scan_hit_darkhost().  The $AUTH_IP_FILE is
 >  intermediate data of the active IP addresses.  We can have other scripts
 >  that generate and maintain a near real-time list of the "lit" net.

 A while ago I had the idea for rafilteraddr to be capable of
 re-reading the filter file whenever it is updated. In our case, our
 device registration procedure determines that all network devices must
 be pre-registered before connection to the network, and this process
 generates an accurate $AUTH_IP_FILE.


 >  But, you're really using racluster() to modify the flow model of the
 >  data
 >  as its piped through.  I could write a simple fast program that does
 >  that
 >  on a stream.

 I'd be interested in helping to test this application. Along these
 lines, are any of the current stream processors near to having the
 ability to operate on a fixed-interval sliding window of data so that
 you can alert as soon as any aggregate parameters exceed a pre-defined
 threshold within any 5 minute period, say, and then to rest the
 alerting mechanism for a period of time? Or is there another way that
 you anticipate performing real-time threshold analysis for aggregate
 data?


 On Tue, Feb 12, 2008 at 4:35 PM, Carter Bullard <carter at qosient.com> wrote:
 >  The direction aspects to this can be taken care of in a number
 >  of ways, the most full-proof is to track the smac and dmac fields,
 >  and to provide filters that deal with all the combinations.  The reason
 >  this is a good strategy, is generally because the number of ethernet
 >  addresses a give probe sees is small, so the list of filters is going
 >  to be bounded, but, ...., it does mean that filters are very specific
 >  for
 >  each installation, which makes maintenance etc... a bit of a chore.
 <...snip...>

>  This will give me any address that hit a dark address that is not
 >  one of mine.   But I do end up using filters like:
 >     (not src net $localnet and dst net $localnet)

 Agreed. Protocol specific direction is a red-herring and my current
 scripts detect only connect style scans, rather than the more
 sophisticated non-syn-based scans. smac and dmac based direction
 determination is a much better solution that I will try.


 >  In order to figure out did local address ever respond to this scanner,
 >  which I think is the real question.  Who cares if someone is scanning,
 >  the question is did they find anything, ..., new.

 To some extent I agree, but I would ultimate rather take preventative
 action against a obvious scanner by blocking them wherever possible
 *before* they find enumerate a substantial proportion of our network.


 >  In support of your scripts, having a script that generates the darkhost
 >  list or the inverse, the lithost list would be very helpful for some.
 >  Do
 >  you have a script, or do we need to generate one?  My radark.pl
 >  script does some of this, and we can carve out that piece to provide
 >  a ralight() like program?

 Our network registration system generates a reliable list of lit hosts
 (assuming good housekeeping) and we invert the lookup using the
 rafilteraddress "-v" flag to select dark hosts. We do nothing more
 intelligent that that, I'm afraid!

 Thanks again for your detailed responses.


 Warm regards,

 Tez



More information about the argus mailing list