Podívejte se, jak fungují modely přenositelnosti a zabezpečení WebAssembly (WASM) v této příručce pro začátečníky.
Obě jsou pokročilá témata WebAssembly (WASM). Doporučujeme vám přečíst si předchozí dvě témata v naší sérii WebAssembly pro začátečníky.
Začněme.
Table of Contents
Přenositelnost WebAssembly
Díky přenositelnosti WebAssembly je připraven pro web. Ve skutečnosti můžete definovat WASM jako přenosnou sandboxovou platformu.
Navíc jeho binární formát umožňuje spouštění napříč různými architekturami instrukční sady a operačními systémy. To znamená, že WASM můžete používat nejen na webu, ale i mimo něj.
Abychom porozuměli přenositelnosti WASM, probereme následující:
- Lokální, omezené a nedeterministické prostředí.
- Specifické vlastnosti prováděcího prostředí
- Webová a newebová přenositelnost WASM
Místní, omezené a nedeterministické
WASM potřebuje efektivní provádění a správná prostředí, která jsou lokální, omezená a nedeterministická. Nedeterminismus je počítání, které specifikuje, že algoritmus/kompilátor/prostředí generuje různé chování nebo výsledky i pro stejný vstup. Je opakem deterministického algoritmu.
Dva další aspekty, omezený a místní, jsou spojeny s nedeterministickým prováděním. Aby nedeterministické provádění fungovalo, potřebujete dobře definované případy použití, které jsou „omezené“.
Tyto popravy jsou také „lokální“ bez vlivu mimo prostředí. Přečtěte si jejich oficiální nedeterminismus v dokumentu WebAssembly, kde se o něm dozvíte více.
Specifické charakteristiky prováděcího prostředí
Aby bylo WebAssembly přenosné, předpokládá se, že prováděcí prostředí nabízí následující vlastnosti:
- Adresovatelnost granularity bajtové paměti a 8bitové bajty.
- 32bitová dvojka celá čísla se znaménkem. Volitelně 64 bitů.
- Softwarová emulace je možná prostřednictvím nezarovnaných přístupů k paměti nebo spolehlivého zachycování.
- Podpora 32bitových a 64bitových pohyblivých řádových čárek podle definice v IEEE 754-2008.
- Zaručit spuštění všech vláken s postupem vpřed.
- Pro 64bitový přístup by wasm64 měl poskytovat operátory atomové paměti bez zámku.
- Operátory atomové paměti bez zámku zahrnují 8, 16 a 32bitové přístupy.
- wasm64 podporuje lineární paměť vyšší než 4 GiB s 64bitovými indexy nebo ukazateli.
- Uspořádání bajtů Little-endian.
Všechny hlavní prohlížeče, včetně Chrome, Edge, Firefox a WebKit, podporují všechny tyto environmentální požadavky.
WebAssembly se navíc vyvíjí rychlým tempem. WASM Community Group a W3C WebAssembly Working Group pracují na jeho standardizaci. To znamená, že kterýkoli z těchto požadavků se může v budoucnu změnit.
Webová a newebová přenositelnost WASM
Primárním účelem WebAssembly je poskytovat přenositelnost a nativní výkon na webu i mimo něj. V této části se podíváme na to, jak toho WASM dosahuje.
#1. Web vkládání
WASM se dobře integruje s webovým ekosystémem, včetně modelu zabezpečení webu, přenositelnosti webu a webových rozhraní API. Navíc musí mít dostatek prostoru pro kreativní rozvoj na cestě (přečtěte si WebAssembly pro začátečníky – část 2, abyste pochopili její cíle)
Jak tedy WASM dosahuje kompatibility s webem? Využívá JavaScript API, což umožňuje vývojářům snadno používat JavaScript pro kompilaci modulů WebAssembly. Dále se stará o ukládání a načítání modulů kompilátoru, správu importů z modulů kompilátoru, správu paměti a tak dále.
Chcete-li se dozvědět více o tom, jak WASM dosahuje vysoké úrovně webové kompatibility, přečtěte si toto: Web Embedding – WebAssembly.
#2. Newebové vkládání
Jak již bylo zmíněno dříve, WASM funguje také s newebovými prostředími. Jako vývojář nebo firma můžete vytvářet vysoce výkonné aplikace nebo psát části aplikace, které vyžadují ladění výkonu. Můžete jej použít například na zařízeních IoT, serverech datových center a aplikacích pro stolní počítače/mobily.
Protože newebové aplikace nemohou používat webová rozhraní API, spoléhají na dynamické propojení WASM. Musíte také použít testování funkcí, proces vývoje softwaru, který testuje různé varianty funkcí, abyste zjistili, co je pro uživatele nejlepší. Kromě toho mohou vývojáři používat virtuální počítače s JavaScriptem ke zjednodušení newebového vkládání nebo k vývoji svých aplikací bez něj.
Chcete-li se dozvědět více, přečtěte si Newebové vkládání – WebAssembly.
Zabezpečení WebAssembly
WebAssembly je řešení v binárním formátu, které nabízí výkon podobný nativnímu. Funguje skvěle na webu, ale lze jej také vyladit tak, aby fungoval na newebových vloženích. Díky tomu je WASM široce dostupný napříč službami, řešeními a procesy. To však znamená další bezpečnostní výzvy.
Bezpečnostní výzvy a rizika WASM
Přestože je WebAssembly považováno za bezpečné a efektivní, přichází s řadou bezpečnostních rizik, včetně:
- Sandbox WebAssembly
- Správa paměti
- Zatemnění kódu
- Kontroly integrity
#1. Sandbox WebAssembly
WASM se spouští ve webovém prohlížeči, stejně jako JavaScript. Využívá stejný virtuální stroj (VM) jako JavaScript. Sandbox efektivně poskytuje bezpečné prostředí pro provádění a brání tomu, co běží pod kapotou.
Pokud tedy kód JavaScript/WebAssembly obsahuje škodlivý kód, je těžké jej odhalit, protože se jedná o černou skříňku. Kód WASM je také v binárním formátu připraveném ke spuštění; běží rychleji, takže antivirová řešení obtížně hledají jakýkoli škodlivý kód. Kód může například obsahovat nežádoucí reklamy nebo možnost přesměrovat uživatele na stránky s nežádoucím malwarem.
Navíc přílišné spoléhání WebAssembly na JavaScript při běhu na webu také znamená, že zdědí zranitelnosti JavaScriptu. To je důvod, proč jako vývojář musíte při kódování WASM dodržovat bezpečnostní opatření a opatření JavaScriptu.
#2. Správa paměti
Správa paměti ve WASM je složitá. Za prvé, nepřistupuje přímo k fyzické paměti, protože se spouští ve virtuálním počítači. Proto využívá paměť hostitelského počítače.
Za druhé, čištění paměti ve WASM vyžaduje explicitní proces, zatímco JavaScript se ve srovnání s tím čistí sám.
Navíc, když funkce WASM vrátí výstup do JavaScriptu, vrátí ukazatel na pozici v rámci přiděleného paměťového prostoru WASM. Pokud se tedy deklarovaná paměť zaplní, program WASM může selhat a zkazit tak uživatelskou zkušenost. Aby tomu zabránili, potřebují programátoři k odladění kódu použít dezinfekční prostředky nebo použít toolchainy, jako je emscripten.
#3. Zmatek kódu
Provádění sandboxu WASM činí jeho kód zmateným. Binární formát WASM navíc také není čitelný pro člověka, což ztěžuje zpětné inženýrství, které je nezbytné k identifikaci škodlivého kódu.
Kvůli tomu je obtížné ladit kód WebAssembly kvůli nedostatku formátu čitelného člověkem. To otevírá mnoho bezpečnostních mezer, včetně schopnosti hackerů skrývat kód, který krade citlivé informace nebo provádí vkládání kódu za účelem převzetí hostitelského počítače.
#4. Kontroly integrity
Jakákoli data přenášená přes web jsou zranitelná vůči temperování dat. Hackeři mohou například provést útok typu man-in-the-middle za účelem změny datových hodnot. Je to problém pro WASM, protože nemá žádný správný způsob, jak provádět kontroly integrity.
Může však pracovat s JavaScriptem při provádění kontrol integrity. Dalším způsobem, jak identifikovat potenciální zranitelnosti kódu WASM, je použití integračních nástrojů, jako je Jit. Zajišťuje, že kód neobsahuje špatní herci a nemůže ovlivnit aplikace nebo okolní cloudovou infrastrukturu.
Pochopení bezpečnostního modelu WASM
WebAssembly bere zabezpečení vážně. To je důvod, proč v oficiálních dokumentech WASM zmínili, že jejich bezpečnostní model se stará o dva důležité cíle:
Bezpečnostní model WASM ví, že aplikace WebAssembly se spouštějí nezávisle, aniž by byly schopny uniknout ze svého sandboxového prostředí. Rozhraní API však mohou otevřít cestu k útoku na hostitelské prostředí.
Další technika odolná proti chybám zahrnuje spouštění aplikací deterministicky s omezenými očekáváními. Zajištěním obou podmínek je většina spouštění aplikací považována za bezpečnou.
Pro zlepšení zabezpečení by vývojáři měli pro tok informací prosazovat zásady stejného původu. Pokud vyvíjíte pro jiný než web, musíte použít model zabezpečení POSIX. Pokud si chcete přečíst více o jeho bezpečnostním modelu, podívejte se na: Zabezpečení – WebAssembly.
Systémové rozhraní WebAssembly (WASI)
WASI (The WebAssembly System Interface) také hraje klíčovou roli v newebovém vkládání WASM, protože zlepšuje zabezpečení. Jedná se o modulární systémové rozhraní, které nabízí vzrušující bezpečnostní vlastnosti a přenositelnost.
Ve skutečnosti je nyní součástí WebAssembly System Interface Subgroup Charter, a proto je standardizován. Díky WASI je WASM široce používán v různých okrajových/serverových počítačových oblastech. WASI také zjednodušuje zabezpečení při přechodu na jiné než webové vkládání z prostředí webového vkládání.
Závěrečná slova
Přenositelnost a bezpečnost WebAssembly jsou dvě velká témata. Ve 3. části WebAssembly pro začátečníky jsme se jej snažili zjednodušit a rozčlenit, zejména pro začátečníky.
Dále se můžete podívat na cheat sheety JavaScriptu pro vývojáře a studenty.