it-swarm-id.com

Apakah Mesin Virtual menghentikan malware agar tidak membahayakan?

Saya ingin tahu apakah aman bagi sistem Host dari mesin virtual (VM - VirtualBox OSE dalam kasus saya) untuk mengeksekusi malware.

Bisakah virus keluar dan membaca atau menulis data dari sistem Host? Bisakah itu membuat koneksi internet jika saya menonaktifkannya di VM saya?

Apakah VM lingkungan yang aman untuk mencoba mencari tahu apa yang dilakukan oleh virus?

Bisakah bom garpu "membunuh" sistem Host jika saya mengurangi memori menjadi sekitar 1/4 dari total memori nyata saya? Berapa banyak waktu CPU/sumber daya yang dapat digunakan?

66
Martin Thoma

Secara teoritis, sistem tamu benar-benar terisolasi oleh VM dan bahkan tidak dapat "melihat" Host, apalagi serang; jadi tamu tidak dapat keluar dari VM. Tentu saja, dalam praktiknya, kadang-kadang terjadi ( tautan arsip web ). Serangan memerlukan pengeksploitasian masalah keamanan (mis. Bug pemrograman yang ternyata memiliki konsekuensi buruk) dalam implementasi VM atau, mungkin, fitur perangkat keras yang menjadi dasar pengembangan VM. Ada beberapa rute keluar untuk data dari VM; mis., untuk akses Internet, VM meniru kartu jaringan virtual, yang hanya menangani paket tingkat terendah, bukan TCP/IP lengkap - dengan demikian, sebagian besar masalah tumpukan-IP tetap terkurung dalam VM sendiri. Jadi bug yang menyebabkan breakout dari VM cenderung tetap jarang terjadi.

Ada beberapa jenis serangan terhadap mana VM sangat efektif, mis. bom fork. Dari sudut pandang sistem Host, VM adalah satu proses. Bom fork di tamu akan berlutut di scheduler di tamu OS, tetapi untuk Host ini akan sama sekali tidak berbahaya. Demikian pula untuk memori: VM mengemulasi mesin fisik dengan jumlah RAM yang diberikan, dan akan membutuhkan jumlah "real" RAM tersebut untuk mencadangkannya secara efisien. Terlepas dari apa yang dilakukan tamu, VM tidak akan pernah memonopoli lebih banyak RAM selain itu. (Anda masih ingin membatasi ukuran VM RAM untuk, katakanlah, paling banyak 1/2 dari ukuran fisik Anda RAM, karena ekstra "nyata" RAM berguna untuk cache disk, dan OS Host juga ingin menggunakannya.)

55
Tom Leek

Penafian: Saya akan mencari pemahaman tingkat tinggi. Jika Anda menginginkan panduan terperinci, itu di luar jangkauan. Selain itu, ada cara lain (seluruhnya dalam perangkat lunak) untuk menerapkan mesin virtual yang tidak berlaku. Saya juga fokus pada "pemecahan" hanya melalui mekanisme virtualisasi - yaitu bukan yang dapat terjadi PC-ke-PC pada host jaringan keras yang sebenarnya.

Saya suka detail, jadi ini dia. Pertama, codeproject memiliki beberapa referensi assembler yang sangat baik pada mode yang berbeda dari CPU x86 (nyata, dilindungi dan panjang) dan penggunaan virtualisasi . Ada blog Intel VT (Saya tidak yakin apakah Intel menulis ini) dan terakhir bagian pertama dari Rootkit Arsenal adalah didedikasikan untuk menjelaskan x86 dan merupakan bacaan yang sangat baik, lengkap dengan penelusuran dan diagram yang bagus. Memahami itu semua butuh kesabaran, jadi yang akan saya lakukan di sini adalah memberikan pengantar yang sangat singkat tentang cara kerjanya.

Cara kami mengguncang ketika kami menjalankan DOS

Sistem mode nyata DOS dan awal 16-bit mengoperasikan model memori tersegmentasi. Tidak ada kontrol atas ukuran segmen dan tidak ada saklar perlindungan pada salah satu segmen tersebut. Kode dimuat ke dalam segmen memori dan dijalankan; itu dapat jauh melompat ke segmen lain, sehingga kode apa pun, di mana saja dapat mengubah apa pun, termasuk memproduksi sepotong TSR (mengakhiri dan tetap tinggal) kode yang hanya menunjuk salah satu entri IVT (tabel vektor interupsi) di alamat di ruangnya, sebelum mengeksekusi yang asli. Pada dasarnya tidak ada perlindungan. Tidak ada Nada.

