2021

問題文

貴方は情報セキュリティに関する専門家としてコンサルティング業務を行っています. 顧客企業から次のような相談が来ましたので,この相談に対してアドバイスをしてください.

―――――――――――――――――――――――――――――――――――――――――――――

 

私どもの会社は、新型コロナウィルスが猛威を振るう中でリモートワークを促進するためのアプリケーションを開発し、好評を得ています。リモートワークアプリでは一般業務における共同作業を支援する機能を多数備えていますが、これらの技術を発展させて、新たな共同作業支援アプリを開発しました。新サービスは、近年ニーズが高いWebサービス開発をリモートワークで実施する、リモートWebサービス共同開発サービスになります。まだサービス開始したばかりですが、興味を持っていただける企業がいくつかあり、少数の企業様にサービスを提供しています。

 

このサービスはクラウドベースの開発・実行環境となっており、開発プロジェクトに適した環境のパラメータ(開発言語、ライブラリ、実行環境等)を入力することで、Webサービスを実行するための仮想マシンと、開発環境であるdockerコンテナのイメージを自動生成してくれます。仮想マシンは常時クラウド上で実行されており、開発したプログラムコードをその上で実行することで、Web上でサービスの動作テストをすることができます。一方、開発メンバは開発環境のdockerイメージを使って自身のPC上でdockerコンテナを起動するだけで、すぐに共同開発作業に参加できます。このdockerイメージは開発プロジェクトの専用ページからダウンロードできるのですが、その際に自分の好みのツール等を入力していただくことで、各メンバの嗜好に合わせてカスタマイズされた、各メンバ専用のdockerイメージを作成することも可能です。これにより、好みのエディタやツール等をメンバ毎に選ぶことができます。もちろん、コンテナに直接接続して開発していただくこともできますが、お好みのWebブラウザからコンテナにアクセスしていただきますと、エディタやファイルマネージャ、ビデオ会議機能が統合された、より快適な環境で作業していただくことができます。また、クラウド上の仮想マシンにはこの開発用dockerコンテナからしか接続できず、通信路も暗号化されますので、セキュリティの面でも安心してご利用いただけます。

 

共同開発作業においては、仮想マシンと各メンバのdockerコンテナの全てが同じソースコードを共有しており、誰かがコードを編集すると素早く同期され、最新の修正が反映される仕組みです。つまり、複数のメンバが同じファイルを同時に編集することができるようになっており、作業場所が離れていても常に最新のソースコードを共有している状態になります。一方でソーシャル面においては、各メンバはビデオ会議により接続され、音声と動画を用いたシームレスなコミュニケーションが可能になります。開発チームはビデオ会議で接続されて自由にコミュニケーションをとりながら、一体感をもってコーディングを進めることができます。これは、メンバがそれぞれ異なる場所で作業しながら、チーム内のコミュニケーションを補い、お互いの知識を集約した効率の良い開発を行うために効果を発揮します。例えば、最近ではペアプログラミングやモブプログラミング等の技法が話題になっていますが、このような生産性を向上する方法論も適用できると思います。

 

本サービスの特徴的な点は、メンバのdockerコンテナ上で部分的に実行環境が構築されており、Webサービスにおける任意のモジュール単位の実行テストを実施できることです。メンバを複数のサブグループに分割して各モジュールを担当するような場合には、各サブグループにファイルの編集・閲覧権限を柔軟に設定して、サブグループ毎に独立した開発活動ができるようになります。このために、デバッグのためにモジュール単位の実行シミュレーションがdockerコンテナの中でできるようになっています。つまり、モジュールのデバッグ作業は個人のPC内で完結しますので、各メンバが並行してデバッグ作業を実施できるようになっています。もちろん、グループ内の誰かがコードを編集している最中に他の人がコンパイルや実行をしてしまうとエラーになりますから、このような現象を防ぐために、メンバが一部のファイルの同期を一時的に解除してローカルで試行錯誤をする機能などが搭載されています。これらの機能と、ビデオ会議をグループに分割できる機能を併用することで、柔軟にグループ編成を変更しながら開発作業を同時並行に実施することができます。

 

チームメンバも柔軟に編成できるように工夫されています。開発メンバの作業場所が分散している状況では、IPアドレス等による所属企業の認証は十分に機能しません。そこで、多要素認証等により十分にセキュリティが確保されたG社のアカウントを用いたソーシャルログインを採用しました。つまり、開発メンバにはG社のメールアドレスを取得してもらい、そのメールアドレスを本サービスに登録することで開発チームに招待します。招待された開発メンバは、そのアカウントにより、OAuthを用いたソーシャルログインを通じて開発プロジェクトにログインできます。このことにより、自社の社員だけでなく下請け企業のエンジニアや、場合によってはクラウドソーシング等で集めたエンジニア等もチームに含めることができ、状況に応じた自由な開発チームの編成に対応できます。

 

