EC-CUBE運用におけるSSH authorized_keysファイルのセキュリティ対策

先日、EC-CUBEを運用している企業さんからサーバに関する相談があり、原因を探ってみたところ、不審なSSHアクセスの痕跡を発見し、authorized_keysファイルに見覚えのない公開鍵が追加されていることが判明しました。
この経験を踏まえて、EC-CUBE運用者の皆さんに向けて、SSH authorized_keysファイルのセキュリティ対策について共有したいと思います。

EC-CUBEサーバが狙われる理由

EC-CUBEサーバは攻撃者にとって非常に魅力的なターゲットです

  • 顧客の個人情報 – 氏名、住所、電話番号、メールアドレス
  • 決済情報 – クレジットカード情報(適切に暗号化されていても)
  • 売上データ – 競合他社にとって価値のある情報
  • 管理者権限 – サーバへの永続的なアクセス権

攻撃者がシステムに侵入すると、最初に行うことの一つがauthorized_keysファイルに自分の公開鍵を追加することです。これにより、パスワードを変更されても継続的にアクセスできる「バックドア」を作成します。

EC-CUBEサーバでの具体的な被害

以下のような被害が想定されます

1. 顧客データの漏洩

# 攻撃者がauthorized_keysを悪用してアクセス
ssh -i malicious_key user@your-eccube-server

# 顧客データベースの抽出
mysqldump -u eccube_user -p eccube_db > customer_data.sql

2. サイトの改ざん

  • 偽の決済ページへのリダイレクト
  • マルウェアの埋め込み
  • フィッシング目的での悪用

3. 内部情報の窃取

  • 管理画面のスクリーンショット
  • 設定ファイルの取得
  • ログファイルの解析

セキュリティ対策

1. ファイル権限の厳格化

# ファイルをroot所有、読み取り専用に変更
sudo chown root:root ~/.ssh/authorized_keys
sudo chmod 444 ~/.ssh/authorized_keys

# immutableフラグを設定(追加の保護)
sudo chattr +i ~/.ssh/authorized_keys

この設定により、EC-CUBEのアプリケーションユーザーが侵害されても、authorized_keysファイルの変更を防げます。

2. 中央管理による統一管理

複数のEC-CUBEサーバを運用している場合、Ansibleを使った中央管理が効果的です

# /etc/ssh/sshd_config
AuthorizedKeysFile /etc/ssh/authorized_keys/%u

Ansibleプレイブック例

- name: Deploy authorized_keys for EC-CUBE servers
  hosts: eccube_servers
  tasks:
    - name: Create central authorized_keys directory
      file:
        path: /etc/ssh/authorized_keys
        state: directory
        owner: root
        group: root
        mode: '0755'
    
    - name: Deploy user keys
      copy:
        content: "{{ user_public_keys }}"
        dest: "/etc/ssh/authorized_keys/{{ ansible_user }}"
        owner: root
        group: root
        mode: '0444'

3. ファイル監視の実装

ハッシュ値を使ってファイルの変更を検知します。

#!/bin/bash
# /opt/scripts/check_authorized_keys.sh

KEYS_FILE="/home/eccube/.ssh/authorized_keys"
KNOWN_HASH_FILE="/opt/security/authorized_keys.hash"
CURRENT_HASH=$(sha256sum "$KEYS_FILE" | cut -d' ' -f1)

if [ -f "$KNOWN_HASH_FILE" ]; then
    KNOWN_HASH=$(cat "$KNOWN_HASH_FILE")
    if [ "$CURRENT_HASH" != "$KNOWN_HASH" ]; then
        echo "ALERT: authorized_keys file has been modified!" | \
        mail -s "EC-CUBE Security Alert" admin@your-domain.com
        logger "SECURITY: authorized_keys modified on EC-CUBE server"
    fi
else
    echo "$CURRENT_HASH" > "$KNOWN_HASH_FILE"
fi

cron設定

# 1時間ごとにチェック
0 * * * * /opt/scripts/check_authorized_keys.sh

緊急時の対応手順

もしauthorized_keysファイルが改ざんされた場合…

1. 即座にSSHアクセスを制限

# 一時的にSSHを無効化
sudo systemctl stop sshd

2. 不正なキーの削除

# immutableフラグを解除
sudo chattr -i ~/.ssh/authorized_keys

# 正規のキーのみに復元
sudo cp /backup/authorized_keys ~/.ssh/authorized_keys
sudo chattr +i ~/.ssh/authorized_keys

3. EC-CUBEアプリケーションの確認

  • 管理画面へのアクセスログ確認
  • 顧客データの整合性チェック
  • 決済ログの異常確認

4. パスワード変更とアクセス証跡の調査

まとめ

EC-CUBEサーバのセキュリティは、お客さんの信頼とビジネスの継続性に直結する重要な課題です。authorized_keysファイルの適切な管理は、その第一歩です。

皆さんのEC-CUBEサーバが安全に運用されることを願って、この記事が少しでもお役に立てれば幸いです。