「エアコンの安全な修理・適切なフロン回収」はこちら

Ubuntu Server 20.04でサーバー構築 SNORT , Tripwire インストール

1.SNORTインストール

Snortは、IPネットワーク上でリアルタイムのトラフィック分析とパケットロギングを実行できるオープンソースのネットワーク侵入検知システムです。

「プロトコル分析」「コンテンツ検索」「マッチング」を実行でき、「バッファオーバーフロー」「ステルスポートスキャン」「CGI攻撃」「SMBプローブ」「OSフィンガープリント試行」「セマンティックURL攻撃」「サーバメッセージブロック探査」など、さまざまな攻撃検出に使用できます。

1.1 インストール

①必要なライブラリーインストール

# apt install -y gcc libpcre3-dev zlib1g-dev libluajit-5.1-dev \
libpcap-dev openssl libssl-dev libnghttp2-dev libdumbnet-dev \
bison flex libdnet autoconf libtool

②作業ディレクトリー作成

# mkdir /usr/src/snort_src
# cd /usr/src/snort_src

③Daqダウンロード、インストール
Snort Webサイトから、wgetコマンドを使用して最新のDAQソースパッケージをダウンロードします。 新しいソースが利用可能な場合は、コマンドのバージョン番号を置き換えてください

# wget https://www.snort.org/downloads/snort/daq-2.0.7.tar.gz
# tar -xvzf daq-2.0.7.tar.gz
# cd daq-2.0.7
# autoreconf -f -i
# ./configure && make && make install
# cd ../

④SNORTのダウンロード、インストール

# wget https://www.snort.org/downloads/snort/snort-2.9.19.tar.gz
# tar -xvzf snort-2.9.19.tar.gz
# cd snort-2.9.19
# ./configure –enable-sourcefire && make && make install
# ldconfig
# ln -s /usr/local/bin/snort /usr/sbin/snort

1.2 ユーザーとフォルダー構造の設定

ルートアクセスなしでSnort を安全に実行するには、新しい特権のないユーザーと、デーモンを実行するための新しいユーザーグループを作成する必要があります

# groupadd snort
# useradd snort -r -s /sbin/nologin -c SNORT_IDS -g snort
# mkdir -p /etc/snort/rules
# mkdir /var/log/snort
# mkdir /usr/local/lib/snort_dynamicrules
# mkdir /etc/snort/preproc_rules
# chmod -R 5775 /etc/snort
# chmod -R 5775 /var/log/snort
# chmod -R 5775 /usr/local/lib/snort_dynamicrules
# chown -R snort:snort /etc/snort
# chown -R snort:snort /var/log/snort
# chown -R snort:snort /usr/local/lib/snort_dynamicrules

下記ファイル作成

# touch /etc/snort/rules/white_list.rules
# touch /etc/snort/rules/black_list.rules
# touch /etc/snort/rules/local.rules

1.3 設定ファイルのセットアップ

すべてのファイルを構成ディレクトリにコピーします。

# cp /usr/src/snort_src/snort*/etc/*.conf* /etc/snort
# cp /usr/src/snort_src/snort*/etc/*.map /etc/snort

1.4 コミュニティルールの使用

自由に利用できるコミュニティルールを取得する。

①コミュニティルールを取得し、構成フォルダにコピー

# wget https://www.snort.org/rules/community -O ~/community.tar.gz
# tar -xvf ~/community.tar.gz -C ~/
# cp ~/community-rules/* /etc/snort/rules

②不要な行を一括してコメントアウト

# sed -i ‘s/include \$RULE\_PATH/#include \$RULE\_PATH/’ /etc/snort/snort.conf

 

1.5 登録済みユーザールールの取得

ウェブサイトに無料で登録することで、登録ユーザールールセットをダウンロードできるOinkコードにアクセスできます。

