irtime (was: pause (or ssilence and dsilence))
David Edelman
dedelman at iname.com
Thu Jun 18 11:34:07 EDT 2015
At some time in the dim, distant past there was discussion of adding some indication in the [s|d]user data DSR to indicate the length of each sub-capture within the buffer. The context was the work that I had done on radecode. If this was possible, then it would probably be a reasonable request to timestamp the sub-captures.
With that information, and appropriate sizes for the capture buffers, much of this layer-7 analytics would become an exercise for the reader rather than a development effort.
--Dave
From: argus-info-bounces+dedelman=iname.com at lists.andrew.cmu.edu [mailto:argus-info-bounces+dedelman=iname.com at lists.andrew.cmu.edu] On Behalf Of Carter Bullard
Sent: Wednesday, June 17, 2015 9:57 AM
To: elof2 at sentor.se
Cc: Argus
Subject: Re: [ARGUS] irtime (was: pause (or ssilence and dsilence))
Hey /Elof,
I really dislike very long emails ....
OK, so we cannot have this as a "ra only" feature, as this type of metric is really something you want to play with. How soon after the arp response did the DNS request start ... Or time between smallest and biggest flow sent ... Weird questions but valuable forensics methods.
So it will go in the overall library so all the ra* programs will be able to work with the value !!
Especially ratop, as that can filter and sort on all fields and so you want it there.
Irtime is (flow2StartTime - flow1EndTime) so it is the easiest of the metrics, as all flows have a start and end time, but may not have src or dst time stamps, if they don't have src or dst traffic.
We use these differences already in flow aggregation, as the inter record gap is an idle time measurement, and it is tallied in the intpktidle metric fields, but we don't provide access to the actual values, just the mean, stdev, max and min.
I'll think about it a bit and see what we can do in the short time.
Carter
On Jun 17, 2015, at 6:15 AM, elof2 at sentor.se <mailto:elof2 at sentor.se> wrote:
Hi Carter!
Answers inline
On Tue, 16 Jun 2015, Carter Bullard wrote:
Hey /Elof,
Yes, new metrics are a good thing. The trick is what to call it, and how to generate it based on our existing methods and tools.
We have a set of ‘delta’ metrics that are already designed into the clients, such as DeltaStartTime, DeltaDuration, DeltaSrcPkts, etc... that were designed for programs like racluster.1 and ratop.1. ratop.1 manages a list of argus records, sorts them based on whatever criteria you want, which sets up the notion of “the previous” record for calculating the type of metrics you’re interested in. We have a routine called ArgusSubtractRecord() and ArgusIntersectRecord(), which provide the diffs / differences between this record and any other record, but we’ll have to add a little to formulate this inter-record time information.
So, …, there are 4 timestamps in an argus record. SrcStartTime, SrcEndTime, DstStartTime and DstEndTime, from these 4 timestamps we formulate the SrcTime (minimum of all timestamps) and EndTime, (maximum of all timestamps). So, …, do you want src inter-record time, dst inter-record time and just inter-record time ???
irtime - inter-record idle time, the idle time between the end and start of two records
sirtime - src inter-record idle time
dirtime - dst inter-record idle time
Perfect! I was trying to come up with good names but "irtime" was much better than my examples.
Oh, good, so we have all four timestamps in the record. Then my very last section could actually be implemented. That one gives the most details and are therefore the best. :-)
Your three irtime fields look good. The only thing that might confuse people, and therefore need better explaining in the manual would be the general 'irtime'. Compare with sbytes, dbytes and bytes. Here 'bytes' is the sum of the two. 'irtime' is _not_ the sum but rather a special field that depend on whatever the previous record is.
Something like this:
irtime - inter-record idle time, the idle time between the end and
start of two printed records (note that this depends on the
previous record, whatever that might be (including MAR
records))
sirtime - src inter-record idle time
dirtime - dst inter-record idle time
The reason why I use the word "printed" is to describe that the counter is based on what you see on screen, after any filters have been applied. You *could add* a fourth field...
uirtime - unfiltered inter-record idle time, the idle time between the
end of the current record and the start of the very next
record in the logfile (excluding MAR records)
...but I believe this is overkill. Only include it if you see the benefit and if it is easy to code. :-)
When we print the value for the first record, should it be 0.0, or is it blank ???
I think it should say 0.0.
You will have to generate the list of records, in the proper order for these values to be meaningful, and you will have to print out the list in order to generate the values.
Yepp, that's why I'm only discussing 'ra', which will print things in the correct order.
We’ll need to be able to print, filter, graph and process these values, as we do with every printable field. But what do you want to do about sorting on the values, as that is a bit of a puzzle. If we sort on a value that is based on sorting, what does the value mean ???
Do you want to label the flow with the value, and then be able to process that value, like sort, print, filter etc ??????
Heh, yes thats a catch 22 puzzle. :-)
The simple solution is to let the 'irtime' field be unique to 'ra', since it need the raw data to be sequentially ordered in the first place.
The advanced solution would probably become over-complex. Something like this:
We remove 'irtime' completely, since it depends on the printed output. Instead we only have 'uirtime', 'sirtime' and 'dirtime' who are all based on the sequential records.
Then all ra* tools could do their magic on these fields as well.
Nah, I say skip the possibility to sort/cluster/aggregate/label inter-record idle times.
If we can get some agreement, then we should add it, sooner than later.
:-)
/Elof
On Jun 16, 2015, at 11:36 AM, elof2 at sentor.se <mailto:elof2 at sentor.se> wrote:
Hi Carter!
Could the following feature be added to ra:
Say you have a tcp flow (e.g. smtp) that send some packets (EHLO, banner, MAIL, RCPT, DATA, etc). Then it pause for 45 seconds. Then it continues with a new MAIL, RCPT, etc. It keeps doing this with various pauses between the mails until hours later it is FINished.
In this traffic between A and B, I would like to see how long those pauses are. Something like this:
sport dport state pause
12:00:00 A:32123 -> B:25 SPA_SPA 0.0
12:00:45 A:32123 -> B:25 PA_PA 44.35
12:05:00 A:32123 -> B:25 A_A 254.1
...where pause (or whatever you want to call it) is simply:
stime minus ltime from the row before.
That's it really.
A "dumb" field that simply display the pause between records (rows) displayed on screen so I don't have to use a calculator and manually subtract and calculate the difference.
If you want to do it a bit more complex, you could have two fields, in the same manner as wireshark has capture filters and display filters:
ra could distinguish between 'displayed' pauses and pauses within the 'flow'.
rpause - pause between printed records on screen
rpause = stime minus ltime from the row before.
fpause - pause since the last record for this particular flow
fpause = stime minus ltime from the previous record within this flow.
Example:
When line 4 is to be printed, we have a NTP-packet in line 3 which would set the pause to 134.1 seconds.
sport dport state pause
12:00:00 A:32123 -> B:25 SPA_SPA 0.0
12:00:45 A:32123 -> B:25 PA_PA 44.35
12:03:00 Q:123 -> Z:123 CON 134.1
12:05:00 A:32123 -> B:25 A_A 119.95
Instead, we cold have:
sport dport state rpause fpause
12:00:00 A:32123 -> B:25 SPA_SPA 0.0 0.00
12:00:45 A:32123 -> B:25 PA_PA 44.35 44.35
12:03:00 Q:123 -> Z:123 CON 134.1 0.00
12:05:00 A:32123 -> B:25 A_A 119.95 254.1
(perhaps 'rpause' should be called 'dpause' as in "displayed pause", but 'd' usually indicate "dst", so I go for 'r' as in Record or Row)
What do you say?
(
If the flow records store stime and ltime for *each direction*, we could measure the pauses in the client data stream and pauses in the server responses.
...but I don't think the records store a src-stime, src-ltime, dst-stime and dst-ltime.
)
/Elof
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist1.pair.net/pipermail/argus/attachments/20150618/02b006b1/attachment.html>
More information about the argus
mailing list