Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.3.14. DDoS 攻撃からの memcached の保護

Memcached は、オープンソースの高性能分散メモリーオブジェクトキャッシングシステムです。これは、本来は汎用的なものですが、データベースの負荷を軽減することで、動的 Web アプリケーションのパフォーマンスを向上させるために主に使用されます。
Memcached は、データベース呼び出し、API 呼び出し、またはページレンダリングの結果から、文字列やオブジェクトなどの任意のデータの小さなチャンクを格納するメモリー内のキーと値のストアです。Memcached を使用すると、アプリケーションは、システムが必要以上にメモリーを搭載している部分からメモリーを取り出し、アプリケーションが必要未満のメモリーしか搭載していない領域へアクセスできるようにします。

memcached の脆弱性

2018 年に、パブリックインターネットに公開されている memcached サーバーを悪用することによる DDoS 増幅攻撃の脆弱性が発見されました。これらの攻撃は、トランスポートに UDP プロトコルを使用する memcached 通信を利用します。増幅率が高いため、攻撃は効果的です。数百バイトのサイズの要求は、数メガバイトまたは数百メガバイトのサイズの応答を生成することができます。この問題には CVE-2018-1000115 が割り当てられています。
ほとんどの場合、memcached サービスはパブリックインターネットに公開する必要はありません。このような露出には、リモートの攻撃者が memcached に保存されている情報を漏洩または変更できるなど、独自のセキュリティー問題があります。

memcached の強化

セキュリティーリスクを軽減するために、以下の手順のうち、お使いの設定に該当するものをできるだけ多く実行してください。
  • LAN にファイアウォールを設定してください。ローカルネットワーク内からのみ、memcached サーバーにアクセスできるようにする必要がある場合は、memcached が使用するポートへの外部トラフィックを許可しないでください。たとえば、許可されているポートのリストから、デフォルトで memcached によって使用されるポート 11211 を削除します。
    ~]# firewall-cmd --remove-port=11211/udp
    ~]# firewall-cmd --runtime-to-permanent
    特定の IP 範囲にポート 11211 の使用を許可する firewalld コマンドについては、「ゾーンを使用し、ソースに応じた着信トラフィックの管理」 を参照してください。
  • クライアントが本当にこのプロトコルを必要としない限り、/etc/sysconfig/memcached ファイルの OPTIONS 変数に -U 0 -p 11211 値を追加して、UDP を無効にしてください。
    OPTIONS="-U 0 -p 11211"
  • アプリケーションと同じマシンで単一の memcached サーバーを使用する場合、ローカルホストトラフィックのみをリッスンするように memcached を設定します。-l 127.0.0.1,::1 の値を /etc/sysconfig/memcachedOPTIONS に追加します。
    OPTIONS="-l 127.0.0.1,::1"
  • 認証の変更が可能な場合は、SASL (Simple Authentication and Security Layer) 認証を有効にしてください。
    1. /etc/sasl2/memcached.conf ファイルで、以下のように修正または追加します。
      sasldb_path: /path.to/memcached.sasldb
    2. SASL データベースにアカウントを追加します。
      ~]# saslpasswd2 -a memcached -c cacheuser -f /path.to/memcached.sasldb
    3. memcached のユーザーとグループがデータベースにアクセスできることを確認します。
      ~]# chown memcached:memcached /path.to/memcached.sasldb
    4. /etc/sysconfig/memcachedOPTIONS-S 値を追加して、memcached で SASL サポートを有効にします。
      OPTIONS="-S"
    5. memcached サーバーを再起動して、変更を適用します。
    6. SASL データベースで作成したユーザー名とパスワードを、お使いのアプリケーションの memcached クライアント設定に追加します。
  • memcached クライアントとサーバー間の通信を stunnel で暗号化します。memcached は TLS をサポートしていないので、回避策として、memcached プロトコルの上に TLS を提供する stunnel などのプロキシーを使用することができます。
    PSK (Pre Shared Keys) を使用するように stunnel を設定するか、ユーザー証明書を使用するように設定することもできます。証明書を使用する場合、認証されたユーザーのみがお使いの memcached サーバーにアクセスでき、トラフィックは暗号化されます。
    重要
    トンネルを使用して memcached にアクセスする場合は、サービスがローカルホストでのみリッスンしているか、ファイアウォールがネットワークから memcached ポートへのアクセスを阻止しているかを確認してください。
    詳細は、「stunnel の使用」 を参照してください。