テクニカルノーツ

セキュリティ

  • 2022.11.14

    AIDEによる改ざんチェックをCentOS7で定期実行させる方法

    みなさんこんにちは、初心者プログラマのユウです。 今回は前回の続きで、AIDEによる改ざんチェックをCentOS7で定期実行させる方法について書きます。 定期実行させるにはcronを利用します。(cronの読み方はクローン、クロン、クーロンです。これに関しては戦争が起こるのでここではcron表記しています。みなさんお好きなように読んでください。) cronは、ざっくり言うとLinuxで動いている常駐プログラム(デーモン)の1つです。 たとえば、深夜にファイルのバックアップをしたいとか、毎月1回アップデートの処理をしたいとか、今回のように毎日ファイルが改ざんされていないかどうかチェックしたいときなどに、ジョブを登録しておけば自動実行してくれる便利な機能です。ありがたい! さて、改ざんチェックを定期実行させるための大まかな流れとしては、 1.チェックコマンドを実行するシェルファイルを作る 2.そのシェルをcronで実行させる です。 早速やってみましょう。 1.チェックコマンドを実行するシェルファイルを作る 任意の場所にシェルファイルを作ります。 今回は/root/aideというディレクトリの中にaide_check.shというファイルを作ります。 # vi /root/aide/aide_check.sh 中身はこんなかんじ↓ #!/bin/sh LOGFILE=/var/log/aide/aide.log /usr/sbin/aide -C $LOGFILE チェックコマンドはaide -Cですが、シェルに書くときはプログラムの場所も指定してやらないと動かないことがあります。 プログラムの場所は環境によって異なりますので、ルートユーザーでwhichコマンドを使って調べてみましょう。 # which aide /usr/sbin/aide locateでも探せます。 # locate aide/etc/aide.conf (略) /root/aide /root/aide/aide_check.sh /usr/sbin/aide ←これ /usr/share/doc/aide-0.15.1 (略) さて、先ほどのシェルでは、改ざんチェックしたら/var/log/aide/aide.logというログファイルに出力するように指定しました。 シェルファイルを保存した後、実行してみます。 # sh /root/aide/aide_check.sh AIDE, version 0.15.1 ### All files match AIDE database. Looks okay! チェックコマンドが正常に動作すれば大丈夫です。 2.シェルをcronで実行させる 作成したシェルを定期実行させます。 まず、crontabファイルに設定を記述します。このファイルに書いたことをcronが実行してくれます。 #crontab -e #AIDE 47 10 * * * sh /root/aide/aide_check.sh /var/log/aide.testcheck.log 21; シェルが実行されたことを確認するために、/var/log/aide.testcheck.logにログを残す設定をしました。 crontabでの実行日時の書き方は、 分 時 日 月 曜日 コマンド です。 上記の書き方だと、毎日10時47分にsh /root/aide/aide_check.sh /var/log/aide.testcheck.log 21;が実行されます。 まず動作確認のため、現在の時間の2分後くらいの時間(ここでは10時47分)に設定してあります。 時間が過ぎるのを待ってから、自分で設定したログ(/var/log/aide.testcheck.log)を確認します。 # less /var/log/aide.testcheck.log AIDE, version 0.15.1 ### All files match AIDE database. Looks okay! ログが書き込まれているのが確認できれば正常です。 動作確認ができたら再びcrontabを編集します。 改ざんチェックを1時間おきに行う設定にします。 #crontab -e #AIDE 00 * * * * sh /root/aide/aide_check.sh /var/log/aide.testcheck.log 21; これで、毎日1時間おきにチェックコマンドが実行されます。 さてさて、これでチェックコマンドが自動実行されるようにはなりましたが、このままだと改ざんが検知されてもサーバに入ってログを確認しないと知ることができません。 これでは本末転倒ですので、改ざんが検知されたらメールでお知らせしてくれるようにシェルを書き換えましょう! メール通知設定をする ログに「Looks okay!」が出力されていないか、added、changed、removedのどれかが出力されていたら「改ざんされました」というメール通知をするようにシェルを書き換えます。 # vi /root/aide/aide_check.sh #!/bin/sh MAILTO=example@mail.co.jp,example.2@mail.co.jp ←宛先にするメールアドレスを記入します。コンマで区切れば複数指定できます。 LOGFILE=/var/log/aide/aide.log /usr/sbin/aide -C $LOGFILE if[ $(grep "Looks okay!" $LOGFILE | wc -l) -eq 0 -o $(egrep "added|changed|removed" $LOGFILE | wc -l) -eq 1 ]; thenecho "ファイルの改ざんが検出されました:$(egrep "added|changed|removed" $LOGFILE)" | /bin/mail -s "AIDE DETECTED CHANGES" -r "example-server(送信者名を指定できます。わかりやすいようにサーバ名を指定しました。)" $MAILTO fi exit 上書き保存した後、実際に監視対象フォルダに空のディレクトリを追加して、シェルを実行してみます。 #mkdir /監視対象ディレクトリ/aidetestdir シェルで指定したメールアドレスに改ざん通知が届けばOKです! ※先ほどテストのために作った空のディレクトリは忘れずに削除しておきましょう。 まとめ 今回はWebサイト改ざんの被害に遭ってもいち早く気付けるような仕組みを紹介しました。 改ざんされると、意図しない詐欺ページに誘導されたり、悪意のあるファイルが勝手にダウンロードされたりする危険性があります。 改ざんに気が付かず長期間放置することで被害は拡大します。 攻撃される前にブロックすることはもちろん大事ですが、攻撃されたときのことを考えて対策をしておくことも大切です。 セキュリティ対策をしていない、アップデートもしていないWebサイトを放置することは、家中の窓を開けて鍵をかけずに長期旅行に出かけているようなものです。もし、そういったサイトをお持ちの方は、被害が出る前にアップデートしたり、今回紹介したAIDEを入れたり、セキュリティソフトを入れたりしてはいかがでしょうか? 最後までご覧いただきありがとうございました。

  • 2022.10.19

    CentOS7のWebサーバにファイル改ざん検知ツールAIDEを導入する方法

    みなさんこんにちは。初心者プログラマのユウです。初めてテクニカルノーツを書きます。何について書こうかな~どうしようかな~としばらく思案しました。 悩んでいる間に、ワン・エックス通信でWebサイトのセキュリティに関する内容をお伝えしていたり、実際にWeb改ざんの被害に遭われてしまったお客様がいらっしゃったりして、「他人ごとではないな」と私自身改めて思いました。 きっと同じような気持ちになってセキュリティについて考えた方も多いのではないかと思いましたので、改ざん検知ツール「AIDE」をCentOS7で動いているWebサーバに入れた時のことを復習がてら書いてみることにしました。 AIDE AIDE(Advanced Intrusion Detection Environment)は、ホストの構成等をデータベースに保存しておき、データベースに保存された状態と現在の状態を比較することで、ファイルやディレクトリの整合性をチェックするソフトウェアです。 AIDEを導入することで、ディレクトリやファイルが不正に改ざんされた場合(例えば設定ファイルが書き換えられたり、Webコンテンツが不正に追加・変更・削除された場合)に素早く対応でき、改ざんに気付かず被害が拡大、という事態を防ぐことができます。 今回の導入環境はCentOS7ですが、CentOSだけでなくRed Hat Enterprise Linux、Ubuntuといった主要なLinuxディストリビューションに標準パッケージとして含まれており、低コストで簡単に導入することができるのでおすすめです。 では早速導入してみましょう! 1. AIDEをインストールする AIDEは今回利用するCentOS7の標準リポジトリに存在していますので、以下のコマンドで簡単にインストールできます。 # yum install aide 2. confファイルで設定を行う 設定ファイルでは、チェックするルールを設定します。 /etcの中にaide.confがあるので、このファイルを編集していきます。 # vi /etc/aide.conf ファイルの中身はこんな感じです↓ # Example configuration file for AIDE. @@define DBDIR /var/lib/aide @@define LOGDIR /var/log/aide # The location of the database to be read. database=file:@@{DBDIR}/aide.db.gz // 参照先のデータベースファイルです。 # The location of the database to be written. #database_out=sql:host:port:database:login_name:passwd:table #database_out=file:aide.db.new database_out=file:@@{DBDIR}/aide.db.new.gz // 初期化したときに作成されるデータベースファイルです。 (省略) # These are the default rules. // デフォルトルールの説明です。 # #p: permissions #i: inode: #n: number of links #u: user #g: group #s: size #b: block count #m: mtime #a: atime #c: ctime #S: check for growing size #acl: Access Control Lists #selinux SELinux security context #xattrs: Extended file attributes #md5: md5 checksum #sha1: sha1 checksum #sha256: sha256 checksum (省略) # You can create custom rules like this. // チェックルールをカスタマイズできます。 # With MHASH... # ALLXTRAHASHES = sha1+rmd160+sha256+sha512+whirlpool+tiger+haval+gost+crc32 ALLXTRAHASHES = sha1+rmd160+sha256+sha512+tiger # Everything but access time (Ie. all changes) EVERYTHING = R+ALLXTRAHASHES # Sane, with one good hash. # NORMAL = sha256 NORMAL = sha256 (省略) # Next decide what directories/files you want in the database. Aide # uses a first match system. Put file specific instructions before generic # matches. e.g. Put file matches before directories. /* 監視対象とそのチェックルールを設定しています。 行頭に「!」を加えることで、そのディレクトリの監視が除外されます。 ディレクトリ名の後ろにルールを追記することで、AIDEがそのルールでチェックしてくれます。*/ !/boot/ CONTENT_EX !/bin/ CONTENT_EX !/sbin/ CONTENT_EX !/lib/ CONTENT_EX !/lib64/ CONTENT_EX !/opt/ CONTENT !/root/ !/usr/ !/tmp/ !/pro !/etc/ /var/www/contents/ NORMAL (省略) 今回は/var/www/contents/をNOMALルールで検査します。 (今回は設定していませんが、パスワードファイルや設定ファイルもチェック対象にしておくとセキュリティが強化されます。) NOMALは設定ファイルに書かれているように、デフォルトでsha256チェックサムを行ってくれます。 監視対象の設定 監視対象の設定について、デフォルトのままでももちろん良いのですが、それだと処理が重たくなり、チェックに時間がかかります。 また、頻繁に変更されるファイルを監視対象にしてしまうと、それが検知されてしまいます。そのため、監視対象については十分に吟味して決定しましょう。 設定ファイルの編集が完了したら上書き保存してください。 3. 初期化する AIDEのデータベースファイルを作ります。 # aide --init 監視対象が多いと少々時間がかかるので気長に待ちましょう。 このコマンドを実行すると、/var/lib/aideディレクトリにaide.db.new.gzというファイルが作られます。この aide.db.new.gz を aide.db.gz という名前に変更します。 # mv -f /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz AIDEの仕組みとして、このaide.db.gzがチェックの参照先になります。(ちなみにこのファイル名は先ほどの設定ファイルで定義されています。) 4. 改ざんチェックしてみる チェックコマンドは以下の通りです。 aide -C では、実際にチェックしてみます。 # aide -C AIDE, version 0.15.1 ### All files match AIDE database. Looks okay! このチェック実行コマンドも、監視対象が多いと少々時間がかかります。改ざんが検知されなければ上記のように表示されます。 続いて、監視対象のディレクトリの中にあるindex.htmlを削除して、再度実行してみます。 # aide -C AIDE 0.15.1 found differences between database and filesystem!! Start timestamp: 2022-10-17 11:42:14 Summary: Total number of files: 262 Added files: 0 Removed files: 1 Changed files: 0 --------------------------------------------------- Removed files: --------------------------------------------------- removed: /var/www/contents/index.html 改ざんが検知されるとこのように表示されます。「/var/www/contents/index.htmlが削除されてますよ」と教えてくれました。実行ログは/var/log/aide/aide.logに保存されるので確認してみてください。 監視対象のディレクトリやファイルを自分で意図的に変更・更新した場合は、③の手順でデータベースファイルを初期化して参照先のデータベースファイルを変更しましょう。 次回はチェックコマンドを定期実行させる設定を行った時のことをお伝えします。ご覧いただきありがとうございました。

  • 2014.7.31

    Linuxサーバにアンチウィルスソフトをいれてみた

    Centos6 にアンチウィルスソフトをいれてみた。 セキュリティ強化の一環としての導入です。アンチウィルスソフトはフリーでマナーな、「Clam AntiVirus」を選択しました。 事前準備 「Clam AntiVirus」は、初期のyumのリポジトリには入っていないので、RPMforgeリポジトリを使用できるようにしておきます。 Clam AntiVirusのインストール #yum install clamd #yum install clamav-devel Clam AntiVirusの設定 root権限で動作するようにするため、以下の設定を変更 #vi /etc/clamd.conf User clamav ↓コメントアウトします。 #User clamav Clam AntiVirusの起動 #service clamd start Clam AntiVirusの自動起動設定 chkconfig clamd on chkconfig --list | grep clamd (確認) ウィルス定義ファイル更新機能の有効化 #vi /etc/freshclam.conf Example ↓コメントアウトします。 #Example ウィルス定義ファイル最新化 # freshclam コマンドを実行すると最新化されます。 ※以降はcronで日時更新されるようになります。 ウィルススキャンテスト コマンド実行するとウイルススキャンが実行されます。 # clamscan --infected --remove --recursive ----------- SCAN SUMMARY ----------- Known viruses: 3505561 Engine version: 0.98.3 Scanned directories: 7231 Scanned files: 28336 Infected files: 0 ← 0なので問題なし Data scanned: 155.20 MB Data read: 549.99 MB (ratio 0.28:1) Time: 57.475 sec (0 m 57 s) ■結果 Infected filesが 0なので問題なし テスト用のウィルスをダウンロードしてやってみる # mkdir test # cd test/ # wget http://www.eicar.org/download/eicar.com # clamscan --infected --remove --recursive /root/test /root/test/eicar.com: Eicar-Test-Signature FOUND /root/test/eicar.com: Removed. ----------- SCAN SUMMARY ----------- Known viruses: 3505561 Engine version: 0.98.3 Scanned directories: 1 Scanned files: 1 Infected files: 1 Data scanned: 0.00 MB Data read: 0.00 MB (ratio 0.00:1) Time: 6.675 sec (0 m 6 s) ■結果 Infected filesが 1 で検知 ダウンロードした「eicar.com」が正常に削除されてた。 ウイルスチェック定期実行用にスクリプトを作成 /etc/cron.daily/ に作る事でcronで定期実行させる #vi /etc/cron.daily/clamscan 以下の内容で登録 #!/bin/bash PATH=/usr/bin:/bin # clamd update yum -y update clamd /dev/null 21 # excludeopt setup excludelist=/root/clamscan.exclude if [ -s $excludelist ]; then for i in `cat $excludelist` do if [ $(echo "$i"|grep \/$) ]; then i=`echo $i|sed -e 's/^\([^ ]*\)\/$/\1/p' -e d` excludeopt="${excludeopt} --exclude-dir=^$i" else excludeopt="${excludeopt} --exclude=^$i" fi done fi # virus scan CLAMSCANTMP=`mktemp` clamscan --recursive --remove ${excludeopt} / $CLAMSCANTMP 21 [ ! -z "$(grep FOUND$ $CLAMSCANTMP)" ] \ # report mail send grep FOUND$ $CLAMSCANTMP | mail -s "Virus Found in `hostname`" root rm -f $CLAMSCANTMP パーミッションを変更 実行権限を付加しておく #chmod 755 /etc/cron.daily/clamscan 除外指定について 先ほどのスクリプト内に指定した以下のファイルに記載することでウイルスチェックを除外したいフォルダやファイルを指定できます。 /root/clamscan.exclude 追記例 echo "/sys/" >> /root/clamscan.exclude 以上で設定完了です。