序章

2018年2月27日、 Cloudflareは、memcached増幅攻撃の量が大幅に増加したという記事を投稿しました。 人気のあるオブジェクトキャッシングシステムであるMemcachedは、デプロイメント全体の応答時間とコンポーネントの負荷を軽減するために頻繁に使用されます。 増幅攻撃は、UDPを使用してパブリックネットワークに公開されたMemcachedデプロイメントを標的とします。

攻撃を軽減するための最善のオプションは、Memcachedをローカルインターフェイスにバインドし、UDPを無効にして、従来のネットワークセキュリティのベストプラクティスでサーバーを保護することです。 このガイドでは、これを行う方法と、選択した外部クライアントにサービスを公開する方法について説明します。

:この増幅攻撃がネットワークの安定性に影響を与える可能性があるため、DigitalOceanは、2018年3月1日の時点で、ポート11211へのパブリックインターフェイスでUDPトラフィックとTCPトラフィックの両方を無効にしました。 これは、データセンターの外部からのドロップレットへのアクセスに影響しますが、データセンターの内部からの接続は引き続き許可されます。

セキュリティを強化するために、同じデータセンター内のDroplet間でMemcachedアクセスが必要な場合は、Dropletのプライベートネットワークインターフェースにバインドし、ファイアウォールルールを使用して許可される送信元アドレスを制限すると、不正なリクエストを防ぐのに役立ちます。

UbuntuおよびDebianサーバーでのMemcachedの保護

UbuntuまたはDebianサーバーで実行されているMemcachedサービスの場合、/etc/memcached.confファイルをnanoで編集することにより、サービスパラメーターを調整できます。次に例を示します。

  1. sudo nano /etc/memcached.conf

デフォルトでは、UbuntuとDebianはMemcachedをローカルインターフェース127.0.0.1にバインドします。 127.0.0.1にバインドされたインストールは、ネットワークからの増幅攻撃に対して脆弱ではありません。 -lオプションがこのアドレスに設定されていることを確認して、動作を確認します。

/etc/memcached.conf
. . .
-l 127.0.0.1
. . .

リスニングアドレスが将来よりオープンになるように変更された場合は、UDPを無効にすることもお勧めします。これは、この特定の攻撃によって悪用される可能性がはるかに高くなります。 UDPを無効にするには(TCPは引き続き期待どおりに機能します)、下部またはファイルに次のオプションを追加します。

/etc/memcached.conf
. . .
-U 0

終了したら、ファイルを保存して閉じます。

Memcachedサービスを再起動して、変更を適用します。

  1. sudo service memcached restart

次のように入力して、Memcachedが現在ローカルインターフェイスにバインドされており、TCPのみをリッスンしていることを確認します。

  1. sudo netstat -plunt
Output
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name . . . tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 2383/memcached . . .

TCPのみを使用してmemcached127.0.0.1アドレスにバインドされているのがわかります。

CentOSおよびFedoraサーバーでのMemcachedの保護

CentOSおよびFedoraサーバーで実行されているMemcachedサービスの場合、/etc/sysconfig/memcachedファイルをviで編集することにより、サービスパラメーターを調整できます。次に例を示します。

  1. sudo vi /etc/sysconfig/memcached

内部では、-l 127.0.0.1オプションを使用して、ローカルネットワークインターフェイスにバインドし、同じマシン上のクライアントへのトラフィックを制限する必要があります。 これは、一部の環境では制限が厳しすぎる可能性がありますが、開始点としては適切です。

また、-U 0を設定して、UDPリスナーを無効にします。 プロトコルとしてのUDPは増幅攻撃に対してはるかに効果的であるため、後日バインディングポートを変更することにした場合、UDPを無効にすると、一部の攻撃の強度が制限されます。

OPTIONS変数内にこれらのパラメーターの両方を追加します。

/ etc / sysconfig / memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1 -U 0"

終了したら、ファイルを保存して閉じます。

変更を適用するには、Memcachedサービスを再起動します。

  1. sudo service memcached restart

