orangeitems’s diary

クラウドではたらくエンジニアの日々の感想です。

GitHubとmemcachedとDDoS攻撃とAkamaiの件。きちんと理解する。

f:id:orangeitems:20180302132022j:plain

 

GitHubへの攻撃が話題

GitHubが過去最大級のDDoS攻撃を受けたことが話題です。

japan.cnet.com

GitHubが、過去最大規模とみられるDDoS攻撃を受けたことを明らかにした。
GitHubに対する最初の攻撃は最大1.35Tbpsに達し、2度目の攻撃は400Gbpsだった。つまり、これは記録されている限り過去最大のDDoS攻撃ということになる。これまで、最大の攻撃はおよそ1.1Tbpsだった。
GitHubは開発者向けブログで、GitHub.comがDDoS攻撃の影響で協定世界時28日17時21分から17時26分まで利用できなくなり、17時26分から17時30分までは断続的に利用不可となっていたことを明らかにした。

記事を理解するためには、以下のワードを知っておく必要があります。

・GitHubとは何か

・memcachedとは何か。

・memcachedの脆弱性とは何か。

・DDoS攻撃とは何か

・Akamaiとは何か。

それぞれをほどいていきたいと思います。

スポンサーリンク

 

GitHubとは何か

まず、Gitというソフトウェアを知る必要があります。プログラマーが中心に利用しているバージョン管理システムでLinuxの作者Linus Torvalds氏が始めたプロジェクトです。バージョン管理システムが保管しているデータを保管している場所をリポジトリと言います。リポジトリは自分の端末に保管すればローカルリポジトリ。サーバー上に保管すればリモートリポジトリと言います。

普段はローカルリポジトリを変更し、それをサーバーに同期すればリモートリポジトリが更新されるということで、作業中はネットワーク通信が不要で高速に開発ができるのが特徴です。

単純にGitだけでしたらそれだけなのですが、GitHubはWeb上に共有のリモートリポジトリを提供するサービスです。ローカルにあるGitのリポジトリを、Web上に共有できるのです。しかも原則公開であり、他のユーザーのリポジトリも読み取り専用でのぞくことができます。こちらをコピーして自分のリポジトリとして利用しさらに改変していくことができます。なお、有償でGitHubにもプライベートリポジトリ(公開されない)ものを作ることもできます。

もともとGitHubは、オープンソースのプログラムを共有し、バージョン管理をしやすくするためのサービスです。Linuxの作者が関わっているわけですから。たくさんのメジャーなオープンソースがGitHubで開発が進んでいます。したがって、今のインターネットはGitHubが支えていると言って過言ではないと思います。

 

memcachedとは何か。またこの脆弱性とは何か。

かなりのWebサービスの裏方として利用されているmemcached(メムキャッシュディー)について説明します。

Webサービスは、基本的にデータベースサーバーにデータを置きつつ、アプリケーションサーバーでアプリケーションを実行します。しかし、大量アクセスが来たときに毎回データベースに問い合わせをかけていたら非常にデータベースサーバーに負荷がかかります。たとえば、ECサイトでセールを行うときに大量に人々が同じページにアクセスするとします。問い合わせごとに商品の情報や在庫情報をデータベースに問い合わせたとしたらデータベースサーバー側がパンクしてしまうことになります。

そこでmemcachedというプログラムが活躍します。アプリケーションサーバーは一度データベースに問い合わせをしたらmemcachedに保管しキャッシュに保管します。そうすることによって、同じ問い合わせについてはデータベースに問い合わせをせずmemcachedに問い合わせを行うだけで済みます。

memcachedのキャッシュ領域はハードディスクなどの外部記憶装置は用いず、メモリに保持しますので高速であり軽量です。このプログラムが活躍しているおかけで、誰もが知っているようなWEBサービスは大量アクセスに備えることが可能になっているのです。

 

memcachedの脆弱性とは何か。

memcachedというプログラムは、UDPプロトコルの11211番ポート、およびTCPプロトコルの11211番ポートで通信を待ち受けています。一般的なTCPプロトコルだけではなくUDPプロトコルでも待ち受けているのが肝ですので覚えておいてください。

なお、脆弱性の発見によって2018/2/27の1.5.6から、UDPの方はデフォルトで無効になりました。

普通のWEBシステムにおいてはこんなポートはファイアウォールで閉じておくのですが、こともあろうか世の中には、開けっ放しになっているmemcachedも多いらしいのです。

