Mozilla, Fastly, Intel a Red Hat propagujú WebAssembly ako platformu pre univerzálne použitie

Mozilla, Fastly, Intel a Red Hat zjednotený svoje úsilie vo vývoji technológií, ktoré pomáhajú vytvoriť z WebAssembly univerzálnu platformu na bezpečné spúšťanie kódu v rámci akejkoľvek infraštruktúry, operačného systému alebo zariadenia. Vznikla komunita pre spoločný vývoj runtime a kompilátorov, ktoré umožňujú použitie WebAssembly nielen vo webových prehliadačoch Bytecode Alliance.

Na vytvorenie prenosných programov dodávaných vo formáte WebAssembly, ktoré možno spustiť mimo prehliadača, odporúčame použiť rozhranie API BOL SOM (WebAssembly System Interface), ktorý poskytuje softvérové ​​rozhrania pre priamu interakciu s operačným systémom (POSIX API pre prácu so súbormi, soketmi atď.). Charakteristickým rysom vykonávacieho modelu aplikácií využívajúcich WASI je, že bežia v prostredí sandbox na izoláciu od hlavného systému a používajú bezpečnostný mechanizmus založený na správe schopností pre akcie s každým zo zdrojov (súbory, adresáre, zásuvky, systémové volania). , atď.) aplikácia musí mať príslušné oprávnenia (poskytuje sa len prístup k deklarovanej funkcionalite).

Jeden z ciele Vytvorená aliancia je riešením problému distribúcie moderných modulárnych aplikácií s veľkým počtom závislostí. V takýchto aplikáciách môže byť každá závislosť potenciálnym zdrojom zraniteľností alebo útokov. Prevzatie kontroly nad závislosťou vám umožňuje získať kontrolu nad všetkými aplikáciami, ktoré sú s ňou spojené. Dôvera v aplikáciu automaticky znamená dôveru vo všetky závislosti, ale závislosti často vyvíjajú a udržiavajú tímy tretích strán, ktorých aktivity nemožno kontrolovať. Členovia Bytecode Alliance majú v úmysle poskytnúť holistické riešenie pre bezpečné vykonávanie aplikácií WebAssembly, ktoré nie sú vo svojej podstate dôveryhodné.

Na ochranu sa navrhuje použiť koncept nanoprocesov, v ktorom je každý modul závislostí oddelený do samostatne izolovaného modulu WebAssembly, ktorého právomoci sú nastavené vo vzťahu len k tomuto modulu (napr. knižnica na spracovanie reťazcov nebude byť schopný otvoriť sieťový soket alebo súbor). Na rozdiel od separácie procesov sú obslužné nástroje WebAssembly ľahké a nevyžadujú takmer žiadne dodatočné zdroje – interakcia medzi obslužnými programami nie je oveľa pomalšia ako volanie bežných funkcií. Separáciu je možné vykonať nielen na úrovni jednotlivých modulov, ale aj na úrovni skupín modulov, ktoré napríklad potrebujú pracovať so spoločnými oblasťami pamäte

Požadované právomoci môžu byť určené na úrovni samotných závislostí a delegované na závislosti pozdĺž reťazca nadradenými modulmi (zdroje vo WASI sú spojené so špeciálnym typom deskriptora súboru - schopnosťou). Modulu možno napríklad delegovať možnosť prístupu ku konkrétnemu adresáru a systémovým volaniam a ak je narušená vývojová infraštruktúra modulu alebo je identifikovaná zraniteľnosť, počas útoku bude prístup obmedzený len na tieto zdroje. Deklarácie zdrojov od tvorcov modulov môžu byť indikátorom podozrivej aktivity, napríklad keď modul na spracovanie textu požaduje povolenie na otvorenie sieťového pripojenia. Pôvodne nastavené oprávnenia sa skontrolujú a ak sa zmenia, načítanie závislosti sa odmietne, kým sa neaktualizuje podpis lokálneho modulu.