Munculnya mode dilindungi 32-bit

Mode terproteksi menjadi rumit dengan cepat. Ada tiga bagian untuk itu - segmentasi, paging dan PAE. Masing-masing membutuhkan tabel data yang memberi tahu CPU tentang segmen itu, halaman atau membantunya memperluas ruang alamat (PAE). Ini termasuk bendera cincin terkenal (berlaku untuk segmen dan halaman) yang menerapkan proses isolasi. Paging adalah cara Anda untuk memuat data dari RAM dan ke disk dan membuat hal-hal indah seperti memori virtual (lihat, Word virtual! Kami akan sampai di sana!)

Mode panjang

Mode lama menghilangkan segmentasi dan hanya mengamanatkan struktur PAE/Paging. Sekali lagi, untuk sepenuhnya meremehkan menerapkan OS, Paging dikendalikan oleh struktur dalam memori yang kemudian diatur melalui instruksi khusus. Voila, seseorang dapat mencapai proses isolasi dengan pengaturan yang tepat. Sekali lagi, saya agak meremehkan ...

Beri saya virtualisasi!

Baik. Virtualisasi adalah konsep umum yang sama. Mesin virtual diatur menggunakan struktur kontrol mesin virtual yang menentukan bagaimana memori mereka dipetakan kembali ke memori fisik, agak seperti paging. Yang paling penting, dalam kondisi tertentu mesin virtual akan diminta untuk meminta sistem operasi Host untuk sesuatu, agak seperti proses isolasi, agak seperti interupsi perangkat lunak. Ini disebut VM keluar dan memberikan informasi kepada Host seperti keadaan register saat keluar. Agak seperti panggilan sistem.

Bisakah sepotong malware keluar dari mesin virtual?

Jadi, sejauh VM yang bersangkutan, OS Host memiliki semua ruang memori sendiri dan dapat terinfeksi/rusak/dihancurkan sesuka hati.

Dalam hal mempengaruhi memori Host secara langsung, mesin virtual tidak bisa, karena tidak bisa melihatnya. Host harus memetakan memori yang diperlukan ke ruang mesin virtual. Itu juga harus, dalam ruang memori, menerapkan semuanya dari BIOS ke atas. Untuk berkomunikasi dengan perangkat Host tertentu untuk tugas-tugas tertentu, mesin Host harus mengatur VM kondisi keluar dan target VM harus memicu mereka. Ketika itu terjadi, kontrol ditransfer ke Host.

Karena itu, ada dua bidang yang berisiko:

  1. Tindakan yang dilakukan Host sebagai tanggapan terhadap keluar VM. Jika ada bug dalam penanganan ini, ada kemungkinan untuk membujuk Host untuk mengeksekusi sesuatu yang seharusnya tidak.
  2. Setiap Host dapat mengakses ruang memori mesin tamu. Ingat kode mesin Host yang berjalan di ring 0 dapat melenggang dan menabrak partai di mana pun diinginkan. Kebetulan Anda dapat mengatur memori tamu dari tamu (secara mengejutkan).

Ini membawa Anda ke mekanisme eksploitasi Anda. Anda memerlukan bug penanganan di VM keluar rutin, maka Anda harus dapat meyakinkan kode itu untuk mengeksekusi beberapa memori, idealnya kode yang baru saja Anda masukkan ke dalam halaman dari guest vm. Setelah selesai, ucapkan selamat tinggal ke Kansas.

Seperti yang dikatakan Tom Leek, VM sangat efektif dalam bertahan melawan bom fork. Dalam cara yang mirip dengan cara OS dapat membatasi berapa banyak memori yang dapat dialokasikan oleh suatu proses, sehingga dapat membatasi berapa banyak memori yang dipetakan ke VM. Kehabisan dan OS tamu yakin itu kehabisan memori fisik; Host tidak akan mengalokasikannya lebih banyak kecuali Anda menerapkan keluar VM untuk melakukan ini, yang akan sedikit berbahaya dan saya tidak percaya ini dilakukan.

Seberapa besar kemungkinan ini?

