コミュニティの力:Log4Shell後のオープンソース批判にどう応えるか
2021年12月24日
0 分で読めます先週は、Log4Shellの脆弱性が公表されたことで、テクノロジー業界のほぼすべての人にとって激動の一週間となりました。開発者向けセキュリティ企業として、Snykはアプリケーションのセキュリティ問題を事前に検出して修正する自動化を事業の柱としています。今週は多忙だったと言っても、控えめな表現でしょう。
とはいえ、ここ一週間、Log4Shellに関連してよく見られた論調の一つは、オープンソースは根本的に破綻しているというものです。「信頼できる」ソフトウェアを作る貢献者が足りない、セキュリティチェックが不十分、そしてオープンソースソフトウェアの持続可能性を確保するための資金が足りない、という主張です。
こうした主張に一理あるとしても、オープンソースが破綻しているという考えには、私たちは強く反対します。オープンソースは素晴らしいものです。開発者コミュニティを前進させ、「巨人の肩の上に立つ」ことを可能にしてくれます。そして何より、コミュニティとして協力し、オープンソースを安全に保つことができます。これはクローズドソースソフトウェアでは不可能なことです。
最後の点について、もう少し掘り下げてみましょう。オープンソースはコミュニティによって築かれています。オープンソースで緊急のセキュリティ問題が発生したとき、コミュニティが協力して解決し、修正を広く共有し、影響範囲を調べることができます。脆弱性は決して望ましいものではありませんが、オープンソースコミュニティがプロトコルや慣行を強化する機会にもなります。何百万人もの人々が力を合わせれば、重大度10.0のゼロデイ脆弱性を解決するような、素晴らしいことができるのです。
オープンソースは完璧でしょうか?もちろん違います。資金不足、貢献の偏り、セキュリティ上の問題など、現実の課題があります。しかし、こうした問題は私たち一人ひとりの手で改善できます。オープンソースなら、誰もが問題解決に取り組めます。
現在のオープンソースが抱える課題
ここ数週間、さまざまな人から指摘されているオープンソースの課題を見てみましょう。
オープンソースソフトウェアには資金が必要
オープンソースソフトウェアには、レビューや機能強化などを担う貢献者がもっと必要
オープンソースソフトウェアはセキュリティを真剣に考えていない
オープンソースソフトウェアには資金が必要
これはまったくそのとおりです。Christine Dodrillが最近の記事で指摘しているように、数え切れないほどのJavaアプリケーションで使われている`log4j`ライブラリの有料スポンサーは、Log4Shellの脆弱性によって状況への認識が高まるまで、わずか3社でした。
これは現実の問題です。多くの人が依存するオープンソースライブラリでは、メンテナーが問題の修正やアプリケーションの安定性とセキュリティの確保に十分な時間を割けるよう、資金が必要になることがよくあります。
Log4jと同様に、Heartbleedの脆弱性が公表される前、OpenSSLプロジェクトは2人によって保守されており、年間予算の合計は約2,000米ドルでした。インターネットの重要な基盤を支えるプロジェクトとしては、あまりにも不十分なリソースでした。
オープンソースソフトウェアには、より多くの貢献者が必要
多くの著名なプロジェクトには多数の貢献者がいますが、重要なオープンソースライブラリの多くは少人数で開発されています。そのため、バグの修正が遅れたり、対処されないセキュリティ問題が発生したり、メンテナーが別のプロジェクトに移って保守の担い手がいなくなったりするリスクが常にあります。
たとえば、1998年からデータ取得に広く使われているcurlのツールとライブラリは、長年にわたってたった一人で保守されていました。
オープンソースはセキュリティを真剣に考えていない
最近よく耳にする主張です。オープンソースに相応のセキュリティ脆弱性があるのは事実ですが、多くの専門家は、セキュリティ面ではプロプライエタリソフトウェアよりもオープンソースソフトウェアにさまざまな利点があると考えています。さらに、最近の出来事が示しているように、セキュリティ脆弱性が発生した場合、資金や貢献者が限られていても、オープンソースコミュニティは一般に問題を解決する方法を見つけます。
より大きな問題は、オープンソースに携わっているかどうかにかかわらず、ほとんどの開発者が「セキュリティを真剣に考える」ために必要なセキュリティの知識、トレーニング、ツールを持っていないことです。Snykの2019年オープンソースセキュリティの現状レポートによると、自分には「高いセキュリティ知識がある」と考えていたオープンソースのメンテナーは、10人中3人にとどまりました。
これはオープンソース開発者の責任ではなく、開発者エコシステム全体の課題です。私の記憶にある限り、セキュリティは常に業界の付随的な要素として扱われてきました。しかし、より信頼性が高く安全なソフトウェアを作るには、セキュリティをソフトウェア開発プロセスの中核に据える必要があります。
セキュリティツールは、IDEやエディターと同じように、すべての開発者のツールキットに欠かせないものにする必要があります。
セキュリティアラートは、関連性が高く、意味があり、価値の高いものでなければなりません(誤検知や価値の低いアラートは、開発を妨げる厄介なものです)。
セキュリティは、開発者のワークフローやツール(CI/CDパイプライン、コードレビューのプロセスなど)に適切に組み込む必要があります。
コンピューターサイエンスの課程でセキュリティを教え、教育カリキュラムの中核に含める必要があります。
現在のオープンソースの素晴らしい点
オープンソースに対する主な批判をいくつか見てきたところで、今度はその利点について考えてみましょう。
オープンソースは活況を呈している
現在、オープンソース開発者の数はかつてないほど増えています。GitHubは2018年、リポジトリ数が1億に達した際に、同サイトのオープンソース開発者数を詳しく紹介する素晴らしい記事を公開しました。
当時GitHubは、世界中のほぼすべての国から集まった3,100万人の開発者が、合計11億件のコントリビューションを通じて協力していると報告しました。
初めてオープンソースに貢献する人の数も大幅に増えています。2019年、GitHubでは初めて貢献した人が約200万人に達し、そのわずか2年後の2021年には、300万人を超えるまでに急増しました。
つまり、世界中で多くの開発者がオープンソースプロジェクトに取り組み、貢献しているのです。
オープンソースは、ほぼあらゆるものの基盤
オープンソースに対する考え方にかかわらず、現代社会に与える影響が計り知れないことは明らかです。過去20年以上にわたって作られてきた主要なビジネス、アプリケーション、プロジェクトのほぼすべてが、オープンソースを基盤としています。
DjangoのようなオープンソースのWebフレームワークを使わずにWebアプリケーションを作ったり、少なくともいくつかのオープンソースライブラリを使わずにデスクトップアプリケーションを作ったりすることを想像してみてください。開発者にとって、ほとんど想像もつかないことです。
好むと好まざるとにかかわらず、オープンソースは小規模な趣味のプロジェクトから、地球上の最大規模のWebアプリケーション(さらには地球の外でも)まで、あらゆる場所で使われています。あるレポートによると、すべてのコードベースの98%がオープンソースソフトウェアに依存しています。世界はオープンソースで動いているのです。
オープンソースへの資金提供に向けた取り組み
多くのオープンソースプロジェクトが深刻な資金不足に陥っているのは(まぎれもない)事実ですが、こうした問題に取り組むための取り組みや社会的な変化も数多くあります。
たとえば現在、Log4jプロジェクトのリードメンテナーであるRalph Goersには、105人のスポンサーがいます。Log4Shell発生前から資金があれば理想的でしたが、コミュニティは問題を認識し、必要なところに資金を提供するため、多くの個人や組織が支援に乗り出しました。これは、コミュニティが協力して問題の解決に取り組む素晴らしい例です。
The Linux Foundation(The Apache Foundation、The Python Foundationなど)のような財団は、支援を必要とするオープンソースプロジェクトに多くのリソースを提供しています。資金面以外の支援も含まれます。まだ取り組むべきことは多くありますが、こうした組織は価値の高いオープンソースプロジェクトに直接貢献し、十分な資金、リソース、認知度を確保できるよう支援しています。
多くの企業についても同じことが言えます。直接的に、あるいは従業員の時間を通じて間接的に、オープンソースプロジェクトを支援している組織は数多くあります。ブログ記事に収まりきらないほど多くの企業がありますが、大手テクノロジー企業の多くは、何らかの形でオープンソースに資金を提供しています。
オープンソースのセキュリティは急速に向上している
前述のとおり、オープンソースのセキュリティだけを切り離して解決するのは簡単ではありません。セキュリティは業界全体にわたる課題であり、オープンソースとクローズドソースのアプリケーションの両方に等しく影響します。
朗報は、オープンソースのセキュリティが急速に向上していることです。その背景には、さまざまな要因があります。
過去10年間で、サイバーセキュリティへの関心が高まっています。
世界のサイバーセキュリティ支出は、わずか4年間でほぼ倍増しました。
オープンソース開発者は、セキュリティ問題の検出と修正に役立つ、強力で無料のサービスを利用できるようになりました(オープンソースプロジェクトでの利用が100%無料のSnykなど)。
OpenSSF(The Open Source Security Foundation)のような組織による、すべてのオープンソースプロジェクトのセキュリティ確保に特化した組織的な取り組みがあります。
オープンソースかどうかを問わず、開発者をはじめとする人々がアプリケーションを安全に構築する方法を学べる無料のセキュリティ教育リソースも、ますます充実しています。
オープンソースをより良くするには
現実はこうです。オープンソースが完璧になることはありません(完璧なものなどありません)。コミュニティの一員である私たちが、受け取ったときよりも良い状態にして次へつなぎ、オープンソースの現状を改善していく必要があります。
「自分が座ることのない木陰のために木を植えるとき、社会は豊かに成長する」という古代ギリシャのことわざがあります。社会全体についてはもちろんそのとおりですが、テクノロジーの進歩が速い今、私たちテクノロジーコミュニティは木を植え、その木陰に座ることもできます。
ここでは、オープンソースを少しでも良くするために、一人ひとりができることを紹介します。
よく使うオープンソースプロジェクトに寄付して、メンテナーを支援しましょう。寄付にはGitHub Sponsors、OpenCollectiveなど、さまざまな方法があります。
基盤として利用しているオープンソースプロジェクトに時間を使って貢献しましょう。たとえば、DjangoでWebアプリケーションを開発し、新しく便利な機能を追加したなら、その機能をプロジェクトに還元できないか検討してみてください。オープンソース開発への参加は、思っているほど難しくないかもしれません。
Snykのような無料のセキュリティツールを使って、プロジェクトのセキュリティ問題を検出し、修正しましょう。Snykのようなツールを使うと、次のことができます。
コードリポジトリをスキャンして脆弱性を見つけ、新たな問題が見つかったときに自動で通知を受け取る
よくある脆弱性をすぐに修正し、依存関係を常に最新の状態に保つ
IDEに直接組み込んで、コードがリポジトリにプッシュされる前にセキュリティ問題を検出する
コンテナとインフラストラクチャの設定をスキャンして、インフラストラクチャの安全性を確保する
CI/CDパイプラインに組み込み、本番稼働前に重大なセキュリティ問題を確実に検出する
最後に、重大なセキュリティ脆弱性のような問題が起きても、慌てないでください。完璧に安全なソフトウェアを作る方法はありません。新しい攻撃手法やテクニックは常に登場しますし、今日完璧に安全だと考えられるコードも、来年にはそうではないかもしれません。
何より大切なのは、まず深呼吸をして冷静さを保ち、緊急の問題が発生したら対処することです。そして、コミュニティとのつながりを忘れないでください。知識やベストプラクティスを仲間と共有すれば、みんなの力になります。
私は、オープンソースコミュニティ全体と、そこに参加する素晴らしい皆さん(あなたも含めて!)に心から感謝しています。時には状況が悪く見えることもあるかもしれません。でも、着実に前進し、状況は良くなっていること、そしてあなた自身が直接、良い変化をもたらせることを忘れないでください!
素敵なホリデーシーズンをお過ごしください!