招待された開発メンバは、先述の通り、ダウンロードしたdockerイメージを使ってdockerコンテナを起動することで、開発プロジェクトに参加します。dockerコンテナを起動すると、自動的にファイルが同期されてチームに合流できますが、作業場所のネットワークに応じて柔軟に接続動作を変更できます。例えば、外出先のカフェ等で作業をしている場合は、通信コストがかかるかもしれません。そのような場合には、ビデオ会議の動画や音声をOFFにして通信量を節約することが可能です。万一オフラインの場合にはdockerコンテナだけでも開発はでき、再接続時には同期されて自動的に最新の編集内容が反映されるので、場所を問わずに開発作業を行えます。また、自宅のWi-Fi接続が安定しないことはよくありますが、本システムではこれにも対応します。つまり、ブロードバンド環境下では、まず音声を、ついで映像を優先して通信し、余った帯域でファイル同期を行います。さらに、dockerイメージがあれば作業ができますので、自宅とオフィスなど複数のPCで作業をすることも可能で、常に一台のノートPCを持ち歩かなくても開発作業ができます。このように、働く場所を問わず、その環境に応じて柔軟に対応してくれる利便性は、在宅で働く方には評判が良く、他社と差別化する機能と自負しています。

 

サービス開始から暫くの間は特に問題は起こらず、顧客からも一定の支持を得ていたのですが、先日ある顧客から、開発したプログラムコードが改変されているというクレームがありました。自分が開発したコードが勝手に書き換えられており、誤った動作をするように変更された箇所があるとのことです。もちろん、チーム開発なので他の人にも編集権限は設定されていましたが、彼らに聞いても知らないと言っているそうです。また、セキュリティホールがあることを発見して修正した箇所が、元のコードに戻されていたこともあるそうです。悪意ある外部の誰かによってコードが編集されていると思われるので、早急に本サービスのセキュリティについて調査をするようにと要求をしておられます。本プロジェクトのチームリーダに聞いたところ、プロジェクトは60人月程度で完成させる開発案件であり、納期に余裕がないため外部からも急いで人を集めて編成したチームだそうですが、一人一人面接をして技術力に信頼がおけそうな人を選んだので問題はないはずだと言っています。実際に、この問題以外はプロジェクトは順調に進んでおり、スケジュールの半分以上を問題なく消化できているそうです。

 

このようなトラブルが起こると我々のサービスの信頼感は崩れますし、先方のシステムの納期にも余裕がなく、チームメンバも動揺しているとのことで、すぐにでも解決をして欲しいとのことです。どのような原因の可能性があり、どのように調査や対応をすれば良いのでしょうか。今後の対処方法について、アドバイスをいただけると助かります。また、もし本サービスの設計に問題等ありましたら今後の改善につなげたいと思いますので、お気づきの点がありましたらご指導ください。

 

お手数をおかけしますが、どうぞよろしくお願いします。

 

〇×フューチャーシステムズ 大熊猫三郎

講評

今年は新型コロナの渦中に実施した一次予選でしたが、例年と同等数のチームの参加がありました。参加されたチームの皆様におかれましては、チームメンバーとなかなか顔を合わせられない状況の中でのチーム編成は苦労されたのではないかと思います。また、ただ参加されただけでなく、授業が開始される中で例年よりもさらにレベルの高い回答書が集まりました。遠隔でもしっかりと相談をされて、チームワーク良く作業をされたのだと思います。様々な活動が制限される中でもこれだけのパフォーマンスを発揮された皆様に敬意を表するとともに、皆様のことを誇らしく思います。一次予選を通過できるチームは残念ながら12チームに限られるため、皆様の中には涙をのむチームもあるわけですが、がっかりしないで、自信を持って今後も技術・スキルの研鑽に勤しんでいただけましたらと思います。

さて、今年の問題は新型コロナ下で有用なツールとして、遠隔地でも協調的にプログラム開発ができるサービスを考えてみました。コンテナやソーシャルログインなどの比較的新しい技術も入れての出題でしたが、どのチームもこれらの技術をしっかり理解した上で対応してこられたのはさすがでした。リモートワークにおいては、どのように他の人と協調してシームレスに作業を進められるか、という点が一つの鍵になります。これを、ビデオ会議システムと、柔軟な権限設定に基づいた共同編集機能によって補い、コンテナを用いて実行テストまでローカルでできてしまうという想定になっています。実用的には素晴らしいサービスですが、本当にこれをやろうとすると、皆さんがご指摘のように同期機構をどう作り込むかという問題や、そもそも実行テスト環境をどうやって作るのか、というような話が出てくるわけですし、また、システム開発は金額規模が大きい事業ですから実績がないサービスなのでじゃあ使ってみようなんて企業はなかなかないと思われるのですが、まあそれはそれ、ということでどうぞお許しいただきたく思います。

