2 ポイント 投稿者 GN⁺ 2024-04-07 | 1件のコメント | WhatsAppで共有
  • xzのsshdバックドアでは、最初に明らかになった RSA_public_decrypt フックを超えて、さらに到達しにくい 追加のコードパス まで一部がトリガーされている
  • 攻撃フローは、細工されたコマンドで mm_answer_keyallowed フックを設置した後、複数の 偽の ssh-rsa 公開鍵 を使ってコマンドバッファを組み立てる方式である
  • この「magic buffer」には追加のバックドアコマンドと ed448署名 2つ が含まれ、署名にはホスト鍵のSHA256ダイジェストとKEXの session_id が反映される
  • 現在のPoCは、大幅に改変した paramiko SSHクライアントライブラリを使用しており、コマンド 0x03system() ベースのRCEとuid/gid設定を可能にする
  • 認証バイパスも確認されており、mm_keyallowed_backdoor cmd 1mm_answer_authpassword の応答を書き換えると、任意のパスワード でログインできる

より深くつながったバックドア経路

  • xzのsshdバックドアには、最初に知られていた挙動よりも深い機能が含まれており、その一部はすでに直接トリガーされている
  • 中核となる侵入口は RSA_public_decrypt フックである
    • 正しく作成したコマンドを送ると、sshdmm_answer_keyallowed 関数に別のフックが設置される
    • その後、複数の偽の ssh-rsa 公開鍵を提示して「magic buffer」を断片化して結合する
  • 「magic buffer」は追加のバックドアコマンドを格納するバッファである
    • 内部には ed448署名 2つ も含まれる
    • これらの署名は、RSA_public_decrypt 側のバックドア署名と同様に、ホスト鍵のSHA256ダイジェストでsalt処理される
    • 最後の署名には、SSH初期鍵交換(KEX)から派生した0x20バイトの session_id も反映される

PoCと認証バイパス

  • 現在のPoCは、大幅に改変した paramiko SSHクライアントライブラリで実装されている
  • 現在トリガーされているコマンドは、このコードパスの 0x03 である
    • system() を通じた基本的なRCEを再び可能にする
    • uid/gid設定もサポートする
  • まだ解明すべきコードが残っており、mm_answer_keyallowed バックドアコマンドの1つが最終的に mm_answer_keyverify もフックするため、対話型セッションの 完全な認証バイパス が可能に見える
  • その後、認証バイパスが確認された
    • mm_keyallowed_backdoor cmd 1mm_answer_authpassword の応答をユーザー指定の値で上書きできる
    • 応答を { u32(9), u8(13), u32(1), u32(0) } に設定すると、どんなパスワードでもログイン可能になる

