AFICKの使い方をまとめました。
AFICK:https://afick.sourceforge.net/index.html
AFICKとは
AFICKはコンピュータの改ざんを検知するHIDSです。
AFICKの構成
AFICKを構成しているファイルについて説明します。
afick.pl : メインスクリプト。AFICKを実行させるファイルです。(Linux/Windows)
afickonfig.pl : afick を設定するためのツール
windows.conf(Windowsの場合) / afick.conf(Linuxの場合):AFICKの設定ファイル
afick_archive.pl : アーカイブのファイルをチェック/検索/クリーンアップするツール
afick_cron : cron によって実行されるスクリプト (Linux)
afick_planning.pl : サービス プランニングによって実行されるスクリプト (Windows)
set_planning.pl : サービス計画を構成するスクリプト (Windows)
デフォルト設定では、毎日(バッチ)実行が設定されます。
参照:https://afick.sourceforge.net/components.html
AFICKの使い方
以下の流れでAFICKを使用します。
- 設定ファイルを用意する
- データベースを作成する
- 定期的に検知させる
- データベースを更新する
参考:https://afick.sourceforge.net/usage.html
設定ファイルを用意する
AFICKでは、デフォルトで下記の定義ファイルが作成されます。
- windows.conf : Windowsの場合
- afick.conf : Linux の場合
別のツールの設定(aide、tripwire)から開始することもできます。以下設定ファイルについての詳細。
データベースを作成する
下記コマンドを使用することでデータベースを作成します。
- afick.pl -c windows.conf -i : Windowsの場合
- afick.pl -c afick.conf -i : Linuxの場合
データベースの保存先はwindows.confもしくはafick.confで管理します。
定期的に検知させる
下記コマンドで改ざんを検知します。
afick.pl -c windows.conf -k
: Windowsの場合afick.pl -c afick.conf -k
: Linuxの場合
データベースの更新と改ざん検知を同時に行う場合は下記のコマンドを実行します。
afick.pl -c windows.conf -u
: Windowsの場合afick.pl -c afick.conf -u
: Linuxの場合
データベースを更新する
下記のコマンドで作成したデータベースを更新する方法です。
- afick.pl -c windows.conf -i : Windowsの場合
- afick.pl -c afick.conf -i : Linuxの場合
作成したデータベースは下記の方法で更新します。
- アップデートモード(
afick.pl -c windows.conf -u
: Windowsの場合、afick.pl -c afick.conf -u
: Linuxの場合)で実行 - ソフトウェアをインストール/アップグレード/削除する
- 再度アップデートモードでafickを実行(
afick.pl -c windows.conf -u
: Windowsの場合、afick.pl -c afick.conf -u
: Linuxの場合)する
AFICKの設定ファイル(windows.conf / afick.conf)の書き方(使い方)
Afick は、デフォルトの設定ファイルとして/etc/afick.conf (Linux) またはwindows.conf (Windows) を使用する。
windows.conf / afick.confの記載ルール
AFICK設定ファイル配下のルールが適用されます。
- Afick 設定では大文字と小文字が区別されます。
- 先頭と末尾の空白は無視されます。
- 空白行または # で始まる行はコメントとして無視されます。
- 各設定要素ごとに1行
設定ファイルに関して、AIDEとの違いは以下です。
- 指令:「=」の代わりに「:=」を使用してください
- データベース構文:URL構文の代わりにパス名構文を使用する
- データベース番号:database_out ディレクティブなし: 1つのデータベースのみで動作します
- 圧縮:gzip_dbout ディレクティブがありません: データベースはすでにバイナリ形式です
- チェックサム:md5 と sha* ハッシュのみ: rmd160、tiger、haval、gost、crc32 は不可
- サイズについて:「S」(サイズの増加をチェック)属性がありません。使用方法とコーディング方法がわかりません。
ディレクティブについて
allow_overload := ブール値
true に設定すると、ルールのオーバーロードが許可されます (最後のルールが優先されます)。それ以外の場合は警告が表示され、最初のルールが保持されます。デフォルトは true です。
allow_relativepath := boolean value
true に設定すると、自動制御ファイル (afick スクリプト、構成、データベース) は相対パスとして保存されます。これは、これらのファイルが移動する可能性がある場合 (たとえば、cd から afick を使用する場合) に便利です。デフォルトは false です。
archive := path_to_archive_directory
フルパスのディレクトリ: アーカイブ ディレクトリにはすべてのログが保存され、Webmin モジュールで使用できます。デフォルトは空 (なし) です。
database := path_to_database
フルパス付きの名前: 使用するデータベース。このパラメータは必須です。
debug := level
デバッグメッセージのレベルを 0 (なし) から 4 (完全) まで設定します。デフォルトは 0 です。
only_suffix := ext1 ext2 …
デフォルトの動作では、要求されたすべてのディレクトリをスキャンし、ルールまたは exclude_* ディレクティブを使用して例外を追加します。ただし、必要なサフィックスのみを定義する方が簡単な場合もあります。この方法では、exclude_* は使用されず、データベースにはすべてのディレクトリと、指定されたサフィックスを持つファイルのみが含まれます。このディレクティブはデフォルトでは空 (無効) であり、Windows などのオペレーティング システムでは興味深いものになります。これにより、スキャンが高速化されますが、セキュリティが低下します。
exclude_suffix := ext1 ext2 …
無視するサフィックス(.ext1 または .ext2 で終わるファイルまたはディレクトリ)のリスト(例:old bak tmp)。このディレクティブは、サフィックスをグループ化するために設定ファイルで複数回使用できます。デフォルトは空です。
exclude_prefix := pre1 pre2 …
無視するプレフィックス(pre1 または pre2 で始まるファイルまたはディレクトリ)のリスト(例:tmp toto)。このディレクティブは、プレフィックスをグループ化するために設定ファイルで複数回表示できます。デフォルトは空です。
exclude_re := pattern1
正規表現構文を使用したファイル パターン (1 行ずつ)。これは完全なファイル パスに適用されます。例は例のセクションにあります。このディレクティブは、パターンをグループ化するために構成ファイルで複数回使用できます。デフォルトは空です。
注: 正規表現は非常に強力ですが、構文が複雑です。ほとんどの場合、ルール行でグロビングを使用する方が簡単です。
「globing」はルール行で使用できます。
グロブ文字は * と ? です。これらは Perl の正規表現としては使用されませんが、シェルでは使用できます。
‘?’任意の文字を置き換える
‘*’任意の文字列を置き換える
follow_symlinks := boolean value
true に設定すると、ターゲット ファイルのチェックサムを実行し、それ以外の場合はターゲット ファイル名のチェックサムを実行します。デフォルトは no です。
history := path_to_history
履歴ファイルにはすべての日付と要約結果が保存されます。デフォルトは空 (なし) です。
ignore_case := boolean value
ファイル名の大文字と小文字を区別しません (Windows で便利です)。デフォルトは no です。
mask_sysupdate := boolean value
各パッケージの更新によって変更が生成されますが、これは誤検知とみなされる可能性があり、パッケージ マネージャーを使用して変更をチェックできます。この実験的なオプションは、デフォルトでは false に設定されています。true に設定すると、パッケージ マネージャーに従って変更されていないファイルはマスクされます。現時点では、Linux rpm および deb パッケージ マネージャーを使用できます。デフォルトは no (実験的) です。
max_checksum_size := numeric value
チェックサムは CPU を大量に消費します。この値 (ファイル サイズ (バイト単位)) は、最初の max_checksum_size バイトにチェックサムを配置して、大きなファイルで afick を高速化することを示します。警告: このオプションにより afick は高速化されますが、安全性は低下します… デフォルトは 0 (制限なし) です。
report_context := boolean value
afick は、ルールによって選択された変更された属性を報告するように設計されています。場合によっては、ルールが一致したときにすべての属性の変更を表示すると便利なことがあります。たとえば、md5 などのルールでは、チェックサムが変更されると、mtime、サイズ、その他の興味深い属性も表示されます。違いを区別するために、ルールの属性には「w_」プレフィックス (警告) が付き、他の属性には「i_」プレフィックス (情報) が付きます。デフォルトは no です。
report_full_newdel := boolean value
true の場合はすべての新しいファイルを報告し、そうでない場合は最初のディレクトリ レベルのみを報告します (出力が長くなりすぎないようにします)。デフォルトは no です。
report_url := stdout|stderr|null
レポートを送信する場所。デフォルトは stdout です。null はレポートがないことを意味します。
report_summary := boolean value
true の場合、ファイルの変更ごとに概要セクションに 1 行ずつレポートします。デフォルトは true です。
report_syslog := boolean value
true の場合、レポートを syslog にも送信します。デフォルトは no です。
running_files := boolean value
「実行中」ファイルについて警告します: プログラムの開始以降に変更されました。デフォルトはいいえです。
timing := boolean value
タイミング統計(ユーザー時間とシステム時間)を印刷します。デフォルトは「いいえ」です。
utc_time := boolean
設定されている場合、日付はUTC時間で表示され、設定されていない場合はローカル時間で表示されます。デフォルト値はnoです。
verbose := boolean value
デバッグ目的の場合、デフォルトは no です。
warn_dead_symlinks := boolean value
無効なシンボリック リンクについて警告します。デフォルトは「いいえ」です。
warn_missing_file := boolean value
true の場合、ファイル選択が存在しない場合は警告メッセージを出力します。デフォルトは no です。
エラーを検出できるように、設定ファイル (devel) での作業中は true に設定し、作業後は false に設定することをお勧めします。
属性
属性は監視するパラメータを定義します。
基本属性は次のとおりです:
a: atime
エポックからの最終アクセス時間(秒)
b: blocks
割り当てられたブロックの実際の数
c: ctime
inode 変更時間
d: device
ファイルシステムのデバイス番号、メジャー番号とマイナー番号
g: group
ファイルのGID
i: inode
inode番号
m: mtime
エポック以降の最終更新時間
md5 : md5 チェックサム
デフォルトのチェックサム。高速だがあまり安全ではない。より安全な sha* を検討してください。
n: ハードリンクの数
lnコマンドを参照
p: 権限
所有者、グループ、その他 (Linux)
u: ユーザー
ファイルのuid
s: ファイルサイズ
バイト単位
sha1 : sha-1 チェックサム
md5よりも安全ですが、計算に時間がかかります。shaチェックサムは1つしか設定できません。
sha256 : sha-256 チェックサム
md5やsha-1よりも安全ですが、計算に時間がかかります。shaチェックサムは1つしか設定できません。
sha512 : sha-512 チェックサム
md5、sha-1、sha-512よりも安全ですが、計算に時間がかかります。shaチェックサムは1つしか設定できません。
エイリアス行
エイリアスは、カスタマイズされた属性のセットを定義します。これは、ある種のファイルのルールを記述するために使用されます (例を参照)
構文は次のとおりです:alias_name = alias | attribute [ +attribute ] [ – attribute]
Afick にはいくつかの定義済みエイリアスが付属しています:
all
for b+c+d+g+i+m+md5+n+p+u+s (all parameter except atime)
R
for p+d+i+n+u+g+s+m+c+md5 (for aide compatibility)
L
for p+d+i+n+u+g (for aide compatibility)
P
for u+g+p+s+n+5 (permission and checksum)
E
for (empty) (for aide compatibility)
ファイル行
この行は、監視するファイルのリストと監視対象を定義します。
構文は次のとおりです:selection_type selection_file attribute_flag
例1)! /home/user1
例2)= /home/user1
例3)/home/user1
selection_type(!、=、)
選択ラインには 3 つの種類があります。
- ネガティブ(!)
- イコール(=)
- 通常()
ネガティブ
「!」で始まる行: 指定されたファイルまたはディレクトリは無視されます。属性フラグは必要ありません。
例 :! /tmp
イコール
「=」で始まる行は、サブディレクトリのスキャンを回避するために使用できます。
ディレクトリが / で終わる場合: ディレクトリ自体とその中のファイルをスキャンしますが、サブディレクトリはスキャンしません。
それ以外の場合は、ディレクトリ自体のみをスキャンします(ファイルやサブディレクトリはスキャンしません)。
例 := /dev/scsi all
通常
その他の行は通常の選択行です。ファイルが追加され、ディレクトリとその内容(ファイルとサブディレクトリ)が追加されます。
例 :/home all
selection_file
selection_file フルパスでファイルまたはディレクトリを設計します
スペース文字を含むファイル名は「」で区切る必要があります
グロブ文字は使用できますが、正規表現は使用できません。
ファイル名が「@」で始まる場合、「@」はAFICK_CHROOT環境変数を使用して展開されます。
attribute_flag
変更を検出するために使用される属性のリストです
エイリアス
例 :all
エイリアス定義としての式
例 :L – u + md5
CHROOT機能
chroot 機能とは、変数パスをチェックすることを意味します。たとえば、/devel 上のファイル用に afick_database を構築し、それを /oper に移動した同じファイルに使用するとします。これを使用するには、チェックする変数パスに AFICK_CHROOT 環境変数を設定し、このパスの下の選択ファイルのプレフィックスとして @ を使用する必要があります。設定行は実行時に展開されます (以下の例を参照)。
マクロライン
マクロ行は@@defineキーワードで始まり、afick自体ではなくバッチジョブによって使用されます: unix/linuxではafick_cron、windowsではafick_planning.pl
@@define LINES a_number
cronジョブから長すぎるメールを切り捨てるために使用されます
@@define MAILTO a_mail_address[,another_mail]
cron ジョブの出力をメールで送信するために使用されます。スペースなしでコンマで区切られた任意の数の電子メールを設定できます。ローカル アドレスを使用する場合は、テキスト チェーンに @ が含まれているかどうかを確認するため、local_address ではなく local_address@localhost を使用します。
@@define MAILHOST an_smtp_server
メールを送信するメールサーバーを定義します(Windowsのみ)
@@MAILAUTH ユーザー名、パスワードを定義する
メールサーバーに認証が必要な場合は、その名前とパスワードを設定します
@@define VERBOSE ブール値
bool=1 の場合は毎日メールが届き、bool=0 の場合は変更があった場合にのみメールが届きます。
@@define REPORT ブール値
bool=1 でメールレポートが有効になり、bool=0 でメールレポートが無効になります。
@@NICE 値を定義する
(unix/linux のみ) val は nice 値です (man nice を参照) : 10 は通常のジョブ、14 は通常の cron ジョブ、19 は非常に低レベルのジョブです
@@define BATCH ブール値
afick cronジョブを制御するために使用されます(たとえば、afick webminモジュールを持つリモートユーザー用):bool=1はcronジョブを許可し、bool=0はcronジョブを停止します
@@MOUNTディレクトリを定義する
(オプション、unix/linux のみ) : スキャン前にマウントし、スキャン後にアンマウントするディレクトリを指定します。/etc/fstab ファイルでディレクトリを定義する必要があります。
@@NAGIOS ブール値を定義する
(unix/linux のみ) bool=1 を指定すると、ncsa を使用して nagios にステータスを送信できるようになります。bool=0 を指定すると、nagios レポート レポートが無効になります。
@@NAGIOS_SERVER を定義する nagios_server
(unix/linux のみ) メッセージを送信する Nagios サーバーの DNS 名または IP アドレス
@@NAGIOS_CONFIGを定義する
(unix/linux のみ) NSCA 構成ファイルへのパス (/etc/send_nsca.cfg など)
@@NAGIOS_CHECK_NAME を定義する
(unix/linux のみ) Nagios サーバー側での Nagios パッシブ チェックに使用される名前
@@NAGIOS_CRITICAL_CHANGES 値を定義する
(unix/linuxのみ) 重要とみなされる変更の数。変更が val より大きい場合、NagiosはCRITICALと表示します。
0< val < 変更の場合、Nagios の状態は警告になります
0 が変更された場合、Nagios の状態は OK です
@@NAGIOS_NCSA の nsca 送信パスを定義します
(unix/linux のみ) nsca バイナリへのパス (/usr/sbin/send_nsca など)
@@ARCHIVE_RETENTION nS を定義する
アーカイブの保持期間を設定します。すべてを保持する場合は 0 です。それ以外の場合は nS 形式を使用します。n は数値、S はスケールです。d は日、w は週、m は月、y は年です。例: 3m は過去 3 か月のみ保持します。
例
database := /var/lib/afick/afick
データベースへのパスを定義する
All= a+b+c+d+g+i+m+md5+n+p+u+s
基本属性から別名「All」を定義します(「All=all+a」でも実行できます)
ETC=All – i -c -a
別のETCエイリアスを定義する
!/dev
/dev ディレクトリ構造を無視します。
!/tmp/*.tmp
ファイルを除外するにはグロビングを使用する
=/proc/ p+u+g
/proc ディレクトリをサブディレクトリではなくファイルに対してスキャンします
=/tmp R
/tmp 内ではなく、/tmp のみをスキャンします
/boot/vmlinux* all
ジョーカー定義を持つファイルを追加する
/etc ETC
ETCエイリアスで基本属性を使用する
/var All – i -c -a
変更されたエイリアスを使用する すべて
exclude_re := sav$
sav で終わるファイルを除外します (たとえば、 では除外されない toto.rpmsav などexclude_suffix := sav)
exclude_re := /tmp$
tmpという名前のすべてのファイルまたはディレクトリを除外します(ただし、tmpaやatmpなどのファイルは除外しますexclude_prefix := tmp )
exclude_re := \s
スペース文字を含むすべてのファイルまたはディレクトリを除外する
exclude_re := ^/var/log/.*\d
/var/log ディレクトリの下にある数字を含むすべてのファイルを除外します
例: /var/log/mail/info.1.gz
@software All
AFICK_CHROOT=/optを設定した場合、行は次のように展開されます: /opt/software All
windows.conf、afick.confの以外のAFICKの設定ファイル
windows.conf、afick.confの以外のAFICK設定に関するファイルは以下です。
- afick_learn – ログから学習し、Afick の設定を適応させるツール
- afick_archive – 履歴ファイルとアーカイブディレクトリを管理するツール
まとめ
AFICKの設定方法をまとめました。Windowsであればwindows.conf、Linuxであればafick.confを編集してAFICKの設定を行います。除外設定や検知対象ファイルの設定などを行うことが可能です。検知したログからAFICKの設定ファイルを編集するにはafick_learn、ログのアーカイブなどを管理するにはafick_archiveファイルを編集します。