Apakah "LD_LIBRARY_PATH" risiko keamanan?

8

Kami tahu ld.sopencarian perpustakaan di direktori yang ditentukan oleh variabel lingkungan $LD_LIBRARY_PATH, tetapi pengguna biasa dapat menjalankan:

export LD_LIBRARY_PATH=dir1:dir2...

Mereka dapat menyimpan perpustakaan yang terinfeksi di jalur dengan prioritas lebih tinggi dari yang asli sehingga ld.somenemukan bahwa bukan perpustakaan yang tepercaya di ld.so.cache.

Apakah ini risiko?
Bagaimana kita dapat menonaktifkan penulisan ke variabel lingkungan ini untuk pengguna biasa?

Sinoosh
sumber
Terima kasih @Byte Commander untuk mengedit. Bahasa Inggris saya tidak bagus :)
Sinoosh
Tidak masalah, ini lebih baik daripada rata-rata :)
Byte Commander

Jawaban:

17

Ini bukan risiko keamanan sama sekali, karena Anda selalu dapat hanya mengatur variabel lingkungan untuk lingkungan Anda saat ini (misalnya sesi Bash saat ini) dan, menggunakan exportperintah, lingkungan anaknya (skrip yang Anda luncurkan, subkulit, dll.). Tidak mungkin untuk meningkatkan variabel lingkungan yang dibuat atau dimodifikasi ke lingkungan induk. Ini termasuk bahwa tidak mungkin bagi pengguna reguler untuk membuat perubahan di seluruh sistem, tentu saja.

Jadi satu-satunya lingkungan yang akan terpengaruh jika Anda menjalankan export LD_LIBRARY_PATH=...adalah shell Anda saat ini dan setiap subkulit dari itu Anda mungkin muncul nanti. Katakanlah Anda mengubah jalur pencarian untuk memasukkan perpustakaan yang terinfeksi di awal yaitu dengan prioritas tertinggi. Kemudian Anda menjalankan executable yang memuat salah satu lib yang terinfeksi tanpa menyadarinya. Apa yang terjadi sekarang?

Anda memiliki kode berbahaya (dari perpustakaan yang terinfeksi) yang berjalan di bawah akun pengguna Anda sendiri dengan hak akses non-admin reguler. Ini mungkin terdengar buruk, tetapi sebenarnya ... jadi apa? Ini berjalan dengan hak pengguna biasa yang sekali lagi berarti tidak dapat mempengaruhi seluruh sistem. By the way, langsung menjalankan executable dengan kode berbahaya yang sama akan jauh lebih mudah daripada memodifikasi lintasan pencarian perpustakaan dan menunggu dieksekusi normal untuk memuatnya.

Kesimpulan: Seorang pengguna biasa hanya dapat memodifikasi jalur pencarian perpustakaan mereka sendiri, yang berarti mereka juga hanya dapat memuat perpustakaan itu sendiri di bawah akun pengguna reguler mereka dengan hak istimewa non-sistem-lebar biasa. Yang mengatakan, tidak ada bedanya apakah mereka memaksa memuat perpustakaan yang terinfeksi atau langsung menjalankan executable yang terinfeksi. Anda tidak akan mendapatkan apa-apa jika variabel lingkungan itu tidak dapat ditimpa oleh pengguna.

PS: Ada juga executable yang memiliki setuid atau setgid flag, yang berarti mereka tidak akan berjalan sebagai pengguna / kelompok orang yang menjalankan mereka, tapi dari orang yang memiliki mereka. Sebagai contoh, sudoexecutable dimiliki oleh root dan memiliki set setuid flag, yang artinya selalu berjalan sebagai root ketika dijalankan. Untuk alasan keamanan, $LD_LIBRARY_PATHvariabel diabaikan oleh executable dengan salah satu flag setuid / setgid diatur untuk memastikan bahwa pengguna biasa tidak dapat membuat eksekusi yang dapat dieksekusi dengan hak akses root untuk memuat pustaka sewenang-wenang.
(Terima kasih kepada @Rinzwind karena menunjukkan ini!)

Komandan Byte
sumber
Terima kasih banyak ! Saya membaca sebuah buku yang berbunyi "LD_LIBRARY_PATH dianggap sebagai risiko keamanan karena mungkin mengizinkan program yang tidak sah mengakses perpustakaan sistem secara tidak sengaja atau memaparkan jalur perpustakaan sistem kepada pengguna yang tidak sah." apa artinya?
Sinoosh
1
@Sinoosh Saya tidak bisa memikirkan alasan mengapa itu harus menjadi masalah keamanan jika aplikasi yang tidak dipercaya tahu lokasi pustaka sistem saya. Jika semuanya dikonfigurasi dengan benar dan Anda belum mengacaukan izin, mereka harus dimiliki oleh root dan tidak dapat ditulisi oleh orang lain, yang berarti tidak ada risiko bahwa mereka terinfeksi atau dimodifikasi dengan cara apa pun (kecuali Anda menjalankan aplikasi yang tidak dipercaya sebagai root , tetapi Anda tidak akan melakukan ini, kan?)
Byte Commander
1
@Sinoosh lihat xahlee.info/UnixResource_dir/_/ldpath.html
Rinzwind
@ Byte Commander, saya setuju dengan Anda tidak dengan Penulis :)
Sinoosh
Jawaban ini tidak sepenuhnya benar. LD_LIBRARY_PATHtentu saja merupakan masalah keamanan saat Anda memuat pustaka berbahaya di tempat pertama dan mengubah perilaku biner.
heemayl