オープンソースプロジェクト、特にまたはへの呼び出しを含む数千行のコードを含むプロジェクトで、コードの安全性をどのように確認できるのでしょうpopen()
かsystem()
。そこに有害で悪意のあるコードがないことをどうやって知ることができますか?とにかくコードを安全に調べることができますか?
4 に答える
オープンソースプロジェクトのコードの安全性をどうやって確認できるのか疑問に思いました
簡単な答えはあなたができないということです。
はい、理論的には、コードベース全体を調べて監査することができます。これは、プロプライエタリコードでは不可能ですが、誰がそのための時間を持っていますか?一方、大規模なプロジェクトの多くは、多数のボランティアの貢献者が常にコードを監視している傾向があり、それらを実行する組織(ApacheやGNUなど)は表面上は良性の動機を持っているため、悪意のあるコードはおそらくすぐに見つけられ、フラグが立てられます。
そうは言っても、オープンソースソフトウェアに影響を及ぼし、2年間検出されなかった、まったく悲惨なセキュリティ上の欠陥が1つ考えられます。それは、サードパーティがめちゃくちゃ複雑な(そしてひどく書かれた)オープンソース製品を変更することが可能だったからこそ生じました。変更を加えた人は、彼らが何をしているかを理解していませんでした。彼らがコードを読むことができれば、誰がそれが可能だと思ったでしょう...
オープンソースであろうとなかろうと、プロジェクトのコードの安全性を100%確信することはできません。自分で作成していないコードやソフトウェアを使用する場合、必然的にサードパーティの作成者からある程度の信頼を得ることになります。プロジェクトがオープンソースの場合、コードを心ゆくまで監査できますが、他の回答者がすでに指摘しているように、完全な行ごとの検査を実行するための時間/リソースがあるとは考えられません。
KenThompsonの「ReflectionsonTrustingTrust」の記事は、次のような問題についてさらに考察するための興味深い読み物であることがわかります。
オープンソースなので、コードを調べることができます。他の人もそうですが、安全性は、(非常に)限られた数の人がコードを見るクローズドソースよりもはるかに優れている可能性があります。バージョン管理システム(git)は、変更されたコードを検出するためにチェックサムを計算します。
多くの場合、ソフトウェアを信頼しないことを決定するには、ソースコードを10分間探すだけで十分です。多くの選択肢がある場合は、それで十分です。
また、オープンソースプロジェクトに悪意のあるコードが明らかに(そして理論的には検証可能に)欠けているからといって、それらの安全性が保証されるわけではないことも付け加えておきます。
その理由は、悪意のある入力によって悪用されるセキュリティバグです。
たとえば、お気に入りのオープンソースの画像/ドキュメント/その他のビューア(またはWebブラウザ)には、これらのバグが1つ以上ある可能性があります。悪意を持って作成されたファイルをそれで開くと、pwnされる可能性があります。
オープンソースソフトウェアには商用ソフトウェアよりもセキュリティバグが多いと断言することはできませんが、それが非常に人気のあるプロジェクトではなく、セキュリティ上の欠陥に責任を負わない場合は、警告します。そのようなバグがあり、それらに興味を持って修正する人はほとんどいない可能性があります。つまり、プログラマーは構築するのが大好きです。楽しいです。セキュリティは厳しく、多くの場合、それに続くものです。