パスワードを忘れた? アカウント作成
14196563 story
Chrome

Chromiumプロジェクト、重大度の高いセキュリティバグの約70%がメモリに由来すると発表 60

ストーリー by hylom
世の中全体でもそんな感じな気もする 部門より

Anonymous Coward曰く、

Chromiumプロジェクトは今週、重大度の高いセキュリティバグの約70%は、メモリの安全性に関する問題(ポインタの誤り)に由来すると発表した。これはGoogleのエンジニアが2015年以降の912の重大度の高い、もしくは重大なセキュリティバグを分析した結果から導き出させたものだという。これはユーザーのセキュリティを危険にさらすだけでなく、Chromeの修正と出荷においてコストを増大させているとしている。

同様の問題はMicrosoftも指摘している。2019年2月のセキュリティ会議で講演したMicrosoftのエンジニアは過去12年間、Microsoft製品のすべてのセキュリティアップデートの約70%がメモリの安全性が原因だったと指摘している。端的に言えば、コードベースで2つの主要なプログラミング言語であるCとC++は「安全でない」言語であるということになる。

Googleによると2019年3月以降、重大度の高いChrome脆弱性130個のうち、125はメモリ破損に関連する問題だった。他のバグクラスの修正が進んだにもかかわらず、メモリ管理が依然として問題であるとしている。Mozillaは、CおよびC++の修正をするのをあきらめ、FirefoxでRustプログラミング言語を後援、促進、大幅に採用することで大きな進歩を遂げた。MicrosoftもCおよびC++の代替に多大な投資をしている。

