|
この記事では、Linux がオープンソース ソフトウェアのセキュリティに与える影響について説明します。 オープンソースソフトウェアのメリットとしてよく挙げられるものの一つは、誰でもコードをレビューできる点です(セキュリティ専門家はこれを「コード監査」と呼びます)。しかし、実際にオープンソースソフトウェアのユーザーに最後にコードをレビューしたのはいつかと尋ねてみると、おそらく茫然とした表情や、ぶつぶつと呟くような返事しか返ってこないはずです。さらに、かなり大規模なオープンソースアプリケーションの場合、すべてのコード行を効果的にレビューすることは困難です。 これらのやや不安な事実に基づいて、私たちは考えざるを得ません。誰もコードを調べていないのであれば、コードがオープンソースかクローズドソースかは本当に重要なのでしょうか? オープンソースを信頼すべきでしょうか?コンピュータ愛好家は、オープンソースソフトウェアは他のソフトウェアよりも安全だと、往々にして思い込みがちです。しかし、私たちは通常、この比較が何に基づいているのか(つまり、何よりも「安全」なのか)、あるいはどのようにして上記の結論に至ったのかといった点について議論しません。これは危険な主張です。なぜなら、何かを「オープンソース」と呼ぶだけで、自動的に、魔法のように、より高いレベルのセキュリティが保証されるかのように示唆しているからです。これはオープンソースではありません。実際、オープンソースのセキュリティが強く反対しているものなのです。 アプリケーションが安全だと決めつけるのは、まず自分自身でコードを監査し、理解した上でからです。理解した上で初めて、そのアプリケーションを究極の信頼に値します。この究極の信頼は、コンピュータではなく、自分自身に向けられるものです。少なくとも、アプリケーションが侵害されるまでは、あなたはそのアプリケーションを信頼するのです。なぜなら、あなたはそのアプリケーションが安全だと信じたからです。 ソフトウェアコードに究極の信頼を置くことができるのはユーザーだけです。したがって、この体験を楽しみたい人は、必ずコードを個人的に確認する必要があります。他人を信頼しても無駄です。 ソフトウェアコードを個人的に監査して理解するまでは、アプリケーションに置ける信頼度は、全く信頼できないから「かなり信頼している」まで、幅広く存在します。しかし、信頼度に関する標準的なチャートは存在しません。これは、あなた自身が判断する個人的な判断です。信頼している人からアプリケーションの安全性について聞いた場合、信頼するように勧められていないソフトウェアよりも、そのソフトウェアを信頼する可能性が高くなります。 ただし、独自の (クローズドソースの) ソフトウェア コードは監査できないため、絶対的な信頼を与えることはできません。 ライナスの法則現実は厳しいものです。誰もがプログラマーであるわけではなく、また、すべてのプログラマーが何万行ものコードをレビューする時間を持っているわけではありません。したがって、コードを個人的にレビューしていない場合は、レビューした人を(ある程度)信頼することしかできません。 では、コードをレビューするのは誰でしょうか? リーナスの法則は、「十分な数の監視があれば、脆弱性は隠蔽されない」と述べています。しかし、「十分な数」の監視が必要なのは確かではありません。この数を過小評価してはいけません。アプリケーションは、想像以上に多くの人々によってレビューされることが多いのです。最初の開発者やその後の開発者は、自分が書いたコードの内容を理解しているのは当然ですが、オープンソースソフトウェアは多くの場合、チームの努力の成果であり、オープンソース化されてから長い期間が経つほど、より多くの開発者がそのコードを読んでいます。新しい開発者も、新しい機能を追加するために基盤となるコードを学習する必要があるため、プロジェクトのコードのコア部分をレビューする必要があります。 一方、オープンソースソフトウェアをLinuxディストリビューションで利用できるようにするために、パッケージングと配布を担当する開発者は、複数のプロジェクトに参加することがよくあります。開発者がプロジェクトのコードに精通していない状態でアプリケーションがパッケージ化される場合もありますが、ほとんどの場合、オープンソースソフトウェアをパッケージ化する開発者はプロジェクトのコードに精通しています。これは、信頼できないソフトウェアに署名したくないという理由だけでなく、プログラムを正しくコンパイルするためにコードを修正する必要がある可能性があるためです。脆弱性報告者やパッチ作成者も、実行時の軽微な異常からプログラムクラッシュまで、あらゆる問題を修正する必要があるため、一般的にコードベースに精通しています。もちろん、脆弱性報告者の中には、プロジェクトのコードを個人的に確認するのではなく、明らかな不具合に気付くことで、意図せず脆弱性を発見する人もいます。システム管理者は通常、ユーザーが依存する重要なアプリケーションのコードに精通しています。最後に、潜在的な脆弱性を発見するためにコードを詳細に調査することに特化したセキュリティ研究者もいます。 信頼と透明性大規模なソフトウェアプログラムは数万行のコードで構成されているため、監査は事実上不可能だという先入観を持っている人が多いようです。しかし、ソフトウェアの動作に必要なコード量の多さに惑わされてはいけません。実際には、数万行ものコードを読む必要はありません。コードは高度に構造化されており、悪用可能な脆弱性はたった1行であっても、ソフトウェア全体の機能に影響を与える可能性があります。 もちろん例外もあります。単一のシステムコールや欠陥のあるライブラリファイルへのリンクが、複数の脆弱性を引き起こすこともあります。幸いなことに、セキュリティ研究者や脆弱性データベースの積極的な活動のおかげで、こうしたエラーは比較的簡単に発見できます。 共通脆弱性識別子(CVE)ウェブサイトなどのバグ追跡システムを挙げ、オープンソースソフトウェアは明らかに安全ではないと結論付ける人もいます。結局のところ、多くのオープンソースプロジェクトが関与する多数のセキュリティリスクが公開されているからです。しかし、データに惑わされてはいけません。クローズドソースソフトウェアに脆弱性が見られないからといって、クローズドソースソフトウェアに脆弱性がないわけではありません。実際、クローズドソースソフトウェアに対しては多くのエクスプロイトが提案されており、クローズドソースソフトウェアにも脆弱性は存在します。違いは、開発者(およびユーザー)がオープンソースソフトウェアのすべての脆弱性を確認できるため、その影響を軽減できる点です。これは、オープンソースソフトウェアへの信頼を高める体系的なメカニズムの一部であり、クローズドソースソフトウェアには欠けているものです。 どのようなコードでも、脆弱性を見つけるための「十分な目」が存在するとは限りませんが、開発コミュニティが大きく多様であればあるほど、コードの欠陥を見つけて修正する機会は増えます。 信頼と人々オープンソースコミュニティでは、同じプロジェクトに携わる多数の開発者が「安全でない」脆弱性を発見しても沈黙を守る可能性は極めて低い。なぜなら、人々がこのように共謀することに同意することは稀だからだ。COVID-19への対応において、人間の行動がいかに一貫性に欠けていたかは既に見てきたが、ここでも同じことが当てはまるだろう。
同じことがオープンソース ソフトウェアの脆弱性にも当てはまります。誰かが脆弱性を発見した場合、それは必ず公開されます (もちろん、「発見できる場合」と言っているのです)。 しかし、プロプライエタリソフトウェアの場合、プロプライエタリモデルは給与に依存しているため、プロジェクトに関与する多くの開発者は、安全でない脆弱性に気付いても沈黙を守る可能性が高くなります。開発者が脆弱性を公開すると、プロプライエタリソフトウェアの評判が損なわれ、売上が減少する可能性があります。最悪の場合、職を失う可能性もあります。開発者は給与を受け取りながら秘密裏にソフトウェアの開発に取り組んでおり、その欠陥について話し合うことはほとんどありません。開発者であったことがあれば、おそらくNDA(秘密保持契約)に署名したり、企業秘密の重要性について研修を受けたりしたことがあるでしょう。プロプライエタリソフトウェアでは、重大な機密の欠陥に直面した場合、沈黙することが奨励され、多くの場合義務付けられます。 信頼とソフトウェア監査していないソフトウェアは信頼しないでください。 監査していないソフトウェアを信頼する必要がある場合は、欠陥を暴露する可能性が高い開発者にコードをすでにリリースしているソフトウェアを信頼することを選択してください。 オープンソース ソフトウェアは、本質的にはプロプライエタリ ソフトウェアよりも高いセキュリティを備えているわけではありませんが、セキュリティを修正するシステムは、より適切に計画、実装、および人員配置されています。 |