bashで簡単!ファイルの不正改ざんを監視する方法【WordPressなど】

2021年11月1日

サーバー
IT
Tools
Security
WordPress

WordPressで作成したWebサイトが不正アクセスとファイル改ざんされた!どう対処する?

どうも。
26歳でフリーランス英語・スペイン語通訳からWeb系エンジニアに転職してエンジニア歴5年。
普段はフルスタックエンジニアしてます、テック備忘LOGのYuki(@tech_bibo_log)です!!


今回はセキュリティー関連についての備忘録になります。


AzureやGoogle Cloud Platform、さくらレンタルサーバーなど簡単にサーバーを契約してWebサイトやWebシステムを公開できるようになり日本ではプログラミング学習サービスも充実してきた昨今、WordPressを使ったWebサイト構築で転職や独立・副業!なんて方がたくさん増えたのではないかと思います。


セキュリティー面の知識が皆無なため公開したブログやWebサービスが不正アクセスや改ざんされた!なんてトラブルもきっと同じだけ増えていることかと思います。


ということで今回はLinuxサーバーでbashを使ったファイル不正改ざんを検知する方法を紹介したいと思います!!
※これだけで不正アクセスや不正改ざんを100%阻止を保証できるものではございませんので、あくまで1つの対策として考えてください。
※ただのバッチプログラムですが導入後のトラブルは一切責任は負いません。


Yuki

この記事ではこんな人にオススメです。

  • WordPressでWebサイトを構築している人
  • 過去にWebサイトへ不正なページが追加されたり不正改ざんされた人
  • ファイルの不正改ざんを検知したい人
  • bashやshellスクリプトを勉強している人


以前とある企業様の、サクラインターネットのレンタルサーバーにNginx(Webサーバー)を立ててWordPressで構築したWebサイトが ある日突然404エラーとなり「解決してほしい」という依頼を受けたことがありました。


原因を探していたところプロジェクト配下に複数の悪意のあるファイルが追加されていたりファイルの内容が改ざんされていました。


めっっちゃくちゃ怖いね!
そのサイトはどんな状態だったの?!

Yuki


Yuki

うん、その不正なページはファイルのアップロードが可能なうえにコマンドをサーバーに送信できるようになっていたんだ。
これからその対策方法を一つ詳しく紹介していくから使ってみてね!


ファイル改ざん検知バッチ作成手順の説明

  1. 監視対象のファイルリストを作成する
  2. 1.のリストの正常な(配置・更新した直後で最新状態の)ハッシュ値を取得しておく
  3. 2.で取得したハッシュ値をバッチ実行時のリアルタイムのハッシュ値と比較する
  4. 3.の結果次第でWebサーバーを停止するなどの対策を盛り込む


以上です!
結構シンプルですよね。それでは早速始めましょう!




▽▽▽ おすすめ:reCAPTCHAをDjangoサイトに導入した時のお話し ▽▽▽



▽▽▽ おすすめ:Twitter Botを作成した時のお話し ▽▽▽



[ 目次 (開く) ]

監視対象のファイルリストを作成

ここではまず、監視したいファイルのあるディレクトリに移動します。
次に、すべてのファイルパス(絶対パス)を/var/www/mySiteHash256sum.txtに出力しています。
/var/www/の部分やファイル名などはご自身の環境や好みに合わせて変更してください。

cd /var/www/
find `pwd` -name "*.*" > ./mySiteHash256sum.txt
--- mySiteHash256sum.txtの出力結果の参考例 ---
/var/www/index.html
/var/www/main.css
/var/www/main.js
    



Yuki

出力したファイルリストを精査して監視の要・不要を精査しておくとよいです。


正常な状態のハッシュ値を作成

先ほど作成した/var/www/mySiteHash256sum.txtに記載されたすべてのファイルのハッシュ値を取得して/var/www/mySiteHash256sum.csvに出力します。


1.スクリプトを作成

まずは次のファイルを作成してください。

/var/www/checkHash256sum.sh
#!/bin/bash

