AFICK (Another File Integrity ChecKer)インストール方法まとめ

OS

AFICKをインストールする方法をまとめました。

AFICK (Another File Integrity CHecker)

AFICKを使用するには以下が必要です。

  • Perl(パール)
  • AFICK(アフィック)

AFICKとは

AFICKはHIDSの一つで、ファイルの改ざん検知を行います。

Perlをインストールする

AFICKはPerlで動作するため、まずはAFICKを動作させたい環境にPerlをインストールします。

WindowsにPerlをインストールする

Windowsで使えるPerlは以下です。

  • ActiveState Perl
  • Strawberry Perl(ActivePerl)

ActiveState Perl

Cross-platform, secure Perl by ActiveState - for developers and enterprise
Perl powered by the ActiveState Platform. Designed to meet the security and package management needs of Perl developers.

Strawberry Perl

Strawberry Perl for Windows

LinuxにAFICKをインストールする

以下のコマンドを実行してPerlをインストールします。

yum install perl

以下のコマンドを実行してPerlがインストールされたことを確認します。

perl -v

AFICKをインストールする

AFICKをインストールします。

WindowsにAFICKをインストールする

AFICKはPerlで書かれたプログラムです。

LinuxにAFICKをインストールする

sourceforge.netにあるパッケージからLinuxにAFICKをインストールします。以下のコマンドはこの記事を作成している段階での最新版、3.8.1をインストールするコマンドです。

yum install http://jaist.dl.sourceforge.net/project/afick/afick/3.8.1/afick-3.8.1-1.noarch.rpm

.rpmファイルを直接ダウンロードするには以下のリンクから行います。

