[Discussion] I think everyone is describing Bro
Seth Hall
hall.692 at osu.edu
Sun Oct 19 04:25:34 UTC 2008
Sorry, I just joined the list so I'm going to be doing some odd
quoting from the list archive :) I do want to point out too, that I'm
not writing this email to downplay OISFs goals but rather to hopefully
guide OISF toward improving an existing opensource project (Bro - http://www.bro-ids.org/
) that already does much of what is being discussed on this list.
Andre Ludwig wrote:
> 1. Signature matching has its use but can not be an end all for
detection of attacks.
Completely agreed and to be honest, at OSU (The Ohio State University)
we really don't run many signatures with Bro. The only signature that
we get any real use out of is one that matches remote Windows shells
on arbitrary ports. We found that the scripts Bro ships with and the
scripts that I was writing were detecting all of the activity that we
were interested in. It has continued that it's usually easy to write
scripts to detect new activity that we might be interested in.
> 2. Performance and wire speed is always going to be an issue
<snip>
Agreed. The main Bro developers are already working on several
techniques to scale Bro's performance. There is the cluster
deployment which already works (http://www.icir.org/robin/bro-cluster/README.html
). We (OSU) run a cluster deployment of 21 worker nodes currently and
tests have been done that show that it scales linearly to 24 nodes.
Bro has a communications framework so that the cluster workers can
communicate with each other too. This is useful for the times when
you need some information shared around to all of the workers (because
they each only see their portion of all traffic) like when one host
identifies a host that is SSH scanning/bruteforcing, it can let all of
the other nodes know about that ip address automatically. The best
part is that it's all scalable with commodity hardware, there isn't
any non-commodity hardware in our entire cluster. :)
The Bro developers have also begun to parallelize their core engine
and once that is working (not yet) Bro users will see even greater
performance increases if they're running multi core/processor machines.
David Glosser wrote:
> ways to get alerts for fast-flux and other things where current
sigs are prone to FPs
I implemented the algorithm behind the Holz et al paper in just a day
or two after the paper was released. It was all done in the Bro
scripting language. To be fair, the guy that did the snort
preprocessor (Scott Campbell) for detecting fastflux also wrote a Bro
script for detecting fastflux at the same time as me. :)
Matt Jonkman wrote:
> We can't give huge lists of bad IPs to most tools, we can't feed
behavior patterns to existing tools
Bro is a perfect fit for this use case. It can take fairly gigantic
lists of IP addresses and check for membership in the lists very
frequently without suffering performance-wise.
> 1. Native multithreading.
Like I wrote earlier, that's being worked on now. :)
> 2. IP Reputation Sharing
It's only waiting for someone to extend the Bro communications
framework to do inter-site communications. There isn't currently any
way to specify what you want to receive from remote sites or how much
you trust them. It would be great project for someone to pick up.
> 3. Native ipv6
Done. Needs more real world testing though, since high volume real
world testing with IPv6 is a little difficult to come by still.
> 5. Scoring
I can definitely imagine implementing something like this with Bro,
but you might realize that this isn't quite as important as you
thought once you move away from the IDS==signatures mindset.
Jeremy wrote:
> Network intelligence through passive identification.
<snip>
> a windows xp home
> computer correlated with network flow data and port data could easily
> be alerted on for any outgoing port 25 connections
That's a great idea Jeremy! There's no reason it couldn't be
implemented in Bro too. I might do that soon, it would be useful for
us.
Andre Ludwig wrote:
>7. Ability to look across packets in a stream, be it 3 packets
before or 4 packets ahead.
Bro doesn't tend to work at the individual packet level, so this is
not really an issue.
> 8. Some sort of meta language needs to be created that easily and
effectively can communicate any applications "state".
If I'm understanding correctly, you want a language that allows you to
program your analysis? Here are the docs for the Bro policy language:
http://www.bro-ids.org/wiki/index.php/Reference_Manual
John Ives wrote:
> 9. The ability to pull files out of the stream in real-time.
There is a new script in Bro 1.4 that was just released on Friday.
This is from the changelog...
- The new script http-extract-items.bro extracts the items from
HTTP
traffic into individual files (Vern Paxson).
At OSU, we have also been running a script I wrote called http-
identified-files.bro (included with Bro 1.4) that identifies file
types on all http transfers with libmagic. The result is that we have
a log of every Windows and UNIX executable that is downloaded in or
out of our network over HTTP (on any port and regardless of URL). Bro
can identify any file type that the libmagic database you are using
can identify.
> a language/protocol for it to interact with other security devices
Bro already has this, it's called Broccoli and it's included with the
main Bro distribution. Here are the docs:
http://www.bro-ids.org/broccoli/index.html
As some examples of what the library can do, I'm using it in two ways
currently.
1. I'm pushing authentication data from a number of different OSU
services into our Bro cluster so that it can be analyzed along with
the network traffic. We get the benefit of continuing to do our
anomaly detection in a single language that is very well suited for
detecting odd activity over time.
2. I just released a tool that connects directly to my master node of
my cluster and logs data from the cluster directly to a postgresql
database in realtime. There is no hacky file tailing being done. Bro
sends an event to my tool it logs the data in the message to the
database. Here's the bro-dblogger:
http://github.com/sethhall/bro-dblogger/tree/master
There are also currently functioning bindings for python and ruby.
Python bindings are included in the Bro distribution now I believe and
the Ruby bindings can be installed with the "broccoli" gem.
Victor Julien wrote:
> For example in ModSecurity you can match on the password on HTTP
basic
> auth by capturing the string containing the username and password
from
> the HTTP header, splitting it, decoding it's base64
This is absolutely possible today with Bro. If you're interested in
it for some reason, I could write the script to show how straight
forward it is.
Whew, sorry about the long email but I hadn't seen a reference to Bro
in the archives yet and there are so many suggestions that are already
possible in Bro or would be easy to implement that I couldn't pass it
up. I'd certainly be willing to answer any questions people have
about Bro. It's getting late here and I might not make much sense in
part of my email. :)
.Seth
---
Seth Hall
Network Security - Office of the CIO
The Ohio State University
Phone: 614-292-9721
More information about the Discussion
mailing list