2015年3月17日火曜日

安全なウェブサイトの作り方改訂第7版の変更点と変わらない点

IPAの安全なウェブサイトの作り方 改訂第7版が公開されました。
このエントリでは、安全なウェブサイトの作り方の元々もつ特徴(変わらない点)と、第7版の変更のポイントについて説明します。
なお、私は安全なウェブサイトの作り方の執筆者の一人ではありますが、以下の記述は私個人の意見であり、IPAを代表するものではありませんので、あらかじめご承知おきください。

安全なウェブサイトの作り方の変わらぬ特徴

安全なウェブサイトの作り方の特徴は、「まえがき」の中で述べられています。
本書は、IPAが届出を受けたソフトウェア製品およびウェブアプリケーションの脆弱性関連情報に基づいて、特にウェブサイトやウェブアプリケーションについて、届出件数の多かった脆弱性や攻撃による影響度が大きい脆弱性を取り上げ、その根本的な解決策と、保険的な対策を示しています。
すなわち、以下の2点がポイントと考えます。
  • 脆弱性の選定基準として、届出件数の多かった脆弱性と攻撃による影響度が大きい脆弱性に注目している
  • 対処の方法として、根本的な解決策と保険的な対策という考え方を採用している
まず、取り上げる脆弱性の選定基準ですが、(1)現実に届け出の多いもの、すなわち現実のアプリケーションで発見される機会の多いものと、(2)必ずしも発見の機会は多くないが攻撃による影響度の大きな脆弱性という基準を採用しています。すなわち、脆弱性の選定は結構慎重な立場をとっていることになります。
さらに言えば、「これさえ対応しておけば大丈夫」ではなく、「最低限これらは対応してね」という感じ、と言えば分かりやすいでしょうか。

根本的解決策と保険的対策

次に、根本的解決策と保険的対策についてです。私見では、この着眼点こそ安全なウェブサイトの作り方の最大の特徴ではないかと思います。
まずは、両者の説明を安全なウェブサイトの作り方から引用します。
■ 根本的解決
本書における「根本的解決」は、「脆弱性を作り込まない実装」を実現する手法です。根本的解決を実施することにより、その脆弱性を狙った攻撃が無効化されることを期待できます。
■ 保険的対策
本書における「保険的対策」は、「攻撃による影響を軽減する対策」です。根本的解決とは違って、脆弱性の原因そのものを無くすものではありませんが、攻撃から被害までの次の各フェーズにおいて、それぞれの影響を軽減できます。
安全なウェブサイトの作り方では、「解決策」と「対策」を意図的に使い分けています。すなわち、脆弱性が混入する根本原因に注目し、その原因を取り除くことにより脆弱性のない状況を作ることを「解決策」と呼び、根本原因を取り除くことが困難であったり、抜け漏れが生じやすい場合の緩和策等を「(保険的)対策」と呼んでいます。

とくに、脆弱性が生まれる根本原因を示し、その根本的解決策を示したことは、安全なウェブサイトの作り方の大きな特徴だと考えます。海外のドキュメントを見ると、バリデーションなど必ずしも根本原因に根ざした対応になっていないものをよく見かけるだけに、なおのことそう思います。

第7版での変更点

次に第7版での変更点です。第7版の「まえがき」には以下のように書かれています。
第7版では、1章に、クリックジャッキングとバッファオーバーフローの脆弱性の解説を追加し、クロスサイト・スクリプティングの脆弱性への対策方法、各脆弱性で紹介している届出状況、参考URL等を更新しました。また、2章に、ウェブサイトにおけるパスワードの管理方法の解説を追加し、通信経路の暗号化の解説、DNSなどの対策方法、参考URLを更新しました。
ということで、久しぶりに第1章の脆弱性項目が下記2項目追加されて脆弱性項目が11項目になりました。これは、第3版で9項目になって以来の追加となります。
  • クリックジャッキング
  • バッファオーバーフロー
企業等で、安全なウェブサイトの作り方を元にセキュリティ基準等を定めているところがかなりあると見聞きしていますが、それら企業・団体は、この機会に基準の改定を推奨いたします。

クリックジャッキングについて

クリックジャッキングとは、iframe等を用いてウェブサイトの利用者を視覚的に騙し、意図しないマウス操作をさせる技法です(下図)。


IPAからは、クリックジャッキングに関してテクニカルウォッチ「『クリックジャッキング』に関するレポート」という文書を公表しています(2013年3月26日)。それから2年が経過して、安全なウェブサイトの作り方に取り入れられたということです。
説明自体はテクニカルウォッチの方が詳しいので、詳細はそちらを参照いただければと思います。

バッファオーバーフローについて

おなじみのバッファオーバーフローも、安全なウェブサイトの作り方に収録されました。ただし、ウェブアプリケーションの開発によく用いられるPHP、Ruby、Java等を用いている限り、アプリケーションレベルでバッファオーバーフロー脆弱性が混入する可能性はないので、C/C++等を用いてウェブアプリケーションを開発しているケースや、アプリケーションから呼び出していライブラリがC/C++等で開発されていて、そこにバッファオーバーフロー脆弱性があるようなケースを想定しています。そのため、安全なウェブサイトの作り方での説明も非常に簡略なものになっています。

ソルト付きハッシュ値によるパスワードの保存

パスワードリスト攻撃では、あるサイトから漏洩したパスワードが別のサイトへの攻撃に悪用されていると言われています。このため、サーバーへの侵入による被害が当該サイトにとどまらず、他のサイトにも波及してしまうことが問題です。
このため、ウェブサイトで保管するパスワードに関しては、平文ではなく、保護された形で保管すことが望ましい言えます。安全なウェブサイトの作り方第7版では、ソルト付きハッシュ値を用いて(さらにストレッチングを用いて)パスワードを保護された形で保管することを勧めています。
現実のウェブサイトには、パスワードを平文保管しているサイトがまだ多いと推測しますが、少なくとも今後新規開発するウェブサイトについては、保護された形でのパスワード保管を必須とすべきと考えます。
パスワードの安全な保管については、下記の記事も参考にしてください。

まとめ

安全なウエブサイトの作り方について、従来からの特徴と第7版での主な変更点について説明しました。
安全なウェブサイトの作り方は、ウェブアプリケーション開発の現場では、発注時のセキュリティ仕様として、あるいは開発会社の自社のセキュリティ基準として用いられている場合が多いようです。この場合は、以下に気をつけるとよいでしょう。
  • 最低限のセキュリティ基準としてとらえ、アプリケーションの性質によっては対応する項目を追加することが望ましい
  • 改版で内容が改定されるので、発注仕様等として用いる場合は、版数を明記する
このような使われ方を想定して、IPAのダウンロードページでは、安全なウェブサイトの作り方の旧版(第6版)もダウンロードできるようリンクを追加しています。
また、特にクリックジャッキングとバッファオーバーフロー、ソルト付パスワードによるパスワード保管については、順次自社基準や発注時仕様に盛り込んでいかれると良いと思います。

0 件のコメント:

コメントを投稿

フォロワー