テクニカルノーツ

Webサーバ

  • 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.3.14

    WEBサーバを構築してみた

    Centos6 でWEBサーバを構築してみた。 yumでインストールするのは簡単ですが、今回は少しセキュリティ面を考慮したインストールと設定について記載します。 Apacheは、時々脆弱性等がみつかりバージョンアップします。標準リポジトリでインストールすると、現時点ではバージョン「2.2.15-29」が入りますがこれは少し古いものです。 セキュリティ対策の入ったなるべく新しい物をインストールするために、CentALTリポジトリを使用してApacheをインストールします。 CentALTリポジトリの追加 #rpm -ihv http://centos.alt.ru/repository/centos/6/x86_64/centalt-release-6-1.noarch.rpm Apacheのインストール #yum install httpd httpd-devel #httpd -version Server version: Apache/2.2.26 (Unix) 現時点(2014-03-14)では、バージョン「2.2.26」 がインストールされました。 リポジトリの優先順位設定 このままだと、他の物をインストールする際もCentALTリポジトリを使用してしまうので、「yum-plugin-priorities」をインストールして標準リポジトリが優先されてインストールされるようにします。 yum install yum-plugin-priorities 標準リポジトリ設定ファイルを修正します すべてのセクションに「priority=1 」を追記します。 #vi /etc/yum.repos.d/CentOS-Base.repo [base] ... priority=1 #←追加 [updates] ... priority=1 #←追加 [extras] ... priority=1 #←追加 [centosplus] ... priority=1 #←追加 [contrib] ... priority=1 #←追加 その他Apacheの設定 TRACEメソッドを無効にする 「Cross Site Tracing」の脆弱性があり、TRACEメソッドが有効だとBasic 認証のパスワードが盗まれたりします。TRACEメソッドを使用する予定がないので無効にしておきます。 #vi /etc/httpd/conf/httpd.conf TraceEnable Off #←追加 以下のようにtelnetで無効になっているか確認が出来ます。 # telnet localhost 80 Trying ::1... Connected to localhost. Escape character is '^]'. OPTIONS / HTTP/1.0 ← #入力してエンター HTTP/1.1 200 OK Date: Fri, 14 Mar 2014 01:23:39 GMT Server: Apache Allow: GET,HEAD,POST,OPTIONS ← #ここに[TRACE]が無ければOK Content-Length: 0 Connection: close Content-Type: text/html; charset=UTF-8 Connection closed by foreign host. エラー画面等のOS、Apacheバージョンを非表示にする 攻撃者に対して余計な情報を与えることになるので非表示にしておきます。 #vi /etc/httpd/conf/httpd.conf #ServerTokens OS ServerTokens Prod ↓こうなります。 ※「Apache Server」の表示を外すには、ソースからのインストールでオプション指定が必要なようです。ソースからインストールするとyum管理から外れる、アップデートや再インストール必要な場合の対応が大変なので、今回はCentALTリポジトリでインストールしてます。 以上