新卒で入社したA社は、親会社B社のシステムの内製と、B社の顧客層向けのパッケージソフトウェアを制作販売するソフトウェアハウスだった。
入社1年目の自分は、いくつかの細かい業務を平行して担当することになったが、その中にホームページの管理があった。主な業務は、ページの文章の更新と確認、誤字脱字の修正、古く間違ったHTMLの修正など。
会社のホームページには自社のサービスや製品だけを扱う小さなショッピングシステムがあり、ユーザ登録・ログイン・購入・履歴確認など一通りの機能を持っていた。このシステムを改修したり更新したりする予定はなかったが、せっかく担当となったわけだし、以前から興味のあったWebアプリケーションのセキュリティを勉強しようと、徳丸本を購入した。(当時は紙の本しかなかった)
http://tatsu-zine.com/books/sbcr-taiketekinimanabu
この本は説明不要の名著で、平易な文章で細かく正確な記述がなされている。Webアプリケーション制作に携わる新人プログラマは必読だ。
頭から読み進める。1章に用語の整理があるおかげでだいぶ理解しやすい。2章の実習環境の用意は、都合がつかず読み飛ばした。3章は流し読みし、いよいよ4章。様々な脆弱性を個別にとり挙げ、原因と対策について具体的な説明がされており、非常に興味深い。
なるほど、XSS(クロスサイト・スクリプティング)という言葉は知っていたが、具体的にこういうものなのだな。入力ボックスに入力した内容が遷移後のページに表示されるというUIはよくあるから、気をつけなければ……そういえば、会社のホームページにも検索機能があって、「検索ワード:○○」と表示されるところがあったな。あれもXSS対策がされているはずだ。どれ、見てみよう。テスト用サーバで画面を表示して、<script>alert(1)</script>(本当は半角)と入力……
検索ワード: +----------------+ | | | 1 | | [ OK ] | +----------------+
なるほどこれがXSSか。実習環境の用意はしなかったが、実物を拝むことができたぞ。脆弱性の修正の実習もできるな。
このようにして、徳丸本を読み進め、(テスト用サーバで)攻撃を実践しながら、脆弱性を直していった。覚えている限りでは、以下の実習ができた:
ショッピングシステムの中身が、フレームワークやライブラリなし・SQL発行共通関数なし・オブジェクト指向なし・数万行の巨大ファイル1つであることを知ったのは、脆弱性の修正にとりかかってからだった。その他のシステムもすべてこのショッピングシステムを参考に作られているらしく、プレースホルダもエスケープもない文字列組み立てSQL発行があらゆる場所に散乱していた。とても直し甲斐があるシステムであった。
これらのシステムは、日付zip以上のバージョン管理が行われていなかったため、該当部分を誰が書いたのかはわからなかった。そんな状況であったので、大量に報告された脆弱性の始末書は、すべて現在の担当である自分が書くことになった。
自分が入社するより前からあった、誰が作ったのかもわからない脆弱性を、探し修正し始末書を書いた。「私が担当になる前からあった脆弱性なので、原因はわかりません。おそらく不勉強が原因です。対策は、勉強会とコードレビューとバージョン管理です。」などと書いた。今思えば、"よい始末書"の書き方を勉強する機会を逃していたのかもしれない。
自分の作業はすべてgitで記録していたので、自分が担当になったときにはすでに脆弱性があったと主張したが、「自分だけバージョン管理などという便利なものを使っていてずるい」と怒られて終わった。(なお、それよりも前に社内でのバージョン管理ツールの使用は提言していたし、それが「よくわからないから」と却下されてからは、自分だけで使う許可は得ていた。)この経験から、バージョン管理をしていない、もしくはクソみたいな管理しかしていない組織内で、自分だけでも上手く管理する方法についての知見を得た。
こうして、徳丸本の内容を実践しながら学習できたので、セキュリティ分野についての興味はより高まり、知識も増え、A社に対する信頼はほとんど失われたので、さらに勉強し、3年目に入るころには情報セキュリティスペシャリスト試験に合格し、転職した。
Webサービスのセキュリティを勉強したいと思ったならば、徳丸本を読んで、実践しながら勉強することを強く推奨する。紙の本には実験用環境のCDもついているので、A社でホームページを担当していなくても、実践しながら勉強することが可能だ。(電子版の場合はどうなのだろうか。申し訳ないが各自確認していただきたい。)
サイトのステマ辞めろよクズ