Tripwireで改ざん検知(σ´∀`)σ

遠藤博樹(NHN JAPAN株式会社)

2018年9月のKUSANAGIバージョンアップで実装されたOpen Source Tripwire (IDS)について解説します。CMSやプラグインの脆弱性を利用され、不正スクリプトが設置されるケースが現状にありますが、そのような予期せぬファイル更新があった場合、Tripwireを導入することで早期に気づける可能性があります。本記事では、Tripwireの導入方法、設定の調整方法、動作チェック方法について丁寧に解説しています。

未分類

テクニカルサポート

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ヶ月毎のつもりが少し間隔が長くなっている期間もありましたが、また来年もこの場でご挨拶出来ればと思います。

ありがとうございました━━━━ヾ(´ー`)ノ゙━━━━!!

<< WAFで攻撃に備える(。・д・)o┫゙;`;:゙;`;:kusanagi ssl –hstsコマンドがエラーになったらφ(`・ω・´)φ >>

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解