• Twitter
  • Facebook
  • Google+
  • RSS

バグハンター・にしむねあ氏特製“脆弱性たっぷり”Webアプリを半日でどこまで「堅牢化」できるか?――セキュリティのプロが勉強会を通じて伝えたかったこと

「脆弱性てんこもりのソーシャルメディアアプリケーション」を半日で堅牢化できるか? “セキュリティのプロ”リクルートテクノロジーズの西村宗晃(にしむねあ)さんによる勉強会とその意義をレポートします。


(※この記事は、株式会社リクルートテクノロジーズ提供によるPR記事です)

クロスサイトスクリプティング(XSS)やSQLインジェクション、ディレクトリトラバーサルといったWebアプリケーションの脆弱性について、知識としては知っているエンジニアが大半だろう。だがこの勉強会では、にしむねあ氏がGitHubで公開したソースコードを目で見て確認し、手を動かして修正するまでを実践するところがポイントだ。

GitHub - nishimunea/bootcampsns

にしむねあ氏が用意したアプリケーションには9つの脆弱性が仕込まれていた。Speeeのエンジニアは2人1組(中にはチーム「1人」もあった)でこのコードを解析し、どこに脆弱性があるかを特定し、修正する作業にもくもくと取り組んだ。

参加したエンジニアたちは、もくもくとソースコードと格闘していた

5~7時間かけて一通り「堅牢化」が完了した後には、にしむねあ氏率いるリクルートテクノロジーズの若手エンジニアチームが攻撃コードを打ち込み、修正が有効か、それとも見落とした脆弱性が残っているかを確認した。中には早々と作業を終えて「いつでもかかってこい!」と宣言し、その言葉通り、ほぼすべての脆弱性を修正したチームもあった。にしむねあ氏が公開した演習アプリに対して、「運用を考えるとこうした方がいいのでは」というプルリクエストも送られてきたそうだ。

一通り演習を終えた最後の「種明かし」の時間、にしむねあ氏が、大文字・小文字の罠やスペースの罠、問題をはらんだ関数の扱い方や脆弱性診断ツール「Burp Suite」の使い方を紹介すると、会場からは「おおー、そうだったのか」など納得の声が上がった。さらに「もしWebブラウザ側に脆弱性があったらどうなりますか?」といった質問が積極的に飛び出し、懇親会でも盛んに反省が交わされたようだ。

普段はiOSアプリ開発に携わっているという参加者の一人は、いつもとは異なるプラットフォームが相手ということもあり、「だいだいこの辺が怪しいな、という当たりは付いたけれど、直し方が分からなくて歯がゆかった。知識は手の動かし方とセットになっていないといけない」と振り返っていた。

■ 開発者から得た気付き、開発者に提供する気付き

インフラ担当者はもちろん、Webサービスの開発者にとっても、セキュリティは無縁の問題ではなくなりつつある。コードのリリース前にチェックを行い、指摘された脆弱性を修正しない限りリリースさせない、といった仕組みを取り入れ始めた現場もあるようだ。

「趣味は脆弱性を探すこと、仕事も脆弱性を探すこと」というWebセキュリティエンジニア・にしむねあ氏は、リクルートテクノロジーズの新入社員研修で「Web Application Hardening」を実施している。


Web Application Hardening // Speaker Deck

この内容をもとに今回の社外勉強会が開催された。「勉強会をやるからにはしっかりとしたものをやり、意義を見出さなくてはいけません。また、西村個人としても最前線の開発者が注目している技術や考え方、スタンスを学びたいと考えました」(にしむねあ氏)

西村 宗晃(にしむねあ)さん
シニアセキュリティエンジニア
ITソリューション統括部
サイバーセキュリティエンジニアリング部
クオリティマネジメントグループ
兼 インシデントレスポンスグループ

ただ、開発者にとって本来の、そして最大のミッションは、より良いサービスをより早く提供すること。出来上がったコードに「No」を突き付けて、そのミッションが達成できなくなっては本末転倒だ。開発者に寄り添いながらセキュリティ面でもより良いものを実現できないだろうか……この取り組みの背景にはそんな思いがあったという。

「セキュリティの人って、どうしてもセキュリティのことだけを考えてバランスが悪くなりがちなんですよ。開発の現場からすると、リリースの早期化やサービスの価値の部分に労力を傾けたいのに、『いや、ここに穴があるから直してくれ』と強く言い過ぎてしまったり……。『脆弱性が出たのでパッチを当ててください』と簡単に言うけれど、言われた側は場合によっては数週間ほど開発を止めて検証していたりします。実際、今回の課題にも使ったライブラリの脆弱性では、アップデートすると画像の質に影響が出てユーザー離れにつながりかねず、開発者が検証に大きな苦労を強いられたことを、演習の中のやり取りで学びました。セキュリティ担当者が発言する裏側で、開発者が大変な思いをしているのではないか、その部分をきちんと考えられる機会を作ろうという意味で、今回のお話を引き受けました」(にしむねあ氏)

同時に、参加してもらった開発者に、さまざまな「気付き」を提供できればという思いがあったという。

例えば、Ruby on Railsに関してはセキュアなコードを書くためのフレームワークやツール、ドキュメント類が提供されており、昔ほど記述に気を使わなくてもある程度セキュアなコードが作成できるようになった。

