■Snortのインストールと初期設定
※当初、CentOS7でインストールしようとしましたがBarnyard2がどうしてもうまくいかず、CentOS6.6にしたところ正常動作しました。この記事はCentOS6.6を前提に記載しています。また、サーバのNICは2枚刺しの状態でeth0がIPアドレスを割り当てたNICで、eth1はIPアドレスを割り当てずキャプチャ専用のインターフェイスとしてモニタリングのポートに接続しているという前提です。
ネットワーク型IDS装置のSnortをインストールしてネットワークの不正アクセスを検知してみます。有償製品でもIDS/IPS装置は多数発売されておりますが、それらと比較するとオープンソースのフリーソフトなだけに劣る部分もあるかもしれませんが、これは無料で利用できます。コストを最低限に抑えつつ少しでもセキュリティレベルを上げたい場合はお勧めだと思います。
まずsnort本体を以下のサイトからダウンロードしてサーバにアップロードしておきます。
http://osdn.jp/projects/sfnet_snort/releases/
【 snort-2.9.7.0.tar.gz 】
上記のファイルを/root配下に保存して作業を進めます。最初にsnortに関連するパッケージをyumでインストールし、snort本体はtar.gzからrpmをビルドしてインストールします。最初にsnortに関連するパッケージをyumおよびrpmでインストールし、snort本体はtar.gzからrpmをビルドしてインストールします。
# yum install libpcap-devel pcre-devel libdnet-devel zlib-devel # wget http://www.snort.org/downloads/snort/daq-2.0.5-1.src.rpm # rpmbuild --rebuild daq-2.0.5-1.src.rpm # cd rpmbuild/RPMS/x86_64/ # rpm -Uvh daq-2.0.5-1.x86_64.rpm # rpmbuild -tb --clean snort-2.9.7.0.tar.gz # cd rpmbuild/RPMS/x86_64/ # rpm -Uvh snort-2.9.7.0-1.x86_64.rpm |
次にSnortの設定を行います。設定ファイルは/etc/snort/snort.confとなり、これを編集していきますが、内容は多岐にわたるためとりあえず最低限の設定を行っておきます。自ネットワークとそれ以外の定義です。
# vi /etc/snort/snort.conf <省略> # Setup the network addresses you are protecting ipvar HOME_NET 192.168.0.0/16 # Set up the external network addresses. Leave as "any" in most situations ipvar EXTERNAL_NET !$HOME_NET # 113行目あたり var WHITE_LIST_PATH /etc/snort/rules var BLACK_LIST_PATH /etc/snort/rules # 520行目あたり # output unified2: filename merged.log, limit 128, nostamp, mpls_event_types, vlan_event_types output unified2: filename merged.log, limit 128 # 最後に追加 include $RULE_PATH/community.rules <省略> |
必要なディレクトリ等も作成しておきます。
# touch /etc/snort/rules/white_list.rules # touch /etc/snort/rules/black_list.rules # mkdir -p /usr/local/lib/snort_dynamicrules # chown -R snort.snort /usr/local/lib/snort_dynamicrules # chmod -R 700 /usr/local/lib/snort_dynamicrules |
Snortの動作設定として/etc/sysconfig/snortを編集します。以下は編集箇所の抜粋です。
# vi /etc/sysconfig/snort <省略> # パケットをキャプチャするインターフェイスを指定 INTERFACE=eth1 # ログをDBに吐き出すためコメントアウト #LOGDIR=/var/log/snort #ALERTMODE=fast #DUMP_APP=1 #BINARY_LOG=1 #NO_PACKET_LOG=0 #PRINT_INTERFACE=0 |
■Snortのルールのインストール
Snortのルールを入手します。これにはユーザ登録が必要ですが、E-Mailアドレスとパスワードのみの簡易なものです。登録URLは以下です。
https://www.snort.org/users/sign_up
サブミットすると入力したアドレスにメールがくるので記載されてURLにアクセスしConfirmを完了してください。その後はSign inが可能となり「Oinkcode」というのがログインページから確認できるようになるのでこれをメモしておいてください。このOinkcodeを使ってSnortのルールファイルをダウンロードします。
# wget https://www.snort.org/rules/snortrules-snapshot-2973.tar.gz?oinkcode=<oinkcode> # mv snortrules-snapshot-2973.tar.gz?oinkcode=******** snortrules-snapshot-2973.tar.gz # mv rules/* /etc/snort/rules |
加えてcommunity-rulesもhttps://www.snort.org/downloadsからダウンロードして配置しておきます。
# tar xvf community-rules.tar # mv community-rules/community.rules /etc/snort/rules/ # mv community-rules/sid-msg.map /etc/snort |
ここまでで設定に間違いがないか以下のコマンドで確認しておきます。問題なければ以下のように表示されます。
# snort -T -c /etc/snort/snort.conf <省略> Snort successfully validated the configuration! Snort exiting |
■データベースの準備
Snortで検知したログをDBに格納するためMySQLをインストール致します。
# yum install mysql mysql-server mysql-devel php php-mysql |
次にbarnyard2をインストールします。これはsnortとmysqlの橋渡しをするインターフェイスプログラムとなります。
# cd /usr/local/src # git clone https://github.com/firnsy/barnyard2.git # cd barnyard2 # ./autogen.sh # ./configure --with-mysql --with-mysql-libraries=/usr/lib64/mysql/ # make # make install # ln -s /usr/local/bin/barnyard2 /usr/bin |
作成された設定ファイル等をそれぞれ所定の位置にコピーし、自動起動の設定を実施します。
# cp rpm/barnyard2.conf /etc/sysconfig/barnyard2 # cp rpm/barnyard2 /etc/rc.d/init.d # cp etc/barnyard2.conf /etc/snort |
Barnyard2の起動スクリプトを編集します。起動の順番および起動コマンドを編集致します。私の場合、なぜかそのままの起動スクリプトでは正常にデータベースに格納することができず、少し簡略化することでパケットをキャプチャできるようになりました。
# vi /etc/rc.d/init.d/barnyard2 // 6行目 # chkconfig: 2345 70 60 // 39行目 #BARNYARD_OPTS="-D -c $CONF -d $SNORTDIR/${INT} -w $WALDO_FILE -l $SNORTDIR/${INT} \ -a $ARCHIVEDIR -f $LOG_FILE -X $PIDFILE $EXTRA_ARGS" BARNYARD_OPTS="-D -c $CONF -d $SNORTDIR -f merged.log -w /var/log/snort/barnyard2.waldo -X $PIDFILE $EXTRA_ARGS" # chkconfig --add barnyard2 |
続いて/etc/sysconfig/barnyard2ファイルを編集しておきます。
# vi /etc/sysconfig/barnyard2 INTERFACES="eth1" |
MySQLのrootパスワード等の設定を実施しておいてください。初期設定が終わればsnort用のDBを作成します。
# mysql -u root -p Enter password:[MySQLのrootパスワード入力] Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 11 Server version: 5.5.41-MariaDB MariaDB Server Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> create database snort_log; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> grant all privileges on snort_log.* to snort@localhost identified by 'password'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> quit; Bye |
次に所定のSQL文を流し込みます。
# mysql -u snort -p snort_log < ./schemas/create_mysql Enter password:[上記のパスワードを入力] |
/etc/snort/barnyard2.confを編集します。編集箇所は以下となります。
# vi /etc/snort/barnyard2.conf config hostname: localhost config interface: eth0 output database: log, mysql, user=snort password=password dbname=snort_log host=localhost |
一旦ここでbarnyard2のテストを実施しておきます。故意にログが出力されるようローカルルールを登録し、ログが出力されるか確認してみてください。下記が出力されたあと、実際にpingをうってみてログが表示されればOKです。
# vi /etc/snort/rules/local.rules alert icmp any any -> any any (msg:"ICMP Testing Rule"; sid:1000001; rev:1;) # barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f merged.log -w /var/log/snort/barnyard2.waldo <省略> --== Initialization Complete ==-- ______ -*> Barnyard2 <*- / ,,_ \ Version 2.1.14 (Build 336) |o" )~| By Ian Firns (SecurixLive): http://www.securixlive.com/ + '''' + (C) Copyright 2008-2013 Ian Firns <firnsy@securixlive.com> Using waldo file '/var/log/snort/barnyard2.waldo': spool directory = /var/log/snort spool filebase = merged.log time_stamp = 1434959870 record_idx = 4901 Opened spool file '/var/log/snort/merged.log.1434959870' |
ここまでくればサーバを一旦再起動させてSnortとBarnyard2およびMySQLを自動起動させましょう。
■Baseのインストール
Snortのアラートログ等をWebブラウザから見るためにBaseをインストールします。以下のURLから最新のものをダウンロードします。
http://sourceforge.net/projects/secureideas/files/BASE/
http://sourceforge.net/projects/adodb/files/adodb-php5-only/
Webから見れるようにするためWebサーバのインストールが事前に必要です。Apacheのインストールについてはこちらを御覧ください。この後、上記で取得したファイルを展開し、Webサーバのドキュメントルートに設置します。
# tar xvzf base-1.4.5.tar.gz # tar xvzf adodb519.tar.gz # cp -r base-1.4.5 /var/www/html/base # cp -r adodb5 /var/www/html/ # chmod 755 /var/www/html/adodb5 |
このあと、BaseのConfファイルを編集します。以下では編集箇所のみ抜粋して記載しています。
# cd /var/www/html/base # mv base_conf.php.dist base_conf.php # vi base_conf.php <省略> $BASE_urlpath = '/base'; $DBlib_path = '/var/www/html/adodb5'; $alert_dbname = 'snort_log'; $alert_host = 'localhost'; $alert_port = '3306'; $alert_user = 'snort'; $alert_password = 'password'; <省略> |
このあとブラウザからアクセスをします。アクセス先はhttp://[ip-address]/base/base_main.phpとなります。
上記ページの「Setup page」リンクをクリックします。
右側の「Create BASE AG」ボタンをクリックします。
上記のようになれば成功です。下側のMain pageリンクをクリックすると下記のようにメイン画面が表示されます。
■Snortの自動ルール更新
以下のサイトからpulledporkの最新版をダウンロードしてファイルを展開し設定をしていきます。
https://code.google.com/p/pulledpork/
以下は編集した箇所のみ抜粋して記載しています。
# tar xvzf pulledpork-0.7.0.tar.gz # mv pulledpork-0.7.0 pulledpork # cd pulledport # vi etc/pulledpork.conf rule_url=https://www.snort.org/reg-rules/|snortrules-snapshot.tar.gz|<oinkcode> #rule_url=https://s3.amazonaws.com/snort-org/www/rules/community/|community-rules.tar.gz|Community #rule_url=http://labs.snort.org/feeds/ip-filter.blf|IPBLACKLIST|open #rule_url=https://www.snort.org/reg-rules/|opensource.gz|<oinkcode> rule_path=/etc/snort/rules/snort.rules local_rules=/etc/snort/rules/local.rules sid_msg=/etc/snort/sid-msg.map snort_path=/usr/sbin/snort config_path=/etc/snort/snort.conf distro=RHEL-6-0 black_list=/etc/snort/rules/iplists/default.blacklist IPRVersion=/etc/snort/rules/iplists snort_control=/usr/bin/snort_control snort_version=2.9.7.3 |
上記の中で欠落しているファイル・フォルダを作成しておきます。
# touch /etc/snort/rules/snort.rules # chown snort.snort /etc/snort/rules/snort.rules # mkdir /etc/snort/rules/iplists # touch /etc/snort/rules/iplists/default.blacklist # chown -R snort.snort /etc/snort/rules/iplists |
あとはこれらを以下のコマンドで実行させます。
# perl pulledpork.pl -c etc/pulledpork.conf http://code.google.com/p/pulledpork/ _____ ____ `----,\ ) `--==\\ / PulledPork v0.7.0 - Swine Flu! `--==\\/ .-~~~~-.Y|\\_ Copyright (C) 2009-2013 JJ Cummings @_/ / 66\_ cummingsj@gmail.com | \ \ _(") \ /-| ||'--' Rules give me wings! \_\ \_\\ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Checking latest MD5 for snortrules-snapshot-2973.tar.gz.... They Match Done! Writing /var/log/sid_changes.log.... Done No Rule Changes No IP Blacklist Changes Done Please review /var/log/sid_changes.log for additional details Fly Piggy Fly! |
あとはこれをcronに登録すると自動更新が可能となります。