another file integrity checker - Browse /afick at SourceForge.net
Afick is a fast and portable intrusion detection and integrity monitoring system, designed to work on all platform (it o...

インストール出来ていることを以下のコマンドで確認します。

afick --version

AFICKのベースラインとなるAFICKのデータベースを作成する

AFICKをインストールしたら、ファイルの改ざん等を検知するためにAFICKのデータベースを作成します。

afick --init

もしくは以下のコマンドでも可能です。

afick -i

Windowsでは以下のコマンドで実施します。

cd C:\Program Files (x86)\afick
afick.pl --init

以下でも実行可能です。

afick.pl -i
afick.pl -c windows.conf -i

Linuxの場合以下でも実行可能です。

afick -c afick.conf -i
afick -c afick.conf --init

以下Linuxでの実行例です。

[root@localhost ~]# afick -i
# Afick (3.8.1) init at 2024/11/02 15:44:29 with options (/etc/afick.conf):
# archive:=/var/lib/afick/archive
# database:=/var/lib/afick/afick
# exclude_prefix:=__pycache__
# exclude_suffix:=log LOG html htm HTM txt TXT xml hlp pod chm tmp old bak fon ttf TTF bmp BMP jpg JPG gif png ico wav WAV mp3 avi pyc
# history:=/var/lib/afick/history
# max_checksum_size:=10000000
# running_files:=1
# timing:=1
# dbm:=Storable
# #################################################################
# MD5 hash of /var/lib/afick/afick => DrmylBa4SRo2YMtmlQPWnQ

# Hash database created successfully. 26495 files entered.
# user time : 10.94; system time : 5.27; real time : 37

このコマンドで作成したデータベースは、今のファイルの状態からデータベースを作成したものになります。このデータベース内に保存されているデータから差分が出た際に、AFICKのログにその結果が出力されます。

作成したデータベースは以下に保存されます。

Windowsの場合

C:\Program Files (x86)\afick\database

Linuxの場合

/var/lib/afick/afick.db

C:\Program Files (x86)\afick\windows.conf(Windowsの場合)、/etc/afick.conf(Linuxの場合)の以下のパラメータを編集することでデータベースの保存先を変更可能です。

database:=/var/lib/afick/afick

実際に検知するか動作確認

以下のコマンドを実行して、先ほど「afick -i」コマンドで作成したデータベースから差分があるかを以下のコマンドで確認します。

afick -k

Windowsの場合は以下のコマンドを実行します。

cd C:\Program Files (x86)\afick
afick.pl --compare

以下のコマンドでも問題ありません。

afick --compare
afick -c afick.conf --compare
afick -c afick.conf -k

ここで実行した実行結果はインストール時のデフォルトで以下のフォルダに格納されます。

/var/lib/afick/archive

Windowsの場合は以下に格納されます。

C:\Program Files (x86)\afick\archive

AFICKのデータベースをアップデートする

AFICKのデータベースは以下のコマンドでアップデートすることができます。

afick -u

Windowsの場合は以下のコマンドで行います。

cd C:\Program Files (x86)\afick
afick.pl --update

以下のコマンドでも問題ありません。

afick --update
afick -c afick.conf --update

AFICKを運用する

AFICKをインストールすると、以下のファイルが作られ、毎日3時頃に定期的にAFICKが起動してファイルスキャンを実施します。

/etc/cron.daily/afick_cron

インストール時のデフォルトでは、毎日データベースがアップデートされるため、以下の記載を-uを-kに変えることで毎日データベースが更新されない状態になります。

# the default action is "update" (-u), you can also use "compare" (-k)
ACTION="-u"

Windowsで定期的にAFICKを起動するにはタスクスケジューラに以下のファイルを登録します。

C:\Program Files (x86)\afick\afick_scan.cmd

以下のファイルにWindowsのAFICKスキャン実施時のコードが記載されています。

C:\Program Files (x86)\afick\afick_planning.pl

–updateにデフォルトでなっているので、–compareに書き換えることでAFICKスキャンを実施してもデータベースがアップデートされなくなります。

AFICKのデータベースをアップデートする

先述の通り、以下のコマンドでAFICKのデータベースはアップデートができます。定期的にデータベースをアップデートしてAFICKのデータベースを更新します。

afick -u

AFICKの定義ファイル

/etc/afick.confにAFICKの定義を記載します。ここでは、検知対象から除外するディレクトリを指定することなどができます。

[root@localhost ~]# cat /etc/afick.conf
# afick config sample file
# $Id$
# see afick.conf documentation for more informations

####################
# directives section
####################
# binary values can be : yes/1/true or no/0/false
# database : name with full path to database file
database:=/var/lib/afick/afick
# history : full path to history file
history := /var/lib/afick/history
# archive : full path to directory for archived results
archive := /var/lib/afick/archive
# report_url : where to send the result : stdout/stderr/null
report_url := stdout
# report_syslog : send output to syslog ?
report_syslog := no
# mask_sysupdate : report packages update
mask_sysupdate := no
# verbose : (obsolete) boolean value for debugging messages
# use debug parameter below
verbose := no
# debug : set a level of debugging messages, from 0 (none) to 4 (full)
debug := 0
# warn_dead_symlinks : boolean : if set, warn about dead symlinks
warn_dead_symlinks := no
# follow_symlinks : boolean : if set, do checksum on target file (else on target file name)
follow_symlinks := no
# allow_overload : boolean : if set, allow to overload rules (the last rule wins), else put a warning
allow_overload := yes
# report_context : boolean : if set, display all changed attributes, not just those selected by rules
report_context := no
# report_full_newdel : boolean : if set, report all changes, if not set, report only a summary on top directories
report_full_newdel := no
# report_summary : boolean ; if set, report the summary section
report_summary := yes
# warn_missing_file  : boolean : is set, warn about selected files (in this config), which does not exist
warn_missing_file := no
# running_files : boolean : if set, warn about files changed during a program run
running_files := yes
# timing : boolean : if set, print timing statistics about the job
timing := yes
# ignore_case : boolean : if set, ignore case on file name
ignore_case := no
# max_checksum_size : numeric : only compute checksum on first max_checksum_size bytes ( 0 means unlimited)
max_checksum_size := 10000000
# allow_relativepath : boolean : if set, afick files, config and databases are stored as relative path
allow_relativepath := 0
# utc_time : boolean; if set display date in utc time, else in local time
utc_time := 0

# only_suffix : list of suffix to scan (and just this ones) : is empty (disabled) by default
# not very usefull on unix, but is ok on windows
# this will speed up the scan, but with a lesser security
# only_suffix :=

# the 3 next directives : exclude_suffix exclude_prefix exclude_re
# can be written on several lines
# exclude_suffix : list of suffixes to ignore
# text files
exclude_suffix := log LOG html htm HTM txt TXT xml
# help files
exclude_suffix := hlp pod chm
# old files
exclude_suffix := tmp old bak
# fonts
exclude_suffix := fon ttf TTF
# images
exclude_suffix := bmp BMP jpg JPG gif png ico
# audio
exclude_suffix := wav WAV mp3 avi
# python
exclude_suffix := pyc

# exclude_prefix : list of prefixes to ignore
exclude_prefix := __pycache__

# exclude_re : a file pattern (using regex syntax) to ignore (apply on full path)
# one pattern by line
#exclude_re :=

#################
# macros section
#################
# used by cron job (afick_cron)
# define the mail adress to send cron job result
@@define MAILTO root@localhost
# truncate the result sended by mail to the number of lines (avoid too long mails)
@@define LINES 1000
# REPORT = 1 to enable mail reports, =0 to disable report
@@define REPORT 1
# VERBOSE = 1 to have one mail by run, =0 to have a mail only if changes are detected
@@define VERBOSE 0
# define the nice value : from 0 to 19 (priority of the job)
@@define NICE 18
# = 1 to allow cron job, = 0 to suppress cron job
@@define BATCH 1
# (optionnal, for unix) specify a file system to mount before the scan
# it must be defined in /etc/fstab
#@@define MOUNT /mnt/dist
# if set to 0, keep all archives, else define the number of days to keep
# with the syntaxe nS , n for a number, S for the scale
# (d for day, w for week, m for month, y for year)
# ex : for 5 months : 5m
@@define ARCHIVE_RETENTION 0

# send nagios messages by NSCA (= 1 to allow, = 0 to block)
@@define NAGIOS 0
# address of the nagios server to send messages to
@@define NAGIOS_SERVER my.nagios.server.org
# NSCA configuration file
# @@define NAGIOS_CONFIG /etc/send_nsca.cfg
# name used for nagios passive check on the nagios server side
@@define NAGIOS_CHECK_NAME Another File Integrity Checker
# number c of the changes that are considered critical => nagios state CRITICAL
# (0 changes => nagios state OK; 0> and <c changes => nagios state WARNING)
@@define NAGIOS_CRITICAL_CHANGES 2
# path to nsca binary
# @@define NAGIOS_NSCA /usr/sbin/send_nsca

###############
# alias section
###############
# action : a list of item to check :
# md5 : md5 checksum
# sha1 : sha-1 checksum
# sha256 : sha-256 checksum
# sha512 : sha-512 checksum
# d : device
# i : inode
# p : permissions
# n : number of links
# u : user
# g : group
# s : size
# b : number of blocks
# m : mtime
# c : ctime
# a : atime
# acl : acl

#all:    p+d+i+n+u+g+s+b+m+c+md5+acl
#R:      p+d+i+n+u+g+s+m+c+md5
#L:      p+d+i+n+u+g
#P:      p+n+u+g+s+md5
#E:      ''

# action alias may be configured with
# your_alias = another_alias|item[+item][-item]
# all is a pre-defined alias for all items except "a"
DIR = p+i+n+u+g
ETC = p+d+u+g+s+md5
Logs = p+n+u+g
MyRule = p+d+n+u+g+s+b+md5

##############
# file section
##############
# 3 syntaxe are available :
# file action
#     to scan a file/directory with "action" parameters
# ! file
#     to remove file from scan
# = directory action
#       to scan the directory but not sub-directories
# file with blank character have to be quoted
#
# action is the list of attribute used to detect a change

= /  DIR

/bin    MyRule

/boot   MyRule
# ! /boot/map
# ! /boot/System.map

/dev p+n
# ! /dev/.udev/db
# ! /dev/.udev/failed
# ! /dev/.udev/names
# ! /dev/.udev/watch
! /dev/bsg
! /dev/bus
! /dev/pts
! /dev/shm
# to avoid problems with pending usb
# = /dev/scsi p+n

/etc    ETC
/etc/mtab ETC - md5 - s
/etc/adjtime ETC - md5 -s
# /etc/aliases.db ETC - md5 -s
# /etc/mail/statistics ETC - md5 -s
/etc/motd ETC
# /etc/ntp/drift ETC - md5 -s
# /etc/urpmi/urpmi.cfg Logs
# /etc/urpmi/proxy.cfg Logs
# /etc/prelink.cache ETC - md5 - s
! /etc/cups
# ! /etc/map
# ! /etc/postfix/prng_exch
# ! /etc/samba/secrets.tdb
# ! /etc/webmin/sysstats/modules/
# ! /etc/webmin/package-updates/
# ! /etc/webmin/system-status/

/lib    MyRule
/lib64  MyRule
/lib/modules MyRule
# /lib/dev-state MyRule -u

/root MyRule
# ! /root/.viminfo
! /root/.bash_history
# ! /root/.mc
# ! /root/tmp
! /root/.cache

/sbin   MyRule

/usr/bin        MyRule
/usr/sbin       MyRule
/usr/lib        MyRule
! /usr/lib/.build-id/
! /usr/lib/fontconfig/cache/
/usr/lib64      MyRule
/usr/local/bin  MyRule
/usr/local/sbin MyRule
/usr/local/lib  MyRule

/var/ftp MyRule
/var/log Logs
# ! /var/log/journal
= /var/log/afick Logs
# ! /var/log/ksymoops
# /var/www MyRule
# ! /var/www/html/snortsnarf

############################################
# to allow easier upgrade, my advice is too separate
# the default configuration file (above) from your
# local configuration (below).
# default configuration will be upgraded
# local configuration will be kept
########## put your local config below ####################

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