ビズリーチより8月27日にGithubのリポジトリからオープンソース(OSS)の脆弱性を発見、管理できるようにするWebアプリケーション「yamory」が発表された。
どんな機能があり、どんなことができるのか、どう実現されていそうかなどについて説明します。
また、今後このような機能があれば良くなりそうか考えて見ました。
(2019/10/27 追記)
無料トライアルが開始され、レビュー記事を書きました。
以下の記事も一緒にどうぞ。
ビズリーチのOSS 脆弱性管理サービス yamory 無料トライアル 使ってみた 他のツールとの比較などのレビュー - Security Index
yamoryの主な機能
yamoryの主な機能は以下の3つ。
・脆弱性を見つける
・脆弱性に対応する
・チームで脆弱性を管理する
脆弱性を見つける
yamoryの中で技術的なメインの部分はこの脆弱性を見つけ、脆弱性のトリアージ(優先度付け)を行う部分である。
ここでは、Githubのリポジトリをスキャンし、そこで使われているOSSの名前とバージョンを特定し、脆弱性を洗い出している。
OSSの特定
OSS特定にはパッケージ管理ツールの情報を利用している。
具体的は、各言語毎に提供されているGradle(Java)のbuild.gradl、npm(Node.js)のpackage.json、pip(python)のrequirements.txtなどからOSSの特定を行っている。
以下の画像は公式サイトのGithubスキャン後の画面である。
スキャンで発見できたマニュフェストファイルの一覧が表示されている。
脆弱性の特定
OSSの名前とバージョンがわかった後に実際にどんな脆弱性がそこにあるのか特定する必要がある。
この部分に関して公式サイトではどのように行っているかの説明は書かれていない。
しかし、脆弱性を特定した後に得られる情報(トリアージに利用する情報)として
・「危険な脆弱性」CVSSでCritical or Highかどうか(つまりCVSSのスコアが7以上)
・「攻撃コード(PoC)あり」攻撃コードがあるかどうか
・「公開サービス」
の3つがある。
上の2つから、ここでいう脆弱性はCVEが振られているものだと予想できる。
(CVSSについての説明はIPAのこちらのページがおすすめです)
そうであるならば、OSSの名前とバージョンからCVEを特定する方法はそこまで難しくない。
Vulsという脆弱性スキャナで利用されているgo-cve-dictionaryなどを使ってNVDのCVEのデータベースを取得することで実現できる。
2つともGithubで公開されている。
また、「攻撃コード(PoC)あり」に関してもCVEが特定できているのであれば、exploit-dbというKali Linuxで有名なOffensive Securityが提供しているものを使えば実現できる。
こちらもGithubで公開されているgo-exploitdbを使えば、exploid DBの情報を取得し、コマンドラインからCVE検索できるようになる。
脆弱性のトリアージ(対応優先度付け)
先ほども書いた3つの評価軸「危険な脆弱性」「攻撃コード(PoC)あり」「公開サービス」を使って優先順位付けを行う。
この優先度付けは難しいロジックを使っている訳でないが、とても良いと感じている。
実際の会社では単純にCVSS 7以上は対応する、といった観点でのみ脆弱性のトリアージが行われているケースが多いが、CVSSだけでは正確なトリアージになっていない。
Black Hatでも発表されたこちらの記事でも書いたが、CVSS 7以上のものでも実際に悪用されるものは5%程である。
また、CVSS 7未満のものでも悪用されるものがある。
そのため、CVSS 7以上という観点だけでトリアージしてしまうと無駄も多く、漏れもある。
そのため、yamoryのようにCVSSに加えて、PoCの有無、公開サービスかどうかという軸を加えてより正確な(悪用されるリスクが高い)優先順位付けが行うことができるということはセキュリティ対策に追われている現場には求められているサービスのように感じる。
yamoryのトリアージ分析画面は以下のように表示される。
チームで脆弱性を管理する
チーム管理
ここではチームとして「開発チーム」 と「セキュリティチーム」の2つに分けて、それぞれが必要な部分にフォーカスを当てて作業ができるようになっている。
「開発チーム」は発見された脆弱性への対応やリポジトリへのスキャンが行えるようになっているそうです。
「セキュリティチーム」は脆弱性の確認と必要に応じて対応優先度の変更などもできるそうです。
この部分も実際に利用する場面を想定して作成されていると感じ、使い勝手が良さそうな印象を持ちました。
それ以外にもアカウント管理のための権限が「組織管理者」「チーム管理者」「メンバー」のように分かれている部分も組織化された環境での利用も想定されています。
脆弱性通知
アカウント管理以外では、メールやslackでの脆弱性情報の通知機能も実装されています。
その他
利用ソフトウェアの管理
OSSの特定ができているので当然ですが、利用しているソフトウェアの一覧表示、またそのソフトウェアの脆弱性の数の表示もできます。
私としてはこの機能もとても重要だと感じています。
なぜなら、多くの組織がどんなソフトウェア(OSS)を利用しているのかの管理をできていないというのが現状だと思っているからです。
CIS Controlsという米国国家安全保障局(NSA)等の米国の公的機関も作成に関わっている情報セキュリティのガイドラインのBasicの2に書かれているように、ソフトウェアのインベントリ管理はセキュリティにとっても重要なポイントです。
(CIS Controlsについてはこちらの記事がお勧め)
ソフトウェアのイベントリ管理が正確にできていれば、世の中で深刻な脆弱性が報告された際にすぐにどのアプリに影響があるのかの特定ができる、不正なOSSが追加された場合にすぐに確認できるなども(理想的には)実現できます。
それ以外にも、ライセンスの観点で問題がないかどうかの確認もできるかもしれません。
追加機能の提案
もし、自分がyamoryの開発者であれば、という視点で追加機能を検討してみました。
脆弱性情報の拡張
おそらくNVDの情報を元に脆弱性情報を作成していると思われます。
しかし、私が脆弱性調査を行った経験上、NVDの情報(特にcpeのバージョン情報)は間違っていることがたまにあります。
CVSSのスコアも詳細な記述なくかなり高いスコアが設定されていることもあります。
開発者やセキュリティ担当者がひとつひとつ詳細に確認する手間を減らすためにもより詳細な情報や正しい情報が利用できると良いのでは、と思います。
VulnDBの情報を利用する、独自に脆弱性情報DBを拡張するなど。
(補足)
脆弱性DBの開発を現在行っているようです。
OSS脆弱性セキュリティリサーチャーの仕事に以下の業務がありました。
・OSS脆弱性DBの構築運用ための調査業務
・OSS脆弱性DBの構築、運用
・必要に応じて、下記業務
- OSS脆弱性DBの構築運用管理ツールの開発運用
- 脆弱性クローラーや攻撃コード収集クローラーの開発
- その他リサーチに必要なツール開発
- OSS脆弱性に関するレポートや記事原案作成
OSSの脆弱性管理以外も対応
これに関してはオフィシャルにも書かれているので今後対応されそうです。
現在はオープンソースのセキュリティのみをテーマにしていますが、将来的にインフラ/NW、OS/MW、コード/ロジックもスコープに入れていきます。
有償のセキュリティのOSS管理としてはFutureVulsによるサーバー側のOSS脆弱性管理があり、上記のオフィシャルの記述を見ると、FutureVulsのようにサーバー側の脆弱性管理も行いそうです。
私としては、最近のトレンドであるコンテナの脆弱性スキャン機能があるとよりツールの魅力が高まるように思います。
TrivyなどのOSSのコンテナ脆弱性スキャナもあるので取り込むのも良さそうです。
また、AWSといったクラウド側のセキュリティ設定をスキャンし、脆弱性なものを発見する、といったこともできるとかなり良さそうです。
マシンリーダブルな出力
多くの組織で求められそうな機能はyamoryでの出力結果を2次利用したいというものではないでしょうか。
このyamoryを使う会社の想定はある程度技術力のあるIT系の会社だと思われますので、スキャンした結果を社内で再度利用しやすい形に変形したり、再配布したりする場面が想像できます。
もちろん、yamory側で完結できるように機能追加していくとは思いますが、どうしても各企業で求められるものが違ってくるのでデータの再利用ができると利用者には便利だと思います。
(例えば、利用者側で統計的に何か見たい、ソフトウェアのインベントリ管理に使いたいなど)
毎日利用されるような機能の追加
多くの会社では、脆弱性のスキャンを含めて毎日yamoryを使ってセキュリティ対応をする、ということはないように感じます。
たまにしか使わないツールというのはどうしても使い方を忘れたりして利用されなくなる運命にあるように思っています。
そのためにも、毎日使われるようなツールになるように新たな機能が必要かもしれません。
例えば、利用者に関係しそうなセキュリティのニュースを表示するなど、毎日ツールに変化が現れるような機能が考えられると思います。
OSS以外のセキュリティにも対応
OSSのセキュリティを強化するというだけでも十分に効果が期待できると思いますが、そもそものコードがよくなければOSSのセキュリティが良くてもセキュリティ上問題になります。
最近ではGithub自体にもいくつかセキュリティ機能が追加されてはいると思うが、セキュリティに関わるコードチェック機能の追加が少しずつでも追加されていくとyamoryの価値が高まっていくのでは、と思っています。
ライセンスの特定
セキュリティと同様に注目されるものとしてライセンスもあると思います。
OSSの名前、バージョンが特定できていますので、ライセンスのDBのようなものが構築され、照合ができればライセンスの確認もできると思います。
また、FOSSologyのようなツールも組み込むことでライセンスの把握ができるかもしれません。
(私はFOSSologyを使ったことがありませんが。。。)
さらに、そのライセンスが違反していないかどうかの確認までできると他のサービスの一歩先にいけると思います。
参考
yamoryのプロダクトオーナーに聞く、ビズリーチがサイバーセキュリティの分野に進む理由
yamoryの立ち上げに関わった鈴木 康弘さんへのインタビュー記事。
ヒアリングをしていくなかで、セキュリティチームがどのようなアーキテクチャーで、どのオープンソースを使っているか把握していないケースが多く、それを知りたいというニーズが高いことがわかりました。
この問題はやはりどの会社でも起こっている問題だと私も感じています。
現状どのようになっているのかわからない、という状態は何か問題があった時にセキュリティ以外の側面でも対応の遅れなどに繋がるので解決できれば大きなメリットだと思います。
また、脆弱性をクローリングしてアラートを出す段階までは、比較的すぐにプロトタイプを作ることができたのですが、その先に、対応優先度がわからないと実際に運用するときに問題だということがわかってきたんです。
脆弱性を洗い出す、という作業は上記にも書きましたら多くのOSSのツールもあり、できないことではないと思います。
しかし、大量に表示される脆弱性に対してどうするのか、という問題が次に現れます。
ひとつひとつしっかり確認すれば確かに対応すべき脆弱性の判断ができるのですが、明らかに非効率。
ここへのアプローチが今後多くの脆弱性管理ツールの課題、差別化要因になるのでは、と思います。
シノプシスのBlack Duckがyamoryと近いサービスと思いますが、独自の脆弱性に関する見解を提供し、利用者が対応の判断などに利用できるようにしているようです。
それ以外にもバイナリ解析など、Web系ではあまり使わない機能もあるので、Web系に特化した形でyamoryが提供できれば差別化に繋がり、世界とも戦えるかもと思います。
(2019/10/27 追記)
無料トライアルが開始され、レビュー記事を書きました。
以下の記事も一緒にどうぞ。
ビズリーチのOSS 脆弱性管理サービス yamory 無料トライアル 使ってみた 他のツールとの比較などのレビュー - Security Index
Twitter アカウント