セキュリティはいつでも開発者の不安のタネです。「うちの入社1年目の若手開発者はセキュアな Go コードを書けているのか」「彼/彼女のメンターはちゃんとセキュリティ上の問題を発見できているのか」というのは、マネージャ層から見ても悩みのタネでしょう。 しかし、よくある Go コードのセキュリティ上の問題や、一度人力で見つけた脆弱なコードパターンを CI 中で検出してやれたらどうでしょうか。きっと開発者も、チームのマネージャーも、もっと安心してプロダクトを前に進められるはずです。本発表ではあなたやあなたのチームを助けてくれる、Go コードのための「ガードレール」を整備するための方法をお伝えします。
背景
Go に限らず「セキュアなコードに書く」 というのは難しいものです。「他の人にセキュアなコードを書いてもらう」というのは更に難しいものです。 このような課題意識のもと、近年は Go コードのセキュリティチェックのために利用できるツールが盛んに開発されています。
その一例が gosec という、Go コードの簡易的なセキュリティスキャンを行うためのツールです。gosec による簡易スキャンを CI パイプラインの中に適切に組み込まれることで、開発者は初歩的なセキュリティ上の問題を開発早期に発見できるようになります。 また、go-ruleguard を始めとした、Go コードに対する自組織固有の lint ルールを適用するためのツールチェインの開発も進められています。このようなツールを用いて危険なコードパターンを lint ルールとして蓄積していくことで、自組織のコードベースを更に強固なものにしていくことができます。
これらのツールはいわば Go 開発者を守る「ガードレール」とも呼べるものです。手元で利用すれば自分がセキュアな Go コードを書くための助けになることでしょう。また、CI パイプラインの中に組み込めば組織の Go コードの問題を早期発見するための支えになること請け合いです。
本発表の概要
本発表では、gosec や go-ruleguard といった「ガードレール」たちを、その動作を支える go/analysis
や go/ast
の簡単な説明とともに紹介します。これにより聴衆は、セキュアなコードを書き進めるための補助となるツールの存在と、その用法・原理を知ることができます。
それに加えて、本発表ではそれらのツールを CI 中で実運用する上で課題となる「問題の誤検知」への対応方法として、reviewdog を用いたアプローチを提案します。これにより本発表の聴衆は、Go コードのセキュリティを組織的に・継続的に維持していくための方法を学ぶことができます。
さらに、これらの説明の中で用いられるツールや CI の設定例は全て GitHub 上に公開されています(公開物の一覧はこちら)。本発表を通して得た背景知識と、これらの設定例は、聴衆が実際に「ガードレール」を設置していく作業の支えになることでしょう。