Apakah ada cara untuk menghentikan pengguna membuat file executable dan menjalankannya?

31

Serangan Ransomware dapat menggunakan eksploitasi nol hari, tetapi seringkali penyerang hanya akan membodohi pengguna yang mudah tertipu untuk menjalankan yang dapat dieksekusi dengan mengunduh dan mengklik.

Misalkan kita memiliki pengguna yang naif dan ingin membatasi mereka ke jalur normal. Apakah ada cara untuk membatasi mereka dari membuat file dengan hak istimewa yang dapat dieksekusi?

Atau, secara lebih umum, adakah cara untuk membuat daftar kontrol akses dan menetapkan bahwa pengguna ini hanya dapat menjalankan file dalam daftar ini?

Dov
sumber
7
Untuk menonaktifkan eksekusi dengan cara ini akan melarang pengguna untuk dapat melakukan apa pun pada sistem. Tidak ada mekanisme untuk built-in ke sistem ini atau bahkan dengan perangkat lunak pihak ketiga yang saya tahu akan melakukan jenis penguncian keamanan ini
Thomas Ward
3
tidak menjawab tetapi memberi petunjuk apa yang dapat Anda lakukan: menambahkan noexec pada tunggangan yang dapat ditulisi pengguna. tidak akan mencegah skrip tetapi eksekusi biner yang sebenarnya.
GoFundMonica - codidact.org
3
@ ThomasWard, bukankah itu shell yang tepat?
Robert Riedl
7
@ThomasWard ada konsep umum 'executable yang masuk daftar putih' di mana daftar executable (biasanya ditandatangani) tertentu diperbolehkan dan tidak ada lagi yang bisa dijalankan tanpa hak istimewa yang ditingkatkan; dan baik Windows maupun OS X memiliki solusi masuk akal yang melakukan ini. Saya tidak tahu apakah ada solusi Ubuntu (atau Linux lainnya) yang bagus untuk daftar putih aplikasi.
Peteris
2
@Peteris, ada beberapa solusi semacam itu. Favorit saya adalah memiliki sistem file bertanda baca-saja dengan executable Anda dan me-mount semua yang lain noexec, di sepanjang garis bagaimana ChromeOS menggunakan dm_verityuntuk memastikan integritas sistem file root. Untuk orang-orang yang tidak terlalu hardcore, seseorang dapat menggunakan modul EVM; lihat wiki.gentoo.org/wiki/Extended_Verification_Module untuk dokumentasi Gentoo yang sama.
Charles Duffy

Jawaban:

50

Serangan spesifik yang telah Anda khawatirkan adalah:

seringkali seorang penyerang hanya akan membodohi pengguna yang mudah tertipu untuk menjalankan yang dapat dieksekusi dengan mengunduh dan mengklik.

Setidaknya dalam kasus umum di mana file diunduh di browser web, ini seharusnya sudah dicegah di Ubuntu oleh kepatuhan browser terhadap kebijakan Execute-Permission Bit Required . Bagian paling relevan dari kebijakan itu adalah:

  • Aplikasi, termasuk desktop dan shell, harus tidak menjalankan kode yang dapat dieksekusi dari file ketika keduanya:

    • kurang bit yang dapat dieksekusi
    • terletak di direktori home atau direktori sementara pengguna.
  • File yang diunduh dari browser web, klien email, dll. Tidak boleh disimpan sebagai file yang dapat dieksekusi.

Jadi, jika pengguna diperintahkan untuk mengunduh suatu program di peramban web, ia melakukannya, dan mencoba menjalankan file dengan mengklik dua kali di sana, itu tidak akan berjalan. Ini berlaku bahkan jika file yang diunduh adalah skrip shell atau bahkan file .desktop. (Jika Anda pernah bertanya-tanya mengapa file .desktop di direktori home Anda harus ditandai dieksekusi meskipun mereka tidak benar-benar program, itu sebabnya.)