Tidak terlalu. Itu tergantung pada VM keluar sepenuhnya implementasi, atau membaca memori dari tamu di Host dengan bug yang bagus dalam kode membaca Anda. Ini juga mensyaratkan bahwa bug tersebut akan memungkinkan Anda untuk mengontrol crash sedemikian rupa sehingga Anda dapat memaksa eksekusi ke alamat memori yang dipegang oleh Host Anda. Pintu keluar VM harus dapat mengakses memori itu.

Apa yang belum saya bahas?

  1. Serangan pada tumpukan perangkat lunak yang ada seperti TCPIP. Kerentanan di sini sama seperti jika Anda memiliki dua PC fisik sebenarnya.
  2. Seluruhnya perangkat lunak yang diimplementasikan virtualisasi.
  3. Virtualisasi pada semua jenis chip lainnya. Ini berlaku untuk pengaturan yang kompatibel dengan Intel VT.

Akhirnya, Saya sebelumnya berpendapat bahwa proses isolasi adalah bentuk sandboxing. Membaca jawaban itu dan yang ini, Anda sekarang harus dapat memahami mengapa saya mendefinisikannya seperti itu. Ada kesamaan yang luar biasa antara proses isolasi dan mesin virtual di x86.

Pembaruan

Jadi, saya sudah menggali lebih dalam tentang ini, terutama ke dalam penelitian pil biru. Apa yang saya jelaskan adalah tampilan tingkat tinggi yang sangat sederhana. Saya telah menemukan lebih banyak detail. Ini adalah seluruh kertas yang didedikasikan untuknya dari Invisible Things Lab. Ternyata pertahanan mereka bicara termasuk konsep menolak akses eksekusi ke halaman mode pengguna dari dering 0, sehingga mencegah eksekusi langsung data yang telah ditempatkan mesin virtual ke dalam memori. Ternyata ini sedang diimplementasikan dalam CPU Intel dan patch saat ini ada di Linux Kernel. Jadi, tergantung pada bagaimana kelanjutannya, mungkin saja kasus serangan seperti ini menjadi jauh lebih sulit, bahkan jika ada eksploitasi.

31
user2213

Saya telah melakukan sedikit eksperimen malware dalam VM - kebanyakan menggunakan backtrack4 untuk masuk dari satu Host ke yang berikutnya. Saya pengguna VMware Workstation, terutama.

Masalah terbesar berasal dari kemungkinan koneksi jaringan VM Anda mentransfer kembali ke OS Host Anda. Anda ingin benar-benar menonaktifkan jaringan dan/atau menggunakan jaringan yang tidak memiliki akses kembali ke Host Anda .

Membatasi memori adalah praktik terbaik yang baik. Saya biasanya menyimpannya sekitar seperempat, sama seperti Anda. Waktu CPU terbatas pada jumlah inti atau (jika Anda memiliki kontrol berbutir halus dalam perangkat lunak Anda) persentase waktu CPU yang ditentukan untuk VM spesifik Anda.

Serangan bertarget yang mampu keluar dari lingkungan virtual memang ada dan tersedia secara komersial - seperti cloudburst @Hendrick menyebutkan - tetapi relatif jarang. Mengikuti perkembangan patch virtualisasi Anda adalah ide yang sangat bagus.

Lihat di sini , di sini , dan di sini untuk detailnya.

11
Tim Brigham

Selain semua informasi yang baik di sini tentang apakah virus dapat keluar dari VM, izinkan saya menunjukkan masalah lain untuk dipertimbangkan:

Dimungkinkan untuk kode berbahaya ke mendeteksi apakah kode itu dieksekusi di dalam mesin virtual atau tidak . Ini sering berjalan dengan nama deteksi mesin virtual atau "pil merah" , dan ada banyakteknik tersedia.

Selain itu, beberapa virus dan malware lain menggunakan teknik ini untuk mendeteksi apakah mereka dijalankan dalam VM, dan jika demikian, matikan payload mereka (hindari mengambil tindakan jahat). Mereka melakukan ini untuk membuat hidup lebih sulit bagi orang untuk merekayasa balik malware atau mendeteksinya.

Akibatnya, a VM bukan cara yang baik untuk mengetahui apa yang dilakukan malware. Malware mungkin tidak dapat keluar dari VM, tetapi pada saat yang sama, itu mungkin tidak lakukan apa saja ketika dijalankan di dalam VM. Jika Anda menjalankannya di VM dan melihatnya tidak melakukan apa-apa, putuskan itu tidak berbahaya, lalu putuskan untuk menjalankannya di luar VM - Anda bisa dimiliki. Hati-hati di luar sana.

10
D.W.