Timestamp Disclosure - Unix

概要

  • 脆弱性の名前: Timestamp Disclosure - Unix (Unixタイムスタンプの情報漏洩)
  • 問題の要点: WebアプリケーションがUnixタイムスタンプ(1970年1月1日からの経過秒数)を公開することで、攻撃者がアプリケーションの内部動作やセキュリティ情報を推測する手がかりを得る可能性がある状態。
  • よくある発生シーン: 開発時のデバッグ情報が本番環境に残ってしまっている場合や、ログファイル、APIレスポンスなどにUnixタイムスタンプがそのまま出力されている場合に発生しやすい。クラウド環境では、ログの集約・分析ツールがデフォルト設定のまま使用され、意図せずタイムスタンプが公開されることがある。

背景

Unixタイムスタンプは、システム内部で日付や時間を扱う際に便利な形式ですが、そのまま公開すると、攻撃者にとって有益な情報源となる可能性があります。
例えば、タイムスタンプからイベントの発生時刻を特定したり、システムの稼働時間や更新頻度を推測したりすることができます。
近年、情報漏洩に対する意識が高まるにつれて、不要な情報の公開を避けることが推奨されています。

セキュリティ上のリスク

  • システム内部情報の漏洩。
  • 攻撃者がシステムの動作を理解しやすくなる。
  • 特定のイベントの発生時刻を特定される。
  • システムの稼働時間や更新頻度を推測される。

対処方法の具体例

WordPress

投稿日時のフォーマット変更

WordPressのテンプレートファイルで投稿日時を表示する場合、Unixタイムスタンプを使用しない形式に変更します。

<?php
// 以前のコード
echo get_the_time('U');

// 修正後のコード
echo get_the_time('Y-m-d H:i:s');
?>

functions.phpでのカスタムフォーマット

functions.phpに以下のコードを追加して、タイムスタンプのフォーマットをカスタマイズします。

<?php
function convert_unix_timestamp($timestamp) {
    return date('Y-m-d H:i:s', $timestamp);
}
// 使用例
echo convert_unix_timestamp(get_the_time('U'));
?>

PHP

PHPコードでの設定

PHPコード内でタイムスタンプを扱う場合、公開する際には適切なフォーマットに変換します。

<?php
// Unixタイムスタンプ
$timestamp = time();

// フォーマットされた日付
$formatted_date = date('Y-m-d H:i:s', $timestamp);

echo $formatted_date;
?>

Apache2

httpd.confでの設定

Apacheの設定ファイル(httpd.conf.htaccess)で、特定のヘッダーを削除します。

<IfModule mod_headers.c>
    Header unset Last-Modified
    Header unset Date
</IfModule>

Nginx

nginx.confでの設定

Nginxの設定ファイルで、特定のヘッダーを削除します。

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://your_upstream;
        proxy_hide_header Last-Modified;
        proxy_hide_header Date;
    }
}

AWS

CloudFrontの設定

CloudFrontを使用している場合、カスタムヘッダーポリシーを設定し、オリジンからのタイムスタンプを含むヘッダーを削除します。

Load Balancerの設定

ロードバランサー(ALB/ELB)を使用している場合、HTTPヘッダーの書き換えルールを設定し、タイムスタンプを含むヘッダーを削除します。

検出方法

OWASP ZAP での出力例

  • Alert 名: Timestamp Disclosure - Unix
  • リスク: Low
  • URL: タイムスタンプが公開されているURL
  • パラメータ: なし
  • 詳細: レスポンスにUnixタイムスタンプが含まれているという情報

手動再現例

  1. Webブラウザの開発者ツールを開き、Networkタブを選択します。
  2. Webサイトにアクセスし、HTTPレスポンスやHTMLソースにUnixタイムスタンプが含まれていないか確認します。
  3. curl コマンドを使用して、HTTPレスポンスヘッダーやHTMLソースを確認します。
curl -I https://example.com
curl https://example.com

まとめ

  • CVSS 基本値: 4.0 (Medium)
  • 運用チームや開発者が意識すべきポイント:
    • 不要なタイムスタンプの公開を避ける。
    • タイムスタンプを公開する際には、適切なフォーマットに変換する。
    • HTTPレスポンスヘッダーにタイムスタンプが含まれていないか確認する。
    • 定期的にWebサイトのセキュリティ診断を実施する。
  • 再発防止:
    • 開発プロセス全体でセキュリティを考慮する (Security by Design)。
    • コードレビューを実施し、タイムスタンプの取り扱いを確認する。
    • 自動脆弱性診断ツールを導入し、定期的にスキャンを行う。
    • ログ出力に関するポリシーを策定し、遵守する。

以上の対策と検出方法を活用して、Timestamp Disclosure - Unix のリスクを低減してください。