memcachedをDDoS攻撃に使われないための基本的な心掛け:OSS脆弱性ウォッチ(3)(1/2 ページ)
連載「OSS脆弱性ウォッチ」では、さまざまなオープンソースソフトウェアの脆弱性に関する情報を取り上げ、解説していく。今回は、memcachedを用いたDDos攻撃について詳しく見ていきます。
「OSSセキュリティ技術の会」の面和毅です。本連載「OSS脆弱性ウォッチ」では、さまざまなオープンソースソフトウェア(OSS)の脆弱(ぜいじゃく)性に関する情報を取り上げ、解説しています。
2018年2月下旬に、JPCERT/CCからPort 11211に対するアクセスが急増しているとして、注意喚起情報が出されました(参考)。
Port 11211は、「memcached」が使用しているポートです。JPCERT/CCからは「memcachedを踏み台にして悪用したと見られるDDoS攻撃が報告されている」との情報も出ています。より詳しい動きに関しては、アカマイのブログに情報が出ています。また、PoCコードも出ています(PoCコードは公開されていますが、ここでの提示は控えさせていただきます)。
今回は、このmemcachedを用いたDDos攻撃について詳しく見ていきます。
memcachedについて
memcahedは、汎用の分散型メモリキャッシュシステムです。DBと組み合わせてキャッシュとして使用することにより、Webサイトのレスポンスが向上します。
memcachedに関しての詳細は、@ITの記事などに詳しく載っていますので、そちらを参照するといいでしょう。
memcachedがDDoS攻撃に使われた理由
今回、memcachedがDDoS攻撃に使われた主な理由として下記の2つが挙げられます。
- 認証が必要ないキャッシュシステムで、返答が、中断のないストリームになっていること
- デフォルトで、UDP、TCPの両方でListenしていること
以下、実験環境にはDebian 9(Stretch)のmemcached 1.5.1-1を使用しています。
【1】memcachedのキャッシュ機能を試す
memcachedは、キャッシュへのSet/Getを行う際に認証する必要がないため、大きいサイズのデータをキャッシュしておけば、1つのリクエスト(Get)を行うだけで、大きいサイズのデータをストリームで何度でも引き出すことが可能になっています。
まず、実験環境(172.16.148.145)のPort 11211(memcached)に、外部(172.16.148.1)からtelnetで接続します。
memcachedでは、指定したKeyでデータを格納する際に下記のように入力します。
set [Key] [フラグ:1:zip圧縮/0:非圧縮] [キャッシュの有効期間] [サイズ]
データを取得するには、下記のように入力します。
get [Key]
テストとして、「aaa……」ばかりのファイル(1519bytes)を用意して、「Key = "testdata"として格納します。ここでは、非圧縮(0)にし、有効期間は0(期限切れなし)にしています(図1)。
格納後、「get testdata」とすると、「Key="testdata"」で格納されているデータを参照することができます(図2)。
netcatでUDPを使って「Key="testdata"」のデータをgetします。下記コマンドを実行します(参考)。
echo -en "\x00\x00\x00\x00\x00\x01\x00\x00get testdata\r\n" |nc -q1 -u 172.16.148.145 11211
memcachedのサーバの方でパケットをキャプチャーしたものを図示します。データがUDP内での最大値(1400bytes)で分割されたパケットが見えます(図3)(図4)。
今回は、1520bytesのデータを用意していたため、その他のヘッダも併せてUDP部分が1400bytesと166bytesの2つのパケットに分割されましたが、最初に準備しておくデータキーを選ぶことで大きさは好きなように変えられます(しかも認証なしです)。元のGetのサイズがヘッダを含めて1パケット64bytesなので、キャッシュから引き出すデータのサイズを大きくすればするほど、DoSの効果が高まることになります。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Cassandra、Redis、memcachedに潜む脆弱性
ここからは、MongoDB以外のNoSQLを使うアプリケーションのセキュリティについて簡単に説明します。 - pgmemcacheからmemcachedのデータを操作する
前編では、memcachedそのものの仕組み・導入方法、PostgreSQLとの連携手順を紹介しました。後編の今回は、いよいよpgmemcacheを使ったmemcached操作を実践していきます。memcachedおよびpgmemcacheについては前編を参照ください。以降の解説は前編で設定した環境を前提にしています。 - イネーブラ型NoSQLのまとめ(Memcached、Redis、Scalaris、Tokyo Cabinet/Tyrant編)
「あぁ、知ってるよ。アレね」と言っておきたいNoSQLプロダクトの特徴をざっと紹介。今回はオンメモリもオンディスクもひっくるめて「イネーブラ型」のメジャーどころを紹介していく。