###############################################
# 引数[$1]
# 1: ハッシュ値作成モード
# 2: ハッシュ値検証モード
###############################################

if [ 1 -eq $1 ] ; then
  while read line; do
    sha256sum $line;
  done < mySiteHash256sum.txt > mySiteHash256sum.csv
else
  count=1
  while read line; do

    echo `awk "NR == $count" mySiteHash256sum.txt`

    hash=$(sha256sum `awk "NR == $count" mySiteHash256sum.txt`);

    echo $hash
    echo $line

    if [ "$hash" == "$line" ] ; then
      echo "OKOKOKOKOKOKOKOK"
      # 正常処理を入れる
    else
      echo "NGNGNGNGNGNGNGNG"
      # Webサーバーを停止するなどの対応策を入れる
    fi

    echo "-------------------------"

    count=$(( count + 1 ))
  done < mySiteHash256sum.csv | cut -d ' ' -f 1
fi



2.ハッシュ値を作成

次のコマンドを実行しましょう。
引数[ 1: 生成モード ]を実行するとmySiteHash256sum.txtを元にmySiteHash256sum.csvが出力されます。

cd /var/www/
sh checkHash256sum.sh 1



Yuki

今回はsha256sumという標準で使えるアルゴリズムを使ってハッシュ値を作成しています!!



ハッシュ値を比較してファイル改ざんを検証

次のコマンドを実行しましょう。
引数[ 2: 検証モード ]を実行するとmySiteHash256sum.csvの正常時のハッシュ値を、バッチ実行時のハッシュ値と比較してくれます。

正常な場合はOKで、改ざんが検知された場合はNGが表示されます。
【出力内容】
・ファイルのフルパス
・正常時のハッシュ値
・実行時のハッシュ値
・検証結果

cd /var/www/
sh checkHash256sum.sh 2
--- 出力結果の参考例 ---
/var/www/index.html
559cc931bd2c54bcea7b0a0262e514e9baacfd0f1eeea752d6e7b3f148cde904
57f50db6b7b07e85960b7a2bf60a784239102f3126e9286f2f67e6d8a9f08740
NGNGNGNGNGNGNGNG
-------------------------
/var/www/main.css
f237913c746bb18f232df0a712bb9983284065435d949effa70e62cb136918d3
f237913c746bb18f232df0a712bb9983284065435d949effa70e62cb136918d3
OKOKOKOKOKOKOKOK
-------------------------
/var/www/main.js
d1230fc71ff7704138ec28a9625c91pq26a05647379d08d188bcf8b5e7268abc
d1230fc71ff7704138ec28a9625c91pq26a05647379d08d188bcf8b5e7268abc
OKOKOKOKOKOKOKOK
-------------------------
    



こんな感じで、上記のスクリプトでは正常か異常かを分岐の条件としてそれぞれのメッセージを表示しているだけですが、 Webサーバーを止めるなどの対応を入れてあげればその時点で被害を食い止めることができます。


また、上記のコマンドsh checkHash256sum.sh 2をcron(スケジュール実行のようなもの)に設定しておけば、定期的にファイルの状態を自動で監視することも可能です!
cronの設定方法は次の記事の「おまけ SSL証明書を自動で更新」のパートを参考にしてみてください!



Yuki

思っていた以上にとても簡単に実装することができてビックリ!
WindowsではPowerShellScriptを使って殆ど同じ流れでファイル改ざん検証スクリプトの実装ができるから是非試してみてね!


ほんと最凄い簡単だったね!

Yuki


Yuki

自分で監視対象のファイルを更新した場合はハッシュ値を生成しなおす必要があるから忘れないよう注意してね!


まとめ

今回はLinux上でファイル改ざんを監視するためのバッチを作成しました。
たった30行程の短いプログラムで実装することができました!

シェルスクリプトはこういったバッチプログラムを作成するのに適したスクリプト言語なので勉強しておけば他にも様々なことができるようになります。 またの機会にシェルスクリプトについてお話しできればと思います!お楽しみに!


以上です、最後まで読んで頂きありがとうございました!