1 ポイント 投稿者 GN⁺ 2023-11-07 | 1件のコメント | WhatsAppで共有
  • 権限境界の切り替えに使われる sudo をRustで再実装した sudo-rs が、初の安定版として公開された
  • オリジナルのsudoにおけるセキュリティバグの約 3分の1 がメモリ管理の問題だったとの推定が、Rustでの書き直しの主な背景となっている
  • sudo-rsはあまり使われない機能を除外して 攻撃対象領域 を減らしており、テストスイートはオリジナルsudoのバグ発見にも活用されている
  • Wolfi Linux OSはすでにsudo-rsを含んでおり、Chainguardはセキュリティ上重要なツールの改善が業界全体に影響を与え得ると見ている
  • 外部セキュリティ監査は2023年9月に開始予定で、その後の作業はエンタープライズ機能を中心とする Milestone 4 へ移行する

Rustで再実装されたsudo-rs

  • Prossimoが sudo-rsの初の安定版リリース を公開した
  • sudo-rs は、Linuxでユーザーアカウントと管理者アカウントの間の 権限境界 を越えるために広く使われるsudoユーティリティを、Rustで再実装するプロジェクトである
  • sudo-rsプロジェクト は、オリジナルのsudoに比べてセキュリティを高めることに重点を置いている
    • Rust を使ってメモリ安全性を確保する
    • オリジナルsudoのセキュリティバグのうち約3分の1がメモリ管理の問題だったとの推定が出発点となっている
    • あまり一般的に使われない機能を除外し、攻撃対象領域 を減らしている
    • 広範なテストスイートを開発しており、このテストは オリジナルsudoのバグ も発見した

採用状況と次のステップ

  • Wolfi Linux OSはすでにsudo-rsを含んでいる
  • ChainguardのCEO兼共同創業者であるDan Lorencは、Wolfiを作る際に メモリ安全性 が最優先事項であり、sudoのようなセキュリティ上重要なツールの改善は業界全体に大きな影響を与え得ると見ている
  • sudo-rsは Tweede GolfFerrous Systems の共同チームが、Prossimoとの契約に基づいて構築した
  • プロジェクトは2022年12月に 開始 され、sudo-rsコードに対する外部セキュリティ監査は2023年9月に開始される予定である
  • 監査後、チームは 作業計画Milestone 4 に移行し、この段階ではエンタープライズ機能に焦点を当てる
  • オリジナルの Cベースのsudoユーティリティ はTodd C. Millerが長年メンテナンスしており、sudo-rsの実装にも助言を提供している
  • NLnet Foundationはsudo-rs監査に資金を提供し、Amazon Web Servicesはこの取り組みとメモリ安全なソフトウェアへの移行を支援している

