Bagaimana cara mem-sandbox aplikasi?

66

Saya ingin menjalankan program kecil yang tidak tepercaya, tetapi membatasi mereka untuk mengakses file apa pun di luar folder mereka, akses jaringan, dan segala sesuatu yang mereka tidak benar-benar butuhkan. Apa cara paling sederhana untuk mencapai ini?

michel
sumber
Saya belum pernah menggunakannya, jadi saya tidak bisa membuat jawaban yang lengkap, tetapi AFAIK, AppArmor ( wiki.ubuntu.com/AppArmor ) harus dapat melakukan ini.
Javier Rivera
Lihat Vagrant, pembungkus untuk VirtualBox. vagrantup.com dan [di Wikipedia] ( en.wikipedia.org/wiki/Vagrant_(software%29) dan di github
Janus Troelsen
@JavierRivera FWIW, SELinux juga. Tidak tahu betapa mudahnya menjalankan Ubuntu.
TC1
Apparmor sudah diinstal secara default di Ubuntu, jadi seharusnya lebih mudah.
Javier Rivera
1
Sepertinya ada beberapa kemungkinan: virtualisasi menggunakan sesuatu seperti Virtualbox (seperti Vagrant), chroot, LXC, App Armor dan SE Linux.
Flimm

Jawaban:

26

Jika mereka benar-benar tidak dipercaya, dan Anda ingin memastikan, Anda akan mengatur kotak yang terpisah. Baik benar-benar, atau secara virtual.

Selanjutnya, Anda tidak ingin kotak itu berada di jaringan yang sama dengan barang-barang penting Anda, jika Anda cukup paranoid. Dalam semua solusi, Anda akan mengatur pengguna terpisah tanpa hak, jadi jangan membuka terlalu banyak alat untuk calon kompromi.

  • Jadi opsi teraman adalah kotak terpisah yang dihapus secara fisik dari jaringan Anda.
  • Anda bisa menyerah sedikit dengan menambahkannya ke jaringan fisik, tetapi pada subnet yang berbeda: tidak ada koneksi 'nyata' di dalamnya
  • Mesin virtual akan menjadi pilihan, tetapi mungkin harus menyerah beberapa kinerja

Jika Anda terikat menjalankannya di kotak yang sama, Anda memiliki misalnya, opsi ini

  • chroot. Ini adalah opsi default untuk melakukan hal ini bagi banyak orang, dan untuk ancaman non-spesifik bahkan mungkin berhasil. Tapi ini BUKAN pilihan keamanan, dan bisa pecah dengan mudah. Saya menyarankan untuk menggunakan ini sebagaimana dimaksud, yaitu bukan untuk keamanan.

Pada akhirnya Anda mungkin perlu menyiapkan model sandboxing tertentu tanpa perlu virtualisasi atau kotak terpisah, atau situasi yang masih berisiko chroot. Saya ragu ini yang Anda maksudkan, tetapi lihat tautan ini untuk informasi yang lebih mendalam.

Nanne
sumber
Seberapa amankah keamanan untuk menjalankan aplikasi yang tidak tepercaya pada mesin virtual? Saya pernah mendengar tentang eksploitasi teoretis yang dapat mengakses sistem operasi host melalui hypervisor dan menginfeksinya.
zuallauz
Bisa jadi, meskipun saya saat ini tidak mengetahui ancaman nyata seperti itu, tentu bukan yang tidak ditargetkan. Anda harus mempertimbangkan penyerang yang menulis malware dalam permainan tidak akan sejauh itu. Sekarang serangan tombak pada Anda sendiri mungkin saja, jika mereka tahu tata letak Anda, tapi tetap saja saya tidak berpikir itu adalah kekhawatiran pertama Anda. Jika Anda yakin mereka malicious, Anda harus benar-benar membuat sebuah kotak yang terisolasi, bijaksana jaringan.
Nanne
14

Firejail cukup baru dan dalam pengembangan konstan. Mudah digunakan.

Anda cukup:

sudo apt-get install firejail
firejail app
penguinforsupper
sumber
Selamat Datang di Tanya Ubuntu! Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
Mark Kirby
12

Docker akan membantu Anda mengatur wadah yang dapat Anda jalankan dari kernel saat ini, namun tetap terkandung jauh dari sisa sistem Anda. Tampaknya cukup canggih tetapi ada fokus Ubuntu dokumentasi yang baik.

N. Thomas Kor
sumber
4
Saya pikir ini adalah pilihan yang bagus untuk sebagian besar kasus. Namun, bagian "tidak dipercaya" dari pertanyaan awal, akan sedikit mengkhawatirkan saya. Ada banyak peragaan hack yang tersedia yang memungkinkan aplikasi untuk "keluar" dari wadahnya. Dan mengingat bahwa buruh pelabuhan berlabuh pada akses root, ini bisa berbahaya, jika tujuan Anda adalah untuk saling mengirim aplikasi.
Cris Holdorph
@CrisHoldorph benar meskipun Docker semakin baik dan saya bahkan berpikir sekarang mungkin untuk menjalankan buruh pelabuhan tanpa hak (bukan sebagai root). Ini tentu benar sekarang untuk LXC dan LXD (daemon LXC kadang-kadang disebut) dapat sangat menyederhanakan pembuatan wadah tersebut. Jadi kontainer modern yang tidak terjangkau dapat dianggap sebagai peningkatan dalam hal keamanan dibandingkan chroot. Tapi mereka bukan penghalang yang tidak bisa ditembus!
Huygens
Docker bukan alat keamanan!
Federico
10

Virtualisasi penuh / emulasi (VirtualBox)

Salah satu solusi yang mungkin adalah perangkat lunak virtualisasi seperti VirtualBox yang dapat Anda temukan di pusat perangkat lunak.

  • Instal kotak Virtual
  • Buat mesin virtual dengan jaringan diaktifkan
  • Instal Ubuntu atau mungkin desktop yang lebih ringan seperti Lubuntu
  • Memperbarui OS yang diinstal sepenuhnya (di dalam kotak Virtual)
  • Nonaktifkan Networking di mesin virtual
  • Ambil sebuah foto

Anda sekarang dapat menginstal perangkat lunak yang Anda tidak percaya untuk melihat apa yang dilakukannya. Itu tidak dapat mengganggu dunia luar atau Anda meng-host OS karena tidak memiliki akses.

Namun, ini mungkin menghancurkan mesin virtual Anda, tetapi jika berhasil, Anda dapat mengembalikannya dari snapshot.

Mungkin ada metode lain untuk membatasi kekuatan destruktif dari perangkat lunak yang tidak dipercaya tetapi ini adalah metode paling kuat yang bisa saya pikirkan.

Virtualisasi berbasis wadah (Docker / LXC)

Pilihan lain mungkin LXC informasi lebih lanjut di sini

LXC adalah paket kontrol userspace untuk Linux Containers, mekanisme sistem virtual ringan yang kadang-kadang digambarkan sebagai "chroot on steroid".

LXC dibangun dari chroot untuk mengimplementasikan sistem virtual lengkap, menambahkan manajemen sumber daya dan mekanisme isolasi ke infrastruktur manajemen proses Linux yang ada.

Ini tersedia di pusat perangkat lunak. Namun saya tidak punya pengalaman.

Warren Hill
sumber
1
Itu hanya merepotkan. Buat seluruh mesin virtual hanya untuk menjalankan game !!? itu bukan solusi yang sangat bagus. Jangan Anda pikir pengaturan proses ini GID dan UID akan WAY lebih mudah daripada ini?
Jack Mayerz
Sebenarnya saya pikir menyiapkan kotak virtual cukup mudah sehingga saya mungkin tidak akan repot mengambil snapshot. Jika itu menghancurkan mesin virtual saya, saya bisa membuangnya.
emory
Downvote: Penalaran salah faktual bahkan jika solusinya kuat Program tidak perlu memiliki hak yang sama dengan pengguna menjalankannya. Linux dan Ubuntu telah mendukung MAC sejak bertahun-tahun. Ubuntu menggunakan AppArmos untuk ini, dan Anda dapat dengan mudah memuat program ke direktori.
Javier Rivera
@JavierRivera "mudah" bukan kata yang tepat, atau profil AppArmor dan kebijakan SELinux untuk Firefox akan dikirimkan secara default dengan setiap distro dan bukan itu masalahnya. Ubuntu mengirimkan profil seperti itu tetapi tidak aktif secara default karena merusak beberapa fitur Firefox "populer". Tidak ada banyak kebijakan SELinux baik untuk sebagian besar aplikasi GUI, aplikasi semacam itu membutuhkan terlalu banyak izin untuk disebut sandboxed. Jika Anda tidak setuju, silakan kirim tautan di sini ke sandbox Firefox dengan aman menggunakan AppArmor atau SELinux! Jika Anda bisa, saya akan sangat senang :-)
Huygens
Anda mungkin harus mendefinisikan "aman" untuk jawaban yang bermakna tetapi kebijakan default Firefox di Ubuntu cukup masuk akal bagi saya. Tentu saja hal itu tidak semudah user-friendly seperti tidak menggunakan apa-apa, tapi masih jauh lebih ramah-pengguna daripada mesin virtual penuh bagi saya (yang juga merusak fitur firefox populer).
Javier Rivera
9