1件のコメント

 
GN⁺ 2024-04-07
Hacker Newsの意見
  • https://threadreaderapp.com/thread/1776691497506623562.html

  • 今回の事件は、ある面では非常にプロフェッショナルで、別の面ではかなり素人っぽく見えて奇妙
    重要なパッケージのメンテナーになれるほど信頼できるアイデンティティを長期間かけて築き、複数人が関与したように見えるソーシャルエンジニアリング攻撃を行い、実際の身元や攻撃元を露出せず、難読化も巧妙だった
    それなのに、プロダクション版にバグと性能リグレッションが入り込んだ点は杜撰に見える。国家支援の組織が本当に有能なら、公開プロジェクトに提出する前に非公開で十分にテストして、疑いを招く性能低下をなくしていたはずだと思う

    • 「国家支援」と聞くと期待値が高すぎるのだと思う。大きな組織は結局ほかの大きな組織と似てきて、官僚主義、締め切り、リリースサイクル、チーム間コミュニケーションの問題を抱える
      最近のiOSの「バックドアかもしれない」事件も、脆弱性を大量にため込んでいる組織が、その一部を消費してしまうことを常に気にしているわけではないことを示している
    • コードを開発した人たちが同時にValgrindを走らせて性能を見ていなかった、というのは信じがたい話ではない
      対象はサーバーとアプライアンスで、デフォルトイメージでValgrindを走らせるサーバーやアプライアンスがどれだけあるだろうか。振り返れば「なぜそれを考えなかったのか」と思うが、彼らは狙ったシステムイメージでテストしており、一般開発者のカスタムイメージではテストしていなかった可能性が高い
    • 2024-02-29に、libsystemdにliblzmaをリンクしないようにするPRが上がっていた [0]
      Kevin Beaumontは、「Jia Tan」がこれを見てバックドアが無力化され得ることを即座に理解し、このエクスプロイトに投入した膨大な作業を無駄にしないために急いだのだろうと推測しており [1]、その見方は正しそうだ
      その締め切りのプレッシャーのせいで5.6.0でクラッシュが起き、この事件が発覚した核心的な原因だった性能リグレッションを減らす、あるいはなくすための仕上げ時間が足りなかったのだろう
      [0]: https://github.com/systemd/systemd/pull/31550
      [1]: https://doublepulsar.com/inside-the-failed-attempt-to-backdo...
    • Googleでさえ平然とGeminiをリリースできたのなら、こうした影の組織がもっと微妙な形で失敗することが、それほど信じがたいだろうか
      Patrick McKenzieが別のところで述べているように、犯罪組織も非犯罪組織と同じように委員会と合意で動く。そう考えると、機能肥大化による性能低下で船が沈むのも理解できる。自分が勤めた会社では、もっと素人っぽいミスもあった
    • 有能な国家支援組織でも事故は起こり得る。情報機関も想像するほど冷徹に有能ではないことがある。英国で起きたKremlinの暗殺未遂は、ミスの喜劇に近かった [1]
      もしかすると、使っていた別のバックドアや代替アクセス手段が塞がれ、急いで新しい経路が必要になったのかもしれない
      [1] https://en.wikipedia.org/wiki/Poisoning_of_Alexander_Litvine...
  • ここでの巧妙さが本当に興味深いが、結局かなり目立つ性能リグレッションのせいで捕まった
    実際の犯罪番組で聞いた引用を思い出す。「殺人で捕まる方法は100万通りあり、その半分でも思いつけるなら天才だ」

    • アカウントの背後にチームがいたと考えると理解できる。誰かが機能を開発し、より不注意または経験の浅い別の人が統合したのかもしれない
      さらに別の人は偽アカウントを管理し、コメントやPRでやり取りしていた可能性がある
    • 自分が単純だったり、人を信じすぎたりしているのかもしれないが、こうしたバックドアがすでに広く出回っているのではないかと心配するたびに、この考えが浮かぶ
      今回は単に運悪く見つかっただけなのか、それともこうした攻撃は実際に成功させるには難しすぎるのかは分からない。後者であってほしいが、実際のところは分からない
    • 記憶が正しければ、性能リグレッションはコードがデフォルトではない**-fno-omit-frame-pointer**でコンパイルされた場合にだけ発生した。 https://mastodon.social/@AndresFreundTec/112187000944648334
    • 十分な時間があり、ローカルテストをさらに行っていれば成功した可能性が高い
      libsystemdの@teknoraverのパッチのせいで、彼らの締め切り時点が変わったのだと確信している
    • 「半分でも思いつけるなら」という言葉は、殺人事件を解決しようとする側にも当てはまるのだろうか?
  • こうした事件で細部を深掘りする技術記事がたくさん出てくると、なぜ皆が「これは国家支援に違いない」「タイムスタンプを見ろ、反論不可能な証拠だ」と言うのか、よく不思議に思う。
    xz 事件が秘匿性の高い、長い時間をかけた攻撃だったのは確かだが、有能な個人 1 人を超える何かが本当に必要なのだろうか? オンライン上の任意の個人たちが分析して理解できるという事実は、1 人が理解できる範囲だという意味でもある。
    単に賢いが不満を抱いた 1 人が単独でやった可能性は、なぜあり得ないのか。

    • 国家アクターを想起させる最大の要素は、ソーシャルエンジニアリング攻撃に投入された時間に対する期待リターンの大きさだ。
      この種の営利目的の計画としては非合理的だ。非合理的な行為者や、金銭以外の動機を持つ個人の可能性を排除するわけではないが、国家アクターが有力候補に見える。
      成功していれば売却できる価値は莫大だっただろうが、主要インフラにエクスプロイトを仕込み、顧客が買って使えるほど長く発覚しない確率は非常に低い。国家ならムーンショットを引き受けられるが、個人は期待値がより高い標的を探すものだと思う。
      もちろん、だからといって有能な国家アクターだった、あるいは多くのリソースを割り当てたという意味ではない。
    • 同意する。このハッキングには多くの技術、決意、時間が必要だった。
      だがそれはかなりの数のオープンソース開発者にも当てはまるのではないか。動機も明白だ。このエクスプロイトは闇市場で数百万ドルの価値があったはずだ。
    • 何もない。彼が誰なのか誰も知らない。
    • 「反論不可能な証拠」というのをどこで見たのか、根拠が気になる。
      詳しい人たちの推測はたくさん見たが、そういう表現は見ていない。
  • バックドア自体の難読化を整理した記事はある? インストール用のビルドスクリプトではなく、実際のバックドアのこと。
    バイナリを Ghidra に入れて見つかった関数をざっと眺めたが、実行を横取りするのに使う ifunc メカニズムに詳しくなく、諦めて他の人たちに任せた。
    デバッグ防止機能があるので、コードも難読化されているだろうと思う。不透明なバイナリとして配布されていたため、少なくとも一部のコードは、こちらが持っていない鍵で暗号化されているのだと思っていた。STUXNET のペイロードの一部のように。

    • バックドア自体についての完全な分析はまだ出ていない。デバッグ防止はフラグで回避できる類のものもあるが、今回はコンパイル段階で処理されているので、もう少し厄介だ。
      デバッグ防止機能があるからといって、コードが必ず難読化されているという意味ではない。上で述べたように、ビルド時点で行われているためだ。すでに自分の家に罠を仕掛けたようなものだ。
      今回の件は、パッケージ管理者が正しい出所のソースを取得しないときに起きる問題を示している。
  • この事件をそこまで詳しく追ってはいないが、ハッキングの加害者についての議論がほとんど聞こえてこないのは、とても奇妙だ。

    • 「ただし私は、彼が実際には UTC+02 の冬時間 / UTC+03 の DST タイムゾーン、つまり東ヨーロッパ(EET)やイスラエル(IST)を含む地域の出身だと見ている」
      https://rheaeve.substack.com/p/xz-backdoor-times-damned-time...
    • 推測はたくさんあった。1 人よりは複数人の可能性が高く、ランサムウェア組織か国家情報機関である可能性がありそうだ。
    • Satoshi の分析のときのように、関連するオンライン上のペルソナたちのコミュニケーションを意味論的に分析すれば、文化的な方向性を推し量れて興味深そうだ。
      時間が経つにつれて文体の違いが生じたかを見れば、複数人が同じペルソナとして活動していたかどうかも分かる。コミットされたコードもかなり多いので、コードスタイルの違いから 1 人以上が関与していたかも調べる価値がある。
    • 何を議論するのか? 分かっていることは何もない。
  • これが広く拡散する前に発見されたのはかなり幸運だ。
    正体不明の主体がこちらのインフラでリモートコード実行を持つことを望まない、という当たり前の理由だけではない。人々が掘り下げ続ければ、最終的には誰でもバックドアを使えるようにするペイロードを作り出す可能性がある。
    1 つの主体がアクセス権を持つのも悪いが、誰でもアクセスできるようになるのははるかに悪い。

    • ペイロードが非公開 RSA 鍵なら、ほぼ不可能なことではないか?
  • thereaderapp.com の代わりに見られるリンク:
    https://nitter.poast.org/bl4sty/status/1776691497506623562

  • 数日が経ったのに、まだ完全に解明されていないのは驚きだ。
    世界中の目が注がれていて、核心となるピースも理論上は公開されている状況で、ここまで持ちこたえているのは、難読化がかなりうまくできているということだ。

  • 今回の事件では長期戦の性格が心配だ。
    第一に、バックドアを作る「インフラ」を構築するために、長いあいだ機会をうかがっていた。第二に、エクスプロイトが実際の本番環境に広がった後にも、さらに別の長期戦を準備していたはずだ。宝くじの当選金の正しい使い方は投資だからだ。
    第三に、今もこういうゲームが進行中なのか気になってくる。怖い。