Seberapa bermanfaatkah pemasangan / tmp noexec?

39

Banyak orang (termasuk Manual Pengamanan Debian ) merekomendasikan pemasangan /tmpdengan noexec,nodev,nosuidserangkaian opsi. Ini umumnya disajikan sebagai salah satu elemen dari strategi 'pertahanan-mendalam', dengan mencegah eskalasi serangan yang memungkinkan seseorang menulis file, atau serangan oleh pengguna dengan akun yang sah tetapi tidak ada ruang lain yang dapat ditulis.

Namun, seiring berjalannya waktu, saya menemukan argumen (yang paling menonjol oleh Pengembang Debian / Ubuntu Colin Watson) yang noexecmerupakan ukuran yang tidak berguna, karena beberapa alasan:

  1. Pengguna dapat berjalan /lib/ld-linux.so <binary>dalam upaya untuk mendapatkan efek yang sama.
  2. Pengguna masih dapat menjalankan penerjemah yang disediakan sistem pada skrip yang tidak dapat dijalankan secara langsung

Dengan argumen-argumen ini, kebutuhan potensial untuk konfigurasi lebih lanjut (misalnya debconfmenyukai direktori sementara yang dapat dieksekusi), dan kemungkinan hilangnya kenyamanan, apakah ini langkah keamanan yang bermanfaat? Apa lubang lain yang Anda ketahui yang memungkinkan pengelakan?

Phil Miller
sumber
1
@neoice: Saya pernah mendengar bahwa aplikasi kadang-kadang akan rusak jika / tmp tidak dapat dieksekusi. Saya belum benar-benar melihatnya terjadi. Lihatlah TuxGuitar-1.2 ... itu terjadi. Tidak akan memulai jika / tmp tidak di-mount tanpa opsi noexec, karena ia membongkar pustaka di sana dan kemudian mencoba memuatnya.
VMware's Site Recovery Manager menjalankan skrip dari "/ tmp": Kustomisasi IP gagal selama failover atau gagal uji rencana pemulihan di vCenter Site Recovery Manager (2021083): kb.vmware.com/selfservice/microsites/…
1
Saya tahu bahwa utilitas kompresi yang disebut snappy menjatuhkan file .so di / tmp dan tidak dapat berjalan jika sudah di-mount noexec. (Ini digunakan secara default di cassandra dan kafka) IMHO ini adalah alasan untuk tidak menggunakan tajam daripada alasan untuk tidak me-mount / tmp noexec
jorfus

Jawaban:

31

Berikut adalah argumen untuk utilitas yang saya buat sejauh ini:

Kernel modern memperbaiki /lib/ld-linux.solubang, sehingga tidak akan dapat memetakan halaman yang dapat dieksekusi dari noexecsistem file.

Poin penafsir tentu masih menjadi perhatian, meskipun saya pikir kurang satu dari yang mungkin diklaim orang. Alasan yang dapat saya kemukakan adalah bahwa ada banyak kerentanan eskalasi hak istimewa yang bergantung pada pembuatan syscall yang salah bentuk. Tanpa penyerang yang menyediakan biner, akan jauh lebih sulit untuk membuat panggilan jahat. Juga, penafsir naskah harus tidak memiliki hak (saya tahu ini secara historis kadang-kadang tidak menjadi masalah, seperti dengan perl suid), dan karena itu perlu kerentanan mereka sendiri untuk berguna dalam serangan. Tampaknya, dimungkinkan untuk menggunakan Python, setidaknya, untuk menjalankan beberapa eksploitasi.

Banyak eksploitasi 'kalengan' dapat mencoba menulis dan menjalankan executable /tmp, dan karenanya noexecmengurangi kemungkinan jatuh ke serangan skrip (katakan di jendela antara pengungkapan kerentanan dan instalasi patch).

Dengan demikian, masih ada manfaat keamanan untuk pemasangan /tmpdengan noexec.