次のように入力して、Memcachedが現在ローカルインターフェイスにバインドされており、TCPのみをリッスンしていることを確認します。

  1. sudo netstat -plunt
Output
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name . . . tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 2383/memcached . . .

TCPのみを使用してmemcached127.0.0.1アドレスにバインドされているのがわかります。

プライベートネットワーク経由のアクセスを許可する

上記の手順は、Memcachedにローカルインターフェイスでのみリッスンするように指示しています。 これにより、Memcachedインターフェイスが外部の関係者に公開されないため、増幅攻撃が防止されます。 他のサーバーからのアクセスを許可する必要がある場合は、構成を調整する必要があります。

アクセスを拡張するための最も安全なオプションは、Memcachedをプライベートネットワークインターフェイスにバインドすることです。

ファイアウォールでIPアクセスを制限する

その前に、ファイアウォールルールを設定して、Memcachedサーバーに接続できるマシンを制限することをお勧めします。 ファイアウォールルールを構成するには、クライアントサーバーのプライベートIPアドレスを知っている必要があります。

UFW ファイアウォールを使用している場合は、次のように入力して、Memcachedインスタンスへのアクセスを制限できます。

  1. sudo ufw allow OpenSSH
  2. sudo ufw allow from client_servers_private_IP/32 to any port 11211
  3. sudo ufw enable

エッセンシャルガイドを読むと、UFWファイアウォールの詳細を知ることができます。

Iptablesを使用している場合は、次のように入力することで基本的なファイアウォールを確立できます。

  1. sudo iptables -A INPUT -i lo -j ACCEPT
  2. sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  3. sudo iptables -A INPUT -p tcp -s client_servers_private_IP/32 --dport 11211 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  4. sudo iptables -P INPUT DROP

ディストリビューションが提供するメカニズムを使用して、Iptablesファイアウォールルールを保存してください。 Iptablesの詳細については、エッセンシャルガイドをご覧ください。

その後、Memcachedサービスを調整して、サーバーのプライベートネットワークインターフェイスにバインドできます。

Memcachedをプライベートネットワークインターフェイスにバインドする

ファイアウォールが設置されたので、127.0.0.1の代わりに、サーバーのプライベートネットワークインターフェイスにバインドするようにMemcached構成を調整できます。

UbuntuまたはDebianサーバーの場合は、/etc/memcached.confファイルを再度開きます。

  1. sudo nano /etc/memcached.conf

内部で、-l 127.0.0.1行を見つけ、サーバーのプライベートネットワークインターフェイスに一致するようにアドレスを変更します。

/etc/memcached.conf
. . .
-l memcached_servers_private_IP
. . .

終了したら、ファイルを保存して閉じます。

CentOSおよびFedoraサーバーの場合は、/etc/sysconfig/memcachedファイルを再度開きます。

  1. sudo vi /etc/sysconfig/memcached

内部で、OPTIONS変数の-l 127.0.0.1パラメーターを変更して、MemcachedサーバーのプライベートIPを参照します。

/ etc / sysconfig / memcached
. . .
OPTIONS="-l memcached_servers_private_IP -U 0"

終了したら、ファイルを保存して閉じます。

次に、Memcachedサービスを再起動します。

  1. sudo service memcached restart

netstatで新しい設定を確認して、変更を確認します。

  1. sudo netstat -plunt
Output
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name . . . tcp 0 0 memcached_servers_private_IP:11211 0.0.0.0:* LISTEN 2383/memcached . . .

外部クライアントからの接続をテストして、引き続きサービスにアクセスできることを確認します。 許可されていないクライアントからのアクセスもチェックして、ファイアウォールルールが有効であることを確認することをお勧めします。

結論

Memcached増幅攻撃は、ネットワークの状態とサービスの安定性に深刻な影響を与える可能性があります。 ただし、ネットワークサービスを実行するためのベストプラクティスに従うことで、攻撃を効果的に軽減できます。 このガイドの変更を適用した後は、サービスを引き続き監視して、適切な機能と接続が維持されていることを確認することをお勧めします。