今週、Googleも同様の計画を発表した。今後、Googleは、メモリ関連のバグに対する保護を強化したライブラリであるカスタムC++ライブラリの開発を検討する予定であると述べている。またGoogleは可能な限り「安全な」言語の使用を検討する計画があるとも述べている。候補には、Rust、Swift、JavaScript、Kotlin、およびJavaが含まれているようだ(The Chromium ProjectsSlashdot)。

  • っていうか、Theo君が、はるか昔に言ってなかったっけ、そんなこと。

    --
    # てれっててれっててー --- macohime(#cpdz)
    ここに返信
  • by nekopon (1483) on 2020年05月28日 14時17分 (#3823266) 日記
    アセンブラは安全でないみたいな話を今更
    // 測定したことに意味があるのですよ!
    ここに返信
    • by Anonymous Coward

      ポインタでメモリを直接操作するのが危険みたいな話だからな。ライブラリを強化したところで、ポインタで自由にメモリにアクセスできる時点で危険性は残る。
      アジャイル系の言語でランタイムモジュールでメモリ領域を管理するようなものでなければ大なり小なり問題がある。

  • by Anonymous Coward on 2020年05月28日 14時49分 (#3823286)

    わたしゃC/C++しかまともに使えないので組み込み界隈で飯食ってます
    もうPC界隈ではネイティブコードに無鑑査で落ちる言語を使うことは
    悪とされるようになるのかもしれない。
    # デバイスドライバさえも???

    ここに返信
    • by Anonymous Coward

      Rustが好評と実績を得ているが、贔屓にしているC++が負けるのは正直いって悔しいw
      Rustで得られたメモリ管理パラダイムが、C++(の規格か、実装)に取り入れられることを期待している。

      ていうか、数学の得意な人がやれば、今でもできそうなもんなんだが、やらない理由があるんだろうか。

      • Re: (スコア:2, すばらしい洞察)

        by Anonymous Coward on 2020年05月28日 14時59分 (#3823297)

        「人間は間違える」を前提にするとC/C++は本当にクソなので滅びるべき

        Rustで得られた知見がC++にフィードバックされようが、メモリ管理の誤りは人間がコードを書く限りは発生する
        だからこそ、安全な言語が使われるべき

        • by Anonymous Coward

          メモリ管理の問題を作りこめる問題は克服できると信じてるが、C++を無茶苦茶に使うヤツは多いからな、いっそ滅びろってのはわかる。

          どうとでも書けるからって、どう書いてもいいわけじゃないと思うんだ。

          • 古くから&今でもよく使われているものなのに「互換性を維持しながら安全性を確保するのは無理なので、より安全な代替を用意したからそっちを使って」とするしかないものはたくさんあると思う。
            依存関係の上流側にあるものを更新するコストとリスクはでかいからねぇ。

          • by Anonymous Coward

            Perl「お、おぅ・・・」

            • by Anonymous Coward

              Perlが業務用途で廃れたのって「どう書いてもいいから」だろうね。

              粒ぞろいのエンジニアだけで開発するならこれほど効率がいい言語はないと今でも思ってるが、
              VBA感覚で書く素人が大量にいるのでデメリットの方が大きい。
              バージョン間の互換性も高いせいでメンテ不能に陥ってる社内システムって相当残ってる気がするぞ。

        • by Anonymous Coward

          C++ はあまりに多機能なため、解析ツールとの相性が悪い。

          安全な言語を使うべきだが、そうでなければ C++ でなく Cを使って静的、動的解析ツールでバグを防止した方がましだと思う。

        • by Anonymous Coward

          未熟なプログラマが悪いのであってC++は悪くないよ

          • by Anonymous Coward

            書いた通りにしか動かないという観点からはC++がクソという意見には同意しかねるね。

          • by Anonymous Coward

            未熟でないC++erって聞いたことないんだけど。
            あの言語は、深部に行けば行くほど初心者になっていく。

            • by Anonymous Coward

              でも元記事はメモリ破壊とか言ってるぞ?
              テンプレートがどうとか型推論がどうとか、そんなんじゃない。
              きちんとエラーチェックして、しっかり排他処理して、生ポインタ使わずに済むようにクラスにまとめて、とかその程度でいい。
              C++のエキスパートでなくても、普通のプログラマなら普通にできることだよ。

              • by Anonymous Coward

                それがちゃんとできてりゃ、標題のようなことには、なってないわけだ。
                なんだかんだで。ってやつ。自戒も込める。
                その上、さらに、Rustのように、もっともっとコンパイラが仕事するべきだ。

        • by Anonymous Coward

          Cは滅ぶべきなんて言われてもう30年くらい経過してる気がするけど、代替になる言語がないので仕方ない。

          高級言語みたいに書けるアセンブラって他にあるか?

          • by Anonymous Coward

            今、汗は不人気だが欠かせないように、C/C++もその位置に向かうのかもね。となら、アンチにも言えるな。
            ただ、Rustに負けっぱなしも悔しいので、まだまだがんばってもらいたい。

        • by Anonymous Coward

          個人的には、C++がクソは同意。Cはさほどでもない。
          とにかく好きにさせろや、という時には結局Cがいい。安全なプログラム書きたいという時にはC++は余計なことができすぎる。

        • by Anonymous Coward

          御託はいいからさっさとC++を滅ぼして見せてほしいですね。
          私は理想より現実のほうが好きなので。

          • by Anonymous Coward

            危ない仕事そのものを忌避して担い手のC++を悪者にしてるうちは無理だろうな

        • by Anonymous Coward

          用途次第だから、滅びろとまでは思わない。
          1%のバグがあっても、99%の確率で2割高速に動作することに意味がある場合もある。

          リスクは用途ごとに得られる利益と天秤にかけて議論すべきであって、C/C++は全部だめとかRustは使えないなんて、用途を限定せず話すのは意味が無い。

      • by Anonymous Coward

        C++ってunsafeな処理を指定した関数に限定するコードチェッカとか作れないのかね。
        作れないのかそれとも、今でも想定外のメモリバグを可能な限り根絶したいとまでは思っていないというのがC++のスタンスなのだろうか。

        • by zakki (19710) on 2020年05月28日 16時31分 (#3823376)

          CならMicrosoftのChecked Cとか。
          https://github.com/Microsoft/checkedc [github.com]

        • by Anonymous Coward

          その思想でやったのがC#なんじゃね?

          • by Anonymous Coward

            C# は C系統じゃないと何度言ったら判るのか

            • by Anonymous Coward

              C# は C系統じゃないと何度言ったら判るのか

              マイクロソフト自身が「C++に更に++を足してC#だ」って言っているのに?

              ++
              ++
              で#

              • by Anonymous Coward

                C#はシステム的には.NET wrapperだからな。
                Low Level LanguageのC/C++とは系統が違うよ。

          • by Anonymous Coward

            そんな思想あったっけ?
            メモリを比較的安全に使えるようにガーベージコレクション使ってるけど
            強参照だと状況によっては普通にメモリリークするし
            あとC#もunsafeな処理は可能

        • by Anonymous Coward

          c++/cliでいいのでは。死にそうな言語だけど。

  • by Anonymous Coward on 2020年05月28日 14時56分 (#3823294)

    あえて脆弱性を入れ込むとかでなければメモリ以外のセキュリティ問題って滅多にない気がする
    ・仕様に由来するセキュリティ(WebGL 問題みたいなの)
    ・API のパラメータの取り違えなど
    ぐらい?

    結局重大度の高い問題って「任意コードの実行」「メモリの読み取り」が大半だと思うので、メモリ起因がほとんどだよね
    # とはいえ、「安全な」言語の使用って今以上にメモリ喰いしそうで嫌だな

    ここに返信
    • 実行コストもなかなか大変すよ
      // 調べなくても済む問題は調べずに「いかにすませるか」が最適化の鍵だったりするのだ
      • by Anonymous Coward

        いかに事前に済ませるか、だよな。

        C++だって、全機能がいつも最先端だったわけじゃない。他言語の「あれいいなあ」と思うものを、少しずつ取り込んで今がある。
        Rustが大成功を収めつつあり、「何がよかったのか」がプログラミング哲学的にわかってくる日は近い。
        C++の生ポインタにフットプリント0のトレイトを付与することは可能だと思うので、Rustの知見を取り込める日も来ると思う。

    • by Anonymous Coward

      30%あることを滅多にないと表現するのは、とても違和感があります

      • by Anonymous Coward on 2020年05月28日 16時01分 (#3823350)

        ご指摘ごもっとで、感覚と違いすぎるなと思い残りの 3 割について調べてみました
        Severity Guidelines for Security Issues [googlesource.com]

        ・A bug that allows full circumvention of the same origin policy. Universal XSS bugs fall into this category, as they allow script execution in the context of an arbitrary origin (534923).
        ・Site Isolation bypasses:

        細かい内訳はないのでこれがどの程度の比率かは不明ですが、XSS などポリシー外で情報を読めてしまうものも重大度が高いとして扱われていました
        確かに読まれたくない情報もあるし、クレジット番号など機密度の高い情報もあるのでこれも重大度の高い問題ですね

    • by Anonymous Coward

      Apple案件でセミコロンが一個多かったか閉じ括弧が一個抜けてたかで判別ロジックが腐った
      っていうのがなかったっけ

  • by Anonymous Coward on 2020年05月28日 15時42分 (#3823332)

    ブラウザの処理でレンダリングにしろ解析や実行にしろ、動的メモリ管理が大きなウェイトを占めているわけだし

    ここに返信
  • by Anonymous Coward on 2020年05月28日 16時07分 (#3823357)

    個人ベースでソースの隅々まで把握してる小さなアプリならともかく、
    巨大なアプリでは誰も全体像を把握できてないし、
    そういう環境でC/C++はヤバいと思う。

    組み込みならともかくPCやスマホ向けアプリの開発で
    アドレスを直でいじる言語は、もうキツいだろう。

    ここに返信
    • by Anonymous Coward

      それは別の話なんじゃないかな
      DBやファイルへのアクセスすら巨大なアプリは無理ということになっちゃう

  • by Anonymous Coward on 2020年05月28日 17時16分 (#3823420)

    Javaが安全って(安全の意味が違う

    ここに返信
  • by Anonymous Coward on 2020年05月28日 18時21分 (#3823458)

    データを移動して演算しメモリに書き込み、またデータを移動する

    ここに返信
    • by Anonymous Coward

      Rustの標準ライブラリBoxやVecが生成時そんな感じのモヤモヤする処理してますな

  • by Anonymous Coward on 2020年05月28日 20時32分 (#3823534)

    Goでは書けないの?

    ここに返信
  • by Anonymous Coward on 2020年05月28日 22時31分 (#3823576)

    サンドボックス内ならなんでもアリってこと?

    ここに返信
  • by Anonymous Coward on 2020年05月29日 4時26分 (#3823643)

    https://chromereleases.googleblog.com/2020/05/stable-channel-update-fo... [googleblog.com]

    Chromeが紹介してるツールをみんなが使いこなすようになればいい
    - AddressSanitizer
    - MemorySanitizer
    - UndefinedBehaviorSanitizer
    - Control Flow Integrity
    - libFuzzer
    - AFL

    ここに返信
    • by Anonymous Coward

      異存はないですが、VC派(VSじゃないよ。コマンドラインから使ってる)なので、もっとVCが追従・実装してほしいって思ってる。

typodupeerror

にわかな奴ほど語りたがる -- あるハッカー

読み込み中...