検索
連載

memcachedをDDoS攻撃に使われないための基本的な心掛けOSS脆弱性ウォッチ(3)(1/2 ページ)

連載「OSS脆弱性ウォッチ」では、さまざまなオープンソースソフトウェアの脆弱性に関する情報を取り上げ、解説していく。今回は、memcachedを用いたDDos攻撃について詳しく見ていきます。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

 「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つが挙げられます。

  1. 認証が必要ないキャッシュシステムで、返答が、中断のないストリームになっていること
  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)。


図1

 格納後、「get testdata」とすると、「Key="testdata"」で格納されているデータを参照することができます(図2)。


図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)。


図3

図4

 今回は、1520bytesのデータを用意していたため、その他のヘッダも併せてUDP部分が1400bytesと166bytesの2つのパケットに分割されましたが、最初に準備しておくデータキーを選ぶことで大きさは好きなように変えられます(しかも認証なしです)。元のGetのサイズがヘッダを含めて1パケット64bytesなので、キャッシュから引き出すデータのサイズを大きくすればするほど、DoSの効果が高まることになります。

Copyright © ITmedia, Inc. All Rights Reserved.

       | 次のページへ
ページトップに戻る