質問: ### 前提・実現したいこと Java製のアプリケーションを作っています。このアプリの操作ログをlog4jを利用して出力し、ローカルにテキストファイルと して保存する予定なのですが、出力されたログファイルへの改ざん対策に悩んでいます。 【環境】 OSはWindows、外部ネットワークには接続せず自前でTomcatをたててブラウザから利用するスタンドアローンのアプリです。 なので外部からの改ざんではなく、運用者からの改ざんを防ぐことが目的です。 ログ監視などのツールは導入せず(おそらくできない)、log4jやOSの標準機能を利用して出来ないものかと思い まず思い付いたのが、ログを保存するフォルダ配下に書き込み制限をかけることです。 が、そうするとアプリ側からのログ出力自体が制限されるかもしれません。 何か良い方法がありますでしょうか。よろしくお願いします。 【補足】 すみません情報が抜けていました。 管理者権限を持つユーザからの改ざんには対応しないつもりでいます。あくまで普段運用する一般ユーザが ログファイルを改ざんすることを防止したいと思っています。
回答: こんにちは。 知識と管理者権限を持っている人による改ざん防止となると、簡単確実な方法は存在しないと思います。 比較的費用がかからない方法として簡単な署名を付けることが考えられます。 例えば、メッセージをログ出力する直前に前回のメッセージと今回のメッセージのハッシュ値を計算して今回のメッセージに付加してログ出力するのです。 そのハッシュ計算アルゴリズムを秘密にすることができれば、ハッシュ値の計算対象メッセージの改ざんを検出できます。 日付時刻等、log4jが付加する部分をハッシュ値計算対象に入れられないかも知れません。その時は、少し勿体無いですが、別途必要な情報をメッセージに付加するしかないと思います。 しかし、なんらかの方法でログを直ぐに運用者の手がとどかないところへ送信するのでないかぎり、管理者権限を持つ人がログを破壊することを防止するのは事実上不可能と思います。ですので上記対策でも破壊は防げませんが、注意深く設計・運用すれば破壊されたことの検出はできるだろうと思います。