私が前回書いた developerWorks の記事、「Ajax のパフォーマンス・ツール」では、ディスクの入出力問題を突き止められるように HTTP リクエストの数を減らすこと、ネットワーク・トラフィックを分析すること、過剰な呼び出しを検出すること、メモリー使用量を抑えることなど、パフォーマンスの問題を解決する方法について説明しました。
今回の記事で説明するのは、Ajax のセキュリティー・ツールです。これらのツールは、SQL インジェクションとクロスサイト・スクリプティングに対する脆弱性のスキャン、マスターパスワードの設定、そしてクラッシュ後の全ウィンドウ状態の復元に使用します。アプリケーション内でリンクされている Web サイトがブロック・リストに載っていないことを確実にしたり、ハッカーがブラウザーの機能を改変したり、Web アプリケーションを改ざんして目的の悪事を実現できないようにするためのツールとユーティリティーを紹介します。この記事ではユーティリティーを 3 つのタイプに分け、アプリケーションのセキュリティーを強化するためのツール、Firefox ツール、そして Firefox アドオンの順に説明します。
このセクションでは、チャットとブログをセキュアにするための aSSL (Ajax Secure Service Layer)、ソース・コードと画像ファイルを盗む目的でアクセスする訪問者から Ajax Web ページを保護するための HTMLProctector、そして SQL インジェクションとクロスサイト・スクリプティングが原因の問題をスキャンして修正するための Acunetix Web Vulnerability Scanner を紹介します。さらに Ajax ページ上から他の Web サイトにリンクする前に、そのリンクが Web サイトのブロック・リストに載っていないことを確実にするための AjaxDNS ツール、そしてあらゆる IP スプーフィング手法 (「参考文献」を参照) を検出するために使用するとよい、オープンソースのコマンドライン・アンチスプーフィング検出ユーティリティー Despoof も紹介します。
aSSL は、MIT ライセンスの元で配布されるオープンソースのライブラリーです。このライブラリーは SSL の Ajax バージョンで、HTTPS は含まれていません。HTTP はセキュアでないことから、aSSL では SSL のようにブラウザーで SSL 証明書をチェックすることができません。代わりに aSSL は RSA アルゴリズムを使用して、クライアントが 1 つ以上のサーバーと 128 ビットのランダムな鍵をネゴシエーションできるようにします。接続が確立されると、この Ajax ツールは AES アルゴリズムによってデータの送受信を行います。チャットやブログなど、ファイアウォールを介してアクセスされるけれどもさほど重要性の高くないサイトには SSL 証明書は必要ないため、これらのサイトをセキュアにするには aSSL が適しています。
aSSL がそのプロセスを開始するのは、ブラウザーがサーバーを呼び出した時点です。呼び出しを受け取ったサーバーは、サーバーの RSA モジュラスを返します。するとブラウザーは 128 ビットのランダムな交換鍵を生成し、サーバーの公開鍵を使って暗号化した上で、その鍵をサーバーに渡します。暗号化された交換鍵を受け取ったサーバーは、サーバーの秘密鍵で暗号化を解除します。最後に、ブラウザーがセッション継続時間を受け取り、接続を維持する期間をタイムアウトによって設定します。
ファイアウォールの枠を超えたこのツールは、サーバー上で実行する Web サイトのコンテンツを保護する手段となります。このツールでは、クライアント・サイドで保護しなければならない対象を決めてから、保護されたWeb ページをサーバーに送信することができます。HTMLProtector の利点は以下のとおりです。
- 訪問者がソース・コードを表示したり、出力できないようにします。
- ハッカーがスパム・メールを送信するために使用する恐れのある E メール・アドレスを、スパム・ロボットがページから抽出することを防ぎます。
- 訪問者が自動ダウンロード・プログラムを使用して Web サイト全体をハード・ディスクにダウンロードすることを阻止します。
- 訪問者が Web サイトで E メールへのリンクにマウスを重ねたときに、リンクがステータス・バーに表示されないようにします。ページの BODY セクションまたは HEADER セクションのいずれか一方だけを保護することも、両方のセクションを保護することも可能です。
しかも HTMLProtector では、ページをパスワードで保護することもできます。ただし、ページへのアクセスを許可する訪問者には必ず、アクセスを許可しない訪問者から推測されにくいパスワードを提供してください。アクセス許可のない訪問者が不正なパスワードを使ってアクセスしようとした場合の措置としては、空白ページを表示する、別の URL にリダイレクトする、または前のページを再表示するという方法を選択することができます。また、ブラウザーがページをローカル・キャッシュに入れられないようにして、ますますハッカーのやる気をそぐという手もあります。
AWVS (Acunetix Web Vulnerability Scanner) Free Edition
AWVS Free Edition は、アプリケーション内の SQL インジェクションとクロスサイト・スクリプティングに対する脆弱性を調べ、このようなスクリプトが実行される前に問題を修正するツールです (SQL インジェクションについては、ハッカーがその脆弱性を利用して SQL コマンドを変更し、データベース内のデータにアクセスする可能性があります。クロスサイト・スクリプティングの攻撃では、ハッカーが訪問者のブラウザーで悪意のあるスクリプトを埋め込み、それからそのスクリプトを実行してデータを集めることができます)。
AWVS Free Edition はさらに Web サイトでクロールされたコンテンツに対して Google のハッキング・データベース・クエリーを起動して、機密データ、あるいは不正利用が可能なターゲットを特定します。クエリーの結果によってデータが不正に利用可能であることがわかった場合には、必ず問題を修正して、検索エンジン・ハッカーがそのデータを見つけて悪用できないようにしてください (必ず、本番環境でなくテスト環境テストしてください)。
Acunetix には、Web アプリケーションのセキュリティー・チェックを微調整する際に役立つ 3 つの高度な侵入テスト・ツール、HTTP Editor、HTTP Sniffer、そして HTTP Fuzzer があります。以下に、それぞれのツールでテスターが実行可能な内容を説明します。
| ツール | 説明 |
|---|---|
| HTTP Editor | HTTP/HTTPS リクエストを作成し、Web サーバーのレスポンスを分析します。 |
| HTTP Sniffer | すべての HTTP/HTTPS トラフィックのインターセプト、ロギング、および変更を行い、Web アプリケーションによって送信されたすべてのデータを明らかにします。 |
| HTTP Fuzzer | バッファー・オーバーフローおよび入力の検証を目的とした高度なテストを行います。ルール・ビルダーによる数千の入力変数テストを行います。 |
スキャナー・ツールを使用することで、ハッカーが以下のような悪事を行おうとする気をくじかせたり、あるいはその目的の達成を阻止することができます。
- 個人情報のの盗難
- 機密情報または部外秘情報へのアクセス
- 有料コンテンツへの無料アクセス
- ブラウザー機能の改変
- Web アプリケーションの改ざん
- DoS 攻撃
- 公けでの個人または企業に対する中傷
AjaxDNS ツールは、Ajax アプリケーションのなかでリンクされている Web サイトのセキュリティーを素早くチェックするのに重宝します。以下に、これらのツールとそれぞれのツールで実行可能な内容とを併せてリストに記載します。
| ツール | 説明 |
|---|---|
| WhoisSearch | ドメイン名の所有者に関する情報を取得します (この情報の表示が許可されている場合)。 |
| RBL Search | RBL (Reputation and Block Lists) を実行しているサーバーで Web サイトを検索し、Ajax アプリケーション内でリンクされているサイトがこれらのリストに含まれていないことを確認します。 |
| Ping | パケットがホストに到達するまでの所要時間に関する情報を取得します。ping がホストのファイアウォールを通過できない場合、そのホストには到達できません。 |
コマンドライン・オプションを利用するには、Microsoft® から Whois をダウンロードします。Linux®/UNIX® システムでは who コマンドを使用してください。
もう 1 つのセキュリティー・ツールである Despoof はネットワークで Ajax アプリケーションを流出させるために使われる偽造パケットを検出するために使うことができます。偽造が疑われるパケットを受信した場合、パケットの実際の TTL (Time-to-Live) を判別して、受信したパケットの TTL と比べてください。
Despoof ツールをインストールする前に、お使いのマシンに libpcap 0.4 と libnet 1.0 (または最新バージョン) の両方があることを確認してください。その上で、リスト 1 のコマンドを使用してファイルを解凍し、despoof ディレクトリーに移動して Despoof をインストールします。
リスト 1. Despoof のインストール
#tar xvzf despoof*tgz
#cd despoof*
#gcc 'libnet-config-defines' -o despoof despoof.c -lnet -lpca
|
Despoof を実行するにはリスト 2 のコマンドを入力します。
リスト 2. Despoof の実行
#. /despoof -h
|
Firefox ツールでは、マスターパスワードとプライバシー・オプションを設定することができます。
保存済みパスワード、ならびに保存されている Web フォームのデータと秘密鍵にアクセスするにはマスターパスワードを入力しなければなりません。新しいマスターパスワードを割り当てるには、以下のステップに従ってください。
- 「ツール」メニューの下にあるオプションをクリックします。
- 「オプション」ダイアログのセキュリティ・タブにある「パスワード」セクションを表示します。
- 「マスターパスワードを使用」チェック・ボックスにチェック・マークを付けます。
- 「マスターパスワードの変更」ダイアログで新しいパスワードを入力し、確認のためにもう 1 度そのパスワードを入力します。
新しいパスワードの各文字を入力するごとに、「パスワード品質レベル」のバーに緑のブロックが追加されていくはずです。パスワードが推測しにくいものであればあるほど、バーがブロックで埋められる範囲は大きくなっていきます。バー全体が緑のブロックで埋まった場合、そのパスワードは最強だということになります。
入力されたパスワードが一致していることをシステムが確認すると、メッセージ・ボックスに「マスターパスワードが正常に変更されました。」というメッセージが表示されます (マスターパスワードは必ず覚えておいてください。マスターパスワードを忘れてしまうと、そのパスワードによって保護されている一切の情報にアクセスできなくなります)。
次に、cookie およびプライバシー情報の消去の例外設定について説明します。「ツール」メニューの下にある「オプション」をクリックし、「プライバシー」タブにアクセスしてください。Cookie セクションでは、すべてのサイトから送られてきた cookie を受け入れことも、あるいは cookie を受け入れるサイトを制限することもできます。「例外サイト」をクリックして、cookie の使用を常に許可するサイト、許可しないサイトを指定します。管理対象とするサイトの正確なアドレスを入力し、「不許可」、「現在のセッションのみ」、または「許可」のいずれかをクリックしてください。設定が完了したら、「閉じる」ボタンをクリックします。
Firefox にサイトからの cookie を受け入れさせる場合、cookie の保存期間を選択できます。cookies の有効期限が切れるまで、または Firefox を終了するまで保存するように設定するか、あるいは Firefox を開くたびに毎回、保存期間を確認させるようにすることもできます。
有効期限を設定するには、「履歴」セクションを使用します。デフォルトでは、「表示したページを 20 日分記憶する」設定にされたチェック・ボックスにチェック・マークが付けられています。この日数が長すぎる、あるいは短すぎると思う場合には、変更してください。
極めて役に立つ Firefox 拡張機能として挙げられるのは、セッションマネージャ (クラッシュ後にすべてのウィンドウ状態を復元)、Homeland Security Threat Level (ステータスバーに現行のレベルを表示)、WiKID (パスワードと証明書の代わりとして機能) の3 つです。
セッションマネージャはすべてのウィンドウの状態を保存し、クラッシュ後に起動するときに要求に応じて、または自動的にウィンドウ状態を復元します。そのおかげで、ウィンドウやタブを誤って閉じてしまったとしても、再オープンすることができます。セッションマネージャは、セッション・ファイルおよび閉じられたウィンドウ・ファイルに保存されるセッション・データの暗号化にも対応します。この機能を有効にする方法は以下のとおりです。
- 「ツール」から「セッションマネージャ」を選択します。
- 「セッションマネージャオプション」をクリックします。
- 「詳細」タブの「暗号化」セクションで、「保存しているセッションと閉じたウィンドウのデータを暗号化する」チェック・ボックスにチェック・マークを付けます。マスターパスワードを設定している場合、セッションの暗号化または暗号化解除をするにはマスターパスワードを入力しなければならず、そのための画面が表示されます。
- OK をクリックします。
Firefox が異常終了した後、Firefox を再起動するときには最後のセッションを復元するかどうかを尋ねるメッセージが表示されます。セッションマネージャは、現行のブラウズ・セッションだけでなく、セッションを選択して復元するというオプションも用意しています。セッションマネージャオプション・ダイアログのセッションストア・タブで Crash Recovery を有効にする設定を無効にしたほうがよい場合はまず考えられません。
この拡張機能は SessionSaver および Tab Mix Plus のセッション・マネージャーに置き換わるもので、この2 つを合わせた場合よりも多くのデータを保存します。セッション関連の拡張機能を複数インストールすることは推奨されていません。
Homeland Security Threat Levels
この拡張機能は、米国国内でテロが起こる危険性を 5 段階で示す U.S. Homeland Security Threat Level の現在のレベル (Severe、High、Elevated、Guarded、Low) をステータス・バーにアイコンとして表示し、脅威レベルがひと目でわかるようにします。
WiKID Strong Authentication System は商用/オープンソースのソフトウェアをベースとした 2 要素認証ソリューションです。WiKID はトークン、証明書、パスワードに代わるセキュアな手段となるように設計されています。この Firefox 拡張機能はセマンティック Web 技術を用いて自動的にユーザーのワンタイム・パスワードを入力します。WiKID トークンは複数の WiKID ドメインをサポートするため、トークン「キー・チェーン」の必要はありません。
Ajax アプリケーションをサーバー、クライアント・サイド、あるいはネットワークのどれに配置するかに関わらず、Ajax アプリケーションのセキュリティーを強化するための計画を前もって行う際には、この記事を参考にしてください。セキュリティーは開発者だけでなく、テスター、システム管理者、そして潜在するユーザーにとっても重要です。発生し得るセキュリティーの問題を認識し、問題が発生する前に解決することが、開発チームとユーザー両方の円滑なエクスペリエンスを実現する手段となります。
学ぶために
- Judith M. Myerson の連載記事「エンタープライズ規模の SOA における Web サービスの取り扱い」では、エンタープライズ規模の SOA ではどのように Web サービスを扱うかを説明しています。
-
aSSL、HTML Protector、AjaxDNS ツール、Despoof の詳細を学んでください。
- Mozilla Firefox の詳細情報を入手してください。
- Ajax のツールについて詳しく知りたいという方は、「Ajax のツールと手法の調査」 (Gal Shachor、Yoav Rubin、Shmulik London、Shmuel Kallner 共著、developerWorks、2007年7月) を読んでください。
- Judith M. Myerson の著書『The Complete Book of Middleware』は、システム設計の基本原理と優先順位に焦点を当て、e-commerce と分散統合システムの興隆によって生じた新しい要件について強調しています。
- 『Enterprise Systems Integration, Second Edition』を読んで、システム統合を成功させるためのビジネス的洞察力と技術ノウハウを手に入れてください。
- ビジネス・プロセス、運用と実装の問題、リスク、脆弱性、そしてセキュリティーとプライバシーについて説明している「RFID in the Supply Chain」は、組織の将来に役立つはずです。
-
テクノロジー・ブックストアにアクセスして、この記事で紹介した技術やその他の技術に関する本を探してください。
-
Ajax resource center にアクセスしてください。ここには記事、チュートリアル、ディスカッション・フォーラム、ブログ、ウィキ、イベント、そしてニュースなど、Ajax プログラミング・モデルに関する情報が豊富に用意されており、ワンストップ・ショップになっています。新しい情報もここに記載されます。
製品や技術を入手するために
-
IBM製品の試用版のダウンロード: 次期開発プロジェクトの構築に、developerWorks から直接ダウンロードできる IBM の試用版ソフトウェアをご利用ください。
議論するために
-
ディスカッション・フォーラムに参加してください。
-
developerWorks Japan ブログ: developerWorks コミュニティーに参加してください。