●関連リンク先
AIDE constantly reporting prelink errors
錦稜会Web
●AIDE(Advanced Intrusion Detection Environment)とは
AIDEは、オープンソースの侵入検知システム(IDS:Intrusion Detection System)で、CentOSなどの主要なディストリビューションで無償で利用することができます。
IDSにはネットワーク型とホスト型の2種類があり、ネットワーク型はネットワーク上に設置し複数台のサーバーを監視することができます。ホスト型はサーバーにIDSをインストールして監視します。AIDEはホスト型のIDSになります。
●AIDEのインストール
AIDEをCentOS 6.xにインストールするには、以下のコマンドを実行します。
●設定ファイルの編集
AIDE の動作設定は、/etc/aide.confで行います。デフォルト設定でも問題ないですが、変更する場合はaide.confを編集します。例えば、/usr/log を監視対象から外すには、以下のように記述します。
●データベースの初期化
AIDEは、ファイル状態を格納するデータベースをあらかじめ持っておいて、データベースの内容とファイルの状態が異なっているかをチェックします。ですので、まず、このデーターベースを初期化します。
下記コマンドは全ファイルをスキャンするため時間がかかります。
●改ざんのチェック
改ざんのチェックをするために、ファイルを作成します。
●データベースの更新
改ざんのチェックをしただけでは、データベースは更新されないので、以下のコマンドでデータベースを更新します。
●スクリプトによる定期チェック(CentOS 7)
AIDEは手動でコマンドを実行できますが、定期実行するには独自にスクリプトを作成する必要があります。ここでは、/etc/cron.daily/aideというファイルでスクリプトを作成します。このスクリプトはデイリー処理されます。MAILTOにはメールの送信先を指定します。
メールで通知される内容は以下のようになります。
●スクリプトによる定期チェック(CentOS Stream 8)
nkfコマンドが必要なのでインストールします。
チェック結果のログファイル(/var/log/aide/aide.log])はチェックのたびに上書きされます。
チェック結果を毎回保存しておきたい場合は、シェルスクリプトで対応するか、毎回メールで結果を送信する等の工夫が必要です。
今回は毎日5時30分にチェックし、その結果をroot宛に送信するようにCronに登録します。
また、「aide --update」を実行する前にデータベースをコピーしておく必要がありますので、データベースのコピーについてもCronに登録します。
ただし、cpコマンドの強制上書きは「-f」を付加しただけではうまく動作しません。
cpコマンドはaliasがあらかじめ設定されていることが多いため、エイリアスを外し(cpコマンドの前に「\」を付加する)て強制上書きするように設定します。
●ログのローテーション
AIDEをインストールすると、/etc/logrotate.d/aideにログのローテションの設定ファイルが作成されますが、デフォルトの設定だとほぼ役に立たないので注意が必要です。
これでは使えないので、以下のようにデイリーで7世代管理するように変更します。世代は1ヶ月位あってもいいかもしれませんね。
●aide --update時のDisk I/O
cronでi04:25にaide --updateを実行していたが、Disk I/Oが凄かった問題。
監視対象から除外する対象を検討する必要がありそうです。
●Error on exit of prelink child process
一日一回aideをcronで動作するよう設定していて、その際メールを飛ばすようにしていたがそのメールが来なくなっていました。
そこでデータベースを再初期化しようとしたところ、下記のようなエラーが表示されました。
これはインストール後、時間が経過し、yumのupdateが走り、リンク済みのバイナリと新しいバイナリではハッシュ値が合わないので、prelinkがエラーを出している模様です。
CentOS 6で、aideのバージョンが0.14-7及び0.15.1-1でも発生しました。
このような場合は、下記ファイルを修正してください。
●Caught SIGBUS/SEGV while mmapping
ログに下記のようなエラーが記録されていました。
CentOS 7にはmmapperはありません。
CentOS 7で上記のエラーが出力されたのは、HDDのセクタに異常があり、その部分を読み込めなかった時に出力されたようです。
/var/log/messageに下記のようなエラーが記録されていました。
このため、セクタエラーが発生しているHDDの交換を実施しました。
交換以降、aide --checkや aide --updateを実行しても正常に動作するようになりました。
AIDE constantly reporting prelink errors
錦稜会Web
●AIDE(Advanced Intrusion Detection Environment)とは
AIDEは、オープンソースの侵入検知システム(IDS:Intrusion Detection System)で、CentOSなどの主要なディストリビューションで無償で利用することができます。
IDSにはネットワーク型とホスト型の2種類があり、ネットワーク型はネットワーク上に設置し複数台のサーバーを監視することができます。ホスト型はサーバーにIDSをインストールして監視します。AIDEはホスト型のIDSになります。
●AIDEのインストール
AIDEをCentOS 6.xにインストールするには、以下のコマンドを実行します。
# yum install aide
●設定ファイルの編集
AIDE の動作設定は、/etc/aide.confで行います。デフォルト設定でも問題ないですが、変更する場合はaide.confを編集します。例えば、/usr/log を監視対象から外すには、以下のように記述します。
!/usr/log
●データベースの初期化
AIDEは、ファイル状態を格納するデータベースをあらかじめ持っておいて、データベースの内容とファイルの状態が異なっているかをチェックします。ですので、まず、このデーターベースを初期化します。
下記コマンドは全ファイルをスキャンするため時間がかかります。
# aide --init生成されたaide.db.new.gzはスナップショットなので、これをマスターのデータベースにするために以下のコマンドを実行します。
# cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
●改ざんのチェック
改ざんのチェックをするために、ファイルを作成します。
# echo "TEST" >> dummy.txt改ざんをチェックします。
# aide --check実行結果は以下のようになり、ファイルの追加が検出されたことが分かります。
※バージョン0.16の場合 Start timestamp: 2021-12-22 09:57:00 +0900 (AIDE 0.16) AIDE found differences between database and filesystem!! Summary: Total number of entries: 163705 Added entries: 1 Removed entries: 0 Changed entries: 0 --------------------------------------------------- Added entries: --------------------------------------------------- f++++++++++++++++: /root/dummy.txt --------------------------------------------------- The attributes of the (uncompressed) database(s): --------------------------------------------------- /var/lib/aide/aide.db.gz MD5 : i4WST/llELrNNERL6ABsKQ== SHA1 : 4/RgEoz/Sa+ZHYuj1H24e+liR5Y= RMD160 : CIsyHB3zVaqdz6Gix/JRcuF5wJU= TIGER : ktjq2yNsy+VwM6bI7ZFEqHVTFw0bJeIZ SHA256 : jXIZUuOx2Hn7gIR5SuLrnmU1d3u5gmRI d6utNM8YKZw= SHA512 : I/FyyyTXwOurA/1c74xZuQ/xH6OHnhDf UYHzFg4hXZkTvGEB7lTrTOLJXSfN7dGt C5tjx8PL/perbXYQoTxwiQ== End timestamp: 2021-12-22 09:57:17 +0900 (run time: 0m 17s) ※バージョン0.15の場合 AIDE 0.15.1 found differences between database and filesystem!! Start timestamp: 2021-12-22 10:09:44 Summary: Total number of files: 457626 Added files: 1 Removed files: 0 Changed files: 2 --------------------------------------------------- Added files: --------------------------------------------------- added: /root/dummy.txt --------------------------------------------------- Changed files: --------------------------------------------------- changed: /etc/cups/subscriptions.conf changed: /etc/cups/subscriptions.conf.O --------------------------------------------------- Detailed information about changes: --------------------------------------------------- File: /etc/cups/subscriptions.conf SHA256 : cFQdwc2V6GVtYK1uU7H5gF0Bm4xCj4IL , heOlOw+3t7o+6D3FhPrwrrhEaam8zSFO File: /etc/cups/subscriptions.conf.O SHA256 : y3nHipklSdQx2LQUUUJJVCByneVBWpWQ , iONLpZMr2LItSByLH3fZe5wTi8DHo+ND
●データベースの更新
改ざんのチェックをしただけでは、データベースは更新されないので、以下のコマンドでデータベースを更新します。
# aide --init # cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz上記コマンドはデータベースを更新するだけですが、下記のコマンドを実行すると、ファイルの改ざんチェックとデータベースの更新の両方を行ってくれます。
# aide --update # cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
●スクリプトによる定期チェック(CentOS 7)
AIDEは手動でコマンドを実行できますが、定期実行するには独自にスクリプトを作成する必要があります。ここでは、/etc/cron.daily/aideというファイルでスクリプトを作成します。このスクリプトはデイリー処理されます。MAILTOにはメールの送信先を指定します。
#!/bin/bash MAILTO=root LOGFILE=/var/log/aide/aide.log AIDEDIR=/var/lib/aide /usr/sbin/aide -u > $LOGFILE cp $AIDEDIR/aide.db.new.gz $AIDEDIR/aide.db.gz x=$(grep "Looks okay" $LOGFILE | wc -l) if [ $x -eq 1 ] then echo "All Systems Look OK" | /bin/mail -s "AIDE OK" $MAILTO else echo "$(egrep "added|changed|removed" $LOGFILE)" | /bin/mail -s "AIDE DETECTED CHANGES" $MAILTO fi exit忘れずに、実行権限もつけておきます。
# chmod +x /etc/cron.daily/aide後はデイリーでスクリプトが実行され、実行結果がメールで通知されるようになります。ログは /etc/log/aide/aide.log に出力されます。
メールで通知される内容は以下のようになります。
Subject: AIDE DETECTED CHANGES changed: /usr/sbin changed: /usr/bin changed: /usr/lib/rpm changed: /usr/libexec changed: /usr/libexec/getconf changed: /usr/libexec/git-core changed: /usr/libexec/gcc/x86_64-redhat-linux/4.4.4 changed: /usr/libexec/polkit-1 changed: /usr/libexec/awk changed: /usr/libexec/utempter changed: /usr/lib64 changed: /usr/lib64/sa changed: /usr/lib64/perl5/CORE changed: /usr/lib64/gettext changed: /usr/lib64/nss/unsupported-tools changed: /usr/lib64/pm-utils/bin changed: /usr/lib64/mysql changed: /sbin changed: /bin changed: /lib/udev changed: /lib64 changed: /lib64/dbus-1なお、このスクリプトは1日ごとのファイルの差分をとっていることに注意してください。具体的には、スクリプトの実行時にデータベースの更新をしているということです。システムリリース時点などのデータベースとの差分を比較する厳密な運用をする場合は、データベースの更新部分(cp...の行)を削除してください。
●スクリプトによる定期チェック(CentOS Stream 8)
nkfコマンドが必要なのでインストールします。
チェック結果のログファイル(/var/log/aide/aide.log])はチェックのたびに上書きされます。
チェック結果を毎回保存しておきたい場合は、シェルスクリプトで対応するか、毎回メールで結果を送信する等の工夫が必要です。
今回は毎日5時30分にチェックし、その結果をroot宛に送信するようにCronに登録します。
また、「aide --update」を実行する前にデータベースをコピーしておく必要がありますので、データベースのコピーについてもCronに登録します。
ただし、cpコマンドの強制上書きは「-f」を付加しただけではうまく動作しません。
cpコマンドはaliasがあらかじめ設定されていることが多いため、エイリアスを外し(cpコマンドの前に「\」を付加する)て強制上書きするように設定します。
# dnf --enablerepo=powertools install nkf # crontab -e 20 04 * * * \/usr/bin/cp -f /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz > /dev/null 2>&1 25 04 * * * /usr/sbin/aide --update | mail -s 'Daily Check by AIDE' root > /dev/null 2>&1メールの内容は下記のとおりです。
Start timestamp: 2021-06-06 05:30:00 +0900 (AIDE 0.16) AIDE found differences between database and filesystem!! New AIDE database written to /var/lib/aide/aide.db.new.gz Summary: Total number of entries: 247072 Added entries: 2 Removed entries: 1 Changed entries: 19 --------------------------------------------------- Added entries: --------------------------------------------------- f++++++++++++++++: /etc/cron.d/aide f++++++++++++++++: /root/aide --------------------------------------------------- Removed entries: --------------------------------------------------- f----------------: /etc/cron.daily/aide --------------------------------------------------- Changed entries: --------------------------------------------------- f ... .C... : /boot/grub2/grubenv f ... .C... : /etc/cups/subscriptions.conf f ... .C... : /etc/cups/subscriptions.conf.O f ... .C... : /etc/dnf/dnf.conf f < ... . ... : /var/log/letsencrypt/letsencrypt.log.2 f < ... . ..S : /var/log/letsencrypt/letsencrypt.log.30 f < ... . ... : /var/log/letsencrypt/letsencrypt.log.31 f < ... . ... : /var/log/letsencrypt/letsencrypt.log.32 f = ... . ..S : /var/log/letsencrypt/letsencrypt.log.33 f < ... . ..S : /var/log/letsencrypt/letsencrypt.log.34 f = ... . ..S : /var/log/letsencrypt/letsencrypt.log.35 f < ... . ... : /var/log/messages f < ... . ... : /var/log/pcp/pmcd/nfsclient.log f < ... . ... : /var/log/pcp/pmcd/pmcd.log.prev f < ... . ... : /var/log/pcp/pmcd/root.log.prev f < ... . ... : /var/log/pcp/pmie/nezumi.bigbang.dyndns.org/pmie.log f < ... . ... : /var/log/pcp/pmlogger/nezumi.bigbang.dyndns.org/pmlogger.log f < ... . ... : /var/log/pcp/pmlogger/pmlogger_check.log.prev f C : /var/spool/anacron/cron.daily --------------------------------------------------- Detailed information about changes: --------------------------------------------------- File: /boot/grub2/grubenv SHA512 : ******************************** | ******************************** ******************************** | ******************************** **********************== | **********************== File: /etc/cups/subscriptions.conf SHA512 : ******************************** | ******************************** ******************************** | ******************************** **********************== | **********************== File: /etc/cups/subscriptions.conf.O SHA512 : ******************************** | ******************************** ******************************** | ******************************** **********************== | **********************== File: /etc/dnf/dnf.conf SHA512 : ******************************** | ******************************** ******************************** | ******************************** **********************== | **********************== File: /var/log/letsencrypt/letsencrypt.log.2 Size : 2706 | 2617 File: /var/log/letsencrypt/letsencrypt.log.30 Size : 26269 | 2706 SELinux : unconfined_u:object_r:var_log_t: | system_u:object_r:var_log_t:s0 s0 | File: /var/log/letsencrypt/letsencrypt.log.31 Size : 26437 | 26269 File: /var/log/letsencrypt/letsencrypt.log.32 Size : 38346 | 26437 File: /var/log/letsencrypt/letsencrypt.log.33 SELinux : system_u:object_r:var_log_t:s0 | unconfined_u:object_r:var_log_t: | s0 File: /var/log/letsencrypt/letsencrypt.log.34 Size : 46030 | 2706 SELinux : unconfined_u:object_r:var_log_t: | system_u:object_r:var_log_t:s0 s0 | File: /var/log/letsencrypt/letsencrypt.log.35 SELinux : system_u:object_r:var_log_t:s0 | unconfined_u:object_r:var_log_t: | s0 File: /var/log/messages Size : 1391146 | 1019940 File: /var/log/pcp/pmcd/nfsclient.log Size : 679 | 283 File: /var/log/pcp/pmcd/pmcd.log.prev Size : 6898 | 3966 File: /var/log/pcp/pmcd/root.log.prev Size : 1012 | 879 File: /var/log/pcp/pmie/nezumi.bigbang.dyndns.org/pmie.log Size : 66324 | 116 File: /var/log/pcp/pmlogger/nezumi.bigbang.dyndns.org/pmlogger.log Size : 169199 | 56166 File: /var/log/pcp/pmlogger/pmlogger_check.log.prev Size : 143 | 71 File: /var/spool/anacron/cron.daily SHA512 : ******************************** | ******************************** ******************************** | ******************************** **********************== | **********************== --------------------------------------------------- The attributes of the (uncompressed) database(s): --------------------------------------------------- /var/lib/aide/aide.db.gz MD5 : **********************== SHA1 : ***************************= RMD160 : ***************************= TIGER : ******************************** SHA256 : ******************************** ***********= SHA512 : ******************************** ******************************** **********************== /var/lib/aide/aide.db.new.gz MD5 : **********************== SHA1 : ***************************= RMD160 : ***************************= TIGER : ******************************** SHA256 : ******************************** ***********= SHA512 : ******************************** ******************************** **********************== End timestamp: 2021-06-06 05:37:22 +0900 (run time: 7m 22s)
●ログのローテーション
AIDEをインストールすると、/etc/logrotate.d/aideにログのローテションの設定ファイルが作成されますが、デフォルトの設定だとほぼ役に立たないので注意が必要です。
/var/log/aide/*.log { weekly missingok rotate 12 compress delaycompress copytruncate minsize 100k }具体的には、ウィークリーでファイルサイズが 100KB 以上ないとログのローテーションを行いません。なお、AIDEのログは追記ではなく上書きなので、なぜこのような設定になっているのか不思議です。
これでは使えないので、以下のようにデイリーで7世代管理するように変更します。世代は1ヶ月位あってもいいかもしれませんね。
/var/log/aide/*.log { daily missingok rotate 7 compress delaycompress }
●aide --update時のDisk I/O
cronでi04:25にaide --updateを実行していたが、Disk I/Oが凄かった問題。

監視対象から除外する対象を検討する必要がありそうです。
●Error on exit of prelink child process
一日一回aideをcronで動作するよう設定していて、その際メールを飛ばすようにしていたがそのメールが来なくなっていました。
そこでデータベースを再初期化しようとしたところ、下記のようなエラーが表示されました。
# aide --init
/usr/sbin/prelink: /usr/bin/signver: at least one of file's dependencies has changed since prelinking
Error on exit of prelink child process
/usr/sbin/prelink: /usr/bin/crlutil: at least one of file's dependencies has changed since prelinking
Error on exit of prelink child process
/usr/sbin/prelink: /usr/bin/modutil: at least one of file's dependencies has changed since prelinking
Error on exit of prelink child process
/usr/sbin/prelink: /usr/bin/ssltap: at least one of file's dependencies has changed since prelinking
Error on exit of prelink child process
/usr/sbin/prelink: /usr/bin/pk12util: at least one of file's dependencies has changed since prelinking
Error on exit of prelink child process
/usr/sbin/prelink: /usr/bin/signtool: at least one of file's dependencies has changed since prelinking
Error on exit of prelink child process
/usr/sbin/prelink: /usr/bin/cmsutil: at least one of file's dependencies has changed since prelinking
Error on exit of prelink child process
/usr/sbin/prelink: /usr/bin/certutil: at least one of file's dependencies has changed since prelinking
Error on exit of prelink child process
AIDE, version x.xx
### AIDE database at /var/lib/aide/aide.db.new.gz initialized.
/usr/sbin/prelink: /usr/bin/signver: at least one of file's dependencies has changed since prelinking
Error on exit of prelink child process
/usr/sbin/prelink: /usr/bin/crlutil: at least one of file's dependencies has changed since prelinking
Error on exit of prelink child process
/usr/sbin/prelink: /usr/bin/modutil: at least one of file's dependencies has changed since prelinking
Error on exit of prelink child process
/usr/sbin/prelink: /usr/bin/ssltap: at least one of file's dependencies has changed since prelinking
Error on exit of prelink child process
/usr/sbin/prelink: /usr/bin/pk12util: at least one of file's dependencies has changed since prelinking
Error on exit of prelink child process
/usr/sbin/prelink: /usr/bin/signtool: at least one of file's dependencies has changed since prelinking
Error on exit of prelink child process
/usr/sbin/prelink: /usr/bin/cmsutil: at least one of file's dependencies has changed since prelinking
Error on exit of prelink child process
/usr/sbin/prelink: /usr/bin/certutil: at least one of file's dependencies has changed since prelinking
Error on exit of prelink child process
AIDE, version x.xx
### AIDE database at /var/lib/aide/aide.db.new.gz initialized.
これはインストール後、時間が経過し、yumのupdateが走り、リンク済みのバイナリと新しいバイナリではハッシュ値が合わないので、prelinkがエラーを出している模様です。
CentOS 6で、aideのバージョンが0.14-7及び0.15.1-1でも発生しました。
このような場合は、下記ファイルを修正してください。
#vi /etc/sysconfig/prelink PRELINKING=yes ↓ PRELINKING=no続けて下記を実行してください。
# /usr/sbin/prelink -av -mR ← この作業は必要ないかも (このコマンド終了には時間がかかる場合があります。) # /usr/sbin/prelink -ua (このコマンド終了には時間がかかる場合があります。) # aide --update (このコマンド終了には時間がかかる場合があります。) この時に表示されるError on exit of prelink child processは1行だけとなりました。(2015.03.26) # cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz また、cronでの自動定期チェックも動作するようになりました。 条件変更 /etc/sysconfig/prelinkのPRELINKINGの設定を元に戻す。(2015.03.27) PRELINKING=yes・・・を実行し、同様のエラーが出力されるようであれば
# aide --check # /etc/cron.daily/prelink # aide --update # cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gzを実施してください。
●Caught SIGBUS/SEGV while mmapping
ログに下記のようなエラーが記録されていました。
Caught SIGBUS/SEGV while mmapping. File was truncated while aide was running? Caught SIGBUS/SEGV. Exitingmmapperをインストールして様子を見ることにします。
CentOS 7にはmmapperはありません。
CentOS 7で上記のエラーが出力されたのは、HDDのセクタに異常があり、その部分を読み込めなかった時に出力されたようです。
/var/log/messageに下記のようなエラーが記録されていました。
Aug 4 10:25:57 server kernel: ata2.00: exception Emask 0x0 SAct 0x800 SErr 0x40000 action 0x0 Aug 4 10:25:57 server kernel: ata2.00: irq_stat 0x40000008 Aug 4 10:25:57 server kernel: ata2: SError: { CommWake } Aug 4 10:25:57 server kernel: ata2.00: failed command: READ FPDMA QUEUED Aug 4 10:25:57 server kernel: ata2.00: cmd 60/08:58:e8:bc:1d/00:00:00:00:00/40 tag 11 ncq 4096 in#012 res 41/40:00:ea:bc:1d/0 0:00:00:00:00/40 Emask 0x409 (media error) <F> Aug 4 10:25:57 server kernel: ata2.00: status: { DRDY ERR } Aug 4 10:25:57 server kernel: ata2.00: error: { UNC } Aug 4 10:25:57 server kernel: ata2: hard resetting link Aug 4 10:25:57 server kernel: ata2: SATA link up 6.0 Gbps (SStatus 133 SControl 300) Aug 4 10:25:57 server kernel: ata2.00: ACPI cmd f5/00:00:00:00:00:00 (SECURITY FREEZE LOCK) filtered out Aug 4 10:25:57 server kernel: ata2.00: ACPI cmd f5/00:00:00:00:00:00 (SECURITY FREEZE LOCK) filtered out Aug 4 10:25:57 server kernel: ata2.00: configured for UDMA/133 Aug 4 10:25:57 server kernel: sd 1:0:0:0: [sdb] tag#11 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE cmd_age=0s Aug 4 10:25:57 server kernel: sd 1:0:0:0: [sdb] tag#11 Sense Key : Medium Error [current] [descriptor] Aug 4 10:25:57 server kernel: sd 1:0:0:0: [sdb] tag#11 Add. Sense: Unrecovered read error - auto reallocate failed Aug 4 10:25:57 server kernel: sd 1:0:0:0: [sdb] tag#11 CDB: Read(16) 88 00 00 00 00 00 00 1d bc e8 00 00 00 08 00 00 Aug 4 10:25:57 server kernel: blk_update_request: I/O error, dev sdb, sector 1948906 Aug 4 10:25:57 server kernel: ata2: EH completeこのエラーは、 aide --checkや aide --updateを実行するたびに記録されるようです。
このため、セクタエラーが発生しているHDDの交換を実施しました。
交換以降、aide --checkや aide --updateを実行しても正常に動作するようになりました。