①Oinkcodeを取得
Snort 公式サイトでユーザー登録を行い、コミュニティルール取得に必要なOinkcodeを取得する
最新ルールファイルをダウンロードする為に、Snort の公式でユーザー登録をします。

 にアクセスし、

「Sign In」をクリック

「Sign Up」をクリック

「Email」、「Passsword」、「Password confirmation」を入力とその他項目をチェックし、「Sign Up」をクリック

「Sign Up」が成功すると、登録したメールアドレスに下記のメールが届く、本文のリンクをクリック

登録した内容を入力してログイン

メールアドレスをクリック

「Oinkcodes」をクリックし、「Oinkcode」を別に保存しておく

②登録済みユーザールールをダウンロード
下記の「oinkcode」の箇所を上記で取得したコードに置き換える

# https://www.snort.org/rules/snortrules-snapshot-29181.tar.gz?oinkcode= oinkcode -O ~/registered.tar.gz

③構成ディレクトリにルールを抽出

# tar -xvf ~/registered.tar.gz -C /etc/snort

1.6 ネットワーク・セットおよびルール・セットの構成

①snort.conf を編集

# vi /etc/snort/snort.conf

編集内容

45行目 192.168.11.0/24は自サーバーの環境に合わす
# Setup the network addresses you are protecting
ipvar HOME_NET 192.168.11.0/2448行目
# Set up the external network addresses. Leave as “any” in most situations
ipvar EXTERNAL_NET !$HOME_NET

104-106行目
# Path to your rules files (this can be a relative path)
var RULE_PATH /etc/snort/rules
var SO_RULE_PATH /etc/snort/so_rules
var PREPROC_RULE_PATH /etc/snort/preproc_rules

113,114行目
# Set the absolute path appropriately
var WHITE_LIST_PATH /etc/snort/rules
var BLACK_LIST_PATH /etc/snort/rules

Step #6 まで下にスクロールし、次のように snort.log のファイル名でログに記録するように unified2 の出力を設定します。
526行目あたり追記
# unified2
# Recommended for most installs
output unified2: filename snort.log, limit 128

最後に、ファイルの一番下までスクロールして、含まれているルール セットの一覧を見つけます。Snort がカスタム ルールを読み込むようにするには、local.rules のコメントを解除する必要があります。
547行目あたり
include $RULE_PATH/local.rules

コミュニティ ルールを使用している場合は、local.rules 行のすぐ下に追加します。
include $RULE_PATH/community.rules

②設定の検証
パラメーター -T を使用して構成をテストし、テスト・モードを使用可能にします

# snort -T -c /etc/snort/rules/snort.conf

「ファイルが見つからない」というエラーが出た場合、エラーが出るファイルを/etc/snort/rulesにコピーする
当方の場合次のファイルエラーが出た

# cp /usr/src/snort_src/snort-2.9.19/etc/classification.config /etc/snort/rules
# cp /usr/src/snort_src/snort-2.9.19/etc/reference.config /etc/snort/rules
# cp /usr/src/snort_src/snort-2.9.19/etc/threshold.conf /etc/snort/rules
# cp /usr/src/snort_src/snort-2.9.19/etc/unicode.map /etc/snort/rules/

invalidエラーが出た場合次のようにする

# vi /etc/snort/rules/snort.conf
322~324行目を次のように変更
#decompress_swf {deflate lzma} \
decompress_swf {deflate} \
decompress_pdf {deflate}

再度

# snort -T -c /etc/snort/rules/snort.conf

実行すると次の例のようなメッセージが表示されます

  –== Initialization Complete ==–
