在宅勤務中のセキュアな開発 — ヒントとコツ
2020年3月31日
0 分で読めますリモート環境でセキュアに開発する
在宅勤務が長期化する中、さまざまな働き方を見直す必要があります。セキュリティも例外ではありません。リモートでの共同作業に慣れていない人も多く、セキュリティの実践方法や優先順位を変更する必要があるかもしれません。
そこで、リモートワークに移行したチームに合わせてセキュリティポリシーを調整する方法をいくつかご紹介します。こうした取り組みは、今すぐ役立つだけでなく、社員がオフィスに戻った後もセキュリティ対策を拡大するのに役立ちます。
便利なチートシートをダウンロード: リモート環境に移行した開発のセキュリティ対策。
ガイドラインを文書化し、(リモートの)開発者に裁量を与える
リモート開発では、特に子どもが走り回るなどの妨げがある場合、それぞれの開発者が自分のペースで作業を進め、非同期でコミュニケーションできるようにすることが重要です。承認を待つ時間が減り、意思決定の裁量が大きくなります。セキュリティの観点では、承認プロセスを見直し、どの判断を開発者に委ねられるかを検討します。承認を待たずに開発者が作業を進め、その行動や判断をチームに知らせられるようにしましょう。
裁量を与えるには、期待値のすり合わせが欠かせません。全員が、何をすべきか、タスクをどのように完了すればよいかを理解しているでしょうか。実践方法や期待事項を文書化することに投資すれば、開発者が一貫して適切な判断を下しやすくなります。
ビルドをなるべく止めずに、代わりにプルリクエストを失敗させる
セキュリティ違反によって「ビルドを失敗させる」ことは、CI/CDにおけるセキュリティ対策として広く使われていますが、作業を大きく妨げることもあります。ビルドが成功しなければソフトウェアを先に進められず、開発者は身動きが取れなくなります。すでに利用しているライブラリに新たな脆弱性が公表されるなど、外部要因によってビルドが止まる場合は特にそうです。
リモートかつ非同期で作業している場合、チームが問題を把握し、修正担当者を決め、解決するまでに時間がかかるため、こうした中断の影響はさらに大きくなります。すべての作業を止めて対処する必要がある重大な脆弱性など、本当に深刻なケースに限ってビルドを止めるようにしましょう。
それ以外の問題では、プルリクエストを失敗させましょう。プルリクエストには、次のような利点があります。
新たなコード変更だけをテストできるため、開発者自身で修正できる範囲に絞れます。
コードを変更するブランチ単位で実施できるため、個々の開発者の自律性を保てます。
失敗によってマージをブロックするか、情報提供のみにするかを選べるため、開発者が判断して作業を進められます。
セキュリティの可視性を高める
開発者の自律性は大切ですが、セキュリティを確保することも必要です。障害となるルールを設けるのではなく、ガバナンスと可視性によって実現しましょう。DevOpsから学んだのは、バグを迅速に検出して対処できるなら、ある程度はバグを含む状態でデプロイすることも許容できるということです。つまり、脆弱性をデプロイした直後に攻撃を受ける可能性は高くありません。問題を最初から持ち込まないことに比べて、迅速に対応するほうがほぼ同等の効果を得られ、作業への影響も抑えられます。
可視性を確保する方法はさまざまですが、いくつかご紹介します。
ビルドに計測機能を組み込み、アプリに含まれる依存関係を記録します。これはソフトウェア部品表(SBOM)と呼ばれます。SBOMを用意しておけば、新たに公表された脆弱性がプロジェクトに影響するかどうかを把握できます。
ビルドで検出した脆弱性(ビルドを停止するほど深刻ではないもの)を共有します。Slackチャンネルやメール通知を使えば、セキュリティチームのメンバーが定期的に問題を確認できます。
各チームがセキュリティの問題にどれだけ適切に対処しているかを示すランキングを作成しましょう。脆弱性の修正にかかった時間など、セキュリティ面での成果をチーム間で共有できます。ゲーム感覚を取り入れて、改善に向けた機運を高めることもできます。チームは時間とともに成長を実感したり、望む進歩が得られていない場合に軌道修正したりできます。ただし、このランキングは情報共有のみに使い、業績評価に利用したいという誘惑には抗いましょう。そうした使い方は、セキュリティを重視するオープンな文化づくりをかえって妨げることがあります。
セキュリティ担当者も開発者も、個人のスキルを高める
リモートワークでは自分で物事を進める力が求められるため、最初は気後れするかもしれません。一方で、多くのリモートワーカーは、通勤に費やしていた時間を学習に充てられるようになったと感じています。この機会を活用して、開発チームとセキュリティチームの両方のスキルアップを図りましょう。
開発者向けには、セキュリティ教育に投資しましょう。オンラインコンテンツのMyDevSecOps、OWASPやDevSecConのカンファレンス動画、SecureCodeWarriorのような商用ツールを活用できます。収益がCOVID-19の支援団体に寄付される、近日開催のオンラインイベントAllTheTalksもぜひご確認ください。
セキュリティ担当者は、この時間を使ってチームのコーディングスキルを身につけたり、向上させたりしましょう。DevSecOpsの時代を迎えるにあたり、こうしたスキルは大きな力になります。コーディングを学ぶことで、開発者への共感も深まります。学習を始める際に役立つリソースをご紹介します。
セキュリティ面での成果を称える
開発者がセキュリティ向上に貢献したときは、オンラインでねぎらいの言葉をかけましょう。開発者も一人の人間です。誰もが、良い仕事を続けるために認めてもらう必要があります。もちろん、称賛に値する成果です。
在宅勤務では、称賛がこれまで以上に大切です。オフィスでの声かけやハイタッチ(あるいは肘タッチ……)といった、相手の反応が伝わるやりとりができないため、オンラインで代わりの方法を見つける必要があります。在宅勤務では孤独や孤立を感じることがあります。よい仕事をした人を励ますだけで、大きな違いが生まれます。
よい仕事をどのように称えればよいでしょうか。方法はいろいろあるので、工夫してみましょう。いくつか例をご紹介します。
Slackやグループメールでねぎらいの言葉を伝えます。簡単ですが、大切なことです。一度きりでも、「今月のセキュリティチャンピオン」のような取り組みでも、続けることが重要です。ふさわしい成果であれば、会社のソーシャルアカウントで公開して称えることもできます。
ステッカーからTシャツ、パーカーまで、成果を上げた人に贈る特別なグッズを用意しましょう。The Secure Developerポッドキャストでも、多くの事例が紹介されています。
スパでの一日や、DefConの参加チケットと旅行など、金銭的価値のあるギフトを贈ります(状況が落ち着いた後もカンファレンスが開催されるなら)。
セキュリティ担当者と開発チームを連携させ、頻繁に交流する
関係を築くことは簡単ではありません。リモートで関係を築いたり維持したりするのは、さらに困難です。リモートで働く開発者が、セキュリティについて相談する相手をすぐに見つけられるよう、開発チームとセキュリティ担当者の連携を明確にしましょう。
連携のために組織を変更する必要はありません。日々の業務の中で人々をつなげればよいのです。アプリケーションセキュリティ、プロダクトセキュリティ、クラウドセキュリティなど、チームの分け方にかかわらず、セキュリティチームの各メンバーを開発チームのリードやディレクターと組み合わせます。両者で定期的な同期ミーティングを設定し、セキュリティ担当者が開発チームのオンライン朝会などにも参加するようにします。こうした活動は、組織全体を把握できるセキュリティチームのミーティングに加えて行います。Invisionでの取り組みについては、SaraがThe Secure Developerポッドキャストで説明しています。
セキュリティの基本に注力する
新たな日常に対応するには、重要なことを確実に行うための集中が欠かせません。セキュリティでは、専門的な攻撃よりも基本的な対策を優先することを意味します。大多数の企業にとって、脆弱なコンポーネント、設定ミス、漏えいしたトークンへの対処を拡大することは、高度な攻撃への対策よりも優先すべきです。
リモートの開発チーム全体でセキュリティの基本を徹底できたら、再び視野を広げましょう。COVID-19になぞらえるなら、防護服を買い始める前に、全員が定期的に手を洗うようにしましょう。
重要なインフラストラクチャの防御を見直す
特権ネットワークに依存している場合は、今こそ見直す時です。社員はVPNを利用できますが、自宅のネットワークや機器は社内環境よりもはるかに安全性が低いため、そこを経由する攻撃が増えると想定する必要があります。
多要素認証に投資し、導入を拡大する
この機会に、2要素認証の基盤への投資を始めましょう。クラウド環境を利用している場合も、VPN経由で社内インフラに接続している場合も、この時期にはリモートワーカーの認証を保護することが重要です。今回の投資は予定外かもしれませんが、将来的にはネットワーク上の他のシステムやクラウド環境にも認証機能を拡張できるため、大きな見返りが期待できます。
SSHのセキュリティを強化する
相互認証を有効にし、セッション時間を短縮すれば、SSH接続のセキュリティを強化できます。開発者はSSH経由で本番環境のマシンにアクセスすることが多く、接続先の認証には、マシンに常時保存されている静的な秘密鍵が使われます。
そうしたマシンの多くがリモート環境に移るほど、攻撃のリスクは高まります。そのため、これらのインターフェースでは認証を強化することが不可欠です。セッションタイムアウトを設定または短縮すれば、開発者のワークステーションがアイドル状態のまま、重要なシステムやコードリポジトリにログインし続けることも防げます。
さらに強化するには、NetflixのBLESSやSmallStepなどのオープンソースシステム、またはOktaなどの商用サービスを使い、IDベースの認証を強化することを検討してください。詳しくは、InfoQでの講演「マルウェア配布の媒介となる開発者」をご覧ください。
バグバウンティ
一時的に事業を停止する企業が出る中、ギグマーケットで仕事を探す人が増えるでしょう。バグバウンティプログラムを通じてセキュリティ評価戦略を強化するよい機会です。ソフトウェアの耐障害性を高めながら、仕事を必要とする人の雇用創出にも貢献できます。
バグバウンティは、セキュリティ評価の能力をさらに高め、研究者が組織に脆弱性を報告する方法を明確に示すのに有効です。利用を検討できるプラットフォームとして、Hacker OneやBugCrowdをご覧ください。プログラムの立ち上げに必要な作業の多くを支援してくれます。時間に余裕があれば、ハッカーとして参加してみるのもよいでしょう。
まとめ
多くの組織がリモートワークという新たな日常に適応する中、人々の普段の働き方を考慮し、その習慣に直接対応できるようセキュリティ対策を整えることが重要です。開発者の日々の業務を理解し、保護しながら仕事を完遂できるようにするセキュリティコントロールを構築することが、この困難な時期を乗り越えるうえで欠かせません。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップで、CTFチャレンジの解き方を学びましょう。



