Controlling Your Border

SnortSAM is a plug-in for Snort that can be found at http://www.snortsam.net. It was developed by a team of people who saw the value in coupling a strong attach detection mechanism with the ability to change access controls on border devices—stopping an attack in progress. SnortSAM can order changes in the access control lists of the following network border devices:

Checkpoint Firewall-1
Cisco PIX Firewall
Cisco Routers
Netscreen firewall
IP Filter (ipf)—Unix-based OS firewall
Linux ipchains
Linux iptables
Watchguard firewall

SnortSAM consists of two components: a patch for the Snort sensor itself and the SnortSAM application, which can be run on the Snort sensor or another, dedicated SnortSAM system. SnortSAM allows the Snort sensor to act as a gateway IDS by running multiple interfaces, enabling routing, and running Iipchains or iptables. When an alert is detected, the ipchains or iptables access lists are modified to block traffic from the offending network. More commonly, a Snort sensor is configured to modify the access control lists for existing border devices using SnortSAM. The requested blocks can be given a specific lifetime, so that they do not last forever.

The first step in installing SnortSAM is to download and unpack the source code. There are some precompiled SnortSAM binaries for a wide range of operating systems that you can use, but I prefer to compile my own. After downloading the source, create a directory (I usually put the source in /usr/local/src/snortsam/ ), and copy the gzipped tarball to the directory. To install SnortSAM on your designated SnortSAM system (could be the system running Snort or a separate system altogether—please note that version numbers will change over time), use this:

# cd /usr/local/src/snortsam
# tar -zxvf snortsam-src-2.23.tar.gz
# cd snortsam
# chmod +x makesnortsam.sh
# ./makesnortsam.sh

This creates the binary called snortsam that you can copy to a directory such as /usr/local/bin. The above process creates a binary on FreeBSD, Linux, and Solaris. To compile for Windows, open the file called SnortSam.dsp with Visual C++ and select the project that you want to compile (Normal, in all likelihood).

Download snortsam-patch.tar.gz from http://www.snortsam.net/download.html and make a directory to store the patch source (I use /usr/local/src/snortsam-patch/ ). Copy the patch source to this directory. To apply the patch to Snort (substitute the path to the Snort source directory), use this:

# cd /usr/local/src/snortsam-patch/
# tar -zxvf snortsam-patch.tar.gz
# chmod +x patchsnort.sh
# ./patchsnort.sh /usr/local/src/snort/snort2.1.x/

Then recompile Snort.

Running SnortSAM is simple since it only needs to be supplied with one argument: the location of the snortsam.conf file. The file needs to be built from scratch (I suggest locating it in /usr/local/etc/ ). You only need to include the applicable options for your environment. Append the desired configuration options in the snortsam.conf file. When supplying a pres-hared key, this is simply a string of characters that both the server and sensor knows, used to encrypt the traffic. The snortsam.conf file can include the following options:

accept < addresses from which to accept alerts >/< net mask >,< pre-shared key >

Designates the address of Snort sensors that are allowed to send the SnortSAM server blocking requests. The pre-shared key is used to encrypt the communication between the sensor and the SnortSAM server (the two-fish algorithm is used). Here's an example:

accept 192.168.1.0/24, supersecretkey
defaultkey < pre-shared key >

This is a pre-shared key that needs to be configured in the snort.conf file on the sensors, as well. SnortSAM uses the default key if one is not specified for a particular sensor. Here's an example:

defaultkey supersecretdefaultkey
port < port number >

The port number that SnortSAM uses to communicate with Snort sensors (898 is the default). Here's an example:

port 6666
dontblock < address or DNS hostname >

Specifies hosts that should never be blocked. This list is referred to as the White List in the documentation. It can be a single IP address, a range of address (address/mask bits—for example, 10.10.10.0/24), or a hostname. There can only be one entry per line, but there can be an unlimited number of lines. Here's an example:

dontblock a.root-servers.net
dontblock 192.168.0.0/16
logfile < filename >

A file that SnortSAM can use to log its activity. Here's an example:

logfile snortsam.log
loglevel < level >

This defaults to level 2. The default is suggested, but the options are as follows.

Here's an example:

loglevel 1
include < filename >

You can specify additional files to include in the configuration. SnortSAM comes with a list of the root name servers to include in your white list called rootservers.cfg. You could keep another file called donotblock.conf that contains the entire white list and include it, as well. Here's an example:

include rootservers.cfg
daemon

This option takes no arguments. If it is present, SnortSAM runs in Daemon mode—similar to the -D option in Snort. Here's an example:

daemon
skipinterval <time period>

This defaults to a value of 10 seconds. It causes SnortSAM to ignore the same block request if it falls within the specified time period. Here's an example:

skipinterval 60 secs
skiphosts < integer >

Works with skipinterval and designates how many blocks are kept in memory. Here's an example:

skiphosts 30
rollbackhosts < integer >

Tells SnortSAM to keep a record of the designated number of blocking requests for each Snort sensor. These traffic blocks are disabled if the rollback threshold is exceeded. Here's an example:

rollbackhosts 20
rollbackthreshold < integer > / < time period >

If more than <integer> blocking requests occur in a given <time period>, SnortSAM "unblocks" the number of blocks designated in the rollbackhosts directive.Here's an example:

rollbackthreshold 30 / 60 secs
rollbacksleeptime < time period >

Tells SnortSAM to ignore new blocking requests for the specified period of time, giving SnortSAM time to catch up and reduce the load. Defaults to 15 minutes.Here's an example:

rollbacksleeptime 2 minutes

You need to include configuration information for the firewalls SnortSAM will use to block offending addresses. Below are examples for the Cisco PIX, ipchains, and iptables. For details on supporting other firewalls (like Checkpoint or Watchguard, or Cisco Routers), refer to the documentation:

Once the snortsam.conf is built, you can run SnortSAM, designating the location of the file:

# /usr/local/bin/snortsam /usr/local/etc/snortsam.conf

Add a line in the snort.conf on the Snort sensor so it can send notifications to the SnortSAM server (this might be the sensor system itself). Add the following line to the snort.conf file:

output alert_fwsam: <SnortSam Server IP address>:<port>/<pre-shared key>

This tells Snort to send SnortSAM blocking instructions to the SnortSAM server located at the designated IP address. If the server is using a nonstandard port, it can be designated here. Finally, include the pre-shared key that you entered into the accept line in the snortsam.conf file. These two keys must match exactly. Here's an example:

output alert_fwsam: 192.168.1.1:6666/pr3sh4r3dk3y

Once you have the output plug-in configured, modify the rules that generate blocking requests. To do this, you'll use a new rule option, fwsam. It's made up of these elements:

The following blocks the source address for the packet that triggered the alert for 15 minutes:

alert udp $EXTERNAL_NET any -> $HOME_NET 1434 (msg:"MS-SQL Worm propagation 
attempt"; content:"|04|"; depth:1; content:"|81 F1 03 01 04 9B 81 F1 01|"; 
content:"sock"; content:"send"; reference:bugtraq,5310; classtype:misc-attack; 
reference:bugtraq,5311; reference:url,vil.nai.com/vil/content/v_99992.htm; sid:
2003; rev:2; fwsam: src, 15 minutes;)