はじめに
SIerでWEBアプリケーションの開発を行っているエンジニアです。(Windows Formsでデスクトップアプリも作成してます)
ここ数年、会社でスクラッチでWEBアプリを開発しました。(言語はC#、ASP.NETのWEBフォームを使用)
その際、先輩プログラマーがセキュリティ対策の実装をして下さったのですが、自分もセキュアPGの知識を習得したい!ということで、今年の6月に発売された「安全なWebアプリケーションの作り方 第2版」を購入・読んでいます。ただ個人で読破するには大変な量なので、compassで開催されている輪読会にも継続で参加・発表してます。
今回、その「安全なWebアプリケーションの作り方 第2版」(以後「徳丸本」と表記)の著者である徳丸浩さんが書籍に関する勉強会を開催するということで、これは質問するチャンス!と思って参加しました。その際のメモ(ブログ枠で参加してます)です。
*勉強会を知った経緯は、徳丸先生と同じ会社に勤める方が主催するOWASP ZAPの勉強会 脆弱性診断ええんやで(^^) で教えて頂きました。
徳丸本ではPHPをメインに扱っていますが、ASP.NET版のセキュリティ実装例を書き上げることが個人的な目標です。
勉強会内容
■ 当日の勉強会のおおまかな内容は以下の通り。
・著者 徳丸先生の自己紹介
・徳丸本第2版での改定内容
・OWASP Top10(2017)への対応状況
・第2版と初版での実習環境の違い
・徳丸本の読み方
・第2版で追加された脆弱性のデモ
- PDFのFormCalcによるコンテンツハイジャック
- 安全でないデシリアライゼーション
- XML外部実体参照(XXE)
・伝統的なセキュリティ対策に対する徳丸先生の意見
・良い脆弱性サンプルサイト(やられサイト)とは
・アジャイル開発でのセキュアPGプロセス
以下、それぞれの詳細を簡単に記載します。
徳丸先生の自己紹介
EGセキュアソリューションズのHPより転載
■ 徳丸 浩(とくまる ひろし)
1985年京セラ株式会社に入社後、ソフトウェアの開発、企画に従事。1999年に携帯電話向け認証課金基盤の方式設計を担当したことをきっかけにWebアプリケーションのセキュリティに興味を持つ。2004年同分野を事業化。2008年独立して、Webアプリケーションセキュリティを専門分野とするHASHコンサルティング株式会社(現EGセキュアソリューションズ株式会社)を設立。脆弱性診断やコンサルティング業務のかたわら、ブログや勉強会などを通じてセキュリティの啓蒙活動をおこなっている。
自分は正直に言うと、徳丸本を読むまで著者のことを知らなかったです。
IPA(独立行政法人情報処理推進機構)やOWASP(The Open Web Application Security Project)の活動にも貢献されてます。
IPAの「ウェブ健康診断仕様」も執筆されてますが、ただし情報が2012年とちょっと古い...。
OWASPの「脆弱性診断ガイドライン(2018年6月1日公開版)」みたく更新されることを希望してます。
徳丸本第2版での改定内容
第2版で追加した脆弱性や、初版では記載したが「現在では発生頻度が低い/紙面の都合で...」という理由で削除した脆弱性があります。
第2版で追加したものは、下記の通り(全ては記載できていないです)。削除されたものは割愛。
・CORS(Cross-Origin Resource Sharing)
・クリックジャッキング
・ファイルアップロード(PDFのFormCalc)
・デシリアライゼージョン
・XEE等
OWASP Top10(2017)への対応状況
第2版は、OWASPが発表する「OWASP Top10(2017)」(3年周期で発表される、様々なセキュリティ専門家たちが作成した、Webアプリケーションセキュリティ脅威動向に関する文書)のA1〜A10の脆弱性全てについて対応・記載している。
⇨ 要は、主要な脆弱性は全て記載している。システム開発の発注の場面で「セキュリティは、OWASP Top10で指摘される脆弱性は対策を盛り込むこと」等という要件があったりするので、IPAやOWASP Top10の情報はチェックする必要があります。
事実、セキュリティ事故の責任所在でIPAが指摘する脆弱性対策を実施していない為に開発ベンダーが賠償金を支払うといった事例もあり、セキュリティ要件が不明確な場合でも脆弱性対策は必至です。
*ある判決、要件にないことで責任を負わされたシステム開発会社の悲劇
第2版と初版での実習環境の違い
実習環境が第2版と初版で異なります。
仮想マシン(VirtualBox)や、プロキシツール(OWASP ZAP)、対応OS(Windows/Mac対応)など。
メールアプリにWebメールを採用できたことは良いヒラメキ💡だったらしい。
初版は自分でメーラーを用意する必要があったのが、第2版は利用者が用意するのはFireFoxやOWASP ZAP、(VirtualBox)だけで、あとは全て仮想マシン側にあるのは便利だと思います。
ちなみにプロキシツールは、OWASP ZAPに拘りはなくBurp Suiteを採用しても良かったらしい...。
徳丸本の読み方
分厚い本なので(輪読会企画するなら、Kindle本をお勧めします)、全てを読み切るのは大変です。
ということで、徳丸先生がオススメする読み方を次の通りです。(脆弱性が紹介される4章のみを記載)
・XSSとSQLインジェクションは必ず読む
・それ以外の脆弱性(CSRFやメール送信を始め、10程度の脆弱性を紹介)は、実際に開発する場面で都度読む
・Web APIとJavaScriptの問題(Dom Based XSS)はフロントエンドが流行している今時の問題なので、是非一度読んで欲しい
*実際に脆弱性を経験することが大事で、開発者ツール等でエラーを確認する場合はエラーを確認するところまでをやって欲しいとのこと
第2版で追加された脆弱性のデモ
第二版で追加された脆弱性のうち、以下の3つを会場に用意した端末で確認しました。
*自分は勉強会に参加した時点で読めていない部分・脆弱性であり、内容はあまり理解できず...。
① PDFのFormCalcによるコンテンツハイジャック
- 攻撃対象サイトに脆弱性はなく、Adobe Readerの仕様に問題があるとのこと。
② 安全でないデシリアライゼージョン
- 書籍では、以下の通りに紹介
シリアライズとデシリアライズは、コンテンツ管理システム(CMS)やアプリケーションフレームワークの内部ではよく用いられますが、シリアライズされたデータが信頼できない場合、デシリアライズ処理の際に意図しないオブジェクトがアプリケーション内に生成され、場合によっては任意のコードを実行させてしまう場合があります。
概要を読んだだけでは理解できず。実際に脆弱性を体験する・本をしっかり読んで理解します。
③ XML外部参照(XXE)
- 書籍では、以下の通りに紹介
XMLには外部実体参照という機能があり外部ファイルの内容を取り込むことができます。XMLデータを外部から受け取るプログラムは、外部実体参照の形でWebサーバー内部のファイルなどを不正に読み取られる可能性があります。
これも実際に脆弱性を体験する・本をしっかり読んで理解します。
伝統的なセキュリティ対策に対する徳丸先生の意見
伝統的なセキュリティ対策(よくあるセキュリティ対策)に対する徳丸先生の見解を4つほど紹介がありました。
① パスワードポリシー
② ソフトウェアのバージョン表示
③ パスワードはマスク表示すべきか
④ 認証エラーメッセージ
(IDとパスワードがいずれかが誤っている場合に「IDかパスワードのいずれかに誤りがあります」って
どうなの?という話 )
書籍のコラムで紹介されてます。
良い脆弱性サンプルサイト(やられサイト)とは
良いやられサイトとして「Bad Todo List」を用意したという話がありました。
*「良いやられサイト」とは、「紹介する脆弱性が明確であること」「一つの脆弱性を紹介する際に、他の脆弱性が混入しないこと」と定義されてました。
アジャイル開発でのセキュアPGプロセス
自分はウォーターフォール型のシステム開発しか経験したことがないので、アジャイル開発の話はピンとこなかったのですが、アジャイル開発時にもセキュアPGを行う上でポイントがあるということでした。
これも書籍にて紹介されています。
感想(公式勉強会に関する所感や、書籍に関する所感)
■ 公式勉強会に関する所感
書籍で紹介しているOWASP ZAPでの自動診断や手動診断に興味があり参加したので、発表内容以外でのQA時間も欲しかったです。勉強会の参加目的は人それぞれ(先生を一度拝見したい、書籍で分からない部分があり質問したいなど)ですが、書籍に関する勉強会ならば書籍に関するQA時間も欲しかったです。
*QA時間が無かったと言いつつ、勉強会後に個人的に直接質問させて頂いてます。
■ 書籍を読んだ感想
実際の攻撃例が紹介されて勉強になる(XSSは特に勉強になった)、実際にセキュリティベンダに脆弱性診断を依頼して指摘される報告書の内容を具体的に解説したイメージで分かりやすく、良い本だと思います(報告書は「こういうリスクがあります。XXの対策を講じることを推奨します」程度の記載だけで、脆弱性の具体例とかは分からないことが多かった)。
もっと書いて欲しいなと思う情報は、徳丸先生自身も推していた「自動診断」「手動診断」の部分です。
書籍では、PHPのWebアプリを対象にしていましたが、他言語や色んなフレームワークにも対応して欲しかったです。
- サーバサイドだと、Java EEやStruts、ASP.NETなど、トークンチェックやセッションID管理が複雑・特徴あるもの
- フロントエンドだと、SPAを採用しているWebアプリや、JavaScript(Reactなど流行りのフレームワーク)がメインのもの
OWASP ZAPの自動診断で対応できること・手動診断を採用した方が良い場合などが書いてあると、自分で脆弱性診断を行う場合の必携本になったはずと思います。(その内容で一冊の本を出版できる可能性がありますが...)
以上です。