,,_   -*> Snort! <*-
o” )~  Version 2.9.19 GRE (Build 85)
””   By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
    Copyright (C) 2014-2021 Cisco and/or its affiliates. All rights reserved.
    Copyright (C) 1998-2013 Sourcefire, Inc., et al.
    Using libpcap version 1.9.1 (with TPACKET_V3)
    Using PCRE version: 8.39 2016-06-14
    Using ZLIB version: 1.2.11

    Rules Engine: SF_SNORT_DETECTION_ENGINE Version 3.2 <Build 1>
    Preprocessor Object: SF_SDF Version 1.1 <Build 1>
    Preprocessor Object: SF_MODBUS Version 1.1 <Build 1>
    Preprocessor Object: SF_POP Version 1.0 <Build 1>
    Preprocessor Object: SF_FTPTELNET Version 1.2 <Build 13>
    Preprocessor Object: SF_SMTP Version 1.1 <Build 9>
    Preprocessor Object: SF_GTP Version 1.1 <Build 1>
    Preprocessor Object: SF_DNS Version 1.1 <Build 4>
    Preprocessor Object: SF_REPUTATION Version 1.1 <Build 1>
    Preprocessor Object: SF_DNP3 Version 1.1 <Build 1>
    Preprocessor Object: SF_IMAP Version 1.0 <Build 1>
    Preprocessor Object: SF_S7COMMPLUS Version 1.0 <Build 1>
    Preprocessor Object: SF_SSH Version 1.1 <Build 3>
    Preprocessor Object: SF_DCERPC2 Version 1.0 <Build 3>
    Preprocessor Object: appid Version 1.1 <Build 5>
    Preprocessor Object: SF_SIP Version 1.1 <Build 1>
    Preprocessor Object: SF_SSLPP Version 1.1 <Build 4>

Total snort Fixed Memory Cost – MaxRss:838424
Snort successfully validated the configuration!
Snort exiting

1.7 構成のテスト

Snort が意図したとおりにアラートをログに記録しているかどうかをテストするには、着信 ICMP 接続に関するカスタム検出ルールアラートを local.rules ファイルに追加します

# vi /etc/snort/rules/local.rules
最終行に下記を追記
alert icmp any any -> $HOME_NET any (msg:”ICMP test”; sid:10000001; rev:001;)

テスト実行

# snort -A console -i eno1 -u snort -g snort -c /etc/snort/snort.conf

「eno1」は各自のネットワークインターフェイスに書き換える。
ターミナルをこの状態のままにして、同じネットワーク上にある他のPC(Windows等)からPingを本サーバーに実行すると、Snort を実行しているターミナルに ICMP 呼び出しごとに次のような通知が表示されます

Commencing packet processing (pid=131577)
12/15-21:27:03.928135 [**] [1:10000001:1] ICMP test [**] [Priority: 0] {ICMP} 192.168.11.20 -> 192.168.11.63
12/15-21:27:03.928419 [**] [1:10000001:1] ICMP test [**] [Priority: 0] {ICMP} 192.168.11.63 -> 192.168.11.20
12/15-21:27:04.931973 [**] [1:10000001:1] ICMP test [**] [Priority: 0] {ICMP} 192.168.11.20 -> 192.168.11.63
12/15-21:27:04.932072 [**] [1:10000001:1] ICMP test [**] [Priority: 0] {ICMP} 192.168.11.63 -> 192.168.11.20
Snort は、/var/log/snort/snort.log.<timestamp> の下のログにアラートを記録します。ログは、下のコマンドで読み取ることができます
# snort -r /var/log/snort/snort.log.<id_number>

1.8 バックグラウンドで Snortを実行

サービスとしてSnort を実行するため、Snort のスタートアップスクリプトを新規追加する

# vi /lib/systemd/system/snort.service

スクリプト内容
eno1」は各自環境に合わす

[Unit] Description=Snort NIDS Daemon
After=syslog.target network.target

[Service] Type=simple
ExecStart=/usr/local/bin/snort -q -u snort -g snort -c /etc/snort/snort.conf -i eno1

[Install] WantedBy=multi-user.target

設定反映・起動

# systemctl daemon-reload
# systemctl start snort

2.Tripwireインストール

