昨年12月、「徳丸本をブロガーに差し上げちゃうキャンペーン」に応募しました所、当選し、サイン入りの徳丸本(体系的に学ぶ 安全なWebアプリケーションの作り方)を頂きました。徳丸様ありがとうございます。約束通り、感想を書かせて頂きます。

体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践
徳丸 浩
ソフトバンククリエイティブ
売り上げランキング: 2305

■目次
・読む前の認識
・読んだ後の感想
・各章の感想




■読む前の認識

○私の現在のスキル
・PHPをほんの少しだけアルバイトで書いていた。
・サーバー周りはほぼわからない。
・ログイン処理を実装した事は無い(座学のみ)。
・iPhoneとAndroidアプリをちょっと書いてる。
・情報処理の試験は応用情報まで取ったが実務経験が無いので座学のみ。情報セキュリティの試験は大学生の頃に落ちた(中途半端な座学知識がある)。
・SQLは文字の上では勉強したが、実際に触った事はほとんど無い。
・こういった知識が必要な業界に進むので、勉強しないとやばい。

○セキュリティのイメージと周辺事項
・サーバーで持ってる情報抜かれたり、利用者に害を与えるものから防ぐために、色々とする必要がある(具体的な事はよく知らない)。
・情報漏洩したら、そのサービスが会社ごとつぶれかねない。
・イメージとして最初に出てくるのは「こんにちはこんにちは!!」。mixiとかAmebaなうであったはまちちゃん事件。
・対策として知っている事はほとんど無い。エスケープとかしとけばいいのかな、という程度の認識。(「サニタイズ脳」という単語は最近知った)
・そういえばSQLインジェクションについてはこれを見た記憶がある(具体的な事をあまり知らない)。xkcd: Exploits of a Mom和訳
twitterやEvernote(ここここ)のような有名サービスでもこういう事が発生した事あるし、完全な対策は難しいのだろうか。

○セキュリティの学習について
・例えばphpを勉強する時、体系的に学習する部分もある。しかし何かを作りたいといった動機から入っているので、「動く」という事が目標になる。
・セキュリティの事を考慮しなくてもプログラムはとりあえず動くので、言語を学習する時にセキュリティの事を考えない。考えたとしても優先順位が低くなってしまっている。

○その他
・この本の範囲外だが「欺術」で書かれているようなソーシャルエンジニアリングのイメージもある。
・パスワード問い合わせると、パスワードが平文で返ってくるシステムは嫌い(あらゆる就活サイトは今すぐ直して欲しい)。



■読んだ後の感想

・読む前は、ごく普通に作ったウェブサイトは脆弱性を持たず、何か特殊な事や、下手な事をやってしまうと、脆弱性が入るものだと思ってました。全然違いますね。勉強不足だったり、様々な事を想定していない事が、すぐに脆弱性に繋がる事がよく理解できました。サンプルが用意されているのはありがたかったです。
・攻撃パターンは多彩であり、様々なパターンを意識しないと、きちんと対策が立てられない。また対策を立てるにしても、どこが脆弱性になるのか体系的に理解しておく必要があるようです。
・サンプルの例示->原因の解説->具体的な対策、という流れがかなりわかりやすかった。
・この本は「安全なアプリケーションの作り方」なので、アプリケーションを作る人にとってはこれが最低限知っておくべきだと思うと道のりが長い。徳丸本はしばらく辞書的に使う必要がありそう。




ここからは各章の感想です。

○第01章 脆弱性とは何かについて。
・p6「脆弱性が生まれる理由」に「バグによるもの」と「チェック機能の不足によるもの」とある。脆弱性がバグであると読んでしまうと違和感があるが、バグが脆弱性になるという意味だから確かにそうだ。

○第02章 学習用の環境構築について。
・HTTP通信を見る環境まで入っている徹底ぶりに驚く。

○第03章 基礎(HTTP、セッション管理、同一生成元ポリシー)
・何が偽装可能なのかは常に把握していないといけなそう。

○第04章 脆弱性について(原理、影響、対策)
・入力値検証は基準の決定が大事そう(仕様との兼ね合い。仕様によってはセキュリティ的意味合いは無くなる)
・入力値検証は、用意されてる関数で囲むだけではダメ、プログラムの挙動に関する性格な知識が必要(特に各関数の挙動を正確に知っている必要がある、どう悪用されるのかについてもパターンを熟知している必要がある、と、実際に自分がプログラムを組む時に気にするべき点は沢山ありそうだ。
・ただp69に「Webアプリケーションの脆弱性は、機能との関連性が強いため、設計やプログラミングをしている時点で、注意すべき脆弱性は自動的に判別できます」とあるように、整理しやすくはある。
・出力側のエスケープもhtmlspecialcharsで囲めばいいかなーぐらいの認識だったが、p102辺りを読んで、仕様をきちんと理解しないといけないんだなと認識。(バージョンの違いによる仕様変更も把握する必要がある)
・XSSで急に難易度が…。時間掛かりました。
・SQLインジェクションから繋がる攻撃の種類が豊富で凄い。
・CSRFとXSSの比較(p146)を見て少しすっきりした。
・セッションIDについてもphpの仕様をきっちり知っている必要がありそう。
・クッションページの存在意味がやっとわかった(p192)
・ディレクトリトラバーサル、OSコマンドインジェクション、ファイルアップロードなどの辺りはphpの知識が足りないので少し実感が持てないが、影響範囲が凄い。
・この章は今後も何度も読む必要があるだろう。

○第05章 セキュリティ機能(認証、認可、アカウント管理、ログ管理)
・認証周りの事は自分の中で断片的な知識の集まりだったが、整理された…かもしれない。
・アカウント管理については、設計をよく考えないといけないですね。

○第06章 文字コード
・ほとんど知識が無い状態からスタート。複雑です…。
・尾骶骨テストなる言葉があるとは。。

○第07章 携帯電話向けの脆弱性対策
・いわゆる「かんたんログイン」の話はよく高木先生が話題にしているが、いまいちよくわかってなかった。
・p415のかんたんログインの(十分条件かはわからない)必須条件で整理できた。

○第08章 アプリケーション以外の側面の脆弱性と対策
・知らない事柄が多い。とても多い…。

○第09章 マネジメント
・実務経験は無いのであまりイメージはわかない。この辺りは来年度以降読み直す必要がありあそう。


■付記

・レビューが遅かった言い訳としては、修論が…修論提出がまだ終わってないんですよ…。(いや、ちょっと別のエントリーも書いてましたけど…(汗))
・まとまらなく、自分勝手な内容になっていましたらすみません。自分が勉強をする前のセキュリティに対するイメージはこれからも記憶しておかないとと思いながら書きました。
・なんだかレンタルサーバー借りたくなってきました。
・このレビューを書いている時にこちらのスライドを拝見し、こんな背景があったのかと後から知りました(「徳丸本ができるまで」スライドを公開します - ockeghem(徳丸浩)の日記
・正誤表を参照しました(ソフトバンク クリエイティブ:【正誤情報】『体系的に学ぶ 安全なWebアプリケーションの作り方』)。

体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践
徳丸 浩
ソフトバンククリエイティブ
売り上げランキング: 2305