Krates (Validasi & Keamanan)
Krates adalah lapisan validasi dan keamanan LightVM. Krates memeriksa struktur bytecode tertentu dan pembatasan sumber daya yang dikonfigurasi sebelum dan selama eksekusi.
Cara Kerja Krates
Krates menggabungkan validasi struktural, pemeriksaan keamanan, dan pemantauan tick eksekusi. Pemeriksaan ini tidak membuktikan keamanan bytecode secara menyeluruh, determinisme, atau keterjangkauan fungsi.
- Verifikasi Batas:
validate_bytecodememeriksa bahwa targetJump,IfFalse, danBreakberada di bawah panjang bytecode. - Validasi Variabel:
validate_varsmemeriksa indeks padaValIdx,GetIdx,SetIdx,IncIdx, danDecIdxterhadapvar_count. - Batas Alamat Awal Fungsi: Memeriksa bahwa alamat awal setiap fungsi berada di bawah panjang bytecode.
- Pembatasan Fitur:
has_nightly_opcodesmendeteksiinstantiate,import, danexportdalam sumber terserialisasi; antarmuka pemuatan menolaknya saat dukungan nightly dinonaktifkan. - Kuota Sumber Daya:
validate_securitymenghitung I/O, impor, pembuatan objek/array, panggilan, dan lompatan dalam bytecode terhadap batas yang dikonfigurasi. Loop eksekusi juga menghitung operasi tersebut saat runtime. - Daftar Putih Modul: Memeriksa nama modul impor terhadap
SecurityConfig.allowed_importssaat validasi keamanan. - Pengisian Nop: Menolak bytecode yang lebih panjang dari sepuluh instruksi ketika jumlah
Nopmelebihi jumlah total instruksi dibagi sepuluh menggunakan pembagian integer. - Kemampuan Bypass:
unsafe_modemelewativalidate_security(kuota statis, daftar putih impor, dan pemeriksaan pengisianNop) serta kuota runtime untuk I/O, impor, alokasi, panggilan, dan lompatan. Validasi struktural, pembatasan fitur, batas stack, dan pemeriksaan gas tetap aktif. - Pemantauan Gas (Kontrol Tick):
GasMonitormemeriksa batas tick pada setiap iterasi loop eksekusi. Tick menghitung iterasi loop, bukan waktu yang berlalu atau siklus pemrosesan perangkat keras. - Validasi Tick: Menolak
max_ticksbernilai nol saat inisialisasi dan melaporkan error ketika jumlah tick mencapai batas.