xz sshdバックドアのラビットホール、想像以上にずっと深い
(twitter.com/bl4sty)- xzのsshdバックドアでは、最初に明らかになった
RSA_public_decryptフックを超えて、さらに到達しにくい 追加のコードパス まで一部がトリガーされている - 攻撃フローは、細工されたコマンドで
mm_answer_keyallowedフックを設置した後、複数の 偽の ssh-rsa 公開鍵 を使ってコマンドバッファを組み立てる方式である - この「magic buffer」には追加のバックドアコマンドと ed448署名 2つ が含まれ、署名にはホスト鍵のSHA256ダイジェストとKEXの
session_idが反映される - 現在のPoCは、大幅に改変した paramiko SSHクライアントライブラリを使用しており、コマンド
0x03はsystem()ベースのRCEとuid/gid設定を可能にする - 認証バイパスも確認されており、
mm_keyallowed_backdoor cmd 1でmm_answer_authpasswordの応答を書き換えると、任意のパスワード でログインできる
より深くつながったバックドア経路
- xzのsshdバックドアには、最初に知られていた挙動よりも深い機能が含まれており、その一部はすでに直接トリガーされている
- 中核となる侵入口は
RSA_public_decryptフックである- 正しく作成したコマンドを送ると、
sshdのmm_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 1はmm_answer_authpasswordの応答をユーザー指定の値で上書きできる- 応答を
{ u32(9), u8(13), u32(1), u32(0) }に設定すると、どんなパスワードでもログイン可能になる
1件のコメント
Hacker Newsの意見
https://threadreaderapp.com/thread/1776691497506623562.html
今回の事件は、ある面では非常にプロフェッショナルで、別の面ではかなり素人っぽく見えて奇妙
重要なパッケージのメンテナーになれるほど信頼できるアイデンティティを長期間かけて築き、複数人が関与したように見えるソーシャルエンジニアリング攻撃を行い、実際の身元や攻撃元を露出せず、難読化も巧妙だった
それなのに、プロダクション版にバグと性能リグレッションが入り込んだ点は杜撰に見える。国家支援の組織が本当に有能なら、公開プロジェクトに提出する前に非公開で十分にテストして、疑いを招く性能低下をなくしていたはずだと思う
最近のiOSの「バックドアかもしれない」事件も、脆弱性を大量にため込んでいる組織が、その一部を消費してしまうことを常に気にしているわけではないことを示している
対象はサーバーとアプライアンスで、デフォルトイメージでValgrindを走らせるサーバーやアプライアンスがどれだけあるだろうか。振り返れば「なぜそれを考えなかったのか」と思うが、彼らは狙ったシステムイメージでテストしており、一般開発者のカスタムイメージではテストしていなかった可能性が高い
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...
Patrick McKenzieが別のところで述べているように、犯罪組織も非犯罪組織と同じように委員会と合意で動く。そう考えると、機能肥大化による性能低下で船が沈むのも理解できる。自分が勤めた会社では、もっと素人っぽいミスもあった
もしかすると、使っていた別のバックドアや代替アクセス手段が塞がれ、急いで新しい経路が必要になったのかもしれない
[1] https://en.wikipedia.org/wiki/Poisoning_of_Alexander_Litvine...
ここでの巧妙さが本当に興味深いが、結局かなり目立つ性能リグレッションのせいで捕まった
実際の犯罪番組で聞いた引用を思い出す。「殺人で捕まる方法は100万通りあり、その半分でも思いつけるなら天才だ」
さらに別の人は偽アカウントを管理し、コメントやPRでやり取りしていた可能性がある
今回は単に運悪く見つかっただけなのか、それともこうした攻撃は実際に成功させるには難しすぎるのかは分からない。後者であってほしいが、実際のところは分からない
libsystemdの@teknoraverのパッチのせいで、彼らの締め切り時点が変わったのだと確信している
こうした事件で細部を深掘りする技術記事がたくさん出てくると、なぜ皆が「これは国家支援に違いない」「タイムスタンプを見ろ、反論不可能な証拠だ」と言うのか、よく不思議に思う。
xz 事件が秘匿性の高い、長い時間をかけた攻撃だったのは確かだが、有能な個人 1 人を超える何かが本当に必要なのだろうか? オンライン上の任意の個人たちが分析して理解できるという事実は、1 人が理解できる範囲だという意味でもある。
単に賢いが不満を抱いた 1 人が単独でやった可能性は、なぜあり得ないのか。
この種の営利目的の計画としては非合理的だ。非合理的な行為者や、金銭以外の動機を持つ個人の可能性を排除するわけではないが、国家アクターが有力候補に見える。
成功していれば売却できる価値は莫大だっただろうが、主要インフラにエクスプロイトを仕込み、顧客が買って使えるほど長く発覚しない確率は非常に低い。国家ならムーンショットを引き受けられるが、個人は期待値がより高い標的を探すものだと思う。
もちろん、だからといって有能な国家アクターだった、あるいは多くのリソースを割り当てたという意味ではない。
だがそれはかなりの数のオープンソース開発者にも当てはまるのではないか。動機も明白だ。このエクスプロイトは闇市場で数百万ドルの価値があったはずだ。
詳しい人たちの推測はたくさん見たが、そういう表現は見ていない。
バックドア自体の難読化を整理した記事はある? インストール用のビルドスクリプトではなく、実際のバックドアのこと。
バイナリを Ghidra に入れて見つかった関数をざっと眺めたが、実行を横取りするのに使う ifunc メカニズムに詳しくなく、諦めて他の人たちに任せた。
デバッグ防止機能があるので、コードも難読化されているだろうと思う。不透明なバイナリとして配布されていたため、少なくとも一部のコードは、こちらが持っていない鍵で暗号化されているのだと思っていた。STUXNET のペイロードの一部のように。
デバッグ防止機能があるからといって、コードが必ず難読化されているという意味ではない。上で述べたように、ビルド時点で行われているためだ。すでに自分の家に罠を仕掛けたようなものだ。
今回の件は、パッケージ管理者が正しい出所のソースを取得しないときに起きる問題を示している。
この事件をそこまで詳しく追ってはいないが、ハッキングの加害者についての議論がほとんど聞こえてこないのは、とても奇妙だ。
https://rheaeve.substack.com/p/xz-backdoor-times-damned-time...
時間が経つにつれて文体の違いが生じたかを見れば、複数人が同じペルソナとして活動していたかどうかも分かる。コミットされたコードもかなり多いので、コードスタイルの違いから 1 人以上が関与していたかも調べる価値がある。
これが広く拡散する前に発見されたのはかなり幸運だ。
正体不明の主体がこちらのインフラでリモートコード実行を持つことを望まない、という当たり前の理由だけではない。人々が掘り下げ続ければ、最終的には誰でもバックドアを使えるようにするペイロードを作り出す可能性がある。
1 つの主体がアクセス権を持つのも悪いが、誰でもアクセスできるようになるのははるかに悪い。
thereaderapp.com の代わりに見られるリンク:
https://nitter.poast.org/bl4sty/status/1776691497506623562
数日が経ったのに、まだ完全に解明されていないのは驚きだ。
世界中の目が注がれていて、核心となるピースも理論上は公開されている状況で、ここまで持ちこたえているのは、難読化がかなりうまくできているということだ。
今回の事件では長期戦の性格が心配だ。
第一に、バックドアを作る「インフラ」を構築するために、長いあいだ機会をうかがっていた。第二に、エクスプロイトが実際の本番環境に広がった後にも、さらに別の長期戦を準備していたはずだ。宝くじの当選金の正しい使い方は投資だからだ。
第三に、今もこういうゲームが進行中なのか気になってくる。怖い。