アカウント名:
パスワード:
LD_PRELOAD 環境変数を用いてすべてのプロセスの実行時に読み込ませる仕組みだ。
ライブラリやらモジュールやらって、各アプリの起動時に、必要なもの読ませれば良いじゃん。なんでこんなリソースの無駄遣い+脆弱性の呼び水にしかならんような仕様があるのか理解できん。
今思えばなんでこんな仕様にしたのか、己の仕事で一度としてそう思ったことのないものだけが石を投げなさい。
仕事である限りは誰でも一度はあるだろうなw気持ちはわかるが厳しすぎ
なんだこりゃと思ったら、嫌がらせのために自分で仕込んだ仕様だった。だれも嫌がらせされてることに気づきやしねえ!
復讐のための完全犯罪とかフィクションでしか成り立たないと勉強になりました。虚しいからやめた方がいい。
自覚のないバカがバンバン石を投げている絵が浮かぶ。。。
牧歌的な時代の名残じゃねWindowsのPATH環境変数みたいなもんでしょ
ここに下げよう。PATHじゃない。近いのはAppInit_DLLs だと思う。
ていうか、NTには「そういうの」山ほどある。ガチ勢は大体暗記してるが、兼任管理者なら、このへんいっぺん使ってみとくと役に立つhttps://docs.microsoft.com/ja-jp/sysinternals/downloads/autoruns [microsoft.com]
auditとかptraceとか他にもやりようはあるけどもデバッグやテストで関数呼び出しをフックしたい時に、テストコードを埋め込まず手軽に実現できる。
LD_PRELOADで全てのプロセスにライブラリをフック出来てるってことは、/etc/ld.so.preload辺りを書き換えられてるんだろうし、そこまで出来てるならrootも奪取済みでしょ。
BPFの下りもだけど、脆弱性というよりroot取られてたらどうしようもねーって話題では?と思った。
問題は「知られない」という一点です。
権限取られるのは0デイ脆弱性や内部犯で事実上防げません。痕跡を消されるのは最悪なんです。対策が遅れるから。カーネルはROMにして再起動時に署名確認が必要かな。やっぱり
カーネル弄られてないから、署名検証でこれは検出できないぞ。
別人だが、ロードされるdllに署名が必要ということだと思うぞ。そもそもこの機能をフォルト無効にした方がいいと思うけどな。# そうしたらしたでsetenforce 0みたいなことになるんだろうが
某日本では有名なウィルス対策企業のLinux製品で、システム標準のlibstdc++.soを読み込むと動かない場合があって、LD_PRELOADを使って同梱されているlibstdc++を読み込ませるというのをやっていました。OSによるライブラリのバージョン違いを吸収させていたんです。Windowsにもほぼ同じ仕組みがありませんでした?どのOSにもライブラリの差し替えには一定の需要があるんだと思うんですよ。
それはLD_PRELOADじゃなくても対策できるし(というかそっちが普通)、めんどうならスタティックリンクで配れと言いたい。
libstdc++なんてやりがちなものを対策しないそのウィルス対策企業が悪いよ。
> libstdc++なんてやりがちなものを対策しないそのウィルス対策企業が悪いよ。
企業からしたら、stdc++ はGCC由来だから ライセンスがGPL。商用ソフトだとスタティックリンクは難しい。ユーザもそれくらい理解しとけよ、と言いたいところでしょう。
libstdc++のライセンスはランタイム例外になってるし、GPLだとしたらダイナミックリンクでも事情は変わらんよ。
要するに、あなたの言ってることはうそっぱち。
結構昔のことなんで、今だったらsnapみたいな仮想環境になっているのかな?期待できないか…もうその会社とは手を切ったのでわからないですが、凄かったですよ。binディレクトリの下にログファイルを吐いたりとか、おそらくバイナリと同じ場所にログも出す仕様なんでしょうけど、バイナリごとにログファイルの場所がバラバラなんです。これは中身もかなりヤバい代物だろうと思いました。未だに時々悪評が聞こえてくるので、あまり変わってないのかも。
標準出力にボコボコ吐き出すやつかな?
便利なんよ。昔、libsegfaultでお世話になった。
> ライブラリやらモジュールやらって、各アプリの起動時に、必要なもの読ませれば良いじゃん。
その必要なものを読み込ませるの使うんだよ。頭使え。同じ名前のライブラリが複数ある時に使うものを選べる。LD_PRELOAD 無しでどうやってライブラリの開発するんだ?別環境で実行できないようなライブラリのバイナリ互換性とかチェックするのに必要なんだよ。いやなら ld-linux 入れ換えて LD_PRELOAD を根本から無効にしても良いし SELinux とかで防御しても良い。
そもそも root 権限取られてる状態で LD_PRELOAD だけ気にしてもしょうがいだろ。カーネル入れ換えられたり、カーネルモジュール入れ換えられたり、libc 入れ換えられたり、BIOS 入れ換えられたり、どこにでも何でも仕掛けられるんだから。最近なら弱々な systemd とか狙い目だぞ。
危険性はそんなに増えないのに、利便性が増えるから存在してるんだよ。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
Stableって古いって意味だっけ? -- Debian初級
なんでこんな仕様があるのか (スコア:1)
LD_PRELOAD 環境変数を用いてすべてのプロセスの実行時に読み込ませる仕組みだ。
ライブラリやらモジュールやらって、各アプリの起動時に、必要なもの読ませれば良いじゃん。
なんでこんなリソースの無駄遣い+脆弱性の呼び水にしかならんような仕様があるのか理解できん。
Re:なんでこんな仕様があるのか (スコア:1)
今思えばなんでこんな仕様にしたのか、
己の仕事で一度としてそう思ったことのないものだけが石を投げなさい。
Re: (スコア:0)
仕事である限りは誰でも一度はあるだろうなw
気持ちはわかるが厳しすぎ
Re: (スコア:0)
なんだこりゃと思ったら、嫌がらせのために自分で仕込んだ仕様だった。
だれも嫌がらせされてることに気づきやしねえ!
復讐のための完全犯罪とかフィクションでしか成り立たないと勉強になりました。
虚しいからやめた方がいい。
Re: (スコア:0)
自覚のないバカがバンバン石を投げている絵が浮かぶ。。。
Re: (スコア:0)
牧歌的な時代の名残じゃね
WindowsのPATH環境変数みたいなもんでしょ
Re: (スコア:0)
ここに下げよう。PATHじゃない。近いのはAppInit_DLLs だと思う。
ていうか、NTには「そういうの」山ほどある。ガチ勢は大体暗記してるが、兼任管理者なら、このへんいっぺん使ってみとくと役に立つ
https://docs.microsoft.com/ja-jp/sysinternals/downloads/autoruns [microsoft.com]
Re: (スコア:0)
auditとかptraceとか他にもやりようはあるけども
デバッグやテストで関数呼び出しをフックしたい時に、テストコードを埋め込まず手軽に実現できる。
LD_PRELOADで全てのプロセスにライブラリをフック出来てるってことは、
/etc/ld.so.preload辺りを書き換えられてるんだろうし、そこまで出来てるならrootも奪取済みでしょ。
BPFの下りもだけど、脆弱性というよりroot取られてたらどうしようもねーって話題では?と思った。
Re:なんでこんな仕様があるのか (スコア:1)
問題は「知られない」という一点です。
権限取られるのは0デイ脆弱性や内部犯で事実上防げません。
痕跡を消されるのは最悪なんです。対策が遅れるから。
カーネルはROMにして再起動時に署名確認が必要かな。やっぱり
Re: (スコア:0)
カーネル弄られてないから、署名検証でこれは検出できないぞ。
Re: (スコア:0)
別人だが、ロードされるdllに署名が必要ということだと思うぞ。
そもそもこの機能をフォルト無効にした方がいいと思うけどな。
# そうしたらしたでsetenforce 0みたいなことになるんだろうが
Re: (スコア:0)
某日本では有名なウィルス対策企業のLinux製品で、システム標準のlibstdc++.soを読み込むと動かない場合があって、LD_PRELOADを使って同梱されているlibstdc++を読み込ませるというのをやっていました。OSによるライブラリのバージョン違いを吸収させていたんです。
Windowsにもほぼ同じ仕組みがありませんでした?どのOSにもライブラリの差し替えには一定の需要があるんだと思うんですよ。
Re: (スコア:0)
それはLD_PRELOADじゃなくても対策できるし(というかそっちが普通)、
めんどうならスタティックリンクで配れと言いたい。
libstdc++なんてやりがちなものを対策しないそのウィルス対策企業が悪いよ。
Re: (スコア:0)
> libstdc++なんてやりがちなものを対策しないそのウィルス対策企業が悪いよ。
企業からしたら、stdc++ はGCC由来だから ライセンスがGPL。商用ソフトだとスタティックリンクは難しい。
ユーザもそれくらい理解しとけよ、と言いたいところでしょう。
Re: (スコア:0)
libstdc++のライセンスはランタイム例外になってるし、
GPLだとしたらダイナミックリンクでも事情は変わらんよ。
要するに、あなたの言ってることはうそっぱち。
Re: (スコア:0)
結構昔のことなんで、今だったらsnapみたいな仮想環境になっているのかな?期待できないか…
もうその会社とは手を切ったのでわからないですが、凄かったですよ。binディレクトリの下にログファイルを吐いたりとか、おそらくバイナリと同じ場所にログも出す仕様なんでしょうけど、バイナリごとにログファイルの場所がバラバラなんです。これは中身もかなりヤバい代物だろうと思いました。未だに時々悪評が聞こえてくるので、あまり変わってないのかも。
Re: (スコア:0)
標準出力にボコボコ吐き出すやつかな?
Re: (スコア:0)
便利なんよ。
昔、libsegfaultでお世話になった。
Re: なんでこんな仕様があるのか (スコア:0)
> ライブラリやらモジュールやらって、各アプリの起動時に、必要なもの読ませれば良いじゃん。
その必要なものを読み込ませるの使うんだよ。頭使え。同じ名前のライブラリが複数ある時に使うものを選べる。
LD_PRELOAD 無しでどうやってライブラリの開発するんだ?
別環境で実行できないようなライブラリのバイナリ互換性とかチェックするのに必要なんだよ。
いやなら ld-linux 入れ換えて LD_PRELOAD を根本から無効にしても良いし SELinux とかで防御しても良い。
そもそも root 権限取られてる状態で LD_PRELOAD だけ気にしてもしょうがいだろ。
カーネル入れ換えられたり、カーネルモジュール入れ換えられたり、libc 入れ換えられたり、BIOS 入れ換えられたり、どこにでも何でも仕掛けられるんだから。最近なら弱々な systemd とか狙い目だぞ。
危険性はそんなに増えないのに、利便性が増えるから存在してるんだよ。