クラッカーによるLinuxサーバーのファイルの改竄を検知するシステムを導入する。
今回は、ファイル改竄検知システムにホスト型IDS(IDS=Intrusion Detection System)のTripwireを導入する。
Tripwireは、導入時のファイル状態をデータベース化し、そのデータベースとファイルの現状を比較することにより、ファイルの追加/変更/削除を検知する。

2.1 インストールと構成

# apt install tripwire

①サイト キーの作成
Tripwire は、「tw.cfg」tripwire構成ファイルと 「tw.pol」tripwireポリシーファイルをセキュリティで保護するためにサイトパスフレーズを必要とします。指定されたパスフレーズを使用して両方のファイルを暗号化します。 サイトパスフレーズは、単一インスタンスのtripwireに対しても必要です。

②ローカルキーパスフレーズ
tripwireデータベースとレポートファイルの保護にはローカルパスフレーズが必要です。tripwireベースラインデータベースの不正な変更を避けるためにtripwireが使用するローカルキー。

③tripwire構成パス
tripwireの設定は /etc/tripwire/twcfg.txt ファイルに保存されています。暗号化された構成ファイル tw.cfg を生成するために使用されます。

④tripwire ポリシー パス
tripwireは/etc/tripwire/twpol.txtファイルにポリシーを保存します。これは、tripwire で使用される暗号化されたポリシー ファイル tw.pol の生成に使用されます。


再度サイトキーパスフレーズの入力を求められる


再度ローカールキーパスフレーズの入力を求められる


インストールが進みます。

2.2 構成ファイルの設定

①トリップワイヤ構成ファイル (twcfg.txt)
トリップワイヤ構成ファイル (twcfg.txt) の詳細を以下の通りです。暗号化されたポリシー ファイル (tw.pol)、サイトキー (site.key)、およびローカルキー (ホスト名ローカル.key) などのパスは以下の通りです。

ROOT =/usr/sbin 実行ファイル
POLFILE =/etc/tripwire/tw.pol
DBFILE =/var/lib/tripwire/$(HOSTNAME).twd データペースファイル
REPORTFILE =/var/lib/tripwire/report/$(HOSTNAME)-$(DATE).twr
SITEKEYFILE =/etc/tripwire/site.key
LOCALKEYFILE =/etc/tripwire/$(HOSTNAME)-local.key
EDITOR =/usr/bin/editor
LATEPROMPTING =false
LOOSEDIRECTORYCHECKING =false
MAILNOVIOLATIONS =true
EMAILREPORTLEVEL =3
REPORTLEVEL =3
SYSLOGREPORTING =true
MAILMETHOD =SMTP
SMTPHOST =localhost
SMTPPORT =25
TEMPDIRECTORY =/tmp

2.3 キーの作成やデータベース作成等の初期設定

①twcfg.txt編集

# cd /etc/tripwire
# vi twcfg.txt
9 行目あたり
行頭に「#」を追加し、その下の行に「LOOSEDIRECTORYCHECKING =true」を追加
#LOOSEDIRECTORYCHECKING =false
LOOSEDIRECTORYCHECKING =true
12行目:必要に応じて変更 (レポートレベル : 4 が最大)
REPORTLEVEL =4

② 設定ファイル生成

# cd /etc/tripwire
# twadmin -m F -c tw.cfg -S site.key twcfg.txt
Please enter your site passphrase: <サイトキーパスフレーズ>
Wrote configuration file: /etc/tripwire/tw.cfg

③ ポリシーを最適化
次のポリシー最適化スクリプトを利用し、ポリシーを最適化する

# vi twpolmake.pl

ポリシー最適化スクリプト内容

#!/usr/bin/perl
# Tripwire Policy File customize tool
# —————————————————————-
# Copyright (C) 2003 Hiroaki Izumi
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place – Suite 330, Boston, MA  02111-1307, USA.