「それ自体はすごく良いことなんですが、だからといって、完全に穴がなくなるわけではないんですよ。『このコードの書き方って、外部から悪用されたりしないかな』と、一歩立ち止まって自分のコードを第三者の視点で見ることが必要です」(にしむねあ氏)。実際の攻撃を体験し、ログを確認することで、脆弱性はこのように狙われる恐れがあるという気付きを得てもらえればと考えていたそうだ。

勉強会の様子。脆弱性対策を完了したチームには、リクルートテクノロジーズチームからの攻撃コードが飛ぶ

もう一つは、サービス全体を見据えた視点の重要性だ。今回仕込まれた脆弱性の中には、クロスサイトスクリプティングなど典型的なWebアプリケーションの脆弱性もあれば、Linuxに標準で含まれているライブラリの脆弱性など、アプリ開発者としては「これって自分の担当かな?」という印象を抱くものも含まれていた。実際に参加者の中には、「これって本当に僕らの仕事なのかな……でも誰かがやらないといけない問題なのも確かだしな……」と思わず漏らした人もいた。

にしむねあ氏は「開発した時点では安全でも、そのうちに脆弱性が見つかり、相対的に安全ではなくなっていくのが世の常です。自分たちの担当はアプリの開発だとしても、それを支えるプラットフォームやフレームワーク、ミドルウェア、サーバ、それにフロントでリクエストを受け付けるネットワーク機器などを含め、トータルでシステムなんですね。それら全体に対して脆弱性が出ていないかどうか、攻撃方法があるかどうかを見ていかないと、せっかく自分たちの書いたコードは超安全でも、下回りを狙われてしまう恐れがあります。これって、自分の役割をRubyの開発者に限定してしまうと、なかなか気付けない問題なんですよ」と述べている。

つまり、開発者とインフラ担当者、それに脆弱性に関する知見を備えたセキュリティ技術者が協力して、「より良いサービスを提供する」という目的の下、一つのチームとして取り組むことが重要だと言う。

そのためセキュリティ担当者としても、「脆弱性を修正するパッチを適用してほしいという話をしながらも、同時に開発者の立場を考慮し、頭ごなしに『アップデートして』だけではない、別の道を模索することもできると思うんです。例えば今回の課題に用いた脆弱性は、アップロードされるファイルの種類を確認して限定するコードを2、3行追加することでも回避できる。そういったバランス感を持ちながら、開発現場とやり取りできるようになりたいし、そういったフィードバックを得られたことが私にとっての学びです」(にしむねあ氏)

■ 開発者を萎縮させず、“お友達アプローチ”でセキュアなサービスを

開発者と手を取り合いながらのセキュリティ対策という考え方は、リクルートテクノロジーズが1ヶ月ほど前に組織した「RECRUIT REDTEAM」の背景にも流れている。「レッドチーム」とは、セキュリティに積極的に取り組んできた企業を中心に、最近注目を集めている方式だ。自社システムに実際の攻撃者の目線で攻撃を試み、どんな侵害が可能かを検査することでリスクを明らかにする。

「攻撃者の手法やメソドロジーを理解し、攻撃する側の立場からリスクを考えることで、セキュリティ対策の優先順位をつける材料を提供するのが、レッドチームの主な役割です。脆弱性がたくさんある中で、『これは即日攻撃がやってくる可能性があるのですぐ対応を』『こっちはそんなに狙われないから先でも構わない』といった具合に、ビジネスのスピード感や予算感、セキュリティ上やるべきことを経営サイドが合理的に判断するために、攻撃者の目線を提供します」(にしむねあ氏)

かつては「同じ社内に攻撃するなんてとんでもない!」という感想を持たれることもあったレッドチームだが、実際に攻撃を行ってみると、今まで開発者が気付かなかったリスク、ルールの外で起こり得るリスクが洗い出され、その効果が評価され始めている。

にしむねあ氏は、レッドチームによる攻撃を通じ、リスクベースの考え方を持ち込むことで「建設的な議論のための土壌ができるのが大事だと思うんです」と述べた。

「ガバナンス色を強くして、最前線にいる事業部の方に『これがルールですから守ってください、じゃないとリリースさせません』と押し付けていると、相手が萎縮してしまいがちです。せっかく開発者がセキュリティや脆弱性の情報をキャッチして、うちのサービスは大丈夫かなと考えていても、『あいつらに話をしてもやることが増えるだけ。上から目線だし、怖くて聞けない』ともやもやされたままで終わってしまうのはもったいない。会社として一緒にサービスを安全にしていこう、という“お友達アプローチ”でいこうと思っています」(にしむねあ氏)

こうした活動を通じて「あいつはセキュリティの、守りのプロだ、俺たちは開発のプロだ。後ろから鉄砲を撃ってくるのではなく、最前線で一緒に戦う仲間だ。そんなふうに思ってもらうことが必要だと思っています」という。

* * *

にしむねあ氏らは今後も開発者に寄り添い、より良いサービス作りを実現していくため、同様の試みを他社でも実施する予定だ。そのほかリクルートテクノロジーズ社内で作成したセキュアコーディングガイドや脆弱性検出ツールなどを社外にも公開し、開発者からのフィードバックを得てより良いものにしていきたいという。

ビールと寿司と、反省の言葉が飛び交った懇親会

[PR]企画・制作:はてな

取材・構成・写真:高橋睦美