基本情報技術者 2015年 春期 午前(科目A) 問43
問題文
Webサーバのコンテンツの改ざんを検知する方法のうち、最も有効なものはどれか。
選択肢
ア:Webサーバのコンテンツの各ファイルの更新日を保管しておき、定期的に各ファイルの更新日と比較する。
イ:Webサーバのコンテンツの各ファイルのハッシュ値を保管しておき、定期的に各ファイルからハッシュ値を生成し、比較する。(正解)
ウ:Webサーバのメモリ使用率を定期的に確認し、バッファオーバーフローが発生していないことを確認する。
エ:Webサーバへの通信を監視し、HTTP、HTTPS以外の通信がないことを確認する。
🔒 解説は解答すると表示されます
ファイルハッシュによる改ざん検知【午前解説】
正解の理由
正解は イ です。ファイルのハッシュ値を事前に記録しておき、定期的に現在のハッシュと比較する方法は「ファイル内容の整合性検査」を直接行います。暗号学的ハッシュ関数(SHA-256など)はファイル内容のわずかな改変でも出力が大きく変化するため、改ざんの検知能力が高く、攻撃者が見た目や更新日時を操作しても内容差分を検出できます。また、この方式は自動化して定期スキャン・アラートが可能で、他の選択肢に比べ運用上の実効性が高い点も評価できます。
解法ステップ
- 問題文の要求を「最も有効な改ざん検知方法」だと理解する(検出精度と実用性を重視)。
- 各選択肢が「ファイル内容の変化を直接検知できるか」を基準に評価する。
- 更新日時は間接的・容易に偽装可能、メモリやポート監視は別問題であるため除外。
- ハッシュ比較は直接・高精度に検知でき、自動化と運用で実用的なので選択する。
実運用での基本手順(簡潔):
- 初期ベースラインのハッシュを生成・署名して安全な場所に保存。
- 定期的にサーバ上のファイルをスキャンしハッシュを比較。
- 差異があれば変更内容の確認・リストア・ログ解析を実施。
選択肢別の誤答解説
-
ア: Webサーバのコンテンツの各ファイルの更新日を保管しておき、定期的に各ファイルの更新日と比較する。
- 理由(誤り):更新日時(mtime)は攻撃者が任意に変更可能でフォレンジックや改ざん回避に使われやすく、ファイル内容自体の変更を確実に検出できません。誤検知や見落としが発生しやすいです。
-
イ: Webサーバのコンテンツの各ファイルのハッシュ値を保管しておき、定期的に各ファイルからハッシュ値を生成し、比較する。
- 理由(正解):ファイル内容を直接表す指標であり、暗号学的ハッシュはわずかな変更でも別値になるため改ざん検知に最適です。ベースラインの安全な管理と適切なハッシュ関数の選択が前提となります。
-
ウ: Webサーバのメモリ使用率を定期的に確認し、バッファオーバーフローが発生していないことを確認する。
- 理由(誤り):メモリ使用率やバッファオーバーフローの有無は脆弱性や当該攻撃の兆候の一部を示すに過ぎず、コンテンツそのものの改ざんを直接検出する手段ではありません。検出対象が異なります。
-
エ: Webサーバへの通信を監視し、HTTP、HTTPS以外の通信がないことを確認する。
- 理由(誤り):通信プロトコル監視は不要なサービスや異常なポートを検出できますが、許可されたHTTP/HTTPS上で配信されるコンテンツ自体の改ざんを検出する手段にはなりません。
よくある誤解
- 「更新日時の検査で十分」:更新日時は攻撃者が任意に変更可能であり、タイムスタンプだけでは内容改変を確実に検出できません。
- 「ハッシュが同じなら完全に安全」:ハッシュ照合は改ざん検出に有効ですが、ベースラインの保管場所が攻撃者に改竄されていないことが前提であり、保存方法の安全性が重要です。
- 「通信プロトコル監視でコンテンツ改ざんを検出できる」:許可されたHTTP/HTTPS上のレスポンス内容までは監視対象にならず、通信監視だけではコンテンツ改ざんは検出困難です。
補足コラム
- 実務ではファイル整合性監視(FIM: File Integrity Monitoring)ツール(例:AIDE、Tripwire)を使ってハッシュの生成・比較・アラートを自動化します。
- ハッシュ関数の選択:MD5やSHA-1は衝突耐性が弱いため推奨されず、SHA-256以上を使用するのが現代的な運用です。
- ベースラインの保護:ハッシュ値はサーバ外の別システムやWORM(Write Once Read Many)媒体、あるいは署名付きで保存して改ざんから守る必要があります。
- 改ざん検知だけでなく予防(Webアプリの脆弱性修正、強固なアップデート管理、アクセス制御)と組み合わせることで効果が最大化します。
簡単なハッシュ生成例(Python)
import hashlib
def sha256_of_file(path):
h = hashlib.sha256()
with open(path, "rb") as f:
for chunk in iter(lambda: f.read(8192), b""):
h.update(chunk)
return h.hexdigest()
print(sha256_of_file("/var/www/html/index.html"))
FAQ
Q1: ハッシュが一致すれば絶対に安全ですか?
A1: ハッシュ一致はファイル内容がベースラインと同一であることを示しますが、ベースライン自体が安全に管理されていることが前提です。ベースラインの改ざんや置換を防ぐ運用が必要です。
A1: ハッシュ一致はファイル内容がベースラインと同一であることを示しますが、ベースライン自体が安全に管理されていることが前提です。ベースラインの改ざんや置換を防ぐ運用が必要です。
Q2: どの頻度でハッシュチェックすればよいですか?
A2: 重要度と更新頻度に依存します。頻繁に更新されない静的コンテンツは日次、重要システムは数時間毎、リアルタイム監視が望ましいケースもあります。
A2: 重要度と更新頻度に依存します。頻繁に更新されない静的コンテンツは日次、重要システムは数時間毎、リアルタイム監視が望ましいケースもあります。
Q3: ハッシュによる検知で誤検知が多い場合は?
A3: 正当な更新と改ざんを区別する運用が必要です。デプロイプロセスと連携してベースラインを更新し、変更理由の承認フローを設けます。
A3: 正当な更新と改ざんを区別する運用が必要です。デプロイプロセスと連携してベースラインを更新し、変更理由の承認フローを設けます。
Q4: ハッシュ以外に推奨される補完手段は?
A4: サーバのログ監視、Webアプリの脆弱性対策、サーバ間ファイル同期の整合性チェック、ファイルの署名(デジタル署名)などが有効です。
A4: サーバのログ監視、Webアプリの脆弱性対策、サーバ間ファイル同期の整合性チェック、ファイルの署名(デジタル署名)などが有効です。
関連キーワード: ファイル整合性監視、ハッシュ値、SHA-256、AIDE、Tripwire、改ざん検知、ベースライン保護、FIM、WORM、ログ監視

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