Mungkin bagi pengguna untuk mengubah perilaku ini melalui perubahan konfigurasi. Sebagian besar tidak akan, dan sementara mereka yang melakukannya mungkin tidak, itu tidak benar-benar apa yang harus Anda khawatirkan. Kekhawatiran yang lebih besar adalah serangan yang lebih kompleks yang saya pikir Anda sudah khawatirkan, di mana orang jahat (atau bot) menginstruksikan pengguna untuk mengunduh file tertentu, menandainya dapat dieksekusi sendiri (melalui browser file atau dengan chmod), dan kemudian jalankan.

Sayangnya, membatasi kemampuan pengguna untuk mengatur bit eksekusi pada file atau untuk mengeksekusi file selain yang ada di daftar putih tidak akan mengurangi masalah. Beberapa serangan sudah bekerja, dan yang tidak bisa dimodifikasi sepele sehingga bisa dilakukan. Masalah mendasar adalah bahwa efek menjalankan file dapat dicapai bahkan jika file tersebut tidak memiliki izin yang dapat dieksekusi .

Ini paling baik digambarkan dengan contoh. Misalkan eviladalah file dalam direktori saat ini yang, jika diberikan izin yang dapat dieksekusi ( chmod +x evil) dan dijalankan ( ./evil), akan melakukan sesuatu yang jahat. Tergantung pada jenis programnya, efek yang sama dapat dicapai oleh salah satu dari berikut ini:

Tidak satu pun dari mereka, bahkan yang terakhir, mengharuskan file memiliki izin yang dapat dieksekusi atau bahkan pengguna dapat memberikan izin file yang dapat dieksekusi.

Tetapi instruksi jahat itu bahkan tidak harus serumit itu. Pertimbangkan perintah tidak berbahaya ini , yang merupakan salah satu cara yang direkomendasikan secara resmi untuk menginstal atau memperbarui NVM :

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

Alasan yang tidak berbahaya adalah bahwa NVM bukan malware, tetapi jika URL itu bukan untuk skrip seseorang yang melakukan kejahatan saat dijalankan, perintah itu akan mengunduh dan menjalankan skrip. Pada titik apa pun file tidak perlu diberikan izin yang dapat dieksekusi. Mengunduh dan menjalankan kode yang terdapat dalam file jahat dengan satu perintah seperti ini, saya percaya, adalah tindakan yang cukup umum yang dilakukan penyerang untuk menipu pengguna.

Anda mungkin berpikir untuk mencoba membatasi penerjemah apa yang tersedia untuk dijalankan oleh pengguna. Tetapi sebenarnya tidak ada cara untuk melakukan ini yang tidak secara substansial mempengaruhi tugas-tugas biasa yang Anda mungkin ingin para pengguna dapat lakukan. Jika Anda menyiapkan lingkungan yang sangat terbatas di mana hampir semua hal yang dipikirkan pengguna untuk dilakukan di komputer tidak diperbolehkan, seperti kios yang hanya menjalankan beberapa program, maka ini mungkin memberikan perlindungan yang berarti. Tapi itu tidak terdengar seperti itu kasus penggunaanmu.

Jadi jawaban perkiraan untuk pertanyaan Anda adalah, "Tidak." Jawaban yang lebih lengkap adalah Anda mungkin bisa mengatur untuk mencegah pengguna mengeksekusi file apa pun kecuali yang Anda berikan pada daftar putih. Tapi itu dalam pengertian teknis yang ketat untuk "mengeksekusi," yang tidak diperlukan untuk mencapai efek penuh dari menjalankan sebagian besar program atau skrip. Untuk mencegah itu , Anda bisa mencoba untuk membuat daftar putih yang sangat kecil, sehingga tidak daftar setiap juru kecuali yang bisa sangat terbatas. Tetapi bahkan jika Anda berhasil, pengguna tidak bisa berbuat banyak, dan jika Anda membuatnya sangat kecil mereka tidak bisa melukai diri mereka sendiri, mereka mungkin tidak bisa melakukan apa-apa. (Lihat komentar Thomas Ward .)

