前書き

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

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

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

UbuntuまたはDebianサーバーで実行されているMemcachedサービスの場合、たとえば、「+ nano 」を使用して「 / etc / memcached.conf +」ファイルを編集することで、サービスパラメーターを調整できます。

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

. . .

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

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

sudo service memcached restart

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

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

TCPのみを使用して、「+ 127.0.0.1+」アドレスにバインドされた「+ memcached +」が表示されます。

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

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

sudo vi /etc/sysconfig/memcached

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

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

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

/ etc / sysconfig / memcached

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""

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

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

sudo service memcached restart

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

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

TCPのみを使用して、「+ 127.0.0.1+」アドレスにバインドされた「+ memcached +」が表示されます。

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

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

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

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

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

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

sudo ufw allow OpenSSH
sudo ufw allow from /32 to any port 11211
sudo ufw enable

UFWファイアウォールの詳細については、https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands [essentials guide]をご覧ください。

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

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

ディストリビューションが提供するメカニズムを使用して、Iptablesファイアウォールルールを保存してください。 Iptablesの詳細については、https://www.digitalocean.com/community/tutorials/iptables-essentials-common-firewall-rules-and-commands [essentials guide]をご覧ください。

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

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

ファイアウォールが設置されたので、Memcached設定を調整して、「+ 127.0.0.1+」ではなく、サーバーのプライベートネットワークインターフェースにバインドできます。

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

sudo nano /etc/memcached.conf

内部で、「-l 127.0.0.1」行を見つけて、サーバーのプライベートネットワークインターフェイスに合わせてアドレスを変更します。

/etc/memcached.conf

. . .
-l
. . .

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

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

sudo vi /etc/sysconfig/memcached

内部では、MemcachedサーバーのプライベートIPを参照するように、変数「+ OPTIONS 」の「 -l 127.0.0.1+」パラメーターを変更します。

/ etc / sysconfig / memcached

. . .
OPTIONS="-l  -U 0"

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

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

sudo service memcached restart

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

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

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

結論

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