Seperti dijelaskan dalam Debian bug tracker , pengaturan APT::ExtractTemplates::TempDirdalam apt.confke direktori yang tidak noexecdan dapat diakses oleh akar akan meniadakan kekhawatiran debconf.

Phil Miller
sumber
Namun, saya pernah mendengar bahwa aplikasi kadang-kadang akan rusak jika / tmp tidak dapat dieksekusi. Saya belum benar-benar melihatnya terjadi.
neoice
Seperti disebutkan dalam manual yang ditautkan dalam pertanyaan, ia mengacaukan pra-konfigurasi paket Debconf tanpa menyiapkan alternatif.
Phil Miller
2
Ya, noexec adalah lapisan tambahan yang sangat bagus untuk keamanan dan saya belum melihat hal-hal yang menyebabkan kerusakan. Instalasi paket adalah satu-satunya dan bahkan yang dapat diselesaikan seperti yang diceritakan oleh jawaban di sini. Sebagai solusi, saya memiliki alias seperti ini: alias update = "mount -o exec, remount / tmp && pembaruan apt & get && apt-get upgrade && mount -o noexec, remount / tmp"
Janne Pikkarainen
1
Saya kira itu tidak biasa, tetapi paket yang ditulis untuk mengeksekusi sesuatu dari / tmp di luar konteks instalasi paket memang ada (misalnya, versi middleware saat ini untuk menggunakan Kartu Identitas Elektronik Belgia).
equaeghe
equaeghe: Paket apa itu? Mungkin harus dilaporkan sebagai bug. Saya berani bertaruh ada kerentanan keamanan yang dapat ditemukan dalam penggunaannya juga.
Phil Miller
7

Banyak paket Debian membutuhkan / tmp untuk dapat dieksekusi agar paket dapat diinstal. Ini sering ditandai sebagai bug (keparahan 'normal' / 'wishlist'):

https://www.google.com/#q=site:bugs.debian.org+noexec+/tmp

Saya hanya menerima kesalahan ini ketika menginstal kernel yang diperbarui ke cabang stabil hanya hari ini.

Jadi sepertinya Debian (& turunan?) Belum siap untuk / tmp untuk dipasang noexec ...

thomasrutter
sumber
6

tambahkan berikut ini ke /etc/apt.conf, atau, /etc/apt/apt.conf.d/50remount

DPkg::Pre-Install-Pkgs {"mount -o remount,exec /tmp";};
DPkg::Post-Invoke {"mount -o remount /tmp";};
karmawhore
sumber
6
Aku sudah diganti mountoleh /bin/mountdalam kasus PATH akan diubah. Kau tidak akan pernah tahu.
Lekensteyn
4

Meskipun ada solusi untuk sebagian besar langkah-langkah keamanan tambahan yang mungkin Anda pilih untuk diterapkan, bahkan langkah-langkah keamanan yang paling mudah dielakkan (seperti memasang / tmp noexec atau menjalankan SSH pada port alternatif) akan menggagalkan serangan otomatis atau skrip yang bergantung pada default agar berfungsi. Ini tidak akan melindungi Anda dari penyerang yang gigih dan berpengetahuan, tetapi lebih dari 99% dari waktu, Anda tidak akan melawan penyerang yang memiliki tekad atau berpengetahuan. Sebaliknya, Anda akan membela diri terhadap skrip serangan otomatis.

tylerl
sumber
2

Pertama: Ini mencakup banyak, kasus serangan yang berbeda Mematikannya karena ada beberapa cara yang diketahui di sekitarnya (beberapa di antaranya bahkan diperbaiki) aneh. Penyerang mengunduh kode ke / dev / shm atau / tmp adalah hal yang biasa mereka lakukan.