Jika pengguna Anda dapat melukai diri mereka sendiri, mereka bisa tertipu untuk menyakiti diri mereka sendiri.

Anda mungkin dapat membatasi program tertentu agar tidak digunakan atau berperilaku dengan cara yang mungkin berbahaya, dan jika Anda melihat pola tertentu yang cenderung diikuti ransomware, Anda mungkin dapat mencegah beberapa kasus umum tertentu. (Lihat AppArmor .) Itu mungkin memberikan beberapa nilai. Tapi itu tidak akan memberi Anda apa pun yang dekat dengan solusi komprehensif yang Anda harapkan.

Apa pun tindakan teknis (jika ada) yang akhirnya Anda ambil, taruhan terbaik Anda adalah mengedukasi pengguna. Ini termasuk memberi tahu mereka untuk tidak menjalankan perintah yang tidak mereka pahami dan tidak menggunakan file yang diunduh dalam situasi di mana mereka tidak dapat menjelaskan mengapa itu cukup aman untuk dilakukan. Tapi itu juga termasuk hal-hal seperti membuat cadangan, sehingga jika ada yang tidak beres (karena malware atau lainnya), kerusakan yang dilakukan akan sesedikit mungkin.

Eliah Kagan
sumber
6
Mungkin langkah-langkah non-teknis perlu menyertakan info kontak untuk seseorang yang dapat memeriksa sesuatu yang ingin mereka lakukan. Kapan saja mereka tidak yakin, telepon atau pesan dan tanyakan. Itu mungkin menghilangkan godaan untuk menebak.
Peter Cordes
1
Ini adalah abstrak yang bagus tentang masalah dan ketakutan di balik pertanyaan OP
Robert Riedl
Nit kecil: " . ./evilatau source ./evilmenjalankan perintah di evil.sh" - sourcePerintah itu akan menjalankan perintah di evilkecuali jika mereka menentukan ekstensi, misalnya. ./evil.sh
Dijeda hingga pemberitahuan lebih lanjut.
@DennisWilliamson Terima kasih - diperbaiki! Yang tersisa dari konsep jawaban yang lebih lama (tidak dikirimkan) di mana saya menggunakan nama skrip yang berbeda. Saya segera menyadari bahwa itu konyol, tetapi ternyata gagal mengubah semua kejadian.
Eliah Kagan
1
Setiap kali saya melihat cara untuk menginstal atau memperbarui perangkat lunak yang melibatkan "hanya wget script ini dan jalankan", kuku jari kaki saya sedikit melengkung. Tidak ada yang menghentikan seseorang untuk membuat akun / repo GitHub yang dimatikan oleh satu karakter, atau menggunakan 0 alih-alih O, atau menggunakan karakter UTF-8 untuk ketidakjelasan dan menempelkan skrip jahat mereka sendiri di dalamnya ... maka yang Anda butuhkan hanyalah satu salah ketik perintah wget dan bam.
Ian Kemp
11

YA *


Ini disebut shell terbatas.

Anda dapat menggunakan /bin/rbash, yang sudah tersedia di Ubuntu dan menggabungkannya dengan variabel PATH terbatas . The rbashakan melarang eksekusi dari sesuatu yang tidak di $PATH.

Tambahkan pengguna terbatas:

sudo adduser --shell /bin/rbash res-user

Buat direktori baru, tempat kami dapat menautkan binari, yang akan dibatasi oleh pengguna:

sudo mkdir /home/res-user/bin

Ubah .profilefile:

sudo vim /home/res-user/.profile

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

readonly PATH=/home/res-user/bin
export PATH

Buat .profile, bashrcdan .bash_profileberubah:

sudo chattr +i /home/res-user/.profile
sudo chattr +i /home/res-user/.bashrc
sudo chattr +i /home/res-user/.bash_profile

Sekarang kami memberi pengguna satu-satunya hal yang ia boleh lakukan, yaitu buka Firefox:

