監修者まえがき
この本が出るという情報を得たのは2014年の頭くらいでしたが、最近流行のWebブラウザのハッキングコンテストのノウハウ本かな、という勝手なイメージを抱いていました。ところが、届いた本の目次をパラパラ見てびっくり。もちろんWebブラウザやその拡張機能、プラグインなど周辺的な部分まで徹底的に攻める対象としているのですが、ユーザーを騙す? ポートスキャン? 踏み台にする? そしてネットワークを攻撃するって? もうぐいぐいっと先のまた先、さらにその先に連れて行かれる感がありました。それだけWebやブラウザというものが広く深く浸透しているということでしょう。
主にクロスサイトスクリプティング攻撃について考えるときに、想像できる悪用シナリオの深刻さがいまひとつ足りないため軽視される傾向が強い、というのがずっと悩みでしたが、『めんどうくさいWebセキュリティ』(Michal Zalewski著、翔泳社、2012 年)あたりから現実にヘビーな被害を出すところまで行くシナリオを想像できるようになってきました。Webブラウザというインフラを攻めまくることで、本書はその深刻さをさらにリアルに増してくれます。もちろん、被害が深刻にならないことの方が社会にとって良いことなのですが、そうなっていない現状を軽視することなく、といって過剰反応することもなくできるだけ正確に把握することが重要ですし、同時にSOPなどの現在の主要な対策の「できている範囲」「できないこと」というのを認識する必要もあると思います。本書はその目的には最適だと考えています。
2015年半ばごろに田中ザック&はせがわようすけという人たちからコンタクトがあり、「これめっちゃ良い本なので翻訳出したいんですがどうでしょう?」と相談されました。以前だったら良い本があれば知り合いの編集者にすぐ情報を振ったり、「翻訳本を世に出そう」的な働きかけをしたりしてたんですが、SECCONとかキャンプとかAVTokyoとかASEANとかトレンドマイクロCTFとか目前にドッシリ重なるイベントの前にそういう元気も無く過ごしていたところに突然スイッチが入り、西村宗晃さんを巻き込んでプロジェクトスタート。……したものの全然進捗せず、編集サイドにはいろいろご迷惑をおかけしましたが、特に原稿が遅いはせがわようすけさんにはハラハラさせられました(笑)。
内容について少し書いておきます。分量と価格のバランスを考慮し、原著でMetasploitの使い方を説明している部分は割愛しました。このあたりは別途Metasploitの解説本やオンラインの文書等をご参照ください。また、原著のコードや攻撃の一部は、現在そのままでは通用しませんが、攻撃にいたるプロセスや考え方は非常に勉強になりますし、その考え方のもとに原著者は今も多くの脆弱性を発見していたりしますので、削除せずにそのまま掲載しました。注釈のURLもすでに404になっているものもあるのですが、これはその旨明記しつつもWebアーカイブなどを辿る方向けに情報として残しました。
わたしは今の日本に足りないのは攻撃の研究だと思っています。この本で現代的なブラウザをめぐる攻撃を研究して、防御を考える手がかりにしてください。
Enjoy browser hacking!
監修者を代表して
園田道夫
はじめに
概要
本書は、毎日使っているWebブラウザをハッキングし、さらなる攻撃の足がかりとして利用する方法について、実用的な知識をお届けします。このような攻撃は、広く普及しているブラウザを標的にするのが一般的ですが、あまり普及していないからといって標的にならないわけではありません。本書では、Firefox、Chrome、Internet Explorerを主に取り上げていますが、一部最新モバイルブラウザにも踏み込んでいます。モバイルブラウザはまだ大きな注目を集めていませんが、これを標的とする攻撃も増えています。
攻撃側も防御側も、Webブラウザがもたらす危険性を認識する必要があります。理由は明らかです。Webブラウザは、この10年でもっとも重要なソフトウェアの1つになりました。オンライン環境にアクセスする入り口として世界中で使われています。以前は扱いづらいデスクトップソフトウェアだったWebブラウザも、急激な普及により、スマートフォン、ゲーム機、テレビなどの主力アプリケーションへと変貌を遂げています。Webブラウザは、データの表示、取得、操作を可能にする現代版万能ナイフです。Tim Berners-Lee(ティム・バーナーズ・リー)卿が1990年に「ちょっとしたWebブラウザ」を生み出して以来、いくつもの成果をあげながら、世界でもっとも著名なソフトウェアへと出世しています。
全世界でのWebブラウザの利用数は、憶測を交え、さまざまな情報が錯綜しています。ざっと計算しても、桁外れの数になることがわかります。全世界の人口の3分の1がインターネットを利用していると考えれば、約23億のブラウザが使用されていることになります。間違いなく、複数のブラウザを利用しているユーザーがいます。自宅、職場、スマートフォンでそれぞれ使用しています。Stephen Hawking(スティーブン・ホーキング)ほどの数学的センスがなくても、膨大な数になることはわかります。
Webブラウザがこれほど多く普及していると考えれば、その数に比例してセキュリティの問題やエクスプロイトの危険性が高まるのは当然です。本書では、今を時めく最新のブラウザをハッキングする方法をハッカーの立場から説明し、そこから攻撃に対する防御方法を考えます。
対象読者
技術的背景があり、Webブラウザが持つリスクに興味がある方に、本書をお届けします。自身のインフラストラクチャを防御しようとしている方にも、クライアントの資産を狙っている方にもお勧めです。管理者、開発者、情報セキュリティの専門家、執筆者など、セキュリティに対する情熱にあふれ、絶えず知識向上の意欲のある方にお読みいただきたいと考えています。
本書は、読者が普段からWebブラウザを使用していて、ときには内部の仕組みを調べる必要に迫られたことがあるという前提で執筆しています。セキュリティの基本概念を習得し、少し時間を費やして背景知識を調べると、本書を理解しやすくなります。サーバー/クライアントモデルの考え方、HTTPプロトコル、セキュリティの一般概念については、事前に把握しておくとよいでしょう。
プログラミング経験は重要ではありませんが、コードを理解する場合は、原理に関する基礎知識があると便利です。本書で紹介する多数の例やデモからは実践的な知識が得られます。このような例やデモは、ブラウザの主力言語であるJavaScriptを中心にさまざまな言語で記述しています。JavaScriptを初めて目にする方も心配いりません。コードには解説を付けています。
本書の構成
本書は、攻撃の手口を大きく分類した10の章で構成しています。可能な限り脆弱性の種類別に章を振り分けていますが、厳密なものではありません。本書の構成は、専門的なセキュリティ対策を検討する際に役立つと考えています。
セキュリティ対策に取り組む方が、本書を最初から最後までお読みになるとは考えていません。最初に本章をお読みいただき、必要な対策にもっとも適した章に読み進んでいただくことを想定しています。特定の概念を詳しく解説している箇所を直接お読みになる方のことも考え、一部の概念については繰り返し説明し、各トピックの背景事情や整合性を補足しています。
各章の最後には、もう一度じっくり振り返るために一連の問題を用意しています。これにより、各章の中核をなす概念の理解が進むことを期待しています。回答は本書のWebサイト(https://browserhacker.com/answers、英語)またはWileyのWebサイト(http://www.wiley.com/go/browserhackershandbook、英語)で確認できます。
第1章:Webブラウザのセキュリティ
ブラウザハッキングについての導入部です。最初に、ブラウザの重要な概念と、ブラウザセキュリティの主な問題点を調べます。現代組織の防御に必要な「ごく小さな境界」の枠組みを説明し、広がり続けるさまざまな誤解によって、セキュリティ上問題のある手法が採用されていることを示します。
本章では、ブラウザを利用する攻撃の流れを定義し、ブラウザが攻撃を受ける対象領域と、これまで保護されていると考えられていた資産が攻撃を受けやすくなっている状況を説明します。
第2章:制御の開始
Webブラウザは、Webに接続するたびに命令を受け取ります。Webサーバーから受け取った命令はWebブラウザですべて実行されます。境界は存在しますが、ブラウザには攻撃側が利用できる強力な環境が備わっています。
本章では、ブラウザを攻撃する最初のフェーズとして、標的とするブラウザでコードを実行する仕組みを見ていきます。また、クロスサイトスクリプティングの脆弱性、マンインザミドル攻撃、ソーシャルエンジニアリングなどの興味深い例を取り上げます。
第3章:制御の確保
制御の開始で取り上げたテクニックでは、命令を1回しか実行できません。本章では、制御と通信を確保して、コマンドを複数回実行できるインタラクティブな制御を実現する手口を示します。
典型的なハッキングセッションでは、攻撃側がブラウザとの通信チャネルを確保し、可能であれば再起動後も制御を維持します。通信チャネルを確保できなければ、すぐ振り出しに戻り、何度も標的への接続を繰り返さなければなりません。
本章では、ペイロードを使用してブラウザとの通信を確保し、命令を複数回繰り返し送信できるようにする手口を調べます。通信を確保すれば、最初に接続を手に入れてからの攻撃のチャンスが無駄になりません。この知識を手に入れることで、以降の章で取り上げるさまざまな攻撃を展開する準備が整います。
第4章:同一オリジンポリシーのバイパス
ごく基本的には、同一オリジンポリシー(SOP)によって、Webサイト同士のやり取りが制限されます。SOPは、Webブラウザのセキュリティでもっとも基本的な概念の1つです。SOPは、ブラウザの構成要素すべてに一貫して実装され、一般的な動作の影響を簡単に予測できると考えられています。本章では、この考えが間違っていることを示します。
ブラウザ本体、拡張機能、プラグインそれぞれでSOPの適用方法が異なるため、Web開発者はさまざまな局面でSOPに悩まされます。SOPの一貫性欠如と理解不足によって、攻撃側が特殊な状況をエクスプロイトするチャンスが生まれます。
本章では、ブラウザの各種SOP制御に対する回避策を調べます。さらに、ドラッグ&ドロップが引き起こす問題、さまざまなUI Redressing攻撃やタイミング攻撃についても取り上げます。また、うまくコーディングすればSOP回避策によってブラウザをHTTPプロキシに転用できるという意外な事実も紹介します。
第5章:ユーザーに対する攻撃
セキュリティを形成する輪の中で一番の弱点が人間だと言われています。本章では、ユーザーの無防備な考え方を標的にする攻撃に注目します。中には、第2章で取り上げるソーシャルエンジニアリング戦略を取り入れる攻撃もあります。また、ブラウザの「特徴」を悪用する攻撃や、受け取ったコードに対する信頼を悪用する攻撃もあります。
本章では、匿名化の回避策と、Webカメラを秘密裏に有効にする手口を調べます。また、悪意のある実行可能ファイルを実行する手口を、ユーザーによる明示的な介入がある場合とない場合に分けて説明します。
第6章:ブラウザに対する攻撃
ブラウザへの攻撃とブラウザのセキュリティ制御の回避策は、本書全体で取り上げていますが、本章では「最小限の機能しかない」ブラウザに注目します。つまり拡張機能やプラグインを利用しないブラウザです。
本章では、ブラウザへの直接攻撃プロセス、ベンダーやバージョンを特定するブラウザのフィンガープリンティング、ブラウザを実行しているコンピュータを攻撃に利用する方法などを取り上げます。
第7章:拡張機能に対する攻撃
本章では、ブラウザ拡張機能の脆弱性のエクスプロイトに注目します。拡張機能とは、Webブラウザに機能を追加(または削除)するソフトウェアです。拡張機能とプラグインは考え方が似ていますが、拡張機能はスタンドアロンプログラムではありません。著名な拡張機能には、LastPass、Firebug、AdBlock、NoScriptなどがあります。
拡張機能は特権を昇格して信頼性の高いゾーンでコードが実行されますが、インターネットなどの信頼性の低いゾーンから入力を受け取ります。これは経験豊富なセキュリティ専門家にとっては警戒を要する動作です。拡張機能にインジェクション攻撃が実行されるリスクは現実的で、インジェクション攻撃によってはリモートコードの実行につながるものもあります。
本章では、拡張機能への攻撃の仕組みを調べます。また、特権の昇格を悪用する手口も取り上げます。この手口では、特権が適用されるブラウザゾーン(chrome://ゾーン)へのアクセスを実現して、コマンドを実行します。
第8章:プラグインに対する攻撃
本章では、Webブラウザプラグインへの攻撃に注目します。プラグインは、特定の機能をWebブラウザに追加するソフトウェアです。ほとんどの場合、プラグインはWebブラウザを利用せずに独立して実行されます。
著名なプラグインには、Acrobat Reader、Flash Player、Java、QuickTime、RealPlayer、Shockwave、Windows Media Playerなどがあります。中には、ブラウザエクスペリエンスに必須のプラグインや、ビジネス機能に不可欠なプラグインもあります。HTML5が主流になりつつあるとはいえ、Flashは今もまだ多くのサイトで使われており、JavaはWebExなどのビジネス機能に不可欠です。
プラグインの脆弱性は悪用され続けており、今後もエクスプロイトの温床になります。プラグインの脆弱性は、ブラウザの制御を奪うもっとも確実な手段の1つとして常用されています。
本章では、一般に利用できる無料ツールでブラウザのプラグインを分析してエクスプロイトする手口を取り上げます。また、保護メカニズム(Click to Playなど)を回避する手口や、プラグインの脆弱性を利用して標的の制御を奪う手口も紹介します。
第9章:Webアプリケーションに対する攻撃
一般に認められたセキュリティ制御に従っていても、毎日使うWebブラウザで強力なWebベースの攻撃を実行できます。Webブラウザは、HTTPを使用してWebサーバーと通信するように設計されています。こうしたHTTP関数を調整してHTTP関数自体を攻撃することで、現在のオリジンに存在しない標的を侵害することができます。
本章では、SOPに違反することなくブラウザから開始できる攻撃に注目します。リソースのクロスオリジンでのフィンガープリンティングや、一般的なWebアプリケーション脆弱性のクロスオリジンでの特定を実現する手口を紹介します。ブラウザを使えば、クロスオリジンのクロスサイトスクリプティングやSQLインジェクションの脆弱性を見つけ出し、攻撃できます。
また、クロスオリジンのリモートコード実行を実現する手口も調べます。クロスサイトリクエストフォージェリ攻撃、時間ベースの遅延列挙、認証への攻撃、サービス拒否攻撃についても取り上げます。
第10章:ネットワークへの攻撃
攻撃に関する最終章では、ポートスキャンを使ってイントラネットの攻撃対象領域を特定し、それまでは不明だったホストを検出する手口を取り上げます。説明の過程で、NAT Pinningなどのテクニックも紹介します。
本章では、Webブラウザを利用してWeb以外のサービスと直接通信する攻撃を取り上げます。プロトコル間のエクスプロイトの手口を利用して、ブラウザのイントラネットに存在する標的を攻撃する方法を調べます。
あとがき:終わりに寄せて
本書で取り上げた多数の攻撃手法は、各章を参照してすばやく再確認できるようになっています。本章では、特にブラウザセキュリティの将来について、考えておきたい検討事項をいくつか示します。
Web上の資料
本書付属のWebサイトは、https://browserhacker.com(英語)またはWileyのWebサイト(http://www.wiley.com/go/browserhackershandbook、英語)でご覧いただけます。付属Webサイトでは、本書の内容を強化する情報を紹介しています。本書の代わりにはなりませんが、各章の内容を拡充する詳細情報を掲載しています。
付属Webサイトでは、コピーアンドペーストできるコードも用意しています。そのため、コードを手作業で書き写す必要がなく、入力ミスを防ぐメリットがあります。また、デモビデオの視聴や、各章の知識確認問題の回答の確認できます。
残念ながら、本書には誤りが含まれている可能性があります。実は、本書執筆者は1人を除いて全員がうっかり者です(だれがしっかり者かは論議中です)。https://browserhacker.comを参照して、うっかり者論議が決着したかどうかや、もちろん読者から指摘していただいた誤記の修正があるかどうかをチェックしてください。誤記を見つけた場合は、こちらのサイトに掲載されていないことをご確認のうえ、ご連絡ください。
装備の拡充
本書ではWebブラウザのハッキングに利用できるさまざまなツールを取り上げています。ハッキングには、幅広いツールを利用できることが重要になります。
本書の目的は、ツールの仕組みについての根本的な知識を提供することです。スキルをレベルアップするうえでこのような知識が非常に重要になります。また、ツールの使用方法の習得だけでなく、必然的に発生する誤検出を「理解」して特定できるようになることも重要です。
すべてのツールには弱点があり、セキュリティ対策ではこうした弱点と手持ちの知識を組み合わせる必要があります。もっとも重要なツールは知識です。本書の執筆者としては、ソフトウェアライブラリを充実させることより、知識を拡充することを目指しています。
本書全体で取り上げる回数が多い2つのツールは、Browser Exploitation Framework(BeEF)とMetasploitです。もちろん、他にも多数のツールを取り上げ、長所や短所を詳しく解説しています。
本書の執筆陣は、BeEFプロジェクトの中心的開発者として、本書で説明する手法に合わせてこのコミュニティツールの開発を行ってきました。本書では多数の例をBeEFコードベースから引用していますが、そのプロセスの大半は自動化されています。
悪用禁止
セキュリティの規範に必要なのはプロ意識です。本書のいかなる部分も、いかなる解釈でも、不正行為の実施を許可または奨励するものではありません。本書記載の情報を利用したいかなるハッキング行為も、それを認めるものではありません。このセキュリティ規範は、本書で取り上げたあらゆるテクニックに適用されます。
さて、それでは
Webブラウザのセキュリティは、インターネットでもっとも競争が激しい分野の1つです。そのため、Webブラウザは、セキュリティに関心があるすべての人々にとって魅力的で興味深い分野です。ブラウザメーカーは機能の限界をますます押し広げ、そのペースは衰えを見せません。
規模の大小を問わず、企業は、この便利で応答性の高いソフトウェアがPCだけで実行されるとは、もはや考えていません。ブラウザの人気は陰ると予測している方は、おそらくバグだらけのJavaプラグインを利用しているのでしょう。
Webブラウザ同士の競争が激化し、ビジネス上の利益がこれに拍車をかけ、ブラウザの攻撃対象領域が絶えず変わっていくことを考えれば、今後もセキュリティ上の問題が発生することになるでしょう。それでは、いよいよ本題に進むことにしましょう。