本日(元記事公開当時)、新しいオープンソース セキュリティ パッチ検証ツール Vanir が公開されました。4 月の Android Bootcamp で紹介しましたが、Android プラットフォーム デベロッパーは、Vanir を使ってカスタム プラットフォームのコードをすばやく効率的にスキャンし、足りないセキュリティ パッチや適用可能なセキュリティ パッチを特定することができます。Vanir は、このプロセスを自動化することでパッチ検証にかかる時間を大幅に短縮します。OEM は重要なセキュリティ アップデートを従来よりもはるかに短い時間で提供できるようになるので、デバイスが確実に保護されるようになります。そのため、Android エコシステムのセキュリティが強化され、世界中の Android ユーザーの安全が確保されます。
Vanir をオープンソース化した目的は、さまざまなセキュリティ コミュニティがこのツールに貢献し、その恩恵を受けられるようにするためです。また、採用が広がることで、最終的にさまざまなエコシステムのセキュリティ向上につながります。当初の Vanir は Android 向けに設計されていましたが、比較的小さな変更で簡単に他のエコシステムに対応できるため、ソフトウェアのセキュリティを全体的に強化できる汎用性の高いツールとなっています。Google オープンソース セキュリティ チームと協力して先行ユーザーからのフィードバックを取り入れることで、Vanir を改善し、セキュリティ専門家にとって利便性の高いものにしました。このツールは公開されているので、これをベースに開発したり、システムに組み込んだりできます。
Android エコシステムは、複数段階のプロセスを使って脆弱性を緩和しています。新しい脆弱性が発見されると、アップストリームの AOSP デベロッパーがアップストリームのパッチを作成してリリースします。ダウンストリームのデバイスとチップメーカーは、特定のデバイスへの影響を評価し、必要な修正をバックポートします。このプロセスは効果的ですが、特に多様なデバイスを管理しているメーカーや複雑なアップデート履歴を持つ古いモデルでは、スケーラビリティの面で問題となる可能性があります。手動でバックポートする必要があるため、カスタマイズされた多様なデバイスでパッチのカバレッジを管理する場合、かなりの労力がかかることが多くなります。
Vanir を開発した目的は、重要なセキュリティ ワークフローを効率化することにあります。Vanir は、セキュリティ パッチの採用と検証に利用できるスケーラブルでサステナブルなソリューションで、Android デバイスを潜在的な脅威からタイムリーに保護できるようにします。
Vanir の機能
ソースコードベースの静的分析
Vanir の Android セキュリティ パッチ検証に対する最初のアプローチは、ソースコードベースの静的分析です。ここでは、ターゲットのソースコードと既知の脆弱なコードのパターンを直接比較します。Vanir では、バージョン番号、リポジトリ履歴、ビルド構成など、メタデータをベースとした誤りの多い従来型の検証メカニズムは利用しません。このユニークなアプローチにより、Vanir はコードベース全体を分析できるようになるほか、完全な履歴も、個々のファイルも、部分的なコード スニペットも利用できます。
Vanir が特に焦点を当てているのは、オープンソース ソフトウェア エコシステムで不足しているセキュリティ パッチを特定する際の、時間とコストがかかるプロセスを自動化することです。不足している大量のパッチを手動で識別すると、非常に手間がかかるだけでなく、ユーザーのデバイスを意図せずにしばらくの間、既知の脆弱性にさらしてしまう可能性があります。この点は、Vanir の初期開発の際に明らかになったことです。Vanir はこれに対処するため、
Jang et al. [1] と
Kim et al. [2] が提案する脆弱なコードクローン検出アルゴリズムに着想を得て、新しい自動シグネチャ調整手法と複数のパターン分析アルゴリズムを利用します。こういったアルゴリズムは、誤アラート率が低く、コードパッチ プロセスに現れる可能性のあるさまざまな種類のコード変更に効果的に対応できます。実際に Vanir を 2 年間運用した結果によると、誤アラートが発生したのはシグネチャのわずか 2.72% でした。この仕組みにより、コードを変更しても、Vanir は不足しているパッチを効率的に見つけることができます。同時に、不必要なアラートや手動レビュー作業を最小限に抑えることができます。
Vanir はソースコードベースのアプローチをとっているので、あらゆるエコシステムにすばやくスケーリングできます。サポートされている言語で書かれていれば、どんなソースファイルのシグネチャでも生成できます。Vanir のシグネチャ生成ツールは、シグネチャを自動的に生成、テスト、調整するので、ユーザーはセキュリティ パッチを適用したソースファイルを提供するだけで、エコシステムの新しい脆弱性に対して、シグネチャをすばやく作成できます。
Android で Vanir の活用が成功したことから、従来のパッチ検証方法よりも効率が高いことが明らかになっています。Vanir を使うと、1 人のエンジニアが 150 以上の脆弱性のシグネチャを生成し、ダウンストリーム ブランチ全体で不足しているセキュリティ パッチを検証する作業をわずか 5 日で行えます。
Android 版 Vanir
現在の Vanir は C/C++ と Java のターゲットをサポートしており、Android カーネルとユーザースペース CVE の 95% を公開セキュリティ パッチでカバーしています。Google Android セキュリティ チームは、Vanir のカバレッジに最新の CVE を組み込む作業を続けています。これにより、Android エコシステムのパッチ採用に関連するリスク状況の全体像を俯瞰できるようにします。
Android の脆弱性の Vanir シグネチャは、
Open Source Vulnerabilities(OSV)データベースで公開されます。そのため、Vanir ユーザーは追加で更新を行わなくても、最新の Android の脆弱性からコードベースをシームレスに保護できます。現在、
OSV には 2,000 を超える Android の脆弱性が登録されており、最新の PC でAndroid ソースツリー全体をスキャンするのに 10~20 分かかります。
柔軟な連携、導入、拡張
Vanir は、スタンドアロン アプリケーションとしてだけでなく、Python ライブラリとしても動作するように開発されています。パッチ検証プロセスを継続的ビルドやテストチェーンに組み込みたい方は、ビルド統合ツールと Vanir のスキャナ ライブラリを連携させることで、簡単に実現できます。たとえば、Google の継続的テスト パイプラインには Vanir が組み込まれているため、進化し続ける Android コードベースとそのファーストパーティ ダウンストリーム ブランチに、すべてのセキュリティ パッチが適用されていることを確認できます。
さらに、Vanir は完全なオープンソースで、BSD-3 ライセンスで利用できます。Vanir は基本的に Android エコシステムに限定されるものではないため、比較的小さな変更を加えるだけで、保護したいエコシステムに簡単に導入できます。さらに、Vanir の基礎アルゴリズムはセキュリティ パッチ検証に限定されるものではないので、ソースを変更すれば、ライセンス コード検出やコードクローン検出など、さまざまな目的に利用できます。Android セキュリティ チームは、Vanir への皆さんの寄与を歓迎します。機能やスコープを拡大するものなら、方向性は問いません。また、Vanir シグネチャ付きの脆弱性データを OSV に提供することで、Vanir に寄与することもできます。
Vanir の成果
昨年初めから、数社の Android OEM と連携してツールの有効性をテストしています。社内では、このツールをビルドシステムに統合し、1,300 を超える脆弱性に対して継続的にテストすることができました。現在の Vanir は、Android カーネルとユーザースペース全般にわたる公開修正プログラムによって、Android、Wear、Pixel の全脆弱性の 95% をカバーしています。精度は 97% で、内部チームはこれまで 500 時間以上のパッチ修正時間を節約できました。
次のステップ
現在、Vanir は一般公開されています。技術的には、Vanir は Android に限定されるものではありません。私たちは、
OSV スキャナーとの連携による汎用的な C/C++ の依存関係管理など、Vanir が役立つ可能性のある問題についても積極的に検討しています。Vanir の利用または寄与に興味がある方は、
github.com/google/vanir をご覧ください。
公開コミュニティに参加すると、ツールのフィードバックや質問を送信できます。
Vanir で皆さんと協力できることを楽しみにしています!
Posted by
Eiji Kitamura - Developer Relations Team