連載
» 2013年12月24日 18時00分 公開

セキュリティ業界、1440度(2):PacSec 2013 レポート 2日目〜Chromeの守り方、マルウェアの見つけ方 (2/3)

[鈴木秀一郎,@IT]

ChromeをどうやってPwnする? 「How to win Pwnium」

 この日、個人的に興味を引いた発表はHow to win Pwniumでした。PwniumとはGoogleのChromeチームが開催している、ChromeやChrome OSに対するハッキングコンテストで、Pwn2Own同様、成功すると賞金がもらえるというものです。この発表では、Chromeの開発者であるイアン・ビアー氏が、Pwniumで成功するための入り口として、Chromeの設計やブラウザーのサンドボックスの現状、これまでに実際にあった脆弱性の例などを紹介してくれました。

 近年ブラウザーのエクスプロイトというと、これまで多かったバッファーオーバーフロー系の脆弱性の攻撃から、「Use-after-free脆弱性」に対する攻撃へと移り変わりつつあります。バッファオーバーフロー系の脆弱性はアプリケーション側での対策が進んだこと、またプラットフォーム側でもそのエクスプロイトを難しくするような機能が盛り込まれていることがその理由だと思われます。

 この発表では、Use-after-free脆弱性の攻撃を緩和するためにChromeに実装されている機能の1つが紹介されました。それは「パーティショニング」という機能で、簡単に説明すると同じ型、同じサイズのオブジェクトを特定のメモリ領域からのみ確保するようにする、という機能です。

Use-after-free脆弱性の問題点とは

 Use-after-free脆弱性の問題点は、ある型のオブジェクトとして一度確保されたメモリ領域を、別の値で上書きしてしまい、それを元のオブジェクトとして扱ってしまうという問題です。

 一般的なC++の実装では、オブジェクトを格納する領域に、そのオブジェクトが呼び出すべきメソッドのアドレスが一緒に格納されています(正確には関数ポインタテーブルへのポインターですが、ここでは概念のみ説明します)。このアドレスの値を別の値で上書されてしまうと、このオブジェクトを利用したときに、本来呼び出すべきアドレスでない場所を呼び出してしまいます。

 パーティショニングでは、ある型のオブジェクトとして一度確保されたメモリが、その後も同じ型のオブジェクトとしてのみ確保されるため、仮にこのようなバグがあっても、それを攻撃につなげることが難しくなります。

 いまさらながら、アプリケーションレベルでこのような保護機能を実装しているあたり、Chromeはセキュリティに関して非常に高い関心を持って開発されているという印象を受けました。ちなみに、この機能の実装はソースコード上で読むことができます。

Chromeのサンドボックスや脆弱性緩和機能について説明するイアン・ビアー氏

 イアン・ビアー氏と個人的に話をしたところ、Use-after-free脆弱性は検知も難しく、簡単にはなくせないのが現状のようでした。そして、これまでのバッファオーバーフロー系の脆弱性についても決して収束に向かっているという印象ではないようです。

 ブラウザーのような複雑なアプリケーションでは、これらの問題を取り除くのは非常に困難であるという現状です。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。