Mengapa buruk memiliki file penulisan root ke direktori yang tidak dimiliki oleh root?

28

Ini muncul dalam komentar untuk pertanyaan lain dan saya akan senang jika seseorang dapat menjelaskan alasannya kepada saya.

Saya menyarankan agar Apache mencatat kesalahan untuk VHost yang diberikan ke direktori home pengguna. Ini ditembak jatuh karena tidak aman. Mengapa?

Saya meminta klarifikasi dalam komentar balasan tetapi yang saya dapatkan adalah tidak aman untuk menulis root di folder yang tidak dimiliki oleh root. Sekali lagi, bisakah seseorang menjelaskan?

Terima kasih,

Bart.

Bart B
sumber
4
Apa yang dilakukan Apache sebagai root - prinsip privilege paling tidak menentangnya!
Jonathan Leffler
1
Apache berjalan sebagai www, tetapi sedang dijalankan sebagai root sehingga dapat mengikat ke port 80 seperti biasa. Rupanya itu juga dicatat sebagai root.
Bart B

Jawaban:

31

Karena suatu pengguna jahat jahat dapat mencoba untuk menunjukkan file rootmenulis ke lokasi yang berbeda . Ini tidak begitu sederhana, tetapi sangat mungkin.

Sebagai contoh, jika pengguna akan menemukan cara untuk membuat symlink dari log Apache yang seharusnya, katakanlah, / etc / shadow tiba-tiba Anda akan tiba-tiba memiliki sistem yang tidak dapat digunakan. Apache ( root) akan menimpa kredensial pengguna Anda yang membuat sistem salah.

ln -s /etc/shadow /home/eviluser/access.log

Jika file access.log tidak dapat ditulisi oleh pengguna, bisa jadi sulit untuk membajaknya, tetapi menghindari kemungkinan itu lebih baik!

Kemungkinan bisa menggunakan logrotate untuk melakukan pekerjaan itu , membuat tautan ke file yang belum ada, tetapi logrotate itu akan menimpa segera setelah log tumbuh:

ln -s /etc/shadow /home/eviluser/access.log.1

Catatan :

The symlink Metode ini hanya salah satu kemungkinan serangan, diberikan sebagai bukti dari konsep.

Keamanan harus dibuat dengan pikiran Daftar Putih , bukan daftar hitam apa yang kita ketahui sebagai masalah.

AlberT
sumber
Apakah ada cara untuk mengatur izin sehingga mereka hanya bisa membaca file dan tidak menghapus, mengedit, atau melakukan hal lain (seperti chown, chmod, dll.)?
Joshua
Anda harus melakukan operasi ini pada setiap file target yang mungkin! file yang dapat ditulisi ini adalah yang disukai, bukan tautan itu sendiri yang dimiliki oleh penyerang saat ia membuatnya.
drAlberT
2
@ Yosua: chown hanya dapat dilakukan oleh root. chmod dapat dilakukan oleh siapa pun yang memiliki file tersebut. IIRC, penggantian nama dapat dilakukan oleh siapa pun yang memiliki direktori. Seperti yang disebutkan AlberT, membuat tautan sebelum root membuat file dapat dilakukan oleh siapa pun yang dapat menulis ke direktori.
atk
2
@ atk: Selain itu, siapa pun yang memiliki direktori umumnya dapat menghapus file dari itu (kecuali +tbit sticky diatur), bahkan jika mereka tidak memiliki izin menulis ke file itu sendiri (karena unlink () adalah menulis ke direktori, bukan mengajukan). Bahkan jika root membuat file sebelumnya, pemilik direktori masih dapat menghapusnya dan menggantinya dengan symlink ke sesuatu yang lain.
James Sneeringer
1
Jika pengguna jahat dapat menulis di / home / eviluser (atau dapat mengubah izin pada direktori - mereka memilikinya, TKI), maka tidak masalah apa pun izin pada access.log; pengguna jahat dapat (kembali) memindahkan file dan menempatkan symlink di tempatnya. Pertanyaan lain adalah apakah perangkat lunak memperhatikan apa yang dibuka.
Jonathan Leffler
1

Prinsip umum tidak memiliki proses menulis ke direktori yang tidak mereka miliki atau percayai adalah prinsip yang baik. Tetapi dalam kasus khusus ini, masuk akal untuk percaya bahwa kode Apache membuka log dengan O_NOFOLLOWdll: masuk ke direktori home pengguna adalah pengaturan umum.

Poolie
sumber