Webアプリケーションのセキュリティを高めるために使える本です。セキュリティ対策とは何をすることかということから始まり、Webアプリケーションが狙われる手法などを解説しています。固有の名称を持つWebサイト攻撃法を紹介し、それに対する防御手段を解説しているところが実用的なところだと思います。
Webアプリケーションに特化したセキュリティ対策本ですが、Webアプリケーションだけでもこんなにたくさんの攻撃方法があるのかとちょっと怖さも感じました。
物理的なセキュリティ対策と比べ、ソフトウェアセキュリティ対策に漏れがないか検証することのほうが難しいです。プログラムのソースコードがない場合、安全性の検証はさらに難しくなります。ソフトウェアのセキュリティ対策は非常にもろいものであることがほとんどです。このため、使用中のソフトウェアが安全であるか情報を収集し、安全性が保たれているか継続的に確認することが重要であるとともに、複数の安全対策を実施することが重要です。
本書の対象読者は、Webアプリケーションの開発者やそのマネージャ、管理者です。Webアプリケーションのセキュリティは、仕組みをよく理解して適切な対策を行わなければ意味がありません。さらには、その対策を複数行わなければ安全性を確保することが難しいです。本書を何度も読み直して、セキュリティ向上に役立てられるといいと思います。
Webサイトの攻撃法まとめ
クロスサイトスクリプティング (XSS)
脆弱なサイト上で第三者による任意の JavaScript を実行できてしまうことにより、そのサイトにアクセスしたユーザに被害を及ぼすもの。Cookie を盗み出したりすることができるため、セッション乗っ取りが行われる危険性がある。対策は、Webサイトの出力にHTMLタグのエスケープ処理等を行うこと。
XXXインジェクション
SQLインジェクション、LDAPインジェクション、XMLインジェクション、コマンドインジェクションなど第三者による任意のコマンドが実行されてしまう脆弱性。対策は、適切なエスケープを行うこと。
クロスサイトリクエストフォージェリ (CSRF)
ログインが必要なサイトですでにログイン済みのユーザが、攻撃用のURLをクリックすることで意図していないフォーム送信(たとえば、データの削除など)が行われてしまう脆弱性。対策にはサーバ側でリファラのチェックを行うことやPOSTのみを受け付けるようにする。もちろん、リファラを送信しない環境もありえるので、完全な対策にはならないし、JavaScript を使って POST 送信にすることもできるので抜け道はある。
参考
ディレクトリトラバーサル
ユーザにファイルパスを入力させたり、選択させたりする場合に、「.」 や 「..」 などのパス指定文字列が含まれていて、予期せぬディレクトリのファイルが開かれてしまう脆弱性。対策は、入力値の確認を行い、不正な文字列が入力されていないかチェックする。( . 、 .. 、 / , \ ) などがチェック対象。また、閲覧可能なディレクトリを制限しておく。
セッションハイジャック
セッションID が盗まれてしまい、成りすまされてしまう脆弱性。セッションID が盗まれるのは、クロスサイトスクリプティングやネットワーク盗聴、セッションID の推測、セッションID の固定化などが原因になる。対策は、セッションID には予測不可能な文字列をつかい、セッションID に有効期限を設定する。ネットワーク盗聴には SSL/TLS を用いて通信経路を暗号化し、セッションID は必ずサーバ側で作成する。(クライアントから送られてきた有効でないセッションID は使用しない)
参考
- 不正アクセス対策をはじめる前の基礎知識
- 暗号化についてののバイブル
- クラッカーによるクラッキング方法を知っていれば、セキュリティ対策にも身が入る!?