ソフトウェアのセキュリティ対策は何をすべきか
今回のテーマはDevSecOpsとSBOM。前者のDevSecOpsは今回のデブサミでも多く取りあげられるほど馴染みが出てきた。DevとOps、開発と運用が協力するDevOpsにセキュリティ(Sec)も組み込んでいこうという考えだ。
協力や協業と言うのは簡単だが、実際はそう簡単ではない。横田氏は「全員が全部できるようになる必要はありません。まずは丸投げしないこと。理解し合うこと。そうして少しずつ、お互いに手を広げていくのが理想」と話す。
そしてセキュリティと言っても幅広い。アセット、データ、アプリケーション、ネットワークなどから人間まで、7層に分けて考えられることもある。その中でDevSecOpsのセキュリティに該当するのはソフトウェアに関連するもの。
このソフトウェアのセキュリティを考えると、これまたランサムウェア、フィッシング、SQLインジェクション、ゼロデイ攻撃などキーワードが出てくる。またサイバー攻撃と言うと暗闇でパーカーを着た怪しい人物がノートパソコンを操作しながら特定の組織を攻撃しているイメージ図がよく使われる。
「実は、こんなに単純ではない」と横田氏は指摘する。最近よく言われるサプライチェーン攻撃だと、ソフトウェアに不正なプログラムやバックドアを仕込んだり、あるいは大企業とつながりのある企業から攻撃して大企業にダメージを与えるようにしたり。ソフトウェアが連鎖しているという性質を悪用して攻撃する。また、攻撃対象は企業のサーバーだけではなく、クルマや家電まで広がっている。
サプライチェーン攻撃と言うと、2020年12月に起きたSolarWindsが挙げられる。ソフトウェア更新が悪用されたため、アメリカ政府も含めて大規模に拡散された。最近2021年12月にLog4Jで発見された脆弱性も記憶に新しい。「対応に追われた方もいるのではないでしょうか。こうした事例からも分かるように、今やセキュリティ対策は手の届く範囲だけでは足りません」と横田氏は警笛を鳴らす。
「手の届く範囲」とは、主に自分が書いたコードを指す。今やソフトウェアは自社で書いたコードだけでは成り立たず、OSSなど外部から入手したライブラリなども含まれる。そのためこうした外部のコードにも対策を講じる必要がある。一般的にプロプライエタリなソフトウェアの6〜8割はOSSとも言われている。
では実際に脆弱性が発見されるなど、問題が生じた時に自社ソフトウェアが大丈夫かすぐ分かる状態にあるだろうか。どのソフトウェアがどのコンポーネントを使っているか把握できるだろうか。さすがに全てを記憶できないので、すぐ調べられるようになっているだろうか。
「ソフトウェアのコンポーネントなら、ライブラリのパッケージマネージャーで使うライブラリ名とバージョンを見ればいいのでは?」と思うかもしれないが、「それだけでは足りない」と横田氏は言う。ソフトウェアは連鎖的に依存しているので、依存先の依存先、推移的依存関係も安全性を確認する必要がある。