「十分な目で、すべてのエラーが表面に現れます。」
コードには誰でもアクセスできるので、定義により、オープンソースソフトウェアはクローズドソースソフトウェアよりもエラーが少ないと理解されています。 レイモンドはこの観察を「ライナスの法則」と呼びました。
もちろん、ある意味ではそうです。 会社の専任プログラマが10人しかソースコードを見ることができない場合、このコードがGitHubなどで公開されていた場合と同じ結果になることはほとんどありません。
しかし、Linusの法則の転換点は、OpenSSLのHeartbleed脆弱性の発見でした。これは、オープンソースソフトウェアの重大なエラーの結果としての壊滅的な悪用です 。 災害の規模は? 脆弱性は、世界中でHTTPSが有効になっているすべてのサイトの約18%でした。 その結果、攻撃者はこれらのサイトのすべてのトラフィックを暗号化されていない形式で見ることができました... 2年間 。
これらのサイトは保護されていますか? どうして。 このエラーは2年間気付きませんでした。
二年!
このエラーが発生したOpenSSLライブラリは、世界のインターネットインフラストラクチャの最も重要な要素の1つです 。 大企業は、インターネット経由で送信するために顧客の個人データを暗号化するためにこれに依存しています。 OpenSSLは、パスワード、銀行口座情報、クレジットカードなど、暗号化されてpr索好きな目から隠される必要がある機密情報を保護するために、何百万ものサーバーおよびデバイスで使用されています。
このコードは、世界で最も信頼できるものの1つでなければなりません。 そして、私たちの目はどこにありましたか?
「実際、初歩的なオープンソースソフトウェア以外の実際のバグを修正することは、単に難しいだけでなく、大打撃を受けます。 たとえば、私は経験豊富な開発者ですが、これを行う必要はほとんどありませんでした。 ほとんどの場合どうなりますか? あなたは単にコードの作者に問題を報告し、彼がそれを修正することを期待します」、 Neil Gunton 。
「たとえコードを読む勇敢なハッカーがいたとしても、検出が困難なエラーに気付くことはほとんどありません。 なんで? オープンソースのハッカーにはセキュリティの専門家がほとんどいないため、」 とJeremy Zawodny氏は述べています。
「多くの人がプログラムを見るという事実は、プログラムをより安全にするものではありませんが、多くの人がプログラムは十分に保護されていると信じています。 その結果、セキュリティに関しては信頼しすぎているように見えるオープンソース開発者のコミュニティがあります」 とJohn Viega氏は述べています。
Linusの法則にはいくつかの欠陥があると思います。
1. ユーザーの目と開発者の目は、彼らが言うように、2つの大きな違いです。 いくつかのバイナリRPMパッケージをコンパイルしたり、Linuxでコンパイルしたり、エラーを見つけてバグ追跡システムを介して開発者に報告したという事実は、コードを批判的にレビューする手助けをしているという意味ではありません。 ほとんどの目はコードの外側を見るだけです。 また、ユーザーとしてのセキュリティ問題、さらには深刻な問題を見つけることができますが、最も有害なバグには、コードが内部からどのように機能するかについての知識が必要です。
2.独自のコードを記述(またはカットアンドペースト)することは、独立した専門家のレベルで他人のコードを理解および評価するよりも簡単です。 基本的な避けられない非対称性はこれに関連しています:最近スタンプされたコードの行数は、それらのほんの一部だけが深刻な分析に値すると仮定しても、それらを見ることができる目の数よりも何倍も大きいです。 (はい、これはより少ないコードを書くことを支持する別の議論です )
3.コードを表示するには、 専門家として十分ではありません。 間違いなく、プログラマーの総数は徐々に増えていますが、他の誰かのコードを効果的に検証するのに十分な資格を持ち、セキュリティに十分に精通しているプログラマーはどれくらいいますか? 無視できる部分。
コードが100%オープンであり、重要なタスクを解決するように設計され、ほとんどすべての外部Webサーバーの大企業が顧客の安全を確保するために使用している場合でも、問題はすべての人に影響を与える重大なエラーで終わります。 2年間 !
結論を出す時です。 判明したように、 OpenSSLに十分な目を提供できない場合 、別のコードの可能性は何ですか? どうする? より多くの目を取得する場所?
短期的に:
•エコシステムを多様化するためのOpenSSLの代替をさらに作成します。
• OpenSSLのサポートと資金を改善します 。
これらの対策は両方とも効果的で必要です。 両方とも、人々が依存しているオープンソースエコシステムのすべての重要な部分に対して行われなければなりません。
しかし、長期的にはオープンソースの目不足の一般的な問題をどのように解決するのでしょうか? あなたはこの決定に精通していますが、エリック・レイモンドは彼を喜ばないだろうと思います。
お金 。 たくさんのお金。
現在、ますます多くの企業が商用のバグ検出プログラムに注目しています 。 これらのプログラムは、企業自身またはBugcrowd 、 Synack 、 HackerOne、 Crowdcurityなどのサードパーティ組織によって作成されます。 会社は、検出されたバグごとに支払いを行います。バグが大きく、悪化するほど、支払い額は大きくなります。
別の方法は、たとえばPwn2Ownなどのイベントに参加することです。このイベントでは、 毎年 、人気のあるソフトウェアの悪用に対して数十万ドルの賞金が与えられます。 この規模の年次イベントは常にメディアで広く取り上げられており、最大の市場関係者にとって興味深いものです。
これが主なアイデアです。 コード、ウェブサイト、アプリケーションでエラーを見つけたい場合は、古き良き方法で実行してください。小切手をお支払いください。 言い換えれば、目を買う。
セキュリティの向上を目的としたあらゆる努力を歓迎しますが、これは、商用と非商用の両方で一度にいくつかの分野で戦う必要がある戦いであることを完全に同意します。今日の間違いを見つけることが当たり前になっています 。 結果はどうなりますか?
お金はセキュリティのミスをより深く隠します
現在、エクスプロイトには価格があり、エクスプロイトが深く、ほとんど知られていないほど、より大きなジャックポットを獲得するまで誰にもそのことを伝えないようになります。 したがって、セキュリティ問題を報告する前にほぼ1年待つことは理にかなっています。その間、この問題はどこにも行きません。
主な質問がお金である場合、誰がより多くを支払うのですか? 善人か悪人か? どちらが良いですか-待ってから、もっと稼ぐか、エクスプロイトを改善してさらに危険になりますか? 私たちの共通の利益のために、善良な人はより深いポケットを持っていることを望みます。さもなければ、私たちはすべての人に良くないでしょう。
Google が既に Chrome向けPwn2OwnのバージョンであるPwniumの条件を変更することでこの問題を解決し始めているので、a)いつでもお金を受け取ることができ、b)金額が無制限になります。 これで十分かどうかはわかりませんが、間違いなく正しい方向に進んでいます。
お金は安全を利益に変える
この傾向に最初に気づいたのは、数人の人々が談話で軽微なセキュリティ問題を報告したときでした-そして、私の感覚では、報酬を期待して凍結しました(電子メールで表現できる限り)。 それは奇妙で、私はぎこちなく感じました。
今、私は世界に完全に無料のオープンソースソフトウェアを提供するだけでなく、セキュリティ問題に関する情報を共有する人々にお金を払う義務があり、それによってその品質を改善することが義務付けられていることがわかりましたか? 私を信じて、私はセキュリティ問題の報告を本当に感謝しているので、私はこれらの人々にできる限りすべてを送りました:ステッカー、Tシャツ、長い感謝の手紙、それらをコードと変更の説明で言及しました。 しかし、オープンソースはお金のためではありません...そうですか?
おそらく、クローズドソースの状況は異なります。それらは商用製品であり、「サービスのサービス」の原則はここでは適用されず、直接的または間接的にサービスに支払う何らかの方法です。
お金も保護もない
ソフトウェア保護の分野で最高の研究者全員が報酬を増やすためにバグをキャッチし、すべての大企業がそのようなスキームに切り替えると、これはソフトウェア業界にどのように影響しますか?
これは、大きな予算がない場合、誰もエラーを通知したくないため、通常の保護を提供できないことを意味します。 一体どうして? 結局のところ、彼らは支払われません。 彼らは他のプログラムの問題を探します。
「私にお金を払ってください。さもなければ、あなたのひどいバグについてはお話ししません」という恐ist主義者の原則は、もはやワイルドではありません。 すでに同様の手紙を受け取っています。
簡単なお金はみんなを引き付ける
バグにお金を払うという考えの不快な副作用は、良心的なプログラマーだけでなく、一般的に簡単なお金に興味があるすべての人を引き付けることです。
セキュリティ問題に関する「重要な」報告が非常に多く寄せられましたが、その価値は事実上ゼロでした。 しかし、これらは「最も重要な」レポートであるため、まだ確認する必要があります。 残念ながら、それらの多くは時間の無駄です。なぜなら...
•レポートの作成者は、明確な説明をするよりも、検出されたバグに起因する重大なセキュリティ侵害の重大な結果であなたを怖がらせるのがはるかに興味深いので、最終的にすべての作業を自分で行う必要があります。
•レポートの作成者は、エクスプロイトが何であるかを理解していませんが、エクスプロイトに類似するものすべてに特定の価値があることを知っているため、発見したすべてのものに関するレポートを送信します。
•レポートの作成者は、他の研究者と情報を共有することはできません。また、発見が「盗まれ」、その対価を得ることができるため、彼が本当に悪用に成功したことを確認できません。
•レポートの作成者は、これがお金を稼ぐための悪用であることをあなたに納得させる必要があるので、彼はあなたに自分が正しいことを証明します。 長くて難しい。
これらの動機は私には完全に間違っているようです。 当然、セキュリティが非常に重要であることは知っていますが、同時に、恐怖を増すという問題に対するこのような解決策を検討します。それは私の仕事に追加され、実質的に利益がないからです。
何ができますか?
幸いなことに、 ソフトウェアをより安全にするという共通の目標があります。
したがって、お金のためのバグの捕獲は、追加の武器または別の「深い防衛」ラインとして扱う必要があります-おそらく十分な予算を持つ商業プロジェクトに少し適しています。 これは正常です。
しかし、バグをキャッチするための商用プログラムを実装している人にアドバイスをしたいと思います。
•最初に誰かがこれらのエラーレポートを慎重にチェックする必要があります。信頼できるか、それらに再現手順が明確に記述されているか、実現可能か。
•脆弱性を迅速かつ効率的に検索するには、コミュニティに追加のインセンティブを作成する必要があります。 研究者は、互いに何も隠さずに協力しなければなりません。
•最高の信頼できる参加者のみがすべての段階を経てレポートを提出できるように、評判を作成するシステムを開発する必要があります。
•主要な市場関係者に、自社のクローズドソースアプリケーションやサイトだけでなく、一般的なオープンソースプロジェクトのバグキャッチプログラムに資金を提供するよう説得する必要があります。 Stack Exchangeでは毎年、使用したオープンソースプロジェクトに財政支援を提供しました。 バグをキャッチするプログラムに無償で資金を提供すると、コードをチェックする人の数を大幅に増やすことができます。
すぐに、十分なお金があれば、すべてのエラーが表面化する世界に生きることを恐れています。 お金はソフトウェアのセキュリティの面でいくつかの誤ったインセンティブを作成します、そして、これらのインセンティブは制御される必要があります。
しかし、私はまだ人々自身がオープンソースのセキュリティ問題を報告すると信じています
•それは正しいですか™
そして
•彼らはかつて彼らを助けたプロジェクトを助けたい、そして
...私たちは普通の世界でもう少し長生きするでしょう-私は願っています。
ABBYY Language Servicesによる翻訳