# —————————————————————-
# Usage:
#     perl twpolmake.pl {Pol file}
# —————————————————————-
#
$POLFILE=$ARGV[0];
open(POL,”$POLFILE”) or die “open error: $POLFILE” ;
my($myhost,$thost) ;
my($sharp,$tpath,$cond) ;
my($INRULE) = 0 ;
while (<POL>) {
    chomp;
    if (($thost) = /^HOSTNAME\s*=\s*(.*)\s*;/) {
        $myhost = `hostname` ; chomp($myhost) ;
        if ($thost ne $myhost) {
            $_=”HOSTNAME=\”$myhost\”;” ;
        }
    }
    elsif ( /^{/ ) {
        $INRULE=1 ;
    }
    elsif ( /^}/ ) {
        $INRULE=0 ;
    }
    elsif ($INRULE == 1 and ($sharp,$tpath,$cond) = /^(\s*\#?\s*)(\/\S+)\b(\s+->\s+.+)$/) {
        $ret = ($sharp =~ s/\#//g) ;
        if ($tpath eq ‘/sbin/e2fsadm’ ) {
            $cond =~ s/;\s+(tune2fs.*)$/; \#$1/ ;
        }
        if (! -s $tpath) {
            $_ = “$sharp#$tpath$cond” if ($ret == 0) ;
        }
        else {
            $_ = “$sharp$tpath$cond” ;
        }
    }
    print “$_\n” ;
}
close(POL) ;

# perl twpolmake.pl twpol.txt > twpol.txt.new
# twadmin -m P -c tw.cfg -p tw.pol -S site.key twpol.txt.new
Please enter your site passphrase: <サイトキーパスフレーズ>
Wrote policy file: /etc/tripwire/tw.pol

④データベース作成

# tripwire -m i -s -c tw.cfg
Please enter your local passphrase: <ローカールキーパスフレーズ>

途中でエラーで止まるときは「–v」オプションをつけて、進行状況を表示し、エラーで止まるファイルを確認する。当方の環境の場合Snort関連のファイルで止まりました。

# chmod -R 5775 <止まるファイルを絶対パスで指定>
# chown -R snort:snort <止まるファイルを絶対パスで指定>

止まると予想されるパス、ファイル
/etc/snort/etc
/etc/snort/preproc_rules
/etc/snort/rules
/etc/snort/so_rules
/root/community-rules
上記ファイルに所有権と、権限を与えた後、再度次を実行

# tripwire -m i -s -c tw.cfg
Please enter your local passphrase: <ローカールキーパスフレーズ>

完了すると次が表示される

Processing: /var/tmp
— Generating information for: /var/tmp
Processing: /home
— Generating information for: /home
Processing: /tmp
— Generating information for: /tmp
Wrote database file: /var/lib/tripwire/Lepard.twd
The database was successfully generated.

2.4 チェックを実行

①テスト用ファイルを作成

# echo test > /root/test.txt

②Tripwire の動作確認

# tripwire -m c -s -c /etc/tripwire/tw.cfg

成功すると次ような表示が出る

Open Source Tripwire(R) 2.4.3.7 Integrity Check Report
Report generated by: root
Report created on: Thu 16 Dec 2021 09:32:46 AM JST
Database last updated on: Never
===============================================================
Report Summary:
===============================================================
Host name: Lepard
Host IP address: 127.0.1.1
Host ID: None
Policy file used: /etc/tripwire/tw.pol
Configuration file used: /etc/tripwire/tw.cfg
Database file used: /var/lib/tripwire/Lepard.twd
Command line used: tripwire -m c -s -c /etc/tripwire/tw.cfg
===============================================================
Rule Summary:
===============================================================——————————————————————————-
Section: Unix File System
——————————————————————————-
Rule Name Severity Level Added Removed Modified
——— ————– —– ——- ——–
Other binaries 66 0 0 0
Tripwire Binaries 100 0 0 0
Other libraries 66 0 0 0
Root file-system executables 100 0 0 0
* Tripwire Data Files 100 1 0 0
System boot changes 100 0 0 0
Root file-system libraries 100 0 0 0
(/lib)
Critical system boot files 100 0 0 0
Other configuration files 66 0 0 0
(/etc)
Boot Scripts 100 0 0 0
Security Control 66 0 0 0
* Root config files 100 1 0 0
Devices & Kernel information 100 0 0 0
(/dev)
Invariant Directories 66 0 0 0
Total objects scanned: 49813
Total violations found: 2
===============================================================
Object Summary:
===============================================================
——————————————————————————-
# Section: Unix File System
——————————————————————————-
——————————————————————————-
Rule Name: Tripwire Data Files (/var/lib/tripwire/Lepard.twd)
Severity Level: 100
——————————————————————————-
Added:
“/var/lib/tripwire/Lepard.twd”
——————————————————————————-
Rule Name: Root config files (/root)
Severity Level: 100
——————————————————————————-
Added:
“/root/test.txt”
===============================================================
Error Report:
===============================================================No Errors
——————————————————————————-
*** End of report ***
Open Source Tripwire 2.4 Portions copyright 2000-2018 Tripwire, Inc. Tripwire is a registered
trademark of Tripwire, Inc. This software comes with ABSOLUTELY NO WARRANTY;
for details use –version. This is free software which may be redistributed
or modified only under certain conditions; see COPYING for details.
All rights reserved.

テストファイルを削除しておく

# rm -f /root/test.txt

2.5 Tripwire 自動実行

①自動実行スクリプト(tripwire.sh)を作成し、自動実行させる

# cd /opt/script
# vi tripwire.sh

自動実行スクリプト(tripwire.sh)の内容

#!/bin/bash

PATH=/usr/sbin:/usr/bin:/bin:/usr/local/tripwire/sbin

# パスフレーズ設定
LOCALPASS=xxxxxxxx # ローカルパスフレーズ
SITEPASS=xxxxxxxx # サイトパスフレーズ

cd /etc/tripwire

# Tripwireチェック実行
tripwire -m c -s -c tw.cfg|mail -s “Tripwire(R) Integrity Check Report in `hostname`” root

# ポリシーファイル最新化
twadmin -m p -c tw.cfg -p tw.pol -S site.key > twpol.txt
perl twpolmake.pl twpol.txt > twpol.txt.new
twadmin -m P -c tw.cfg -p tw.pol -S site.key -Q $SITEPASS twpol.txt.new > /dev/null
rm -f twpol.txt* *.bak

# データベース最新化
rm -f /usr/local/tripwire/lib/tripwire/*.twd*
tripwire -m i -s -c tw.cfg -P $LOCALPASS

②実行権限を与え、Cronで定期実行する

# chmod 700 tripwire.sh
# crontab -e
0 5 * * * /opt/script/tripwire.sh

参考: メールで結果報告用スクリプト

#!/bin/bash

PATH=/usr/sbin:/usr/bin:/bin:/usr/local/tripwire/sbin

# パスフレーズ設定
LOCALPASS=xxxxx # ローカルパスフレーズ
SITEPASS=xxxxx # サイトパスフレーズ

#通知先メールアドレス指定
MAIL=”<your mailaddress> ”

cd /etc/tripwire

# Tripwireチェック実行
tripwire -m c -s -c tw.cfg|mail -s “Tripwire(R) Integrity Check Report in `hostname`” $MAIL

# ポリシーファイル最新化
twadmin -m p -c tw.cfg -p tw.pol -S site.key > twpol.txt
perl twpolmake.pl twpol.txt > twpol.txt.new
twadmin -m P -c tw.cfg -p tw.pol -S site.key -Q $SITEPASS twpol.txt.new > /dev/null
rm -f twpol.txt* *.bak

# データベース最新化
rm -f /usr/local/tripwire/lib/tripwire/*.twd*
tripwire -m i -s -c tw.cfg -P $LOCALPASS

タイトルとURLをコピーしました