Pertahanan secara mendalam adalah tentang mengamankan titik arah yang paling umum, masing-masing yang menghentikannya membuat sistem Anda lebih bisa bertahan. Tidak aman. Tetapi itu juga akan memiliki kesempatan . Jika mereka tidak dapat mengambil payload sekunder mereka, itu adalah kesempatan yang cukup baik bagi Anda.

  • Mungkin juga dihentikan oleh pembatasan pengguna iptables.
  • Mungkin juga dihentikan oleh SELinux.
  • Itu juga mungkin tidak dihentikan karena eksploitasi lain yang mudah diakses.

Intinya adalah untuk membuatnya sekeras mudah bisa, dan memotong 99% dari serangan.

Kedua: Ini menghentikan praktik buruk (menjalankan hal-hal dari temp, melakukan instalasi aplikasi utama melalui / tmp alih-alih pengguna tmpdir), meninggalkan data di / tmp. Pemasang khusus biasanya mengerti TMPDIR. Juga: meskipun tidak: waktu pemasangan, sebagai tindakan point-in-time, bukan alasan yang sah untuk mematikan masalah keamanan secara permanen .

Ketiga: Mempertimbangkan ruang nama anonim di / tmp ("fitur"), Anda benar-benar ingin membatasi apa yang diletakkan di sana dan lari dari sana.

Keempat: Kenyamanan bukan merupakan faktor yang relevan dalam hal ini. Dengan asumsi kami menjalankan server untuk uang, dan untuk suatu tujuan: kami bertanggung jawab untuk hal ini. "Oh, saya tidak mengunci / tmp karena saya perlu beberapa menit lagi ketika saya memperbarui perangkat lunak saya tahun depan". Tentunya tidak akan hanya satu hal ini yang berdiri di antara diperas dan baik-baik saja. Alasan yang bagus? Saya kira tidak.

Bagaimana dengan yang ini:

"Kami mengetahui bahwa musuh dapat menyerang tanpa pemberitahuan. Mereka juga bisa menggunakan ratusan mata-mata untuk meracuni makanan. Jadi kami berhenti membagikan senjata kepada tentara kami."

Tunggu apa?

Ada langkah-langkah lain yang membutuhkan lebih banyak usaha, pengalaman dan keberuntungan untuk mengamankan sistem, dan mengetahui orang-orang memiliki uang terbatas, rentang hidup dan juga ingin menghabiskan waktu bersama keluarga mereka: Jangan melewatkan hal-hal yang mudah.

Florian Heigl
sumber
1

Ada aplikasi yang membutuhkan / tmp agar dapat dieksekusi untuk menginstal. Pada pekerjaan sebelumnya, sebelum saya sampai di sana admin telah mengatur / tmp noexec, tetapi saya menemukan bahwa paket db2 tidak akan diinstal. Bahkan jika Anda menghapus paket db2 di tempat lain, prosedur instalasi akan menyalin beberapa file ke / tmp dan berharap dapat menjalankannya, yang tentu saja gagal dengan izin yang ditolak. Jika Anda tidak menyadari bahwa sistem file sudah di-mount noexec, itu mungkin sedikit menyesatkan. Itu hanya dapat melanjutkan instalasi setelah saya remounted / tmp tanpa noexec.

Pokoknya, intinya adalah bahwa setidaknya satu produk komersial memerlukan / tmp untuk tidak dipasang noexec, dan mungkin ada yang lain. Saya belum menemukan alasan yang sangat menarik untuk itu. Jika Anda menginginkan keamanan yang lebih baik, saya akan memilih selinux.

lsd
sumber
Analisis eksploit untuk kerentanan Samba, yang akan dihentikan oleh noexec / tmp: bobao.360.cn/learning/detail/4168.html (direkomendasikan terjemahan Google Chrome. Ini akan merusak eksploitasi awal, serta bagian besar dari payload ...) (Anda dapat mematahkan banyak eksploitasi otomatis yang umum seperti itu ....). mount -o remount,exec /tmpbekerja ketika Anda perlu menginstal barang-barang ... (Ya, itu sepele untuk dikerjakan, tetapi banyak penyerang tampaknya tidak mengganggu ...)
Gert van den Berg