パスワードを忘れた? アカウント作成
14135377 story
バグ

オープンソースソフトウェアの脆弱性、2019年は前年から50%近く増加したとの調査結果 58

ストーリー by headless
増加 部門より
WhiteSourceの年次報告書「The State of Open Source Security Vulnerabilities」によると、2019年に報告されたオープンソースソフトウェアの脆弱性は前年から50%近く増加していたそうだ(BetaNewsの記事The Registerの記事)。

データはWhiteSourceがNVD(National Vulnerability Database)のほか、セキュリティアドバイザリやピアレビュー型の脆弱性データベース、バグトラッカーから収集したもので、2019年のオープンソースソフトウェアの脆弱性は6,000件を超えているという。オープンソースソフトウェアの脆弱性は85%が公表時点で修正されている一方、NVDに掲載されるのは84%にとどまる。当初はNVDに報告されないものも45%にのぼり、29%はいずれNVDに掲載されるものの数か月のタイムラグがあるとのこと。

オープンソースソフトウェアの脆弱性で最も多いのはCで書かれたものだ。ただし、2009年~2018年のデータでは脆弱性の47%を占めていたのに対し、2019年は30%まで減少している。一方、PHPは15%から27%に増加した。脆弱性の種類ではC以外の言語(C++/Java/JavaScript/PHP/Python/Ruby)でXSS(CWE-79)が最多、不適切な入力確認(CWE-20)と情報漏洩(CWE-200)が続く(Rubyのみ逆順)のに対し、Cではバッファーエラー(CWE-119)・領域外読み込み(CWE-125)・NULLポインター参照(CWE-476)の順になっている。
  • by Anonymous Coward on 2020年03月14日 19時23分 (#3779289)

    Cではバッファーエラー(CWE-119)・領域外読み込み(CWE-125)・NULLポインター参照(CWE-476)の順になっている。

    他の言語ではそもそも脆弱性になりえないから…と思ったが、ここではC++も「他の言語」なのか。みんな意外とC++の機能をちゃんと使っているということか

    ここに返信
    • by Anonymous Coward on 2020年03月14日 21時21分 (#3779326)

      ちなみに python ruby php などはC言語で実装されています

      C言語が滅ぶことは当面無いと思われます

      • by Anonymous Coward

        セルフホスティングできるようになれば解決!?

        • by Anonymous Coward on 2020年03月15日 10時44分 (#3779421)

          話を矮小化するな
          セルフホスティング可能云々じゃないだろ
          まずOSもなにもない全くの新しいプロセッサを開発したとして
          そのプロセッサ用にC言語用のクロス環境を作ることは容易いだろうが
          それ以外の言語で同じことが可能な言語があるのか?って話よ

          C以外のほぼすべての言語がそうした状態での使用をそもそも想定できておらず
          勘違いも甚だしいことになぜかCコンパイラとそのビルドツール一式が存在している
          という前提の元にすべてが設計されてんじゃねーの?

          PythonでもRubyでもRustでもJavaでもC#でもなんでもいいが
          Cのクロス環境さえない状態でいきなり自身のクロス環境を構築できんの?

          Cより普及させたいという願望があるのなら
          そうした願望を持った言語は自身とアセンブラのみですべて記述され
          容易にクロス環境の構築が可能な程度の移植性は備えていないと話にもならないよ
          Cよりも安全性の高いコードの記述が可能か否かなんてのはその後の話

          あらゆる言語の中で最もCに近いであろうC++ですら
          Linusに移植性が低いと何度も切って捨てられてることからもわかるように
          そういった用途ではC以外の選択肢がないのが現状
          CコンパイラをC++で記述してるgccですらその1stステージxg++の記述に使われているのはC言語
          あなたが認めようと認めまいとね

          • by Anonymous Coward

            RustはバックエンドがLLVMだから新規CPUに対応させるのはCとあまり変わらないのではないかと

            • by Anonymous Coward

              LLVMがCで書かれているという反論が来そう。
              実際のところの実装が容易なのはCが他の高級言語に依存しないからというより仕様が単純な上コンパイラ開発になれた人が多いからってだけの話。

    • by Anonymous Coward

      ダメなプログラムを書いた責任を言語に擦り付けるようじゃ何使ってもダメでしょ
      チンパンジーがキーボードを乱打しても正常なプログラムが書けるような言語があるなら話は別だけど

      • by Anonymous Coward on 2020年03月14日 20時20分 (#3779302)

        人間の注意力に責任を押し付けるようなやつは何をやってもダメ

        • by Anonymous Coward

          ただ、この手の指摘って実害はないけれどコーディング上はだめというものも含まれているから
          ただ統計結果だけだとゴミの評価にしかならないというのが個人的な感想。
          企業がやってるコーディングのセキュリティチェックなんかがよい例なんじゃないだろうか。
          ツールの出力結果を成形して貼り付けるだけで中身なんて何も見てないからなあれ。ほんと存在価値がない。
          まぁ。全部が全部そういう実害のない脆弱性というわけでもないだろうけれど。。。

          基本的なことをちゃんと手抜かずにすればいいのに
          Cの場合、めんどくさがってやらないやつが多いという話でもあるんだと思う。
          手間を惜しまず、手続きさえちゃんとふめば、Cが一番安定した言語だと今でも思うよ。
          基幹部分を作るのならばの話。

          • by Anonymous Coward

            あのさぁ……データの収集元になったNVDや脆弱性データベースって見たことない?
            そこに「実害はないけれどコーディング上はだめ」というものが含まれていると思う?

        • by Anonymous Coward

          例えばポインタの存在しないプログラムで同じように初期化や値チェックが雑なプログラムを組んだらNULLポで落ちない代わりによくわからない想定外の動作をするプログラムになるだけでしょ?
          バッファーオーバランでセキュリティリスクになるよりはランタイムエラーで落ちる方が良いとか?
          注意力に限界はあるしプログラムにバグが発生するのはあたりまえ
          それをテストデバッグせずに言語が悪いと言う人はプログラマーに向いてない
          ※注意力散漫でもバグが無いプログラムを作れる言語なりシステムがあるなら教えてほしい

          • by Anonymous Coward

            Cでも初期化や値チェックがだめでよいわけじゃないので、なんの比較にもなっていない。

            バグが完全に無くならないかぎり、少なくしようとするのに意味はないという意見には
            賛成できない。

          • by Anonymous Coward

            例えばポインタの存在しないプログラムで同じように初期化や値チェックが雑なプログラムを組んだらNULLポで落ちない代わりによくわからない想定外の動作をするプログラムになるだけでしょ?
            バッファーオーバランでセキュリティリスクになるよりはランタイムエラーで落ちる方が良いとか?

            例えば流行りのRustなら、ランタイムエラーどころか、そもそもビルドを通さない仕組みがいくつかあるよな。
            レースコンディションとかはきっちり叱ってくれる。解放済みのポインタの使用も。
            何もないよりは、こっちの方が断然良い。

            注意力に限界はあるしプログラムにバグが発生するのはあたりまえ

            そう。
            それを言語がカバーして叱ってくれるんだぜ。やっぱり言語の選択は重要よ。

            • by Anonymous Coward

              言語側でカバーして、文法レベルでエラーにしてくれるのが良いのはもちろんだが、Cは最近の静的解析使えばかなり改善する。
              いまどきの静的解析はとても優秀で一昔前だとリソース的に無理だったような、そこまでの実行パスで取りうる値を網羅的にチェックしてくれたりするんだよな。解放済みのポインタ参照なんか当たり前のように検出してくれる。
              valgrindはもう無くていいレベル

          • by Anonymous Coward

            ソースを読まずにお前が悪いと言う人はスラドに向いてない。
            Pythonは人気が高いにも関わらず脆弱性の割合が低いってことが書いてあるぞ。

            • by Anonymous Coward

              ソースを読まずにお前が悪いと言う人はスラドに向いてない。
              Pythonは人気が高いにも関わらず脆弱性の割合が低いってことが書いてあるぞ。

              Pythonでポインタとか使えたっけ?

              低レベルな操作ができない(あるいはできることが少ない)言語は、それに起因した脆弱性は減るよ。
              それは特性の問題で、言語の良し悪し(や、ユーザーの良し悪し)とは、直接関係ははない。

              かといって低レベルな操作が仕様にない言語だけになると、その辺やるのにいきなり機械語書くのか?みたいな問題になるから、たとえ脆弱性を作りこみやすいとしても、低レベル操作が可能な言語は必要だ。

              # 包丁とミキサーなら包丁のほうが負傷事故は起きやすいが、じゃあ包丁がいらないかと言えばそんなことはない

              • by Anonymous Coward

                言語特性起因の脆弱性が(言語内でも言語外でも)トップにきてる時点で、
                セイフティが存在しないか役に立ってない残念言語ってことにならない?

                # ミキサーの負傷事故が少ないのは、指をミキサーに突っ込んだ状態で
                # 動かないようにするとか、絶縁して漏電しないように安全性が考慮されているから

              • by Anonymous Coward

                で、ミキサーで野菜の皮を剥いたり、生魚の鱗を取ったり、エビの背腸をとったり、食肉をダイスカットできるわけ?

                機能を制限すればリミッターや安全装置はつけられるけど、その分、汎用性は失われる。
                その汎用性が必要なときに、仕方なくリミッターや安全装置がない道具を使わざるを得ないこともある。
                そこにリミッターも安全装置もないのは欠陥ではないよ。汎用性を維持するために付けられなかっただけ。

      • by Anonymous Coward

        無限の猿に無限時間書かせればばいずれ意味解析通るので正常がなにか定義しないとダメ。

        • by Anonymous Coward

          正常をどう定義したところで無限の数の猿に無限の時間タイプさせれば意味解析も構文チェッカも通るでしょ。

          • by Anonymous Coward

            一体いつから正常なプログラムが有限と錯覚していた?

            • by Anonymous Coward

              元コメは無限が2つあるので、正常なプログラムが無限でも別に発散したりしないのでは

              • by Anonymous Coward

                無限の猿は日常的な感覚で言えば可算無限集合にしかならないでしょ?

                # どんな日常だ

    • by Anonymous Coward

      そりゃシェアが高ければ件数も多いわな
      とっととRustとやらをC以上に普及させてね

      • by Anonymous Coward

        https://wired.jp/2018/08/18/apple-swift-android-kotlin-rankings/ [wired.jp]
        2018年の時点で、タレコミに出てくる他のどの言語よりもシェアが低いようだが

        • by Anonymous Coward

          WIREDで取り上げられてるのはシェアランキングではなくGitHubとStack Overflowから抽出した人気言語ランキング。

          WhiteSourceの年次報告書では"C still has the highest percentage of vulnerabilities due to the high volume of code written in this language."(Cは、この言語で記述された大量のコードのために、依然として脆弱性の割合が最も高くなっています。)と分析している。

          おそらく、Cの割合が依然として高いのはGNU/Linuxの影響で、PHPの割合が15%から27%に増加したのはWordPressの影響。

      • by Anonymous Coward

        RustをC以上に普及させるもなにも
        そもそもRustがCで書かれたLLVMの上に乗ってる以上机上の空論だろ
        LLVMを使うのを止めすべてをRustで書くか、LLVMをRustで書けと

    • by Anonymous Coward

      OSにしても、コアの部分はCも必要不可欠だろうけれど、大半はJavaやC#のような保護された高級言語によって記述されるべきなんだよね。
      そろそろバフォーマンス的にも問題がなくなってきているし。
      Linuxにいまだ標準的なOS記述向け保護機能付き高級言語が無いのは良くない。

    • by Anonymous Coward

      ヌルポの脆弱性ってどんなの?
      SEGっても呼び出し側プロセスかなんかのレベルで粘り腰プログラムが不正な処理を続けるとか?

      • by Anonymous Coward

        外部から意図的にSEGらせてサービス運用妨害(DoS)できること自体が脆弱性

      • by Anonymous Coward

        > ヌルポの脆弱性ってどんなの?

        ちゃんと「NULLポインター参照(CWE-476) 」と書いてあるじゃないですか

        質問する前に CWE-476 を読みましょう

        http://cwe.mitre.org/data/definitions/476.html [mitre.org]

    • by Anonymous Coward

      私がcプログラマを神聖視(尊敬)してphpとかを憎んでいるのもあるが、それを差し引いても実装者のやらかし的な脆弱性に限定すればcはマシな部類なんじゃないかと思う。

      • by Anonymous Coward

        何年か前だと、ifがコードブロックも式も受け付けるというのと、gotoというラベルを書けばOKな機能とが相まって、
        goto failしちゃうというのがありましたね。

        仮定の話ですが、失敗の理由にはこういうコードを追いかけるのがめんどくさいのというのがあると思うので、
        ifがどちらかしか受け付けなかったり、gotoがなかったりすればプログラマなりコンパイラなりが気づけたのかもしれません。

        PHPがそうかどうかは知らないですけれど。

    • by Anonymous Coward

      ランタイムやその他足回りがC言語である以上、どうあがいても無理。

  • by Anonymous Coward on 2020年03月14日 19時41分 (#3779294)

    バグトラッカーには、リリース前に自動テストツールによって検出され自動的に登録されるバグやが大量に含まれていると思われる。
    そもそも、リリース前のバグもカウントするべきなのか。
    公開のリポジトリにコミットされたらリリースしたと扱うの?

    ここに返信
  • by Anonymous Coward on 2020年03月14日 20時50分 (#3779314)

    OSSなら安心(爆笑)

    ここに返信
  • ○ 脆弱性の定義、2019年は前年から50%近く増加したとの調査結果

    ここに返信
    • by Anonymous Coward

      昔の人の方が健康的だったって信じている人がいるけれど、今の方が圧倒的に健康的。
      自動車や船舶なんかも圧倒的に今の方が安全だけど、なぜか信じない人が多い。

      それに似てる。

  • たとえば、iPhoneは、アプリにバグがあっても、そのバグをハッカーが利用するのが難しい
    同じく、rootも勝手アプリも開放してないAndroidも同様

    サーバOSも、アプリにバグがあってもそれをハッカーが利用するのが難しい環境を作ったほうがいいのでは?

    ここに返信
    • by Anonymous Coward

      人はなぜSELinuxを無効化してしまうのか……

      • by Anonymous Coward

        restorecon / -R
        してもいいから有効化しろ
        と言ってくれる人が居ないからでは?

        「コンテキストはデフォルト設定」固定!
        でもいいから、
        SELinuxは有効にした方が良いと
        権威のある人が言い切ってくれたら
        良かったと思う。
        (私は、個人的に構築したCentOSでは、全部やっているが。。。)

      • by Anonymous Coward

        アップアーマーを使うからさ

  • by Anonymous Coward on 2020年03月15日 18時36分 (#3779535)

    WindowsのAPIに、昔のgets的なインタフェースの奴がごろごろあるので
    言語以前の問題がある。
    そこらへんをFIXしたら互換性で阿鼻叫喚になるはず。

    ここに返信
typodupeerror

Stableって古いって意味だっけ? -- Debian初級

読み込み中...