mbox

Mbox adalah mekanisme sandboxing ringan yang dapat digunakan setiap pengguna tanpa hak istimewa dalam sistem operasi komoditas.

Saya sudah menggunakannya untuk beberapa hal andal.

0x78
sumber
4

subuser

Anda dapat menggunakan subuser untuk mem-sandbox aplikasi Anda dengan Docker. Ini memungkinkan Anda melakukan hal-hal seperti aplikasi GUI kotak pasir, yang tidak mudah dilakukan dengan Docker secara langsung.

sudo apt install subuser
timthelion
sumber
1

Saya pikir, solusi yang mungkin adalah membuat pengguna terpisah untuk tujuan pengujian, dan membatasi hak istimewanya. Dengan cara ini Anda tidak akan kehilangan kinerja, apa yang pasti akan terjadi di mesin virtual, tapi saya pikir ini kurang aman, jika tidak diatur dengan benar, yang saya tidak bisa saran tentang bagaimana melakukannya.

Phlya
sumber
2
Ini tidak melindungi sistem dari perangkat lunak berbahaya yang mungkin masih diinstal atau dijalankan - itu juga bukan sandboxing dengan cara yang berarti pertanyaan ini
Thomas Ward
1

DoSH - Docker SHell

Jika Anda hanya ingin mem-sandbox aktivitas pengguna, Anda dapat menggunakan "DoSH"

DoSH (yang merupakan singkatan dari Docker SHell) adalah pengembangan untuk membuat wadah Docker ketika pengguna masuk ke sistem Linux dan menjalankan shell ke dalamnya, alih-alih membuat shell secara simpel.

ubuser
sumber