先日、JPCERT/CC からmemcached のアクセス制御についての注意喚起が出ていたので、何かなと思ったらあちこちで大きな問題になっていたようです。
memcached の設定については基本的にfirewall でブロックしていて、ネット越しにはアクセスできないようにしている場合が多いと思いますが、改めて設定を見直しておきたいところです。
memcached の設定によっては、 意図せずインターネットからアクセス可能な状態になっており、スキャンに応 答している可能性があります。このような場合に攻撃の踏み台にされたり、 memcached が保持する情報へアクセスされたりする可能性があります。JPCERT/CC では、memcached を踏み台として悪用したとみられる DDoS 攻撃の報告を受け 取っています。
† 参考
Cisco の Cisco Talos Security Intelligence and Research Group が Memcached の脆弱性について調査したレポートが興味深かったのでメモ。
Memcached はウェブサーバのプライベートなキャッシュとして使われていることが多く、一般的な利用方法において、ウェブサーバの外部からアクセスする必要はありません。ちなみにこのサーバにも Memcached は使われていますが、外部からのアクセスを防ぐために IP アドレスは 127.0.0.1 のみをリッスンするようにしてあります。
この報告を読んで驚くのは世界で 10 万を越えるサーバがネット越しにアクセス可能(このうち 3,607 件は日本のもの)であり、ほとんど認証は利用されておらず、リモートからのコード実行が可能な脆弱性を持ったまま運用が続けらているということです。Talos はメールで管理者に注意喚起を行ったようですが、ほとんど効果はなかったというのも興味深いところです。
不用意にパッチ当てをするとデグレードするというのは分かるのですが、不用意に外部にサービスが公開されていないかどうかについては最低限注意を払いたいものです。
Memcached – 不適切なパッチ適用と脆弱なサーバについての事例
インターネット上には多数の Memcached サーバが簡単にアクセスできる状態で存在しているということです。2 番目の結論は、認証が有効化されているのは 4 分の 1 未満であり、認証が有効になっていないサーバはリモート コード実行の脆弱性がなかったとしても悪用に対して完全にオープンな状態であるということです。3 番目は、既存のサーバへのパッチ適用がなかなか行われないことから、私たちが報告した脆弱性によって、多数のサーバが侵害のリスクに対して完全に無防備な状態になっているということです。そして 4 番目は、認証が有効になっているサーバでもパッチが適用されているものはわずかであるということです。
† 参考
memchaced のユーティリティといえば、昔、ストアされている Key-Value の一覧をダンプするスクリプトを書いたり、cacti で統計のグラフを書いたりしていましたが、最近はさすがに便利なユーティリティを書いてくれている人もいるだろうと思って探してみたら phpMemcachedAdmin というプロジェクトを見つけたのでインストールしてみました。
Graphic stand-alone administration for memcached to monitor and debug purpose
This program allows to see in real-time (top-like) or from the start of the server, stats for get, set, delete, increment, decrement, evictions, reclaimed, cas command, as well as server stats (network, items, server version) with googlecharts and server internal configuration
You can go further to see each server slabs, occupation, memory wasted and items (key & value).
インストールは簡単で、サイトにあるとおり、下記の4ステップでインストールすることができました。
設定はウェブ画面から行えるので、インストールさえ出来てしまえばすぐに使い始めることができます。
PHP から memcached にアクセスするためには普通は PECL のmemcache かmemcached のどちらかを使うことになると思います。末尾にdがついてるかついていないかという1文字の違いで紛らわしいのですが違うパッケージです。
以前 memcached を使い始めた頃は前者のライブラリを使っていたのですが、今回は後者のライブラリをインストールしてみます。PECL memcached は memcache プロトコルの実装をlibmemcached を使って実現していることが特徴のようです。
以下、インストールメモ。
[pecl memcached をインストール の続きを読む]Amazon Web Services がAmazon ElastiCache という Memcached 互換のサービスを始めたようなのでメモ。
現在はUS East リージョンでしか使えないようですが、今後数ヶ月で東京を含む各リージョンでサービスが開始されるようです。
Amazonも標準的なサービスは出尽くしたのかなと思っていましたが、まだまだ隠し球がありそうな感じですね。
アマゾン ウェブ サービスがAmazon ElastiCacheを発表
Amazon.com(NASDAQ: AMZN) の子会社であるアマゾン ウェブ サービス(以下AWS)は、本日、AWSクラウド上で稼働するウェブアプリケーションのインメモリ・キャッシュを容易にデプロイ、運用、スケールできる新ウェブサービス、Amazon ElastiCacheを発表しました。この新しいサービスにより、お客様は比較的遅いディスクベースのデータベースに頼ることなく、クラウド上に最適化された高速なインメモリ・キャッシュから情報取得が可能となるため、ウェブアプリケーションの性能を改善できます。Amazon ElastiCacheは、一般に使用されているメモリ・オブジェクト・キャッシング・システムであるMemcachedと互換性があります。そのため開発者が今日、既存のMemcached環境で使用しているコード、アプリケーション、ツールは、このサービスとシームレスに動作します。それにより、移行プロセスが簡易なものの統合プロセスを簡略化します。
先日のmixiの障害の原因についてはコーポレートサイトで「本アクセス障害は、『mixi』のキャッシュサーバーの負荷が高まった際に、一定の条件で異常な動作を示すことが原因でございます。」という簡単な概略だけが発表されていましたが、mixi Engineers’ Blogで具体的なmemcachedの不具合についての情報が公表されてきています。
mixi Engineers’ Blog mixi大規模障害について
現状判明しているのは以下の点です
* memcachedに大量の接続・切断を行うとmemcachedプロセスが突然終了することがある
* memcachedには異常時に終了するフローもあるが、同時に出力されるはずのエラーログは出ていなかった
* coreも出力されていなかった
これがmemcachedのバグなのか、libeventに依存するものなのか、それ以外の要因によるものなのかはわかりませんが、検証コードもついていますし、このような情報公開によって結果的にmemcachedの信頼性向上につながれば素晴らしいことだと思います。
Javaでmemcacheの互換サーバを書いてる人をみつけました。
ハタさんのブログ(復刻版) : JavaCC で memcache text protocol の BNF(と、なんちゃってmemcache互換サーバ)
その後の実装状況については「ハタさんのブログ(復刻版) : 過去ログ : memcache」で追っていけますが、NIO使ったりすることでオリジナルのmemcacheに近いパフォーマンスをたたき出したりしてるようなので、今後どのようになっていくのかちょっと楽しみ。
memcachedの1.4.3がリリースされていました。いつの間にかサイトも新しくなっていますね。
「memcached 1.4.3」リリース 新たにSASL認証をサポート:CodeZine
バージョン1.4.3ではクリティカルなバグを含む修正がされているほか、新たにSASL認証をサポート。memcachedがインストールされている環境は、部外者を簡単に遮断できるようなコントロールされた環境ばかりではないため、今回のバージョンから新機能として導入された。
今回の目玉はSASLで認証できるようになったことなんですね。memcachedはアクセス制限を持っていなかったので、これまではIPで接続元を絞るくらいしかアクセス制御ができなかったので、認証ができるようになると環境によってはかなり便利に使えそうです。
久しぶりにmemcachedをダウンロードしようとしたら、以前から実装が進められていると言われていたバイナリプロトコルを実装したmemcached 1.4がリリースされていました。
ReleaseNotes140 - memcached - Release Notes for Release 1.4.0 - Project Hosting on Google Code
Binary Protocol
A new feature that brings new features. We now have goodness like CAS-everywhere (e.g. delete), silent, but verifiable mutation commands, and many other wonders.
Note that the original protocol is not deprecated. It will be supported indefinitely, although some new features may only be available in the binary protocol.
まだ、phpでサポートされているクライアントがないので実践投入はしばらく先になりそうですが、これによってパフォーマンスが上がるのかどうか誰かベンチマークをとってくれないかなぁ。
memcachedは便利なんですが、専用のクライアントがないのでどんな項目がどれくらいキャッシュされているかどうかを簡単に知る方法はないようです。ということで、memcachedでどんな内容がキャッシュされているか確認するためのスクリプトを作ってみました。
[memcachedの内容を確認するには の続きを読む]