GNU/Linux >> Belajar Linux >  >> Linux

Apakah sudo dan .profile/.bashrc mengaktifkan eskalasi hak istimewa yang sepele?

Apa pun yang dapat Anda lakukan pada akun yang disusupi, penyerang juga dapat melakukannya.

Pada dasarnya, ini karena penyedia Linux mengisolasi antar pengguna, bukan antara proses individual yang berjalan sebagai pengguna yang sama. Setiap proses yang berjalan sebagai pengguna tertentu dianggap memiliki kemampuan yang setara dengan proses lain yang berjalan di bawah pengguna tersebut.

Benarkah sistem sudo yang dapat dieksekusi dapat dielakkan dengan cara ini?

Ya, dan dengan cara lain juga. Jika Anda meningkatkan hak istimewa untuk melakukan root pada akun tanpa hak yang disusupi, Anda membahayakan root. Jika Anda melepaskan hak istimewa dari root menggunakan su ke akun yang tidak memiliki hak istimewa, Anda juga berkompromi dengan root! Anda tidak akan pernah dapat meningkatkan hak istimewa dengan aman di akun yang tidak dipercaya. Meskipun dimungkinkan untuk mengeksploitasi sistem menggunakan PATH , itu juga memungkinkan untuk membajak proses bash itu sendiri untuk mengendus input kunci. Menonaktifkan eksekusi dengan noexec selanjutnya tidak berguna karena juru bahasa (bash, python, perl, dll) masih akan berjalan. noexec opsi tidak dan tidak pernah dirancang sebagai fitur keamanan, meskipun sering dijajakan seperti itu.

Daftar lengkap cara penyerang dapat membajak penggunaan sudo atau su :

  • Menggunakan LD_PRELOAD variabel pada proses induk (mis. bash ).

  • Mengaitkan proses induk dengan ptrace() atau process_vm_writev() .

  • Mengendus atau menyuntikkan penekanan tombol ke emulator terminal menggunakan protokol X11.

  • Membuat alias atau fungsi untuk membungkus sudo yang sebenarnya dapat dieksekusi.

Saya menjelaskan ini secara lebih rinci tentang jawaban saya untuk pertanyaan lain.

Mengapa sistem Linux desktop, secara default, disiapkan dengan cara yang mudah dieksploitasi?

Meningkatkan hak istimewa pada akun yang tidak dipercaya bukanlah sesuatu yang Anda seharusnya melakukan. Belum lagi, Linux desktop adalah renungan dalam skema besar arsitektur * nix umum. Ini adalah kegagalan teater keamanan yang tak henti-hentinya mengulangi nasihat buruk yang sama, bukan kegagalan arsitektur keamanan Linux itu sendiri. Orang berulang kali mengatakan untuk menggunakan sudo untuk root karena banyak pengguna baru akan menjalankan semuanya sebagai root, bahkan browser mereka! Dalam hal ini, lebih baik menggunakan sudo . Berbahaya jika pengguna sudah cukup pintar untuk tidak menggunakan root untuk semuanya.

Perhatikan bahwa sudo sangat dapat dikonfigurasi dan dapat dirancang untuk mengizinkan hanya perintah tertentu. Di sinilah ia benar-benar bersinar. Anda dapat mengonfigurasi sudo untuk hanya mengizinkan Anda menjalankan apt-get update sebagai root (dengan atau tanpa kata sandi), dan tolak yang lainnya. Itu juga akan membatasi penyerang untuk melakukan apa pun selain... yah... melakukan pembaruan perangkat lunak.

Penting untuk diingat bahwa, meskipun Anda mengonfigurasinya untuk hanya mengizinkan menjalankan perintah tertentu sebagai root, Anda masih dapat menyalahkan diri sendiri jika Anda memasukkan program yang tidak dirancang untuk dijalankan sebagai root melalui pengguna yang tidak tepercaya ke daftar putih. Saya melihat contoh nyata dari seseorang yang mencoba menjalankan VeraCrypt dengan cara ini dan menjelaskan mengapa ini tidak aman. Idenya adalah bahwa VeraCrypt aman untuk dijalankan sebagai root, jadi aman untuk menggunakan sudo untuk mengangkatnya ke root sebagai pengguna yang tidak dipercaya dan tidak memiliki hak istimewa. Ternyata idenya cacat, dan memungkinkan eskalasi hak istimewa yang sepele!

Bukankah seharusnya cara default untuk memanggil sudo memastikan bahwa itu sebenarnya dapat dieksekusi yang disediakan oleh sistem (tidak ada yang akan mengetik /usr/bin/sudo setiap saat)?

Mengetik path lengkap tidak akan melindungi Anda! Anda dapat dengan mudah membuat fungsi yang berisi / di depan , dan itu akan mengesampingkan yang sebenarnya dapat dieksekusi. Bahkan jika executable memastikan bahwa itu asli dan berusaha untuk mengalahkan sniffing, proses berbahaya dapat membajak bash memproses dan mengendus penekanan tombol secara terpisah dari sudo , membuatnya tidak mungkin untuk dideteksi dari sudut pandangnya.

$ function /usr/bin/sudo { echo 'hijacked!'; }
$ /usr/bin/sudo id
hijacked!

Dalam lingkungan seperti itu, tampaknya menggunakan sudo pada dasarnya tidak aman dan akan lebih baik mengaktifkan login sebagai root dan login di TTY terpisah.

Ini selalu kasus. Perhatikan bahwa masuk ke TTY lain pun tidak sepenuhnya aman. Anda harus menggunakan SAK, kombinasi Secure Attention Key, untuk memastikan bahwa Anda berinteraksi dengan sesi login asli (agetty atau logind , Misalnya). SAK adalah kombinasi kunci yang didengarkan oleh kernel (dan karenanya tidak dapat ditekan oleh ruang pengguna). Ketika terdeteksi, itu akan membunuh setiap proses di TTY saat ini, memicu prompt login untuk muncul. Jika Anda telah beralih ke TTY asli tanpa kompromi, maka itu hanya akan menyebabkan prompt menghilang dan muncul kembali. Jika Anda menggunakan TTY yang dibajak, itu akan mematikan proses berbahaya dan mengembalikan perintah login asli.


Linux
  1. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  2. Bash =~ Regex Dan Https://regex101.com/?

  3. Perbedaan Antara Pengguna Sudo Dan Pengguna Root?

  1. Apa perbedaan antara root dan sudo?

  2. Gunakan find dengan aman dengan sudo

  3. Perbedaan antara /bin dan /usr/bin

  1. Instal binari ke /bin, /sbin, /usr/bin dan /usr/sbin, interaksi dengan --prefix dan DESTDIR

  2. Cara mengatur ssh tanpa kata sandi dengan kunci RSA

  3. Haruskah situs web berada di /var/ atau /usr/ sesuai dengan penggunaan yang disarankan?