序章

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は、この特定の攻撃によって悪用される可能性がはるかに高くなります。 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 . . .

君は見るべきだ memcached にバインドされています 127.0.0.1 TCPのみを使用するアドレス。

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 . . .

君は見るべきだ memcached にバインドされています 127.0.0.1 TCPのみを使用するアドレス。

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

上記の手順は、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をプライベートネットワークインターフェイスにバインドする

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

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

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