フリーソフトウェアのメモリキャッシュシステム、Memcachedが使っているポートが 意図せず公開されていることに起因する問題 (CVE-2018-1000115)が2018年2月末より話題となっています。また、この脆弱性を調査するスキャン行為や脆弱性を悪用した過去最大規模のDDoS攻撃が観測されていることが報道されています。ここでは本脆弱性について考え、特に大きな話題となっている「公開されているMemcachedを悪用したDDoS攻撃」について解説していきます。
本記事を執筆している私自身がログの監視、分析を担当しているお客様が予告付きのDDoS攻撃のターゲットにされた事があります。予告されていた事もあり、事前に対策は立てていたものの、実際に攻撃が始まってしまうと、あとはサーバのリソースやネットワーク帯域の使用量を示すモニターを凝視し「耐えてくれ」「しきい値を超えないでくれ」(しきい値を超えてしまう場合、自らでサービス提供を停止する事も考えていたため)と祈る状況になりました。予告もあり、対策を考えていたとしても、可用性の観点において対応が難しいのがDDoS攻撃だ、ということを痛感しています。
目次
1. Memcachedが公開されるべきでない理由
Memcachedは、以下の理由から通常の利用においてインターネットに公開されるべきではありません 。
Memcachedは主に、Webアプリケーション-DB間の処理のボトルネックを解消し、Web高速化を実現する目的として使われています。そのため、本来はローカルなシステム、またはプライベートなネットワークで利用されるべきアプリケーションです。したがって余程の理由がない限り、外部公開がされる必要がないシステムです。しかし、Memcachedを導入した一部のシステムについては、残念ながら設定ミスなどによってサービスが外部に公開されてしまっています。
インターネット上で公開されているシステムの情報を収集して公開をしているSHODANでもその一端が伺えます。この検索結果はMemcachedで使われるデフォルトのポート番号(11211番)で検索した結果です。実際にはデフォルトのポート番号以外で運用されているケースもあるため、実数はさらに多いと考えられます。
(参照元:http://www.shodan.io)
次にMemcachedが外部に公開されている事で想定されるリスクについて大きく二つ解説します。
2. Memcachedが外部に公開されていることで想定されるリスク
Memcachedが外部に公開されていることで想定されるリスクを、インターネット経由で任意の攻撃者に機密情報が窃取される可能性のある機密性リスク、報道などで話題になっているDDoS攻撃に利用される完全性・可用性リスクの2点に分解して解説します。
2.1. キャッシュされているデータを外から参照される問題(機密性リスク)
Memcachedは簡易なコマンド操作でキャッシュされている内容を閲覧することが可能です。そのため、Memcachedに処理の内容がキャッシュされている状態である場合、Memcachedにアクセスできるのであれば当該情報を閲覧できる可能性があります。そこに機微な情報が含まれている場合、重大な事故につながる恐れがあります。
以下に、上記の攻撃がどのように実施されるかを示します。下図はMemcachedに対してセットさせるデータです。このデータはMemcachedの本来の動作によってMemcachedにキャッシュされます。
上記データをMemcachedに送信した後、Memcachedに対して外部のシステムからアクセスし、コマンド操作により情報を参照したのが下図になります。
上図は、送信されたデータが外部からのアクセスにより閲覧可能な状態であることを示してします。今回の検証では少量のデータでしたが各Keyには最大1MBのValueを格納可能です。このことから、もしWebアプリケーションによってMemcachedにアプリケーションユーザの個人情報などの機微情報がキャッシュされていた場合、インターネット経由で容易にそれらの情報が閲覧されるおそれがあることがわかります。
上記で説明した、任意のデータをセットして参照する一連の動作は、DDoS攻撃にも悪用される動作です。
2.2. DDoS攻撃への悪用(完全性・可用性リスク)
今回、一部で被害が出ている事が明らかとなっているのが、意図せず公開しているMemcachedがDDoS攻撃に悪用されるケースです。もっとも大きな被害を被ったと見られるのがGithubのケースです。Githubの開発者向けblogでは、この脆弱性が悪用されたと見られるDDoS攻撃により、2018年2月28日17:21~17:30(グリニッジ標準時)の間にピーク時で1.35Tbps、1.269億パケット/秒を観測したと記されています(February 28th DDoS Incident Report)。
なぜ攻撃者はこのような”桁外れ”なDDoS攻撃を実行できたのか。その理由は、NTP (ネットワーク・タイム・プロトコル)やDNS(ドメイン・ネーム・システム)を悪用した既存のDDoS攻撃手法とも共通する特性にあります。以降ではDDoS攻撃に悪用された特性について説明をします。
3. DDoS攻撃に悪用されるMemchachedの特性とは?
DDoS攻撃について簡単に調査すると、よく目にするものは「UDP(ユーザ ・データグラム・プロトコル)を使ったDDoS」、「UDPの特性はDDoSに使われる」といった説明が散見されます。しかし、DDoS攻撃を行う攻撃者は「UDPだから」といった理由だけで攻撃に利用するサービスを選定しているわけではありません。攻撃者は攻撃に悪用するサービスを選定する際に、同様に通信量の増幅率も参考にしています。そして、これがMemcachedが最近の”桁違いのDDoS攻撃”に利用されたもう一つの理由です。
例えば、2014年に観測されたNTPのmonlist機能を悪用したケース(ntpd の monlist 機能を使った DDoS 攻撃に関する注意喚起, JPCERT/CC 2014年1月15日)においても、今回のMemcachedにおいても共通して言えるのが、簡易かつ小サイズのリクエストパケットに対して、レスポンスパケットが大幅に大きくなるといった通信量の増幅率が高いという特性があります。そして、この特性はMemcachedがDDoS攻撃に悪用された最も大きな理由です。
下図は検証環境において、実際にMemcachedをUDPを用いて通信を行ったケースです。下図では青い画面の内容をMemcachedサーバに送信、右側(黒い画面)がそのパケット(疑似攻撃)を閲覧した結果です。この結果では、送信側のパケット長は100バイトに対し、受信側のパケット長は1051バイトとなり送受信対比の増幅率は約10倍 となります。今回の検証では一番簡易な事例を使いご説明しましたが、Memcachedを悪用したDDoS攻撃の特徴は、攻撃者が事前に準備を行う事で増幅率を自在に上げる事が可能であるという点です。2.1にも記載をしましたが、Memcachedにおいては各Key毎に最大1MBのデータを格納することができます。この特性を悪用することで、大幅な通信量の増幅を実現、攻撃にインパクトをもたらすことになったと考えられます。
この特性を悪用し、かつUDPの仕様(UDPはコネクションレス型プロトコルであるため、コネクションを確立する必要がなく、送信元が偽装しやすいためDoS攻撃に悪用しやすい)を悪用する事で、攻撃のターゲットに対して膨大なパケットを送信しつつ、実際の送信元(=攻撃元)の隠ぺいを実現できます。これは攻撃者にとって都合が良い、と言っても過言ではないでしょう。そしてこれが、インターネットのセキュリティの歴史上で繰り返されてきた事でもあります。
4. なぜDDoS攻撃が行われるのか?
DDoS攻撃が行われる要因は大きく二つに分けられると考えられます。
4.1. 社会的・政治的な主張の手段としてのDDoS
近年、散発的に見られるのが、社会的・政治的な主張の手段としてDDoS攻撃が行われるケースです。ハクティビストによる攻撃もその一つと考えられます。このケースでは意見に賛同する者を募り、インターネット上でツールや手段を共有し、日時を決めて攻撃を行うケースが多く観測されています。ツールとしてHOIC/LOICと呼ばれるストレスツールや、Slowlorisと言ったツールを使用してSlow DoS Attackを仕掛けるケースが報告されています。
4.2. 経済的な手段としてのDDoS
近年、ランサムウェアによる被害が広く報告されていますが、DDoS攻撃でも金品を要求する言ったケースが報告されております。今回のMemcachedの脆弱性を悪用したケースでも、パケット内にメッセージを埋め込んだケースが存在していたとの報道がされています(Hackers Are Stuffing DDoS Attacks with Monero Ransom Notes )。このケースでは攻撃者からのメッセージを送りつける目的で、2.1に示した任意の文字列をMemcachedにキャッシュさせる機能を悪用している可能性が高いと考えられます。
その他、愉快犯と思われるケースやオンラインゲームにおいてプレイヤーを妨害する手段としてDDoSが使われるといったケース等が報告されています。
5. DDoS攻撃が成立してしまう原因と対策
今度はDDoS攻撃の被害者の観点で考えてみましょう。DDoS攻撃が成立してしまう原因は大きく二つあります。なお、DoSという観点では、アプリケーションに存在する脆弱性を突く事でDoSが成立してしまうケースも対象に含まれますが、今回は説明の対象から省かせていただきます。
5.1. ネットワーク帯域が枯渇することによりDoSが成立
5.1.1. 概要
今回のMemcachedを悪用したDDoS攻撃も対象に含まれます。ネットワーク帯域を埋め尽くす事で余剰帯域を無くし、DoSを成立させます。
5.1.2 対策
対策の基本は、お客様ネットワークに到達するDDoSトラフィックが極小化される事です。それを実現するためにはISP(Internet Service Provider)が提供するDDoS対策サービスを利用する事を対策・緩和策の選択肢として検討をしていただく必要がある考えます。またCDN(コンテンツ・デリバリ・ネットワーク)の活用も一つの対策・緩和策として挙げられます。
5.2. サーバ・ネットワーク機器のリソースが枯渇する事によりDoSが成立
5.2.1. 概要
これはTCPを使用するアプリケーションで成立するケースが殆どです。 代表的な攻撃手法にSyn Floodが挙げられます。また単純に大量のコネクションを確立することでもDoSが成立します。原因として、TCPはセッション情報をメモリ上に保持する挙動にあります。膨大なリクエストが来る事でリソースが枯渇、またはアプリケーションの制限値に達してDoSが成立してしまいます。
5.2.2. 対策
WAF(Web Application Firewall)やIPSを活用する事で不審な通信を検知、ブロックする他、負荷分散(サイトローカルでの負荷分散やCDN(Contents Delivery Network等)が緩和策として挙げられます。
マカフィー製品ではNSP(Network Security Platform)が対策製品となります。NSPはシグネチャベースで不審な通信を検知・ブロックすると言った一般的なIDS/IPS機能のほかに、Syncookie機能によるSynflood対策、しきい値を設けて通信を制御するConnection Limiting Policies機能、QoSによる通信の優先制御、自己学習機能(通信パケット量の偏差を自動的に学習して、異常値を示した場合にリアルタイムにアクションを行う機能)も可能となっており、これら技術を活用することで、攻撃の検知及び緩和が可能です。
(Connection Limiting Policies機能の設定画面)
6. まとめ
システムをDDoS攻撃に悪用させないようにするための根本的対策は、不要なサービスを公開しない事です。その事を確認するためにも、公開ネットワークに対する監査は欠かすことができないと考えます。
DDoS攻撃のターゲットとなってしまった場合については、金銭的な価値尺度にも依りますが、安価に効果的な対策を採る事は困難であるというのが現実的な回答です。
DDoS対策においては保護すべき資産がどの程度の価値があり、DDoSによりサービスが提供できない状況となった場合、どの程度の経済的な損失が発生するかによって、対策の実施可否判断をするべきだと考えます。場合によっては対策は不要(=リスクを受容する)とする事も、経営判断としては必要です。
DDoS攻撃対策において、悪用される側、攻撃を受ける側、どちらも計画的な対応が重要である、という事を改めて記しておきたいと思います。
著者:マカフィー株式会社 プロフェッショナルサービス
シニアセキュリティコンサルタント
小川 泰明