攻撃者たちは、このUDP11211番ポートに無差別にスキャンをかけ、無防備なmemcachedを見つけ出します。このスキャンが増加したという報告が、JPCERT/CCという日本のセキュリティ機関から報告されています。

memcached のアクセス制御に関する注意喚起

f:id:orangeitems:20180302123905p:plain

上記のように、まずは攻撃者が、無防備なmemcachedを洗い出しました。

で、このmemcachedですが、UDPでmemcached getという要求を受け取ると、メモリから1400バイトまでの長さの複数のパケットで送信先に返されます。1つの要求自体は数バイトですので数十倍数百倍数千倍またはそれ以上の大きさになって送信者に返されることとなります(複数ですので、もしメモリーに保管していた領域が大きいともっと大きくなります)。

かつ、UDPパケットは送信者を偽装できますので、何をするかというと、攻撃したい相手のIPアドレスを送信者にして、無防備なmemcachedにget要求を投げつけるのです。これを何度もやると投げつけた量の数十倍数百倍数千倍になって偽装された送信者へ投げつけられることとなります。たとえば、1つのmemcachedだけで1Gbpsの攻撃となったという報告もあります。

また、なぜTCPではなくUDPが問題なのかについて触れておきます。TCPだと、通信を確立するまでに、「コネクション」という通信路を確立しないといけません。コネクションのない状態では通信を開始することができませんので、大量のパケットは送付できません。UDPの場合は、送信先までは無条件で送付することができます。たくさんのパケットを投げつけられると通信の帯域が全て使い果たされてしまい、通信自体ができなくなってしまいます。これを「UDP flood攻撃」と呼んでいます。

今回のGitHubへの攻撃はこのUDP flood攻撃です。しかも送信先のアドレスをGitHubのIPアドレスに偽装した攻撃です。

このように、

・memcachedをインターネットに無防備にさらしているサーバー管理者がいたこと

・これを攻撃者が探し出し、大量にmemcachedにget要求を投げつけるとともに、送信先をGitHubに書き換えた

というメカニズムで攻撃が成功したのです。

 

DDoS攻撃とは何か。

DDoS攻撃については結構有名なので概略だけをご説明します。DoSとは「分散型サービス拒否攻撃 (distributed denial of service attack」の略語です。サービスに必要のない要求を次々と投げつけるのですが、これを1つの端末からではなくたくさんの分散された端末から投げつけます。

投げつける端末は、ウイルスで乗っ取ったり、インターネット上に無防備に公開されているサーバーなどです。今回はこの後者に当たります。

攻撃者は、スキャンしてあらかじめmemcachedがオープンになっているサーバーのリストを手元におき、そこに対して偽装されたget要求を大量に投げつけたのです。結果として、GitHubの特定のIPアドレスにUDPパケットが大量に投げつけられ、サービス停止まで及んだということになります。

 

Akamaiとは何か。

アカマイ、正式にはアカマイテクノロジーズですが、IT業界では有名なアメリカの有名な企業です。コンテンツデリバリーネットワークという超巨大なインターネット通信網保持していて、大きなWEBサイトや、大人気のスマホゲームはこちらのサービスを使っていることが多いです。

GitHubは、大量のUDPパケットを、このAkamaiのサービスに全て転送しました。これにより攻撃は成立しなくなり、攻撃者が諦めたことによって一旦攻撃はやんだという状況です。

GitHubのファイウォールで閉じればいいではないかとお思いでしょうが、このようなDDoS攻撃の場合、送信元のIPアドレスはたくさんあり閉じることができません。また、そもそも最大1.35Tbpsの通信を投げつけられては、ファイアウォールの前の設備で通信ができなくなってしまいます。

 

まとめ

まず、memcachedを開けっ放しにしていないか、サーバー管理者は早急にファイアウォールを見直してください。また、バージョン1.5.6にバージョンアップし、そもそもUDPを使わないようにmemcachedをバージョンアップすると良いでしょう。

また、アクセスの仕方によっては、メモリの中身も盗まれるため情報漏えいにもつながります。下記のJPCERT/CCや、さくらインターネットの資料をよく理解し、対策をお願いします。

memcached のアクセス制御に関する注意喚起

【重要】memcachedのアクセス制御に関する注意喚起 | さくらインターネット

 

追記:

艦これ・グラブル・プリコネも。memcachedによるDDoS攻撃か? - orangeitems’s diary

memcachedを踏み台としたUSB flood攻撃が国内外で継続中。関係者はインフラの見直しを。 - orangeitems’s diary

 

サイバーセキュリティ2020 脅威の近未来予測 (NextPublishing)