🦁

Goのサプライチェーン問題にはNancyを使うといいかも(DevSecOpsやっていき)

2022/02/06に公開

https://zenn.dev/shinofara/articles/e4be2b1d721b79
の続きみたいなものでもあります。今回は上記で作成したRepositoryで、DevOps改DevSecOpsを実現するにはどうしていくかを考えていこうと思ってます。

今回のテーマは

ソフトウェアサプライチェーンです。
is 何に関しては
https://github.blog/jp/2021-06-03-secure-your-software-supply-chain-and-protect-against-supply-chain-threats-github-blog/

どうやったか

https://github.com/sonatype-nexus-community/nancy
という素晴らしい物があります。

Github Actionsで動かすためのExampleも書いてくれてます。
https://github.com/sonatype-nexus-community/nancy-github-action#example-usage

そのまま動かしてみました。が依存先に問題が無いと

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Summary                     ┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━┫
┃ Audited Dependencies    ┃ 0 ┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━┫
┃ Vulnerable Dependencies ┃ 0 ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━┛

↑は依存0からでもありますが.....

まずは、脆弱があると思われる依存先を見つけなくては
https://github.com/sonatype-nexus-community/intentionally-vulnerable-golang-project
と思ったらそのためのexampleも存在しました。今回はパクります。

[CVE-2017-1000070]  URL Redirection to Untrusted Site ("Open Redirect")    
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Summary                     ┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━┫
┃ Audited Dependencies    ┃ 6 ┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━┫
┃ Vulnerable Dependencies ┃ 1 ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━┛

この通り依存してるパッケージの依存してるバージョンに、オープンリダイレクトの脆弱性があるという事が検知できました。

今回の作業PRを貼っておきます
https://github.com/shinofara/cicd/pull/30

DevSecOps実現に向けて運用をどうするか

https://github.com/shinofara/cicd
程度のコード量とか、依存量(そもそも0だけど)であれば、毎Push毎でも問題ないかも知れませんが、数年開発してるようなプロダクトでは、依存量はとても多くなると思います。そして多くなればなるほどNancyの実行時間は長くなってしまうと思いますので、CI処理時間という観点ではとても遅いと思う状態にもなるかもしれません。

そのためGoであれば、go.mod, go.sum が変更された場合にのみ実行するでもいいのかもしれないですね。go.sum があることで、checksumの確認をしてくれているので、Nancyで問題なかったchecksumであれば信頼するという考え方も一つの手段かもしれません

DevSecOps的にはすべてのステップでセキュリティ検査を行い、小さな問題のうちに修正していける世界が良いと思いますが、開発やチームでの運用のフローにも依存はしますので、どのように取り組むかリスクコントロール観点も交えて入れていけると、よりよい開発・運用につながっていきそうだなと思ってます。

最後にWhat is DevSecOps

https://www.redhat.com/ja/topics/devops/what-is-devsecops

Discussion