Kami tahu ld.so
pencarian 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.so
menemukan bahwa bukan perpustakaan yang tepercaya di ld.so.cache
.
Apakah ini risiko?
Bagaimana kita dapat menonaktifkan penulisan ke variabel lingkungan ini untuk pengguna biasa?
Jawaban:
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
export
perintah, 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,
sudo
executable dimiliki oleh root dan memiliki set setuid flag, yang artinya selalu berjalan sebagai root ketika dijalankan. Untuk alasan keamanan,$LD_LIBRARY_PATH
variabel 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!)
sumber
LD_LIBRARY_PATH
tentu saja merupakan masalah keamanan saat Anda memuat pustaka berbahaya di tempat pertama dan mengubah perilaku biner.