Pre spoločný vývoj pod krídlami Bytecode Alliance preložené viaceré súvisiace s WebAssembly proaktívny, ktorý predtým samostatne vyvinuli zakladajúce spoločnosti aliancie:

  • bol čas — runtime pre spustenie aplikácií WebAssembly s rozšíreniami WASI ako bežných samostatných aplikácií. Podporuje spustenie bajtového kódu WebAssembly pomocou špeciálneho nástroja príkazového riadka a prepojenie hotových spustiteľných súborov (wasmtime je zabudovaný do aplikácie ako knižnica). Wasmtime má flexibilnú modulárnu štruktúru, ktorá vám umožňuje škálovať runtime pre rôzne aplikácie, napríklad môžete vytvoriť skrátenú verziu pre zariadenia s obmedzenými zdrojmi;
  • Lucet — kompilátor a runtime na spúšťanie programov vo formáte WebAssembly. Výrazný vlastnosť Lucet je použitie plnohodnotnej anticipatívnej kompilácie (AOT, predčasne) namiesto JIT do strojového kódu vhodného na priame vykonávanie. Projekt bol vyvinutý spoločnosťou Fastly a je optimalizovaný tak, aby spotreboval minimálne zdroje a veľmi rýchlo spúšťal nové inštancie (Fastly používa Lucet v cloude edge computing engine, ktorý používa WebAssembly pre manipulátory spúšťané pri každej požiadavke). V rámci spoločného projektu sa plánuje konverzia kompilátora Lucet na používanie Wasmtime ako základu;
  • WAM (WebAssembly Micro Runtime) je ďalší runtime na spustenie WebAssembly, pôvodne vyvinutý spoločnosťou Intel na použitie v zariadeniach internetu vecí. WAMR je optimalizovaný pre minimálnu spotrebu zdrojov a možno ho použiť na zariadeniach s malým množstvom pamäte RAM. Projekt obsahuje interpret a virtuálny stroj na vykonávanie bajtkódu WebAssembly, API (podmnožinu Libc) a nástroje na dynamickú správu aplikácií;
  • žeriavový výťah — generátor kódu, ktorý prekladá prechodnú reprezentáciu nezávislú od hardvérových architektúr do spustiteľného strojového kódu optimalizovaného pre špecifické hardvérové ​​platformy. Cranelift podporuje paralelizáciu kompilácie funkcií pre veľmi rýchle generovanie výsledkov, čo umožňuje jeho použitie na vytváranie JIT kompilátorov (JIT založený na Cranelift sa používa vo virtuálnom stroji Wasmtime);
  • WASI bežné — samostatná implementácia WASI (WebAssembly System Interface) API na organizovanie interakcie s operačným systémom;
  • cargo-wasi — modul pre správcu balíkov Cargo, ktorý implementuje príkaz na kompiláciu kódu Rust do bajtkódu WebAssembly pomocou rozhrania WASI na používanie WebAssembly mimo prehliadača;
  • wat и wasmparser — syntaktické analyzátory na analýzu textu (WAT, WAST) a binárne reprezentácie bajtového kódu WebAssembly.

Aby som to zhrnul, WebAssembly je veľmi podobný Asm.js, ale odlišný v tom, že ide o binárny formát, ktorý nie je viazaný na JavaScript a umožňuje spúšťanie nízkoúrovňového stredného kódu zostaveného z rôznych programovacích jazykov v prehliadači. WebAssembly nevyžaduje zberač odpadu, pretože používa explicitnú správu pamäte. Použitím JIT pre WebAssembly môžete dosiahnuť úrovne výkonu blízke natívnemu kódu. Medzi hlavné ciele WebAssembly patrí zabezpečenie prenosnosti, predvídateľného správania a rovnakého spúšťania kódu na rôznych platformách.

Zdroj: opennet.ru

Pridať komentár