概要
本日、Red HatからRed Hat Vulnerability Scanner Certificationという脆弱性スキャナーに対する認定プログラムが発表されました。
そして上の発表の中で私の所属企業であるAqua Securityも認定を受けたことが書かれています。つまり自分が業務として開発しているTrivyというOSSの脆弱性スキャナーもRed Hatの認定を受けたことになります(というか実はTrivyだけなのですが詳細は後述)。自分のブログを見る人は既に存在は知ってくれていると思いますが一応貼っておきます。
現在認定を受けているのは Aqua Security, NeuVector, Sysdigの3社だけです。NeuVectorとSysdigは商用製品で認定を受けているはずなので、3rd partyのOSSスキャナーで認定されているのはTrivyだけということになります。Clairは現在Red Hatが開発しているので当然対応しています(ただし後述する問題は等しく存在します)。この話をもらったのは2020年11月なので、2021年2月末時点でほぼ4ヶ月経過していても認証を通った企業がほとんどいないということから要件の厳しさが分かるかと思います。また、認定のプログラム名には入っていないので若干ややこしいですが、このプログラムではコンテナイメージの脆弱性スキャナーに対する認定を行います。ベアメタルやVMのスキャナーなどは対象外となっています。認定を受けるための要件は数多くありますが、いくつかを挙げておきます。
- Red Hatのコンテナイメージに内在する脆弱性が正確に検知できること
- Red Hat Enterprise Linuxだけでなく各種プラットフォームに対応していること
- Red Hat Universal Base Images (UBI)やOpenShiftのイメージなど
- https://catalog.redhat.com/software/containers/search?p=1 でRed Hatが提供している公式のイメージが確認できますが、これらすべてを正確に検知できること
- Red Hatによる脆弱性の深刻度を表示すること
- NVDなどのベンダーニュートラルな組織による深刻度を使ってはならない
- RHSA-ID(Red Hat Security Advisory ID)を表示すること
- 基本はCVE-IDの表示で、Red Hatにより修正済みの場合はRHSA-IDを表示する
認定スキャナーであればこれらの要件を満たしていることを保証していますので、もしRed Hatのコンテナイメージを使う場合は認定されているスキャナーの利用を推奨します。
ということで大変めでたい話なのですが、上のプレスリリースは現時点での状況とは色々と異なっており誤解を招きかねない内容になっています。黙っててもバレないとは思いますが、自分のOSSを利用しているユーザには正確に知っておいて欲しいと思ったので補足を書いておきます。
以下で述べることを知ったからといって何がどうなる内容でもないので、上の内容だけ把握しておいてもらえればほとんどの人にとっては十分かと思います。
補足
要件を満たしているスキャナーはまだこの世にない
いきなり衝撃的なことを書いていますが、事実なので詳細を記しておきます。上の要件のうち、特に2を満たすためにはRed Hatが提供しているOVAL v2というデータを脆弱性情報として利用する必要があります。OVALって何?とかは以下のブログで触れられています。
OVAL v2に対応することで上の要件の一部を満たせるようになるのですが、データ構造にかなり欠陥があり正しく実装しても誤検知してしまったり、未修正の脆弱性が検知できなかったりします。自分はOSSということで商用版を提供している各社よりフットワークが軽く、Red Hatから話をもらってすぐに実装したのですが、OVAL v2関連を始め大量のバグに直面しました。どのぐらい大量かと言うと管理しきれなくなって自分の側でチケット管理を始めたほどです。今現在チケット番号が21番まで来ています。
この辺りは仕様なのかバグなのか?の判断など正直かなり時間を取られましたが、他社のAPIに対してQAをするのは初めてだったのである意味貴重な経験でした。そういう意味ではまだ認定を受けていない会社の方がバグが洗い出されたあとに実装開始できるので賢かったかなーなどと思ったりはしました。
実はGAは元々12月の予定でした。ですが11月に話をもらって12月は他の会社も間に合わないということで1月に延期されました。自分は頑張れば間に合うぐらいだったのですが、上のバグの関係で自分側ではどうにもならずでした。そして1月に延期されたのですが、やはりバグがあり報告したところ2月上旬に延期されました。そしてさらにバグを報告したところ再度延期になり2月末になりました。
問題を指摘するたびにGAの時期が延期になっていくのでもう黙っておいた方おが良いのかな...と思い始めた
— イスラエルいくべぇ (@knqyf263) 2021年1月26日
どうでも良いですがtypoしていたことに今気づきました。
実際には全てのバグを早い段階で報告していたので2月上旬などに間に合わないことは明らかだったのですが、Red Hatの複数のチームをまたいでいる関係なのか報告したバグが毎回闇に葬り去られてしまって、毎週ミーティングする度に新たなバグ報告みたいになってしまっていました。もしかして自分がタイムリープしているのか...?と頭がおかしくなりそうだったので自分側でチケット管理を始めたという経緯があります。毎週手元のチケットを確認することで「大丈夫どうやら時は戻ってなさそうだ」と自分の正気を保っていました。Red Hatを批判したいわけではなく、大企業で部署間伝言ゲームによって情報が欠落するのは自分も経験があるので仕方ないかなと思います。経験ある人も多いのではないでしょうか。途中からはあちらでもチケット管理をしてくれたので楽になりました。
ということで2月末のGAも延期になるだろうなと思っていたのですが、もう日程はずらせないということでバグは未修正のままプレスリリースを打つことが決まりました。つまり現時点ではバグの関係で上の4つの要件をすべて満たすことは出来ない状態となっています。
つまり、誰も・・・要件を満たしていないのである!!!
— イスラエルいくべぇ (@knqyf263) 2021年2月23日
ワークアラウンドによってある程度要件を満たしたバージョンはリリース可能なのでGAまでに暫定版Trivyリリースします、とRed Hatに伝えたところリリースしないでと止められたので未リリースです。さすがに驚きましたしプレスリリース時点で認定スキャナー実質0なの良いのか...?と思いましたが、色々と大人の事情があるようです。とはいえかなり勘違いされそうなので一度説明しておいたほうが良いと思い本ブログを書きました。勘違いされてしまうとGitHubでIssueを受け取って対応するのはRed Hatではなく結局自分なので辛い感じになります。2月末には一番クリティカルなバグは修正される予定とのことで、それさえ直れば一応上の大きい4つの要件は満たすことが出来るようになります。
まとめると、Trivyでは(というか全スキャナーで)現在2の要件を満たせていないためRHELやUBI以外のRed Hat公式イメージの正確な検知は出来ません。ですが近い内に修正されて正しく動くようになる予定です。RHELに関しては既に正確に検知できる状態になっているため安心して使ってください。RHEL 8から導入されたModuleという概念により殆どのスキャナーはRHELでも誤検知してしまうのですがTrivyは正しく処理できます。その辺り含めバグに関係ない箇所が正しく動くことを検証してもらったため一足先に認定を受けることが出来ました。
Aqua Securityの商用版はまだ要件を満たしていない
こちらはOSS関係ないのですが、私の所属するAqua Securityでは商用版のスキャナーを提供しています。Trivyを使って商用版のスキャナーを置き換えるプロジェクトを社内ではずっとやっているのですが、顧客影響なく切り替えるのに難航していて2021年2月時点では別の実装になっています。そして上の発表ではAquaが認定を受けたと書いてあるのですが、実際には商用版のスキャナーは未対応です。未対応というか対応に着手していないです。自分が大量に知見を持っているのでプロダクトチームと協力して今後すぐに実装する予定ですが、少なくとも現時点では要件は満たせていないので注意していただければと思います。実際には全てのスキャナーがまだ要件満たしていませんが、近いところまでもまだ来ていないという意味です。
Aqua Securityの提供する1スキャナーが認定を受けたので嘘ではないのですが、誤解を招きそうだなということでここは正直に書いておきます。というか今回の認定プログラムの実装にAquaで関わったのは自分だけです。それでいて次々と問題が見つかってRed Hatへの説明を一人で頑張る日々を過ごしていて辛かったのですが、 @masahiro331 が自分の実装の検証を手伝ってくれたり一部実装してくれたりとAqua社員でないにも関わらず副業として色々と手伝ってくれました。最初の方はずっと一人でやっていて上の理由でメンタルをやられつつあったので、手伝ってもらって本当に助かりました。
どうやっても誤検知してしまうケースが存在する
要件1で"正確に検知できること"とありますが、実は設計上の問題でどうやっても誤検知してしまうケースがあります。これは例えば同一のパッケージ名が複数のプラットフォームで提供されている場合に起こり得ます。
この例ではsambaというパッケージがRed Hat Enterprise LinuxとRed Hat Storage 3で提供されています。Red Hat Storage 3をスキャンしている場合にRed Hat Enterprise Linuxのセキュリティアドバイザリを使ってしまうと誤検知になるわけですが、そこの判定が現在のRed Hatのスキャン仕様では出来ません。両方のプラットフォームでRHSAが提供されていて、かつバージョニングが異なる場合にのみ起こるので頻繁に起こるようなものではありません。大量にスキャンした中で数件しか見つかりませんでした。とはいえ0ではないので少し頭に入れておくとおかしな結果が出たときに疑えるかもしれません。
Red Hatの実際に開発している人たちに確認しましたが、仕様的な問題で現時点では直しようがないそうです。つまり全てのスキャナーで同じことが起きます。今回の認定用に新たに作った仕様なので今から直せば何とかならないのかなと思いましたが、既に多くの会社を巻き込んでしまっていたので修正は難しかったようです。
ということでまとめると、仕様の欠陥により認定スキャナーであっても誤検知する可能性が僅かにあります。
まとめ
Trivyが脆弱性スキャナーとしてRed Hatから認定を受けました。ただし、Red Hat側のバグ修正が終わるまではRHELやUBI以外のイメージは正確にはスキャンできないため、今しばらくお待ち下さい。