sudo ln -s /usr/lib/firefox/firefox /home/res-user/bin/

Sekarang, jika kita masuk karena res-userkita hanya bisa membuka Firefox:

res-user@localhost:~$ /home/res-user/bin/firefox --version
Mozilla Firefox 68.0.1

Kami tidak dapat dengan mudah keluar dari cangkang terbatas kami:

res-user@localhost:~$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
-su: PATH: readonly variable

Pengguna terbatas tidak dapat membuat file dapat dieksekusi, atau memulainya:

res-user@localhost:~$ chmod +x script.sh 
Command 'chmod' is available in '/bin/chmod'
res-user@localhost:~$ bash script.sh 
Command 'bash' is available in '/bin/bash'
The command could not be located because '/bin' is not included in the PATH environment variable.
bash: command not found

Pengguna terbatas tidak dapat menjalankan skrip jahat dari internet, karena pengguna tidak dapat menjalankan perintah yang diperlukan:

res-user@localhost:~$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
Command 'wget' is available in '/usr/bin/wget'
The command could not be located because '/usr/bin' is not included in the PATH environment variable.
wget: command not found
Command 'bash' is available in '/bin/bash'
The command could not be located because '/bin' is not included in the PATH environment variable.
bash: command not found

* Ada cara untuk keluar dari cangkang terbatas , tetapi jika pengguna Anda mampu melakukannya, maka mereka mungkin tidak mudah tertipu seperti yang Anda pikirkan.

Robert Riedl
sumber
2
Ini mencoba untuk mencapai "lingkungan yang sangat terbatas di mana hampir semua hal yang pengguna pikirkan untuk dilakukan di komputer tidak diizinkan" (seperti yang saya katakan dalam jawaban saya). res-usertidak dapat masuk secara grafis. Satu-satunya hal berguna yang dapat mereka lakukan adalah ssh -Xmenjalankan dan menjalankan firefox. Anda dapat mengizinkan lebih banyak perintah sehingga pengguna dapat melakukan pekerjaan mereka. Maka keluar lebih mudah. Beberapa metode yang ditautkan dapat dibuat menjadi satu-liner (yang mungkin disediakan oleh penyerang). Jika pengguna menemukan pembatasan yang menyesakkan, mereka akan menjadi ahli dalam mengelaknya, namun tetap cerdas atau mudah tertipu seperti sebelumnya.
Eliah Kagan
1
@ ElliKagan ya, benar. Anda harus menautkan semua yang dibutuhkan pengguna. Tetapi ini sangat dekat dengan [...] adakah cara untuk membuat daftar kontrol akses dan menetapkan bahwa pengguna ini hanya dapat menjalankan file dalam daftar ini [...] . Jadi itu mungkin membantu OP. Melarikan diri dari cangkang ini bukan tidak mungkin, tetapi cukup sulit. Kami memiliki pengaturan serupa untuk akses eksternal ke sumber daya tertentu, atau host-melompat. Saya ragu ada serangan luas di luar sana, terhadap pengaturan shell terbatas .... dan jika Anda berurusan dengan serangan yang ditargetkan , di mana penyerang mengetahui lingkungan .. semua taruhan dibatalkan.
Robert Riedl
4
Saya akan mengangkat catatan kaki ke baris pertama jawaban Anda.
Dijeda sampai pemberitahuan lebih lanjut.
Mungkin lebih baik jika mereka menggunakan chrome dalam mode kios atau browser yang diperkeras lainnya. Seharusnya cukup mudah untuk mendapatkan plugin atau ekstensi firefox diinstal dengan izin yang sangat tinggi dan eksekusi perintah sistem. Di firefox pastikan Anda menggunakan versi terakhir dan melarang ekstensi.
Benjamin Gruenbaum
Untuk perlindungan lebih lanjut berikan pengguna hanya akses tulis ke sistem file yang dipasang dengan opsi noexec.
Dan D.