AWSにおけるJPCERT/CC発行「memcachedのアクセス制御に関する注意喚起」の対応方法
2018/03/01更新 Amazon EC2に11211/tcpの制限の説明を追加
ども、大瀧です。
昨日、JPCERT/CCよりmemcachedのアクセス制御に関する注意喚起が発表されました。
ここでは、インターネットにおいて11211/udpポートへのアクセストラフィックが増加しており、これに応答するサーバーが攻撃の踏み台にされたり、memcachedが保持する情報が漏洩する可能性を指摘しています。 memcachedは、一般的にはWebアプリケーションのサーバー間でキャッシュデータを保持する目的で利用するためインターネットにポートを開放する必要はありません。またUDPのほかにTCPもサポートし、TCPの方が良く使われますしIPアドレス偽装にも耐性があるので、TCPを利用することが推奨されます。
AWSでの対応
AWSでmemcachedサーバーを立てるためには、以下のサービスを利用します。
- Amazon ElastiCache
- Amazon EC2
それぞれについて、アクセス制御の考え方と対応方法を示します。
Amazon ElastiCache
ElastiCacheは、memcacheないしRedisクラスタを提供するマネージドサービスです。通常のクラスタ構成ではインターネットからのアクセスが不可能な構成(プライベートネットワークであるAmazon VPC内に配置され、グローバルIPを持たない)ため、今回の注意喚起の対象ではなく対応は必要ありません。開発や検証目的でインターネットからのアクセスをNATで転送する構成がドキュメントにはあるので、この構成になっていないかを確認すれば十分でしょう。
ちなみに、注意喚起にあるUDPでのアクセスは特にドキュメントに記述にありませんが手元で検証した限りではUDPアクセスが可能でした。ドキュメント通りにクラスタを構成する限りではセキュリティグループに11211/udpの許可ルールは入らないため、実害はないと思われます。
Amazon EC2
EC2はLinuxやWindowsの仮想マシンを提供するサービスで、仮想マシンにmemcachedを導入することでmemcachedサーバーとして稼働させることができます。ElastiCacheと同様、外部からのアクセスはセキュリティグループによる制御が可能ですので、インターネットからの11211/udpポートを許可リストから外せばOKです。また、memcachedの起動オプションからUDPを無効にする対応(-U 0
)も有効でしょう。
11211/tcpポートもインターネットへの公開は控え、想定するクライアントのIPアドレスからの接続のみを許可するようセキュリティグループを設定しましょう。memcachedにはクライアントの認証/認可の仕組みがありませんので、「接続できる=データの走査や追加/削除が可能」ということになります。
memcached本家の対応
以下のTwitterの様子から、最新バージョン(1.5.6)ではデフォルトでUDPが無効になる変更が入ったようです。
memcached 1.5.6 is out: https://t.co/xagoejVYU9 - disables UDP by default. I'm surprised it took this long for someone to abuse it :/ Please upgrade, or disable UDP (`-U 0`). Please do not expose cache to internet, and so on.
— dormando (@dormando) February 27, 2018
月曜日のDDoS攻撃を検知してすぐにdefalutの挙動について議論できないか、とメール送ったんだけど、
-l localhost が効果果が低いと思われる
-U 0 の方がきっと効果がある
という意見をもらった上に、最速でリリースしてくれて、Dormandoさんには超感謝してる— こたまご (@chibiegg) February 28, 2018
@chibieggさん、@dormandoさんGood Jobですね!
まとめ
memcachedのアクセス制御に関する注意喚起について、11211/udpポートをインターネットに公開しないための対応方法をご紹介しました。意図して公開する構成は稀だと思いますので、設計や設定にミスがないから今一度確認いただければと思います。