いざみなさんの回答書を拝見すると、多くのチームが可能性のある原因をほぼ網羅された指摘をされていて、驚きました。もはやこのコンテストでは、インシデントの可能性を洗い出す部分では競技が成り立たないのですね。つまり、問題になりそうな原因は全てわかった上で、それらにどのように優先度をつけて、どのように解決まで進めるのか、そのような解決までの戦略立案のところでの差を競うことになってきます。今回の場合であれば、ファイル同期の問題、人的問題、そして外部からの侵入という技術的問題がある中で、これらをどのような情報を用いてどう切り分けていくのか、そして作業の順番や時期はどう設計すれば良いのか、というところを説得力のある形で示してもらうことが、一次予選突破の鍵となると思います。

まずお伝えしたいのは、今回の場合に一番考えて欲しいのは、顧客のニーズだということです。システム開発というのは予算規模の大きな事業ですし、納期も厳しいわけですから、顧客側としてはできるだけ開発を止めずにスケジュール通りに進めたい、という要求が強くあります。このニーズに応えてあげるのが、信頼されるコンサルタントとして重要です。今回起きたことはソースコードの一部の不整合ですが、これが開発を止める必要のない問題から起きているのかどうか、これをまず特定してあげてほしいですし、もし応急措置を施せば開発が続けられるのであれば、そのような措置を講じてあげたいところです。もしインシデントが外部からの侵入ではなく単なる同期の問題だったり、誰かの勘違いであれば、それが可能になります。ログ等の解析ですぐにそれを判定できるならば(ログがあるとは書かれていませんが)、それがほぼ初動対応と言っても良い作業になるのではないでしょうか。そうやって顧客のニーズに基づいて事象を切り分けてあげることを意識したいものです。同様に、インシデントがあったと他の顧客に伝えるかどうかも、判断を挟む余地があります。もし顧客の勘違いであったら、インシデントの可能性を伝えることは無用な不安を招くだけです。すぐに対応できるバグフィックス程度のものの事案であれば、即時に対応して事後報告としても良いのです。

みなさんの回答書を一通り読ませていただいたところ、上記のような顧客への対応ができているものが少なかったと思います。そして結果的には、このことも含めて、今後どのように対応を進めていけば良いのか、その戦略を書けているかどうかが、勝敗を分ける基準になりました。初動対応としてテンプレート的な事項(基本的な連絡事項や証拠保全など)のみを書いている人が多かったと思いますが、それだけでは不十分で、すぐに切り分けて対応できる事項は初動対応(にあたるくらいの初期対応)に含めてしまいたいところです。また、どのような情報からそれらの切り分けを行い、どのように対応していくのか、その展望を示せることも、顧客が何をすれば良いかを明確にするので重要です。予選突破チームの選出は、特にボーダーライン付近は僅差で悩ましい状況でしたが、このような対応戦略が(ある程度でも)書けているかどうかという基準で線引きができました。多くのチームは、原因可能性を列挙して個別に対応方法を書いていましたが、次回からは対応戦略を納得できる形で示すことを意識していただければと思います。

せっかくですので、もう少し細かいことも書いておきましょう。今回のインシデント対応では、(まあ、書面だけではそうなると思いますが)技術的内容はあまり深堀りすることができません。今回ですと、例えばdockerイメージ自体の漏洩や認証の問題、OAuthに関する一般的な技術的指摘などを求めたつもりですが、逆に言えば、その程度の深さまでしか皆さんに求めることができません。仮想マシンやコンテナ、クラウドへの侵入など細かい可能性を挙げればきりがありませんが、それらは一つ一つを分離して詳しく書くのではなく、例えば「サーバやコンテナ等への侵入」などと大きく括って記述量を減らす方がわかりやすいでしょう。技術的事項を細かく列挙された方は参考にしてもらえればと思います。また、今回の事象の中で「プログラムコードの書き換え」は、単なる同期機構の問題では発生しないと思われますが、当事者の勘違いや、複数人による同時編集の過程でそう思ってしまう可能性がある事象だと思います。つまり、セキュリティに関するインシデントと断定するのは早計で、その前段階の判断を計画に入れたいところです。

あとは長期的視野からの同期機構の改善問題ですね。これは私たちも深く考えずに問題文を書きましたが、多くのチームから複数の提案をいただいて、とても興味深く拝見させていただきました。現実にこの機能を実現する場合にはアプリケーションの設計とも連動した複数の選択肢が検討されるのだろうと思いますし、正解は存在しないでしょうけれども、皆さんの回答を合わせていくと検討すべき方向性が見えそうな気がしました。本件はシステム運用やセキュリティというよりはサービス設計の問題ですが、しっかり対応されていて皆さんの視野の広さを感じました。他の長期的改善の提案についても同様に、皆さんの提案を合わせると方向性が見えてきそうで、このサービスに関する皆さんの本質部分に対する理解を感じました。システム開発もそうですが、セキュリティ・運用支援分野も、顧客の業務に対する本質的な理解が基礎になります。そういう意味では、幅広く活躍できる真のセキュリティ技術者としての期待がもてそうだと喜んでいるところです。


我々からのコメントは以上です。
改めて、一次予選お疲れ様でした。楽しんでいただけたなら幸いです。
二次予選に進まれる方は、ぜひ本戦出場を目指して、頑張ってください!

第16回情報危機管理コンテスト一次予選担当

吉廣・藤本