1 ポイント 投稿者 GN⁺ 2 시간 전 | 1件のコメント | WhatsAppで共有
  • copy.fail 以降、Linuxカーネルの脆弱性が追加で公表された
  • 現在は NPMサプライチェーン攻撃 が大きな被害を出しやすい時期だと評価されている
  • ディストリビューションが提供する Linuxカーネルのパッチ は例外とすることが推奨されている
  • それ以外については、約 1週間ほど 新しいソフトウェアのインストールを止めるほうがよい
  • 投稿後に 事実関係や状況 が変わっている可能性があるため、誤りや不明確に見える部分があれば結論を出す前に連絡してほしいという断り書きが添えられている

1件のコメント

 
GN⁺ 2 시간 전
Hacker Newsの意見
  • これは、いつかは必ず起きる悪夢だった。パッケージの数が多すぎて、それだけ サプライチェーン攻撃の攻撃面 が巨大になり、いずれ皆に降りかかる問題だった
    ただ、あまりにも便利だった。警告したり被害を減らそうとした人たちは、別のやり方を試した経験のない人たちに黙殺され、"import antigravity" は手放すにはあまりに簡単すぎた
    いまや「代償を払う」段階に入ったように見える

    • ある会社では本当に保守的に運用していた。すべての外部コンポーネントはバージョンを固定し、レビューなしには更新せず、通常は十分な安定化期間を置いていた
      コンパイラ、カーネルなども含め、ほぼすべてをソースからビルドしており、ビルドサーバー/インフラはインターネットに一切アクセスできず、変更を取り込む手順も決まっていた。関連する CVE は公開されるたびに精査し、自分たちに影響するか、どう緩和または対処するかを判断していた
      その後移った会社では、ビルドがインターネットにアクセスでき、新バージョンが出るとすぐアップグレードしていた。最新のバグ修正を受けられるという理由で、人々はそれを良い実践だと考え、CVEレビューはセキュリティチームの担当だった
      その次のスタートアップでは、いろいろな実践が混在していた。とても良い部分もあったが、CVE負債 も大きかった。たとえばサーバーにはセキュアブートと暗号化ディスクを適用しており、コンポーネント間通信の保護についてもかなり把握していた
      皆、自分たちが正しくやっていると思っている。「頻繁にアップグレードする」人に、新しい問題を持ち込むリスクがあると納得させるのはほとんど不可能だ。業界にはより良い実践のセットが必要で、個人的には最初の会社の依存関係管理の方が優れていると思う。全体としてセキュリティ実践がしっかり根付いていて、製品も本当に安全だった
    • パンドラの箱を開けるようなものだが、こうした未知の攻撃ベクトルをすべて表に出すことの純効果が、世界中の情報機関の備蓄脆弱性を空にすることだとしたらどうだろう
      有用なソフトウェアがすべて ファジングテスト、プロパティテスト、形式検証を経た状態になり、脆弱性を探す全員がまたゼロから始めなければならなくなる、ということだ
      もちろんその間に、各国が残っている手段を最悪の敵に投げつけ合う空白期間を私たちが耐え抜ける、という前提は必要だ。でなければ結局、動物の骨で殴り合うことになるのかもしれない
    • 何年も 権限ベースのセキュリティモデル を望んできたし、ここでも議論したことがある。権限とは、関連する権限を持つオブジェクトポインタのようなもので、Unixのファイルディスクリプタに近い
      OSレベルでは、起動されたプログラムがシェルや起動元から権限トークンを受け取り、すべてのシステムコールが第1引数として権限を受け取るべきだ。つまり "open path /foo"open(cap, "/foo") になる。この権限は、偽のファイルシステムでも、実ファイルシステムの一分岐でも、ネットワークファイルシステムでも何でもよく、プログラムは自分がどのサンドボックス内にいるのか知る必要がない
      ライブラリ/言語レベルでも、npmモジュールのようなサードパーティライブラリを取り込むとき、import時や呼び出し箇所ごとに権限を渡すべきだ。そのライブラリが自分のプログラムのアドレス空間内の全バイトに読み書きアクセスを持ってはならないし、自分のコンピュータ上で自分になりすまして何でもできてはならない。中心的な問いは「このコードの 爆発半径 はどこまでか?」だ。使っているライブラリが悪意あるものだったり脆弱だったりしたとき、被害規模について妥当なデフォルトが必要だ。lib::add(1, 2) の呼び出しが、自分のコンピュータ全体の永続的侵害につながってはならない
      SeL4 は高速かつ効率的なOSレベルの権限をずっと前から提供しており、うまく機能している。多くの場合Linuxより高速で、透過的サンドボクシング、ユーザー空間ドライバ、プロセス間通信、セキュリティ改善などに非常に役立つ。LinuxをSeL4上のプロセスとして動かすこともできる。Linuxデスクトップの全機能を持ちながら、SeL4のように動作するOSが欲しい
      残念ながら、自分が望む形の言語レベルの権限を持つプログラミング言語は存在しないようだ。Rustはかなり近いが、サードパーティcrateが unsafe コードを一切呼べないよう制限する方法が必要だ。信頼していない依存関係が呼ぶ unsafe も含めてだ。Rustの古い健全性バグも修正されるべきで、権限ベースの標準ライブラリも必要だ。グローバルな open() / listen() のようなものは消えるべきで、openat() やOSの他部分に対応する同等の形だけがあるべきだ
      LLMがこのまま改善し続けるなら、数年以内に誰も先に作らなければ、LLMにこれを全部作らせるつもりだ。現代のデスクトップOSのセキュリティは冗談みたいなものだ
    • ほとんどの人は、基本的に何でも口に入れたりしない。微生物培養の結果が陽性で返ってくるまで待ってから拒否するわけでもない
      コードにも 衛生文化 が必要で、これは多くの文化圏が食べ物に対して発達させてきた規範とそれほど違わない。粗いヒューリスティクスの組み合わせではあるが、「うわっ」という感覚が何十億人もの命を救っている
    • 1年前には、可能な限りサードパーティを持ち込むより自分でコードを書く方がよい、という考えを口にした。当時は、LLMに隙間を埋めさせることを考慮するだけでも異端視されていた
      いまでは依存関係への露出をこれまで以上に減らしており、特に数百行で実装できるものではなおさらだ。これはまさに パラダイムシフト
  • 「ソフトウェアのインストールを1週間待て」というやり方は通用しない。つい数か月前にも、大規模な脆弱性がWebを襲ったが、それは1か月以上潜伏してから実行された 時間差攻撃 だった
    皆が1週間待ち始めたら、攻撃者は2週間待つだけだ。サイバー犯罪者は即座に悪用する必要はなく、最終的に悪用できればよい。タイポスクワッティングのような多くの脆弱性タイプも、この方法では変わらない

    • 筆者は、すべての更新を延々と遅らせろと言っているのではなく、今回あまりに早く公開されてしまった特定の脆弱性について、修正とパッチ配布が行われるまで 一度限りで1週間待て と提案しているように見える。それ以外の点には同意する
    • 記事を誤解しているようだ。提案は、ソフトウェアが公開されてから1週間待ってインストールしろ、ということではない。いまから次の7日間は単にインストールするな、という意味だ
      これらの脆弱性へのパッチがまだない可能性が高く、仮にあっても、ほどなくさらに恐ろしい脆弱性が見つかる可能性が高いからだ
    • それなら1か月か2か月待てばいい。待機期間の要点は、すでに仕込まれたエクスプロイトの実行を止めることではなく、新しいエクスプロイトのインストール を避けることにある
    • 人気パッケージは露出も大きい。成果物が公開されれば世界中が見られるし、誰かがバージョン間差分を確認することも期待できる
      しかし遅延がまったくなければ、まだ誰にも見つかっていない エクスプロイト にやられる可能性がある
    • 「ここ数か月」で記憶にある依存関係侵害は、どれも数時間ではなく数分以内に発見されていた。litellm、axios、bitwarden CLI、Checkmarx Dockerイメージ、Pytorch lightning、intercom/intercom-php がそうだった
      しかも、こうした侵害の発見は、実際に悪用されたかどうかにまったく依存していなかった。だから「皆が1週間待てば攻撃者は2週間待つ」という話が理解できない
  • 別の選択肢として、セキュリティにYOLO的なアプローチを取らない FreeBSD のようなOSへ移ることもできる
    セキュリティ修正が調整もなくFreeBSDカーネルにそのまま投げ込まれることはない。FreeBSDセキュリティチームを経由し、パッチがsrcツリーに入った後、数分以内にFreeBSD Updateと15.0-RELEASE向けpkgbase経由でバイナリアップデートが配布される
    だいたいSlackに「パッチをpushした」というメッセージが出るまで数秒、パッチのアップロードに10〜30秒、ミラー同期に最大1分ほどかかる

    • これについては少し懐疑的だ。数年前にFreeBSDセキュリティチームへ脆弱性を報告し、数週間後にフォローアップメールも送ったが、返答はなかった
      公平を期すと、自分の報告は中核コンポーネントではないものに関するもので、悪用も簡単ではなかったが、Debian、OpenBSD、SUSE、Gentoo はいずれも1週間以内に修正した https://www.maxchernoff.ca/p/luatex-vulnerabilities#timeline
      だからといって、単一の些細な報告処理だけでOS全体を評価しようという意味ではない。自分が見た他のあらゆる点では、FreeBSDはセキュリティ報告をかなり真剣に扱っているように思えるからだ。ただ、同じ理屈はLinuxカーネルのバグにも当てはまる。そういう形でパッチ管理がひどくなることは、Linuxでもかなり稀だ
    • セキュリティのためにBSDへ移るなら、なぜFreeBSDなのか? OpenBSD の方がずっと安全寄りではないのか? そのプロジェクトを長く追っていないので聞いている
    • FreeBSDはセキュリティ、特にデフォルトや設定に関してはかなり緩い
      セキュリティより使いやすさを好む傾向がある。有名な例はここにある: https://vez.mrsk.me/freebsd-defaults
      プロジェクトへの貢献には感謝しているが、こうした悪いデフォルトがある限り、良心的に人へ移行を勧めることはできない
    • FreeBSDには2019年までユーザー空間 ASLR すらなく、他の緩和策の1つであるkASLRもまだない。セキュリティを重視する人にとっては、本気のOSではない
      FreeBSDでセキュリティを求めるなら、Shawn WebbのHardenedBSDを使う方がよい
    • こういう話になると、必ず誰かが出てくる。お気に入りのディストリビューションが確実にもっと安全だというのは結構なことだ。エクスプロイトが一桁倍減ったとしても、結局数千個くらいは残るだろうが。OzymandiasならGentooを使っていただろう
  • セキュリティ専門家でさえ、いまや私たちの世界がとてつもなく 脆い均衡 の上にあることを受け入れるべきだ。人々はこれを本当に過小評価していると思う
    ITの世界だけでなく、世界全体が数多くの非常に脆い均衡の上に築かれている。セキュリティエクスプロイトは常に存在する。ソフトウェアだけでなく現実世界でも同じだ。誰かがセキュリティカンファレンスにこっそり入り込んだこともあったし、それもただのYouTuberだった。もちろん超高セキュリティなイベントではなかったが、思い浮かんだ例がそれだった。基本的に、多くの場合セキュリティを回避するのは本当に簡単だ
    言いたいのは、根本的にこの世界は、少なくとも大半の人が悪用しないからこそ機能しているということだ。人間社会は常にそうやって機能してきたし、これからもそうである可能性が高い

    • 英国のインフルエンサーの間で、「はしごと蛍光ベスト」の手口で場所に入り込み、物理セキュリティがどれほど甘いかを示す流行があったのを覚えている https://www.youtube.com/watch?v=LTI0SeyhAPA
      Max FoshというYouTuberがInternational Security Expoに立て続けに入り込んだのだったと思う。英国では https://www.youtube.com/watch?v=qM3imMiERdU、米国では https://www.youtube.com/watch?v=NmgLwxK8TvA で、それぞれ偽名として「Rob Banks」と「Nick Everything」を使っていた
      セキュリティ文化を少し勉強したことがあるが、ほとんどは一方にセキュリティ、他方に利便性/アクセス性がある スライディングスケール に帰着する。安全であるほどアクセスしにくくなり、その逆もまた然りだ
  • npm、PyPI、Cargo のような依存関係マネージャーに対するサプライチェーン攻撃には、すでにかなり良い解決策がある。パッケージのバージョンが数日以上経過したものしかインストールしないよう設定することだ
    最近の大きな攻撃はどれも1日以内に発見されて差し戻されていたので、そうしていれば安全に回避できていたはずだ。この挙動はデフォルトであるべきだ。自ら志願したベータテスターやセキュリティスキャナー企業に、最新のパッケージバージョンを1日ほど先に試してもらえばよい。方法はここにある: https://cooldowns.dev/

    • 3か月前にShow HNへ出ていた、こういうツールの方が適切に見える: https://github.com/artifact-keeper
      成果物マネージャー だ。承認したものだけを取得できるようにしてくれる。必要なときは素早く更新し、必要なときは一貫して検証済みの安定版を使える。多少の設定上書きは必要だが、簡単な作業だ
      同じ目的の雑なツールを自作して使っていたことがあるが、これは良いプロジェクトだ
    • より良い方法は、会社が検証したリポジトリだけを使い、誰もインターネット上のリポジトリから直接インストールできないようにすることだ
      もちろん企業の外では自然にはなかなか機能しない
    • そうするとセキュリティアップデートも遅れて受け取ることにならないか? 多くの脆弱性は、発見されてパッチが当たるまで何年も実環境に存在している
      ひとたび見つかれば、すぐにエクスプロイトの爆発が起き、更新の遅延は興奮した攻撃者により多くの時間を与える
    • 個人的には、最も持続可能な方法はLinuxディストリビューション/BSD ports/Homebrewモデルだと思う。新しいライブラリを公開レジストリへ直接押し込むのではなく、新しい変更ごとにレビューされる パッケージングスクリプト を書く方式だ
      もう1つのモデルは、ソースファイルだけを配布するPerlのCPANだ
  • 継続的インテグレーションとコンテナ化ビルドを比較的最近導入した人たちは、毎回のビルドで複数パッケージから latest を引いてきていないか、システムを確認した方がいい
    私たちは、外部依存関係を全部入れたベースコンテナを作っておき、更新時期だと判断したときにだけ明示的に更新している
    そのため最先端からは少し遅れるかもしれないが、ランダムな サプライチェーン脆弱性 が即座に世界中へ配布されるリスクは、はるかに小さくて済む

    • こうすると、CIビルド時間や不安定な失敗も大幅に減ることに気づくだろう
    • さらに言えば、内部リポジトリだけを使うのが望ましい
  • 積極的に有害なオピニオン記事だ。論理を理解するのが難しい
    copyfailとdirtyfragの脆弱性が実際にどれほど古いか確認するのに45秒もかからない。記事を読むより長いくらいだ。Dirtyfragは2017年までさかのぼるシステムにも関係しうる
    影響を受けるのは「新しい」ソフトウェアではない。そして実際、古いソフトウェアの方が問題を見つける時間はずっと長かったのだから、状況はより悪い

    • 元記事は、いまサプライチェーン攻撃が起きるとまずいので、NPMパッケージのインストール/更新をやめて、そのリスクを減らそうと提案しているのだと思う
  • いつか誰かが、OSからアプリケーションまで スタック全体 を証明携行コードによるアップグレードで作り直すだろう
    信頼できるコードを実行する唯一の方法は、証明とコードを共同設計し、共同構築することだ

  • これはソフトウェアにだけ当てはまる話ではなく、実際にはほとんどあらゆるものに当てはまる
    どこで読んだのかは覚えていないが、結局は 必要と欲求 の違いに帰着する
    新車を買うか中古車を買うか、高級掃除機を買うか基本モデルを買うかを決めるときに、このルールを使ってきた。ピカピカの新しい機器、技術スタックへ何か新しいものを持ち込むこと、新しい技術スタックを選ぶことにも同じことが言える

  • copyfailが何で、NPMパッケージとどうつながるのか理解する助けが欲しい
    整理すると、copyfailは悪意あるnpmパッケージがLinuxサーバー上でroot権限を得られるようにする カーネルバグ のようだ
    つまり、まだパッチが当たっていないサーバーが存在するいまこそ、攻撃者がNPMパッケージを狙うには絶好のタイミング、ということか
    助言が単に「カーネルを更新しろ」ではないのは、関連する新たな問題がまだ次々に見つかっているからなのか?

    • 最新の脆弱性についてのパッチは、まだ出てすらいない。だから、いま新しい サプライチェーン攻撃 が起きれば、ほぼすべてのシステムでrootを取れてしまい、本当に最悪のタイミングだ
    • NPMサプライチェーン攻撃は本当に速く広がる
      人気のNPMパッケージが侵害され、copy.failエクスプロイトを含んでいたら、多くのシステムがroot権限昇格に脆弱になるだろう
    • 助言が「カーネルを更新しろ」ではない理由は、更新が存在しないからだ。copy.failの後に見つかった最新の脆弱性には、まだ修正がない