Utforsk hvordan WebAssembly (WASM) sin fleksibilitet og sikkerhetsarkitektur fungerer i denne veiledningen for nybegynnere.
Begge disse temaene representerer avanserte aspekter ved WebAssembly (WASM). Vi anbefaler at du først setter deg inn i de to foregående delene av vår introduksjonsserie om WebAssembly for nybegynnere.
La oss starte.
WebAssembly sin fleksibilitet
WebAssemblys fleksibilitet er det som gjør det velegnet for webbruk. Faktisk kan WASM defineres som en isolert plattform med høy grad av flyttbarhet.
Det binære formatet gjør det også mulig å kjøre på ulike typer prosessorarkitekturer og operativsystemer. Dette innebærer at WASM kan brukes ikke bare på internett, men også i andre sammenhenger.
For å forstå fleksibiliteten til WASM, skal vi se nærmere på følgende:
- Lokalt, begrenset og ikke-deterministisk miljø.
- Spesifikke egenskaper ved kjøringsmiljøet.
- WASM sin fleksibilitet på nett og utenfor nett.
Lokalt, begrenset og ikke-deterministisk
WASM krever et effektivt kjøringsmiljø med visse egenskaper: lokalt, begrenset og ikke-deterministisk. Ikke-determinisme i databehandling betyr at en algoritme, kompilator eller et miljø kan gi forskjellig respons eller resultat, selv med identiske innganger. Det er motsatt av en deterministisk algoritme.
De to andre egenskapene, begrenset og lokalt, er knyttet til ikke-deterministisk kjøring. For at ikke-deterministisk kjøring skal fungere korrekt, kreves veldefinerte og «begrensede» brukstilfeller.
Disse kjøringene er også «lokale», uten påvirkning utenfor det gjeldende miljøet. For mer informasjon, les det offisielle dokumentet om ikke-determinisme i WebAssembly.
Spesifikke egenskaper ved kjøringsmiljøet
For å oppnå fleksibilitet for WebAssembly, forutsettes det at kjøringsmiljøet har disse egenskapene:
- Byte-nivå granularitet i minnet og 8-bits bytes.
- 32-bits to-komplement heltall, og eventuelt 64-bits.
- Programvareemulering er mulig ved hjelp av ujusterte minnetilganger eller pålitelig overlapping.
- Støtte for 32-bits og 64-bits flytende tall i henhold til IEEE 754-2008 standarden.
- Garantert fremdrift for alle tråder.
- For 64-bits tilgang skal wasm64 tilby atomiske minneoperasjoner uten låsing.
- Disse atomiske minneoperasjonene omfatter 8-, 16- og 32-bits tilganger.
- wasm64 støtter lineært minne større enn 4 GiB med 64-bits indekser eller pekere.
- Little-endian byte-rekkefølge.
Alle de store nettleserne, som Chrome, Edge, Firefox og WebKit, støtter disse miljøkravene.
WebAssembly er i stadig utvikling. WASM Community Group og W3C WebAssembly Working Group jobber med å standardisere teknologien. Det betyr at disse kravene kan endres i fremtiden.
WASM sin fleksibilitet på nett og utenfor nett
Hovedformålet med WebAssembly er å tilby fleksibilitet og optimal ytelse både på nettet og i andre miljøer. Vi skal nå se på hvordan WASM oppnår dette.
#1. Integrasjon på nett
WASM integreres sømløst med webøkosystemet, inkludert nettets sikkerhetsmodell, portabilitet og web-APIer. I tillegg må det være rom for kreativ utvikling (se WebAssembly for nybegynnere – Del 2 for å forstå målene).
Hvordan oppnår WASM kompatibilitet med nettet? Det benytter seg av JavaScript APIer, som gjør det enkelt for utviklere å bruke JavaScript sammen med WebAssembly-moduler. Det håndterer også lagring og henting av kompilatormoduler, administrering av import fra disse modulene, minnehåndtering, og mer.
For mer informasjon om hvordan WASM oppnår kompatibilitet med nettet, se: Web Embedding – WebAssembly.
#2. Integrasjon utenfor nett
Som nevnt, fungerer WASM også godt utenfor webmiljøer. Utviklere og bedrifter kan lage applikasjoner med høy ytelse eller skrive deler av applikasjonene som krever optimalisering. Eksempler inkluderer bruk på IoT-enheter, datasenter-servere og skrivebord-/mobilapplikasjoner.
Siden applikasjoner utenfor web ikke kan bruke web-APIer, benytter de seg av WASMs dynamiske koblinger. Det er også nødvendig å bruke funksjonstesting, en metode som tester flere varianter av en funksjon for å finne den beste brukeropplevelsen. Utviklere kan også bruke JavaScript-VM for enklere integrasjon utenfor nett, eller utvikle applikasjonene helt uten.
For mer informasjon, se Non-Web Embeddings – WebAssembly.
WebAssembly sikkerhet
WebAssembly er en binærformatløsning som gir ytelse i nærheten av maskinnivå. Det er svært effektivt på web, men kan også tilpasses for å fungere i andre miljøer. Dette gjør WASM tilgjengelig på tvers av en rekke tjenester, løsninger og prosesser, men skaper samtidig nye sikkerhetsutfordringer.
WASM sine sikkerhetsutfordringer og -risikoer
Selv om WebAssembly regnes som en trygg og effektiv teknologi, medfører det visse sikkerhetsrisikoer, inkludert:
- WebAssembly sandkasse
- Minnehåndtering
- Kodeobfuskasjon
- Integritetssjekker
#1. WebAssembly Sandbox
WASM kjører i nettleseren, akkurat som JavaScript. Det bruker den samme virtuelle maskinen (VM) som JavaScript. Sandkassen gir et sikkert kjøringsmiljø og hindrer innsyn i den underliggende koden.
Hvis JavaScript/WebAssembly-koden inneholder skadelig kode, kan det være vanskelig å oppdage fordi den fungerer som en «svart boks». WASM-koden er i et binært format som er klar til å kjøres, noe som gjør det vanskelig for antivirusløsninger å identifisere skadelig kode. Koden kan for eksempel inneholde uønsket reklame eller omdirigere brukere til skadelige nettsider.
I tillegg arver WebAssembly JavaScripts sårbarheter, ettersom den er avhengig av JavaScript for å kjøre på nettet. Utviklere må derfor følge JavaScripts sikkerhetsretningslinjer og tiltak når de koder WASM.
#2. Minnehåndtering
Minnehåndtering i WASM er en utfordring. For det første har den ikke direkte tilgang til fysisk minne fordi den kjører i en VM. Den bruker vertens minne.
For det andre krever frigjøring av minne i WASM en eksplisitt prosess, mens JavaScript i sammenligning automatisk rydder opp.
Når en WASM-funksjon returnerer data til JavaScript, returneres en peker til posisjonen i det tildelte WASM-minnet. Hvis minnet fylles opp, kan WASM-programmet krasje og forringe brukeropplevelsen. For å unngå dette må utviklere bruke verktøy for å feilsøke koden, eller verktøykjeder som emscripten.
#3. Kodeobfuskasjon
Sandkjøringen av WASM gjør koden tilslørt. Det binære WASM-formatet er ikke lettleselig for mennesker, noe som gjør det vanskelig å reversere koden og oppdage skadelige elementer.
Dette gjør feilsøking av WebAssembly-kode vanskelig. Dette skaper sikkerhetshull der hackere kan skjule kode som stjeler sensitiv informasjon eller injisere kode for å overta vertsmaskinen.
#4. Integritetssjekker
Alle data som overføres via internett er utsatt for manipulering. Hackere kan for eksempel gjennomføre et «mann-i-midten»-angrep for å endre dataverdier. Dette er problematisk for WASM, ettersom det ikke har en innebygd metode for integritetskontroller.
Det kan imidlertid samarbeide med JavaScript for å utføre integritetssjekker. En annen metode for å identifisere potensielle sårbarheter i WASM-koden er å bruke integreringsverktøy som Jit. Dette sikrer at koden er fri for skadelig programvare og ikke påvirker applikasjoner eller skyinfrastruktur.
Forstå WASM sikkerhetsmodell
WebAssembly tar sikkerhet alvorlig. I de offisielle WASM-dokumentene fremgår det at sikkerhetsmodellen tar for seg to hovedmål:
WASM-sikkerhetsmodellen er basert på at WebAssembly-applikasjoner kjører uavhengig, men innenfor sandkassemiljøet. APIer kan imidlertid åpne for mulighet for angrep på vertsmiljøet.
En annen feiltolerant teknikk er å kjøre applikasjoner deterministisk med begrensede forventninger. Ved å sikre begge disse forholdene, anses de fleste appkjøringer som trygge.
For å øke sikkerheten bør utviklere bruke «samme opprinnelse»-policyen for informasjonsflyt. For utvikling utenfor nett må POSIX-sikkerhetsmodellen brukes. For mer informasjon om sikkerhetsmodellen, se: Sikkerhet – WebAssembly.
WebAssembly System Interface (WASI)
WASI (WebAssembly System Interface) spiller en sentral rolle i WASM-integrasjon utenfor web, da det forbedrer sikkerheten. Det er et modulært systemgrensesnitt som tilbyr avanserte sikkerhetsegenskaper og fleksibilitet.
Det er nå en del av WebAssembly System Interface Subgroup Charter og dermed standardisert. Takket være WASI, er WASM mye brukt i ulike databehandlingsområder for kant- og serverløsninger. WASI forenkler også sikkerheten ved overgang fra web- til ikke-webmiljøer.
Oppsummering
WebAssemblys fleksibilitet og sikkerhet er omfattende temaer. I del 3 av WebAssembly for nybegynnere, har vi forsøkt å forenkle og forklare disse aspektene, spesielt med tanke på nybegynnere.
Du kan eventuelt sjekke ut JavaScript jukseark for utviklere og studenter.