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タイムスタンプが含まれているという情報
手動再現例
- Webブラウザの開発者ツールを開き、Networkタブを選択します。
- Webサイトにアクセスし、HTTPレスポンスやHTMLソースにUnixタイムスタンプが含まれていないか確認します。
curl
コマンドを使用して、HTTPレスポンスヘッダーやHTMLソースを確認します。
curl -I https://example.com
curl https://example.com
まとめ
- CVSS 基本値: 4.0 (Medium)
- 運用チームや開発者が意識すべきポイント:
- 不要なタイムスタンプの公開を避ける。
- タイムスタンプを公開する際には、適切なフォーマットに変換する。
- HTTPレスポンスヘッダーにタイムスタンプが含まれていないか確認する。
- 定期的にWebサイトのセキュリティ診断を実施する。
- 再発防止:
- 開発プロセス全体でセキュリティを考慮する (Security by Design)。
- コードレビューを実施し、タイムスタンプの取り扱いを確認する。
- 自動脆弱性診断ツールを導入し、定期的にスキャンを行う。
- ログ出力に関するポリシーを策定し、遵守する。
以上の対策と検出方法を活用して、Timestamp Disclosure - Unix のリスクを低減してください。