Suricata: Instalasi Snorby & barnyard2

From OnnoWiki
Jump to navigation Jump to search

Cheat sheet : Installing Snorby 2.2 with Apache2 and Suricata with Barnyard2 on Ubuntu 10.x Published February 27, 2011 | By Corelan Team (corelanc0d3r) Introduction

After spending a few hours fighting a battle against Snorby and Apache2 + Passenger, I finally managed to get it to run properly on my Ubunty 10.x box (32bit). Looking back, I figured I might not be the only one who is having issues with this.

So I decided to publish the notes I took while setting everything up, and as a little bonus, explain how to install and configure Suricata as well (configured in combination with barnyard2 which will pick up local logs and send them to the remote MySQL server).

There are the components that will be installed :

   Snorby 2.x (latest revision from git)
   MySql 5
   Ruby 1.9.2p0
   Apache2
   Passenger 3
   Barnyard 2
   Suricata 1.1beta1 with emerging-threat ruleset


Install dependencies / prerequisites for Snorby Packages

First, make sure your system is up to date :

aptitude update apt-get update apt-get upgrade apt-get dist-upgrade


Then install new packages :

apt-get install gcc g++ build-essential libssl-dev libreadline5-dev \

    zlib1g-dev linux-headers-generic libsqlite3-dev libxslt-dev libxml2-dev \
    imagemagick git-core libmysqlclient-dev mysql-server libmagickwand-dev \
    default-jre

wkhtmlpdf with QT patch

cd /tmp wget http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.10.0_rc2-static-i386.tar.bz2 bunzip2 wkhtmltopdf-0.10.0_rc2-static-i386.tar.bz2 tar xvf wkhtmltopdf-0.10.0_rc2-static-i386.tar cp wkhtmltopdf-i386 /usr/bin/wkhtmltopdf

Ruby 1.9.2p0

cd /tmp wget http://ftp.ruby-lang.org//pub/ruby/1.9/ruby-1.9.2-p0.tar.gz tar -xvzf ruby-1.9.2-p0.tar.gz cd ruby-1.9.2-p0 ./configure make && make install ln -s /usr/local/ruby/bin/bundle /usr/bin


Run "ruby – v" and verify that it returns the correct version :

ruby 1.9.2p0 (2010-08-18 revision 29036) [i686-linux]

(If this shows a different version, then verify that /usr/local/ruby/bin/ruby -v is version 1.9.2p0) gems

gem install thor i18n bundler gem install tzinfo builder memcache-client rack rack-test erubis mail text-format gem install rack-mount --version=0.4.0 gem install rails sqlite3-ruby


Installing Snorby

git clone http://github.com/Snorby/snorby.git /var/www/snorby

Edit configuration files :

Edit /var/www/snorby/config/database.yml : look for the "snorby" entry and enter the mysql root username & password here :

snorby: &snorby

 adapter: mysql
 username: root
 password: <enter the mysql root password here>
 host: localhost

(don’t worry, we’ll get rid of the root username/password later on)

Edit /var/www/snorby/config/snorby_config.yml : set the correct path to wkhtmltopdf

development:

 domain: localhost:3000
 wkhtmltopdf: /usr/bin/wkhtmltopdf

test:

 domain: localhost:3000
 wkhtmltopdf: /usr/bin/wkhtmltopdf

production:

 domain: localhost:3000
 wkhtmltopdf: /usr/bin/wkhtmltopdf



Run Snorby setup :

cd /var/www/snorby rake snorby:setup


It is very likely that you will get the following error :

(in /var/www/snorby) You have requested:

 activesupport = 3.0.3

The bundle currently has activesupport locked at 3.0.4. Try running `bundle update activesupport` Try running `bundle install`.


Fix : run the following commands in the /var/www/snorby folder :

bundle update activesupport railties rails gem install arel gem install ezprint bundle install


Run the setup again :

cd /var/www/snorby rake snorby:setup


If all goes well, the snorby database should get created/populated now. Since we used the mysql root username/password in the database.yml configuration file, the necessary database and tables should be created successfully.

root@server:/var/www/snorby# rake snorby:setup (in /var/www/snorby) <...long key....> [datamapper] Created database 'snorby' [datamapper] Finished auto_upgrade! for :default repository 'snorby'