1件のコメント

 
GN⁺ 2023-11-07
Hacker News の意見
  • sudo のオリジナル開発者の一人として(https://en.wikipedia.org/wiki/Sudo)、この43年間、ほぼ完全に書き直され続け、バグ修正され続ける過程を見てきた
    UNIX コマンドの中で、セキュリティ欠陥について最も多くレビューされてきたコマンドと言ってもよいだろうし、見つかった欠陥は修正されてきた
    何千人もの開発者やセキュリティ専門家が目を通してきたツールを、単一の開発チームが完全に再実装して、バグを1つや2つも新たに作らずに済むのか疑問に思う
    Rust という言語には、バグが入り込む可能性を魔法のようにすべてなくしてくれる何かがあるのだろうかと思う

    • sudo を作ってくれた仕事には感謝するしかなく、多くの人の日常的な利用において本当に貴重なツールだと思う
      sudo-rs を作る側として、既存の作業を無効化しようとしたことはなく、特に初期には私たちの実装も バグがないわけではない ことをよく理解している
      個人的には、Rust 版を作ることで、比較的安全な C コードを書ける自信があまりなく、普段なら手を出しにくかった領域を扱うことができた
      少なくともこの取り組みによって既存の sudo でいくつかのバグをすでに見つけており、43年間修正されてきたとしても、周囲の環境が変わる限り、このようなソフトウェアが完全にバグのない状態になるのは難しい
      互いに協力し、互いの仕事や失敗から学ぶ限り、代替案 が少しあることは悪いことではない
    • この43年間に何があったにせよ、2021年には Baron Samedit という広く悪用可能なメモリ破壊脆弱性があった
    • 高度な型システムや借用チェック、メモリ安全な言語は確かに大きな助けになるが、当然すべてのバグをなくすわけではない
      RiiR を行うときに開発者ができる最善のことは、ベストプラクティスに従い、過去の失敗から学ぶことだ
      43年間で大きく進歩しており、C の文字列処理を捨てるだけでも、メモリ安全性を論じる前に多数のバグを取り除ける
      今日、セキュアな sudo 代替品を作ろうとする人は、C だけを使っても昔よりはるかにうまくやれるし、OpenBSD プロジェクトはそれをかなりよく示している
      OpenBSD のコードが避けている危険な角を、言語レベルで多く取り除ければ出発点としては有利だろうが、それでも多くの注意と経験が必要であり、プログラミング言語がそれを代わりに与えてくれるわけではない
      少なくとも真剣に検討する価値はあるが、当面はデフォルトとして配布されるべきではないと思う
    • 経験を否定したいわけではなく、このプロジェクトが間違いなく苦痛を再発見することになるとは予想しているが、古典物理学をきちんと理解するために Newton、Leibniz、Maxwell の生涯の仕事をそのまま繰り返す必要はない、という点も重要だ
      今では高校のカリキュラムに入っており、それを通過すればかなりうまくできるし、少し努力すれば彼らが一生かけて成し遂げたことを非常にうまく扱える
      これは、巨人の肩 の上に立てること、後知恵とより良い技術・学習方法を得ていること、そして彼らのすべての失敗を繰り返す必要がないことによる
      オリジナル開発者が今の経験と知識を持って sudo をゼロから書き直すなら、はるかに短い時間で、よりきれいで単純なものにする可能性が高い
      既存の努力や経験を貶めるのではなく、その経験をより短い時間でより良いものに変えることは不可能ではない、という意味だ
    • メモリ安全性 についてはそうで、言語がデフォルトで安全にしてくれるほうがずっとよいが、論理バグには何もしてくれない
      ただし C 製の sudo や他のツールを置き換える場合、ヌルポインタやバッファの濫用のような脆弱性が、全体の50%を簡単に占める
  • このプロジェクトが掲げた2つの項目は、Rust の使用以上に見落とされがちな部分だと思う
    あまり使われない機能を外して 攻撃対象領域 を減らし、既存の sudo のバグまで見つけた広範なテスト群を開発することだ
    安全性が重要なコードを書くときには、Rust で書き直すこと以上に、こうした点のほうが重要だ

  • このプロジェクトの目標がsudoの代替だと仮定すると、「あまり使われない機能を除外」を軽く流すのは少し心配です
    その機能が何なのか、どの程度使われていないのか、そうした機能を使う設定ではどのように失敗するのかが重要です
    修正: GitHub READMEに一部の制限が整理されているようです、https://github.com/memorysafety/sudo-rs#differences-from-ori...

    • 欠けている機能の一つがsudoeditまたはsudo -eです
      /etc内のファイルや、自分のユーザーに権限がないファイルを編集するときによく使いますが、このフラグはまずファイルを自分のユーザーが編集できる権限の一時的な場所にコピーしてから、テキストエディタをsudo権限なしの自分のユーザー権限で実行します
      エディタは$SUDO_EDITOR環境変数で決まり、閉じた後、変更があった場合だけ元の権限でファイルをコピーし直します
      良い点は、rootユーザーではなく自分のユーザーとしてエディタを実行するので、自分のユーザー設定やプラグインを読み込めることです
    • 欠けていると書かれていない機能の一つが、make me a sandwichを実行する機能です (https://github.com/sudo-project/sudo/blob/main/Makefile.in#L...)
    • より大きな環境で使われる機能の一つなのに、sudo-rsのロードマップにもなく実装もされていないものがLDAPサポートです
      通常のsudoでは、中央のLDAP設定でネットワーク全体のsudo権限を管理でき、時間・ホスト・ユーザー・コマンドで制限されたルールも中央で作れます
      単純な構文エラーで設定全体が吹き飛ぶ可能性はなく、この場合は該当するルール一つだけが無視されます
    • systemdへ移行する過程も経験してきたのだから、システム管理者はこの程度なら管理できるでしょう
      優れた技術文書もきっとあるはずで、これは宣伝寄りのリリースなので、欠けている機能の一覧を探す場所ではないと思います
    • 最も基本的なUNIXツールの一つに機能が入りすぎていること自体が、はるかに大きな危険信号です
  • Apache-2.0+MITGPL-2.0の違いを見ると、メモリ安全なsu/sudo-rsを得ることはできても、それをバイナリ形式で配布する側が、ビルドに使ったソースコードや潜在的な修正まで公開する義務はありません

    • 私もこのコメントを書きたかったです
      GPLツールをMIT/ApacheライセンスのRustによる再実装で押しのけようとする流れが、いつかプロプライエタリなLinuxにつながるのではないかと大いに懸念していますが、もともとのsudoはGPLではありません
      ISC/MITスタイルのライセンスです [1]
      1. https://www.sudo.ws/about/license/
    • こうした中核コンポーネントでGPLから離れるのは非常に悪い考えです
      まさに上で述べた理由からで、この問題を強調するために書き残します
    • SudoはGPLではなく、ISC系[0]の非常に寛容なライセンスです
      suは実際にGPLのようです
      [0]: https://www.sudo.ws/about/license/
    • それは本当に悪いことなのでしょうか?
      そういうディストリビューションを使わない自由があります
      セキュリティ面では、悪意ある行為者がバイナリで配布しているものとは別のソースコードを見せることもできます
      GPLであろうとなかろうと同じです
    • 良くも悪くもGPLの利用は減少しており、Linuxカーネルの将来も保証されていません
      IoT向けの自由・オープンソースなUNIX系OSの領域では、Linux Foundationが支援するZephyrOSを含め、すべての候補がApache、MIT、BSDライセンスを組み合わせて使っています
      GPL世代がいなくなった後、大企業にとってより魅力的なライセンスを持つUNIX系OSが、Linuxカーネルのもう一つの管理主体の代替として、そう遠くないうちに登場するでしょう
  • これをRust実装のGNU Coreutilsと組み合わせたDebian派生版を見たら面白そうです
    メモリ安全性と性能の面で大きな利益になり得ます
    [1] https://github.com/uutils/coreutils

    • RustベースのUNIXユーザー空間まであとどれくらいなのか気になります
      少なくともCコンパイラを実装する必要はないでしょう
  • うんこに艶出しをしているのでしょうか?
    より良い再実装はもちろん歓迎ですが、sudoの奇妙な機能群を読んで驚かなかったのですか?
    普通に見える部分も非常に奇妙で微妙なので、それだけ脆弱です
    sudoを「深く」使っている人は、別の方法があるか考えたほうがよいです

  • 現在のsudo設定を試験実行して、sudo-rsがサポートしていない部分を出力してくれる検証/確認フラグやツールがあるとよいです
    こういうプロジェクトには移行性を助けるものがないと、移行がスムーズになりません

  • 記憶が正しければ、最近のsudoの脆弱性はすべて論理エラーであって、メモリ安全性の問題ではありませんでした
    書き直すのは良いことですが、何かがどう動くのかを誤解していたり、単に普通のミスをしたりしたために新しいバグが入り込むことはない、と装ってはいけません

    • 2021: https://nvd.nist.gov/vuln/detail/CVE-2021-3156
      2019: https://nvd.nist.gov/vuln/detail/CVE-2019-18634
    • 誰がそう装っているのですか?
      メモリ安全性に関する主張は多く見かけますが、このプロジェクトが他の種類のバグが確実に排除されると言っているようには見えません
    • 同じように、既存のsudoにも新しいメモリバグが入り込む可能性があります
      静的検査で攻撃対象領域を減らすほうが、長期的にはより良い取引に見えます
  • doasは同じことをする、はるかに単純なツールです
    なぜもっと使われていないのか、よく分かりません

  • doas は 43184 バイトで、自分に必要なことは全部やってくれる
    あの sudo のエクスプロイトは警鐘だった
    まだ移行していないなら、opendoas(Debian パッケージ)を一度試してみる価値がある