10回目の投稿となります。
NHN JAPANの遠藤と申します。
よろしくお願いいたします。
前回に続き、2018.9月のKUSANAGI バージョンアップにて実装されたセキュリティ対策用アプリケーションの中からの記事となります。
前回は、WAF(NAXSI)についてを書きました。
今回は『Open Source Tripwire (IDS)』について触れてみますが、詳細なIDSとは!の解説はしないので、ファイル更新があったら通知する仕組みとここではざっくりな表現とさせていただきます(*´¬`)
弊社サービスを利用のお客様で実際にあったものとしては脆弱性があるCMSやプラグインを利用していたため、その脆弱性経由で不正スクリプトが設置され、不特定多数にスパムメール送信が行われていました。
Tripwireを導入していた場合、意図しないファイル(スクリプト)が設置されたことに早い段階で気づけるようになるかも。
1.KUSANAGIコマンドでTripwireを有効にする
上述のバージョン以降、 # kusanagi addon install tripwire と実行することでインストール可能です。
インストールの過程で何度もパスフレーズの設定(入力)を求められますが、運用時にも入力することが多々あるものなので、適当に入力して忘れてしまった、となりませんように。
# kusanagi addon install tripwire ---------------------------------------------- The Tripwire site and local passphrases are used to sign a variety of files, such as the configuration, policy, and database files. Passphrases should be at least 8 characters in length and contain both letters and numbers. See the Tripwire manual for more information. ---------------------------------------------- Creating key files... (When selecting a passphrase, keep in mind that good passphrases typically have upper and lower case letters, digits and punctuation marks, and are at least 8 characters in length.) Enter the site keyfile passphrase: Verify the site keyfile passphrase: Generating key (this may take several minutes)...Key generation complete. (When selecting a passphrase, keep in mind that good passphrases typically have upper and lower case letters, digits and punctuation marks, and are at least 8 characters in length.) Enter the local keyfile passphrase: ~~以下省略~~
2.Tripwireの設定を調整する
設定ファイルは /etc/tripwire/以下に作成されます。
Tripwireの不正検知はファイルやディレクトリ情報を記録したデータベースを作り、そのデータベースと比較して更新や削除、追加が行われたらアラートを出すものです。
管理者はそのアラートを見て意図して設置されているファイルなのか、または消されてしまったファイルなのかなど判断する運用となります。
基となるデータベースはサンプルファイルとして用意されている /etc/tripwire/twpol.txt を基に編集すると良いでしょう。
twpol.txt の中身はディレクトリ毎にセクションを分け、細かい設定が可能になっています。
(特定のディレクトリやファイルは検知対象外とする、このディレクトリの検知は指定したメールアドレスにアラートを通知する、などもこのファイルで編集します)
169行目付近の記述を例にすると次のように記述されていますが、これは /(root)直下、/home以下、/etc以下に対しての設定です。
169 ( 170 rulename = "Invariant Directories", 171 severity = $(SIG_MED) 173 ) 174 { 175 / -> $(SEC_INVARIANT) (recurse = 0) ; 176 /home -> $(SEC_INVARIANT) (recurse = 0) ; 177 178 /etc -> $(SEC_INVARIANT) (recurse = 0) ; 179 180 }
KUSANAGIの場合は/home/kusanagi/<<プロファイル名>>/ にプロファイル毎のディレクトリが作成されますが、
例えばこの領域へのファイル作成を検知させる場合、次のように記述を変更します(ついでにメール通知も有効にします)。
※メール通知をするにはemailto = の形式で severity の下に書きます。severityの文末に ; も追加します。
※ recurse = 0 のものは検知対象外です。 /home/kusanagi の行を追加し、その行を -1 とすることで /home/kusanagi以下は検知対象となります。
( rulename = "Invariant Directories", severity = $(SIG_MED); emailto = *****@example.com ) { / -> $(SEC_INVARIANT) (recurse = 0) ; /home -> $(SEC_INVARIANT) (recurse = 0) ; /etc -> $(SEC_INVARIANT) (recurse = 0) ; /home/kusanagi -> $(SEC_INVARIANT) (recurse = -1) ; }
実際にこの設定で運用するとプロファイル以下のlogファイルの更新も検知しますので実用的ではないのですが、ここでは分かりやすい例としてこのディレクトリで設定しました。
ポリシーファイルの編集が終わったら暗号化をしておきましょう。
# twadmin -m P -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key /etc/tripwire/twpol.txt
3.データベースやポリシーファイルの作成・更新をする
調整したポリシーファイルに沿ってデータベースを作成するには次のコマンドで行います。
# /usr/sbin/tripwire --init
また、検知後にデータベースを更新しないと毎回検知した時にレポート内容に同じ変化ファイル(ディレクトリ)情報が通知されるため、検知内容に問題が無かったり処置が終わったらデータベースを最新に更新するため、再度初期化するかレポートファイルを基にデータベースを更新してください。
ポリシーファイルを更新する場合は次のコマンドで行います。
# tripwire --Update-policy -Z Low /etc/tripwire/twpol.txt
4.ファイル検知動作チェック
設定した検知対象ディレクトリに適当なファイルを設置してみましょう。
# touch /home/kusanagi/<<プロファイル>>/testfile
ファイルを設置したら検知するか次のコマンドでチェックさせます。 -Mはメール送信に利用します。
# tripwire -m c -c /etc/tripwire/tw.cfg -M
なお、画面上のコマンド結果(レポート)とメールで通知されるレポート内容は異なります。
これは2.の設定でしたメール送信は特定ディレクトリに関する設定のため、
メールに記述される検知ファイルも設定したものに対しての通知となります。
次のような内容を含んだメールが届き、testfileがadd(追加)されたことのレポートとなっています。
------------------------------------------------------------------------------- Rule Name: Invariant Directories (/home/kusanagi) Severity Level: 66 ------------------------------------------------------------------------------- ---------------------------------------- Added Objects: 1 ---------------------------------------- Added object name: /home/kusanagi/<<プロファイル>>/testfile
エンタープライズ版のTripwireではリアルタイム検知にも対応しているようですが、、、通常版はcronで定期的にチェックやデータベース更新を行うよう作りこむと実用的になります(ノω`*)
2018年の投稿はこちらで最後となります。
2ヶ月毎のつもりが少し間隔が長くなっている期間もありましたが、また来年もこの場でご挨拶出来ればと思います。
ありがとうございました━━━━ヾ(´ー`)ノ゙━━━━!!