If you get an error about ezprint:

(in /var/www/snorby) rake aborted! http://github.com/mephux/ezprint.git (at rails3) is not checked out. \

  Please run `bundle install`

/var/www/snorby/Rakefile:4 (See full trace by running task with --trace)


Solution : run this from /var/www/snorby

bundle pack bundle install --path vender/cache

then run bundle install the rake snorby:setup command again



Configure mysql

We used the root user / password to allow snorby to create the necessary tables. If you prefer to use a mysql user account that has less privileges, then you can add a new mysql user, grant privileges, and edit the snorby configuration again :

mysql -u root -p

creat user 'snorbyuser'@'localhost' IDENTIFIED BY 'some_pass'; grant all privileges on snorby.* to 'snorbyuser'@'localhost' with grant option; flush privileges;


Now edit /var/www/snorby/config/database.yml again and replace the username and password with the newly created user

snorby: &snorby

 adapter: mysql
 username: snorbyuser
 password: some_pass
 host: localhost

You will need to create a useraccount for your (remote) suricata/snorby sensors too. The procedure is exactly the same as indicated above, but you will have to replace ‘localhost’ with the IP address of the remote sensor. If the sensor is local, you can use the snorbyuser@localhost mysql user account as well.

By default, the mysql server listens on localhost only. Edit /etc/mysql/my.cnf to change the default behaviour :

  1. Instead of skip-networking the default is now to listen only on
  2. localhost which is more compatible and is not less secure.

bind-address = 127.0.0.1


