パスワードを忘れた? アカウント作成
16137929 story
プログラミング

NSA、可能な限りメモリ安全なプログラミング言語を使うことを推奨 105

ストーリー by headless
安全 部門より
米国家安全保障局 (NSA) は 10 日、メモリ安全性の問題に対応するためのガイダンスを公開し、可能な限りメモリ安全なプログラミング言語を使用するよう推奨した (プレスリリースThe Register の記事ガイダンス: PDF)。

Microsoft は 2019 年、過去 12 年間の Microsoft 製品の脆弱性は 70 % がメモリ安全性に起因すると述べており、Google も 2020 年に Chromium の重大な脆弱性の 70 % がメモリ安全性に起因すると述べていた。

広く使われているCやC++などの言語はメモリ管理の自由度が高い一方で、必要なメモリ参照の確認はプログラマーに強く依存する。ソフトウェア解析ツールを使用すればある程度の保護は可能になるが、メモリ安全な言語はそれ自体がメモリ管理の問題の多くに対応可能な保護機能を提供する。そのため、可能な場面ではメモリ安全な言語の使用が推奨されるとのこと。メモリ安全な言語の例としては、C#・Go・Java・Ruby・Rust・Swift が挙げられている。
  • by Anonymous Coward on 2022年11月13日 22時08分 (#4359299)

    CやC++は素晴らしいという人も居るけど、セキュリティ的には可能な限り避けるべき代物っていうのは当たり前の話だね。
    気を付けたって規模がデカくなればどっかで絶対やらかすのは避けられないと思うのよね。
    というか大企業だって著名オープンソースだってやらかしてるのに、お前はきちんとできるというのかと。
    組み込みとかなら仕方ないけど。

    C#ならunsafe、Javaならsun.misc.Unsafe、その他色々壊せるけどね。
    ランタイムや参照してるネイティブのライブラリや実行環境やその他諸々で脆弱性があればどうにもならないというか、それ以前にメモリ安全以外の危険は色々あるけどね。

    ここに返信
    • by Anonymous Coward

      CやC++が素晴らしいのは、だいたいなんでも書けることであって、書こうと思えば無茶苦茶も書ける。
      これから起こすプロジェクトでは、制約のきつい言語のほうが安全だろうし、CやC++はその知見を取り込まなければならない。
      制約をも記述できてこそ、C++だと自分は思う。

      • by Anonymous Coward

        アセンブラほど「理屈の上では」ってわけではないが、でも現実的な意味でCやC++で何でも書けるかと言われれば疑問符が付く。
        何しろ大規模開発は精神と難易度的に厳しい。
        スマホアプリもコンソールツールもウェブアプリもWindows向けアプリもって意味じゃC#だし、スマホやデスクトップ向けアプリでもうちょい良い感じならDartだし、30億のデバイスで走ると言えばJavaだし、その辺も割と何でもと言えるレベルだと思うけどな。
        「覚えておいて損はしない」ってのは否定しないけど最新規格や細部まで追うべきかは微妙。

        • by nim (10479) on 2022年11月14日 0時45分 (#4359332)

          > スマホアプリもコンソールツールもウェブアプリもWindows向けアプリもって意味じゃC#だし

          今どきはこういうのも、ガチなやつじゃなければ JavaScript でできちゃうからずいぶんハードル下がりましたね。

          • by Anonymous Coward

            WebGLあるし、ガチなやつでもマルチプラットフォームなものはJavaScriptが増えてるのでは?

        • by Anonymous Coward

          https://jp.quora.com/kumikomi-shisutemu-deha-doushite-C-ga-C-ni-shu-tt... [quora.com]

          組み込み系なら損はないどころかリアルタイム性でも現役
          いつかは進歩するだろうけど当面先だろうね

          あとはCOBOLみたいに特殊な環境で脆弱性に対処する荒業もw

        • by Anonymous Coward

          C言語内にインラインアセンブラや、アセンブラコードをマージして使うことで、
          その欠点を補ってるのが、OSのカーネルや、デバイスドライバだね

          どうしてもアセンブラじゃないと出来ないことや、パフォーマンスのためにアセンブラが必要なところのみ、
          アセンブラを使ってる

      • by Anonymous Coward

        Rustが台頭して、C++は完全にその役目を終えたのでは?
        比較すると、C++選ぶメリットがないよね?

        • by Anonymous Coward

          選ぶことはなくても、既存の資産ってのがあるから(強化は必要)。
          極端な話、一晩でひっくり返したようにChromeをRustに移行したりはしないと思うので。
          たとえコンバータを書いたとしても。

      • by Anonymous Coward

        ひとつのアプリを開発するたびにそれ専用のインタプリタを開発していたこともあったんだよ。アプリの大部分はデータとして記述して、その解釈を行う小さいプログラムがあるような作り。そんな作りの場合でも C/C++ よりも何らかのスクリプト言語の方がいいね。

    • by Anonymous Coward

      そのメモリ安全で防げるもの以外の危険が相対的に少ない、という話なのだが。

    • by Anonymous Coward

      当たり前だけど「セキュリティ的には可能な限り避けるべき代物」なんかこの物言いには違和感。

      C/C++は原理的にメモリ管理のセキュアコーディングは開発者に任されているから、
      開発者はその要件が求められるプログラムではセキュアなコーディングが求められるというだけだろう。

      どんな開発環境だって開発者に任されている領域は開発者の責務において実装しなければならない。

      • by Anonymous Coward on 2022年11月14日 12時58分 (#4359512)

        ここは高木先生 [archive.org]を召喚しないと。

        > > 悪しき習慣です。CやC++がプログラミングに携わる人のすべての必携の言語
        > > として蔓延りかけてしまったことは、世界の情報産業の生産性をいったいど
        > > れだけ損失させたか計り知れません。
        >
        > すべての必携の言語にCがなり得たのは、それだけ優れた言語だったからでしょう。

        いいえ。一部の人が使うのには優れていますが万人が使うべきものではあり
        ません。C以外が普及しなかったのは、様々な背景があるのであって、Cが優
        れていたからではありません。

        > 生産性を損失させたのは、ポインタの使用方法を誤った、Cに熟練していない
        > プログラマの存在だと思います。

        熟練できないプログラマが溢れかえるような言語は優れていないのです。
        (マニアには他人との差別化ができてご満悦でしょうが。)

      • by Anonymous Coward

        そもそも今時はメモリ安全なんか、開発者に任せる必要性がないだろ。
        無駄に責任を負わせるのは止めようと言う話。

  • by Anonymous Coward on 2022年11月13日 22時27分 (#4359303)

    JSFの開発にストラウストラップ御大まで投入してC++を採用
    初飛行時は数時間おきにリブートしないとシステムダウン
    結局バグはとりきれてないけど、ダウンするまでの時間が最長任務時間をようやく超えたから検収できたとか

    ここに返信
    • by Anonymous Coward

      結局バグはとりきれてないけど、ダウンするまでの時間が最長任務時間をようやく超えたから検収できたとか

      OSにMeでも載せてたりするんだろうか

      • by Anonymous Coward

        MEも遠くなりにけり

      • by Anonymous Coward

        いえ、インタフェースがFirewireなだけです。

      • by Anonymous Coward

        タイマの制度を落としました

    • by Anonymous Coward

      ここでのメモリ安全性はセキュリティバグの話だから別件ですね

    • by Anonymous Coward

      までというと語弊があるような。 むしろ国防だからこそ参加してくれたと見るべきかもしれない。

  • by Anonymous Coward on 2022年11月13日 22時04分 (#4359296)

    Kotlinが挙げられてない可哀想

    ここに返信
  • by Anonymous Coward on 2022年11月13日 22時50分 (#4359306)

    NSAとしては未発見の脆弱性が無いとピーピングトムれないから堅牢は非推奨かと思ったが
    問答無用のバックドア手に入れたからもう大丈夫ってことなのかな

    ここに返信
    • by Anonymous Coward

      問答無用のバックドア相当品が次々と現れてNSAでない連中が利用するからじゃないの

    • by Anonymous Coward

      ポインタや参照を理解できない職員が増えてきたってこと。時代だよ。

  • by Anonymous Coward on 2022年11月14日 3時09分 (#4359351)

    ふつー高級言語ってメモリ安全でないの

    ここに返信
  • by Anonymous Coward on 2022年11月14日 9時05分 (#4359391)

    スレッドセーフは含まれますか?

    ここに返信
    • by Anonymous Coward

      並列処理は人類には早すぎる

      • by Anonymous Coward

        量子コンピュータなどバグがどうなるのやら?

  • by Anonymous Coward on 2022年11月14日 11時30分 (#4359443)

    OSや言語仕様やコンパイラの設計に問題があるのではないの?
    これだけ脆弱性がわかっているならそれを踏まえて設計し直すことは可能では?

    ハッカやクラッカのほうが技術的スキルが上であればそういう集団を雇って全部刷り直しるればいい
    海外はともかく日本ではスキルがあっても学歴重視社会で
    本当の天才は日の目を見ないのが現実

    これじゃあ技術者の海外流出があるのは当然

    日本という国はどうでもいいところに税金を無駄遣いしている
    その合計年間数十兆円
    いつまで既得権益などという過去の亡霊に頼るのだろうか?

    ここに返信
    • 最近バッファオーバーフロー保護も普及してきてるし、
      静的解析ツールも使えるし、言語仕様やコンパイラのレベルで
      打ち取れる脆弱性は減ってきてるでしょ。

      Log4Shell とかはメモリ安全な言語で発生してるものだし、
      メタップスの事例とかも、直接言語仕様でどうこうできるもんではないでしょう。

    • by Anonymous Coward

      その流出した海外でも出来ない事が、何故出来ると???

    • by Anonymous Coward

      完璧な設計、完璧な実装、完璧な評価
      それらを満たすには無限大のコストがかかります
      そこまで完璧じゃなくっても良い?その妥協の結果が現状ですね

    • by Anonymous Coward

      開発者は1点のミスもない満点を取らなければならない。
      クラッカーは開発者がミスした部分のうちたった1点でも分かるとクラックできる。
      通常は開発する側の方がずっと難易度が高い。

typodupeerror

私はプログラマです。1040 formに私の職業としてそう書いています -- Ken Thompson

読み込み中...