Contents
Tripwireインストール
クラッカーによるLinuxサーバーのファイルの改竄を検知するシステムを導入する。
今回は、ファイル改竄検知システムにホスト型IDS(IDS=Intrusion Detection System)のTripwireを導入する。
Tripwireは、導入時のファイル状態をデータベース化し、そのデータベースとファイルの現状を比較することにより、ファイルの追加/変更/削除を検知する。
1. インストールと構成
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. 構成ファイルの設定
①トリップワイヤ構成ファイル (twcfg.txt)
トリップワイヤ構成ファイル (twcfg.txt) の詳細を以下の通りです。暗号化されたポリシー ファイル (tw.pol)、サイトキー (site.key)、およびローカルキー (ホスト名ローカル.key) などのパスは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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 |
3. キーの作成やデータベース作成等の初期設定
①twcfg.txt編集
1 2 3 4 5 6 7 8 |
# cd /etc/tripwire # vi twcfg.txt 9 行目あたり 行頭に「#」を追加し、その下の行に「LOOSEDIRECTORYCHECKING =true」を追加 #LOOSEDIRECTORYCHECKING =false LOOSEDIRECTORYCHECKING =true 12行目:必要に応じて変更 (レポートレベル : 4 が最大) REPORTLEVEL =4 |
② 設定ファイル生成
1 2 3 |
# twadmin -m F -c tw.cfg -S site.key twcfg.txt Please enter your site passphrase: <サイトキーパスフレーズ> Wrote configuration file: /etc/tripwire/tw.cfg |
③ ポリシーを最適化
次のポリシー最適化スクリプトを利用し、ポリシーを最適化する
1 |
# vi twpolmake.pl |
ポリシー最適化スクリプト内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#!/usr/bin/perl $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) ; |
1 2 3 4 |
# 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 |
④データベース作成
1 2 |
# tripwire -m i -s -c tw.cfg Please enter your local passphrase: <ローカールキーパスフレーズ> |
途中でエラーで止まるときは「--verbose」オプションをつけて再実行
1 2 |
# tripwire -m i -c tw.cfg --verbose Please enter your local passphrase: <ローカールキーパスフレーズ> |
進行状況を表示し、エラーで止まるファイルを確認する。当方の環境の場合Snort関連のファイルで止まりました。
1 2 |
# chmod -R 5775 <止まるファイルを絶対パスで指定> # chown -R snort:snort <止まるファイルを絶対パスで指定> |
止まると予想されるパス、ファイル
/etc/snort/etc
/etc/snort/preproc_rules
/etc/snort/rules
/etc/snort/so_rules
/root/community-rules
上記ファイルに所有権と、権限を与えた後、再度次を実行
1 2 |
# tripwire -m i -s -c tw.cfg Please enter your local passphrase: <ローカールキーパスフレーズ> |
完了すると次が表示される
1 2 3 4 5 6 7 8 |
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. |
4. チェックを実行
①テスト用ファイルを作成
1 |
# echo test > /root/test.txt |
②Tripwire の動作確認
1 |
# tripwire -m c -s -c /etc/tripwire/tw.cfg |
成功すると次ような表示が出る
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
Open Source Tripwire(R) 2.4.3.7 Integrity Check Report Report generated by: root Report created on: Sun 05 May 2024 07:51:15 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 0 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: 43117 Total violations found: 1 =============================================================================== Object Summary: =============================================================================== ------------------------------------------------------------------------------- # Section: Unix File System ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- 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. |
テストファイルを削除しておく
1 |
# rm -f /root/test.txt |
5. Tripwire 自動実行
①自動実行スクリプト(tripwire.sh)を作成し、自動実行させる
1 2 |
# cd /opt/script # vi tripwire.sh |
自動実行スクリプト(tripwire.sh)の内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#!/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 |
②実行権限を与え、Cronで定期実行する
1 2 3 |
# chmod 700 tripwire.sh # crontab -e 0 5 * * * /opt/script/tripwire.sh |
下記コマンドを実行して上記で設定したアドレスに通知が届くか確認する
1 |
# /opt/script/tripwire.sh |
DiCEのインストール
ネットが切断されたり、ルーターが切断再起動したときにおこるグローバルIPの変更の度に、ダイナミックDNSにアクセスしグローバルIPが変更されたことを知らせなくてはいけません。その作業を自動的にやってくれるのがDiCEです
1. Diceのダウンロード、インストール
①ダウンロード
1 2 3 4 |
# cd /usr/local/bin # wget http://www.hi-ho.ne.jp/yoshihiro_e/dice/diced01914.tar.gz # tar -xzvf diced01914.tar.gz # cd /usr/local/bin/DiCE |
②DiCEの設定
DiCEの出力文字はEUCのため、文字化けしてしまう。
UTF-8に変換するために、nkfをインストールしておく
1 |
# apt install nkf |
#64bitOSで32bitソフトのDiceを動かすため
1 |
# apt install lib32stdc++6 |
③DiCEを起動する
1 2 |
# cd /usr/local/bin/DiCE # ./diced | nkf -uw |
2. イベントの追加
DNSサービスはVALUEDOMAIN
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# ./diced | nkf -uw : add DynamicDNSサービス名を入力してください "?"で対応しているサービスを一覧表示します (P)戻る >VALUEDOMAIN ドメイン名を入力してください "?"でドメイン一覧を表示します (P)戻る ><ドメイン名> ホスト名を入力してください (P)戻る ><ホスト名> ログインユーザ名を入力してください (P)戻る ><ユーザー名> ←VALUEDOMAINに登録したユーザー名 ログインパスワードを入力してください (P)戻る ><passwd> ←VALUEDOMAINにログインするパスワード 登録するIPアドレスを入力してください 空白にすると現在のIPアドレスを自動検出します (P)戻る >空白 このイベントに題名を付けてください (P)戻る >xxxxxxxxx(適当に付ける) 実行する頻度を指定してください (番号入力) (0)1回のみ (1)1日1回 (2)1週間に1回 (3)1ヵ月に1回 (4)その他の周期 (5)IPアドレス変化時 (6)起動時 (P)戻る >5 IPアドレスがあまり変化しない環境の場合、更新せずに一定期間を過ぎると アカウントを削除されてしまうことがあります IPアドレスの変化が無い時に実行する間隔を指定してください (0)7日毎 (1)14日毎 (2)21日毎 (3)28日毎 (4)35日毎 (5)56日毎 (6)84日毎 (P)戻る >0(任意に決める) このイベントを有効にしますか? (Y/N) (イベントの有効/無効は"EN/DIS"コマンドで切替えられます) >y イベントを保存しますか? (Y/N) >y |
3. イベントの確認
1 2 3 4 5 6 |
:list (No.) (イベント名) (スケジュール) (次回予定) 0 * ubuntu IPアドレス変化時 (7日毎) 10/16 11:29 :ex o + 10/9 11:29 にubuntuが実行されました IPアドレスを更新しました |
4. Diceの自動実行
DiCEデーモンを起動する
1 2 3 4 |
# /usr/local/bin/DiCE/diced -d -l =-=-=- DiCE DynamicDNS Client -=-=-= Version 0.19 for Japanese Copyright(c) 2001 sarad# DiCE Daemon Started !! |
起動しているか確認
1 2 3 |
# ps aux | grep diced root 2595 5.9 0.0 7696 1792 ? Ss 11:30 0:01 /usr/local/bin/DiCE/diced -d -l root 2598 0.0 0.1 6472 2304 pts/0 S+ 11:31 0:00 grep --color=auto diced |
自動で起動するよう設定
1 2 |
# vi /etc/rc.local /usr/local/bin/DiCE/diced -d -l ←追加 |
1 2 3 4 5 6 7 8 |
/etc/rc.localがない場合 systemd になって、起動時に実行したいプログラムは、スクリプトを書いてサービスとして登録します。Debianの場合 /etc/rc.local を root で書いて実行ビットを立てておくと、rc-local というサービスによって自動的に実行されるようになっています。 /etc/rc.local新規作成する # vi /etc/rc.local #!/bin/sh /usr/sbin/ethtool -s eno1 wol g ※ eno1は各自のネットワークインターフェース名(# ip addrで確認) # chmod 700 /etc/rc.local |
ディスク使用率チェックスクリプト導入
1. スクリプト作成
1 2 |
# cd /opt/script/ # vi disk_capacity_check.sh |
disk_capacity_check.shの内容
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash #通知先メールアドレス指定 MAIL="<your mailaddress> " DVAL=`/bin/df / | /usr/bin/tail -1 | /bin/sed 's/^.* \([0-9]*\)%.*$/\1/'` if [ $DVAL -gt 80 ]; then echo "Disk usage alert: $DVAL %" | mail -s "Disk Space Alert in `hostname`" $MAIL fi |
1 |
# chmod 700 disk_capacity_check.sh |
2. 実行確認
①現在の使用率を確認
1 |
# df -h |
次のように表示される
1 2 3 4 5 6 7 |
Filesystem Size Used Avail Use% Mounted on tmpfs 387M 4.7M 383M 2% /run /dev/mapper/ubuntu--vg-ubuntu--lv 14G 6.6G 6.4G 51% / tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sda2 2.0G 95M 1.7G 6% /boot tmpfs 387M 12K 387M 1% /run/user/1000 |
80%以上になるようダミーファイルを作成する(今回は5G程度作成)
1 |
# dd if=/dev/zero of=dummyfile bs=1M count=5000 |
③再度確認
1 |
# df -h |
を実行して80%以上になっていることを確認
④ディスク容量チェックスクリプトを実行
1 |
# /opt/script/disk_capacity_check.sh |
設定したメールアドレスに本文の内容として「Disk usage alert: 89 %」のように記載のメールが届きます
⑤作成した「dummyfile」を削除
1 |
# rm dummyfile |
⑥定期実行設定
1 2 |
# crontab -e 30 2 * * * /opt/script/disk_capacity_check.sh |
ログ解析ツール logwatch インストール
1. logwatch のインストール
1 |
# apt -y install logwatch |
2. logwatch 設定ファイルの編集
①デフォルトの設定ファイルをコピー
1 |
# cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/ |
②メールの送信先等を変更
1 2 3 4 5 |
# vi /etc/logwatch/conf/logwatch.conf 52行目 MailTo =<your mailaddress> # < = メール送信先 84行目 Detail = High |
3. ディレクトリの作成
キャッシュで使用するディレクトリが無いので作成しておく
1 |
# mkdir /var/cache/logwatch |
4. 動作確認
logwatch をインストールするとデフォルトで cron 登録されるので、毎日レポートメールが届く
すぐに確認したければ、以下のようにする
1 |
# /etc/cron.daily/00logwatch |