Comment the bind-address statement (add a # in front of the line) and restart mysql

service mysql restart


Verify that the server is now listening on all ip addresses :

root@server:/# lsof -i | grep mysqld mysqld 21309 mysql 10u IPv4 16405476 0t0 TCP *:mysql (LISTEN)

TCP *:mysql => listening on all interfaces


Apache2 & Passenger Install packages & dependencies

apt-get install apache2 apache2-prefork-dev libapr1-dev libaprutil1-dev libopenssl-ruby apt-get install libcurl4-openssl-dev


Start apache2 and make sure the default webpage loads

service apache2 start

Install passenger

gem install --no-ri --no-rdoc --version 3.0.3 passenger

Install passenger module for apache2

/usr/local/ruby/lib/ruby/gems/1.9.1/gems/passenger-3.0.3/bin/passenger-install-apache2-module -a


Edit /etc/apache2/mods-available/passenger.load (or create if it does not exits) :

LoadModule passenger_module /usr/local/ruby/lib/ruby/gems/1.9.1/gems/passenger-3.0.3/ext/apache2/mod_passenger.so


Edit /etc/apache2/mods-available/passenger.conf :

<IfModule mod_passenger.c>

  PassengerRoot /usr/local/ruby/lib/ruby/gems/1.9.1/gems/passenger-3.0.3
  PassengerRuby /usr/local/ruby/bin/ruby

</IfModule>


Enable the module (and some other modules you might need) :

a2enmod passenger a2enmod rewrite a2enmod ssl


Set file/folder permissions on the snorby folder :

chown www-data:www-data /var/www/snorby -R


Integrate Snorby with Apache2

Suppose we want the snorby frontend to be reachable using virtualhost snorby.corelan.be :

Create a file "snorby" under /etc/apache2/sites-available :

<VirtualHost *:80>

       ServerAdmin webmaster@localhost
       ServerName snorby.corelan.be
       DocumentRoot /var/www/snorby/public
       <Directory "/var/www/snorby/public">
               AllowOverride all
               Order deny,allow
               Allow from all
               Options -MultiViews
       </Directory>

</VirtualHost>


Enable the new website :

ln -s /etc/apache2/sites-available/snorby /etc/apache2/sites-enabled/snorby


Restart apache2 :

service apache2 restart

Make sure snorby.corelan.be points at your local apache2 server, and navigate to that website :

image

(log in with user snorby@snorby.org and password snorby)

If you get an error page instead of the login page :

image

-> complaining about ezprint.git not being installed, then go to the /var/www/snorby folder and run the following 2 commands :

bundle pack bundle install --path vender/cache

Wait until the process has finished.

Restart apache2, and then try to access the website again, you should now be able to log on.



If you get a message about the "worker" not being started :

image

Solution : click "Administation", Click "Worker Options" Administration menu and select "Start worker".

Now click on "Worker Options" and start the 2 jobs

image

image

If you go back to the main page now, you may see "Currently caching" for a brief moment (depending on the number of events already in the database) :

image

   Tip : if, at any given time, the dashboard continues to show 0 events (or an incorrect number of events in general), but the Events view shows that all entries are inside the database, then you may have to clear the caches and rebuild it from scratch :
   mysql -u root -p
   use snorby;
   truncate table caches;
   exit
   Now remove the 2 worker jobs (use the little trash can icon next to each worker job to remove the job)
   image
   Recreate the jobs via Worker Options, and the main dashboard should eventually get populated again.


Okay, the server is now ready to receive data from local/remote sensors (Snort, Suricata, …).


Updating Snorby

Updating snorby is as easy as running the following commands :

cd /var/www/snorby git pull origin master rake snorby:update



Installing Suricata & Barnyard2 Dependencies

apt-get install libpcre3 libpcre3-dbg libpcre3-dev \

           build-essential autoconf automake libtool \
           libpcap-dev libnet1-dev mysql-client libmysqlclient16-dev

Set up yaml :

yaml : cd /tmp wget http://pyyaml.org/download/libyaml/yaml-0.1.3.tar.gz tar xvfz yaml-0.1.3.tar.gz cd yaml-0.1.3 ./configure && make && make install

Install barnyard2 :

cd /tmp wget http://www.securixlive.com/download/barnyard2/barnyard2-1.9.tar.gz tar xvfz barnyard2-1.9.tar.gz cd barnyard2-1.9 ./configure --with-mysql && make && make install

Do NOT delete the /tmp/barnyard2-1.9 folder yet. Install suricata:

cd /tmp wget http://www.openinfosecfoundation.org/download/suricata-1.1beta1.tar.gz tar xvfz suricata-1.1beta1.tar.gz cd suricata-1.1beta1 mkdir /var/log/suricata ./configure && make && make install

Do NOT remove the /tmp/suricata-1.1beta1 folder yet, we need some files from this folder later on.

Try to run suricata :

suricata


If you get the following message :

suricata: error while loading shared libraries: libhtp-0.2.so.1: cannot open shared object file: No such file or directory


then add "/usr/local/lib" to /etc/ld.so.conf and run ldconfig.

root@server:/# cat /etc/ld.so.conf include /etc/ld.so.conf.d/*.conf /usr/local/lib root@server:/# ldconfig


Run "suricata" again :

suricata [14005] 27/2/2011 -- 22:08:28 - (suricata.c:440) <Info> (main) -- This is Suricata version 1.1beta1 [14005] 27/2/2011 -- 22:08:28 - (util-cpu.c:171) <Info> (UtilCpuPrintSummary) -- CPUs/cores online: 2 [14005] 27/2/2011 -- 22:08:28 - (suricata.c:765) <Error> (main) -- [ERRCODE: SC_ERR_OPENING_FILE(40)]

   - Configuration file has not been provided

Suricata 1.1beta1 USAGE: suricata

       -c <path>                    : path to configuration file
       -i <dev or ip>               : run in pcap live mode
       -r <path>                    : run in pcap file/offline mode
       -s <path>                    : path to signature file (optional)
       -l <dir>                     : default log directory
       -D                           : run as daemon
       --engine-analysis            : print reports on analysis of different sections in the engine and exit.
                                      Please have a look at the conf parameter engine-analysis on what reports
                                      can be printed
       --pidfile <file>             : write pid to this file (only for daemon mode)
       --init-errors-fatal          : enable fatal failure on signature init error
       --dump-config                : show the running configuration
       --pcap-buffer-size           : size of the pcap buffer value from 0 - 2147483647
       --user <user>                : run suricata as this user after init
       --group <group>              : run suricata as this group after init
       --erf-in <path>              : process an ERF file

To run the engine with default configuration on interface eth0 with signature file "signatures.rules", run the command as:

suricata -c suricata.yaml -s signatures.rules -i eth0

Get suricata rules (emerging-threats)

mkdir /etc/suricata cd /etc/suricata wget http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz tar xvfz emerging.rules.tar.gz

Configure suricata :

cd /tmp/suricata-1.1beta1 cp suricata.yaml /etc/suricata/ cp classification.config /etc/suricata/ cp reference.config /etc/suricata/

(note : After copying those files, you can remove the installation folder from /tmp)

Edit /etc/suricata/suricata.yaml

Make sure alert output for barnyard2 is enabled (it is enabled by default) :

 # alert output for use with Barnyard2
 - unified2-alert:
     enabled: yes
     filename: unified2.alert
     # Limit in MB.
     #limit: 32


Scroll down until you reach "default-rule-path:" and enable/put the emerging-threat rules files that are relevant to your system under "rule-files:". (You can find the list with rules under /etc/suricata/rules). Example :

default-rule-path: /etc/suricata/rules/ rule-files:

- emerging-attack_response.rules
- emerging-dos.rules
- emerging-exploit.rules
- emerging-games.rules
- emerging-inappropriate.rules
- emerging-malware.rules
- emerging-p2p.rules
- emerging-policy.rules
- emerging-scada.rules
- emerging-smtp.rules
- emerging-virus.rules
- emerging-voip.rules
- emerging-web_client.rules
- emerging-web_server.rules
- emerging-web_specific_apps.rules
- emerging-worm.rules
- emerging-user_agents.rules
- emerging-current_events.rules

Next, edit the HOME_NET variable and set it to your local IP or IP subnet

Example :

HOME_NET: "[192.168.0.0/24]"

That’s the basic config. Keeping suricata up to date

You can use this optional simple script to grab a copy of the git master and update the suricata binaries :

  1. !/bin/bash

cd /tmp rm -rf /tmp/suricata mkdir suricata cd suricata /usr/bin/git clone git://phalanx.openinfosecfoundation.org/oisf.git cd oisf ./autogen.sh ./configure && make && make install


Configure barnyard2 :

Get the sample config file from the installation folder :

cp /tmp/barnyard2-1.9/etc/barnyard2.conf /etc/suricata/

(note : After copying the file, you can remove the installation folder from /tmp)

Edit the conf file and set the following parameters :

(we’ll assume you are installing suricata on the same box as the snorby engine)

config reference_file: /etc/suricata/reference.config config classification_file: /etc/suricata/classification.config config gen_file: /etc/suricata/rules/gen-msg.map config sid_file: /etc/suricata/rules/sid-msg.map

output database: log, mysql, user=snorbyuser password=some_pass /

  dbname=snorby host=localhost sensor_name=sensor1

(obviously the output database configuration must be placed on one line, remove the / between the password and dbname.)

If you are installing remote suricate sensors (remote from the mysql server / snorby engine point of view), then you will have to configure mysql and grant access to the remote mysqluser, from the IP of the sensor. The "host" entry in the barnyard2.conf file needs to point at the remote mysql server.

Finally, create the log folder for barnyard2 :

mkdir /var/log/barnyard2

Run barnyard2 :

barnyard2 -c /etc/suricata/barnyard2.conf -d /var/log/suricata -f unified2.alert -w /var/log/suricata/suricata.waldo -D

This will run barnyard2 in daemon mode. If barnyard2 does not appear to be working, omit the -D parameter and you will be able to see any errors that might prevent barnyard2 from running.

When barnyard2 is running, you should see a new sensor in Snorby. If you don’t like the display name of the sensor, you can change the name via Administration Menu – Sensors

When barnyard2 is running, you can launch suricata too : Run suricata :

suricata -c /etc/suricata/suricata.yaml -i eth0 -D

(change interface accordingly. -D will make suricate run in daemon mode)


As soon as suricata starts generating alerts, barnyard2 should pick them up, and use the mysql connector to write them into the events table of the snorby database. You should be able to see these new events in the "events" view of Snorby.

In the background (every 30 mins), the snorby worker jobs will pick up the events, process them, add them to the caches table, and show them on the dashboard too.


Test IDS

If you want to test your setup, then run :

lynx www.testmyids.com

(if lynx was not installed, run apt-get install lynx and try again)

Watch the /var/log/suricata folder. You should see something similar to this :

root@server:/var/log/suricata# ls -al total 88 drwxr-xr-x 2 root root 4096 2011-02-28 05:38 . drwxr-xr-x 18 root root 4096 2011-02-28 05:30 .. -rw-r----- 1 root root 194 2011-02-28 05:37 fast.log -rw-r----- 1 root root 0 2011-02-28 05:35 http.log -rw-r--r-- 1 root root 66873 2011-02-28 05:39 stats.log -rw------- 1 root root 2056 2011-02-28 05:38 suricata.waldo -rw-r----- 1 root root 0 2011-02-28 05:34 unified2.alert.1298867650 -rw-r----- 1 root root 60 2011-02-28 05:37 unified2.alert.1298867720

If the fast.log file, suricata.waldo and unified2.alert files are growing, then the IDS is picking up the test alerts from www.testmyids.com


Addendum (march 2nd 2011)

After running this setup for a few days, I noticed that Snorby only appears to be seeing "low severity" events, no matter how hard I try.

Something must be wrong.

I did some tests and it appears that suricata 1.1 might not be able to properly classify events.

I tried with snort, and that seems to work well.

Update : I filed a bug report with suricata and it looks like they have fixed the issue. You can use the suricata "update" script to grab the latest version.


Snort

Follow the installation guide at http://www.snort.org/assets/158/snortinstallguide2904.pdf with the exception of creating a "snort" database. Make sure to set up barnyard2 logging and tell it to use "snorby" instead of the "snort" database.

In short, the easiest way to get snort to run on ubuntu 10.x is to run apt-get install snort (or apt-get install snort-mysql if you want to have snort log events directly into the MySql database. This is not the recommended configuration and barnyard2 will be able to handle MySQL downtime)



© 2011, Corelan Team (corelanc0d3r). All rights reserved.

   Twitter36
   Reddit
   Facebook4
   Google
   LinkedIn9
   StumbleUpon

Related Posts:

   Pastenum – Pastebin/pastie enumeration tool
   Backtrack 4 cheat sheet
   Exploit writing tutorial part 11 : Heap Spraying Demystified
   BruCON 2010 : Day 0x1
   Starting to write Immunity Debugger PyCommands : my cheatsheet
   Script to backup Cisco switches via telnet / tftp
   Fuzzing with Metasploit : Simple FTP fuzzer
   Exploit writing tutorial part 4 : From Exploit to Metasploit – The basics
   Juniper ScreenOS : Active/Passive clustering
   Installing Windows 7 from a USB key

Posted in 001_Security, Linux and Unix, Networking, Papers | Tagged a2enmod, apache2, apt-get, barnyard, bind-address, bundle install, cheat sheet, cheatsheet, configuration, daily cache, database.yml, emerging, emerging-threats, ezprint, gem, HOME_NET, ids, installation, ips, libhtp-0.2.so.1, my.cnf, mysql, passenger, passenger-install-apache2-module, passenger.conf, passenger.load, PassengerRoot, PassengerRuby, procedure, qt patch, rails, ruby, sensor cache, setup, snorby, snorby_config.yml, snort, step by step, suricata, ubuntu, unified2.alert, waldo, wkhtmltopdf, www.testmyids.com 5 Responses to Cheat sheet : Installing Snorby 2.2 with Apache2 and Suricata with Barnyard2 on Ubuntu 10.x

   incry6t says:	
   February 28, 2011 at 07:38	
   very informative, great post! i’m curious why you decided to use suricata and not snort? how is it working out for you?
       Corelan Team (corelanc0d3r) says:	
       February 28, 2011 at 07:54	
       ah I never played with suricata before and I wanted to give it a try. It seems to run quite fast (faster than snort, but I may not have been running it long enough to really compare)
   muchikon says:	
   March 20, 2011 at 18:58	
   thanks for the job done, very appreciated
   turki_00 says:	
   June 5, 2011 at 01:41	
   this is a great tutorial, i follow it and it works fine.
   am having difficulties in running snorby under a subdirectoy (rather than have it in the top domain)
   when i point to the top domain, http://mydomain.com
   I can see the login screen and everything is working fine !
   However, when i point to a subdirectory http://mydomain.com/mysnorby
   it is not working and giving me the snorby directory listing.
   I tried to play with the apache virtual host configuration , but no luck.
   Corelan Team (corelanc0d3r) says:	
   August 23, 2011 at 11:00	
   Update : you can download barnyard2 packages here :
   https://launchpad.net/~hurricanedefense/+archive/testing/+build/2315749




Referensi

Pranala Menarik