Yeni Başlayanlar İçin WebAssembly Bölüm 3: WASM Taşınabilirliği ve Güvenliği Nasıl Çalışır?

Yayınlanan: 2023-01-05

Bu başlangıç ​​kılavuzunda WebAssembly (WASM) taşınabilirlik ve güvenlik modellerinin nasıl çalıştığını inceleyin.

Her ikisi de gelişmiş WebAssembly (WASM) konularıdır. Yeni Başlayanlar için WebAssembly serimizdeki önceki iki konuyu okumanızı öneririz.

  • Yeni Başlayanlar İçin WebAssembly – 1. Bölüm: WASM'ye Giriş
  • Yeni Başlayanlar İçin WebAssembly – 2. Bölüm: Hedefler, Temel Kavramlar ve Kullanım Örnekleri

Başlayalım.

WebAssembly Taşınabilirliği

WebAssembly'ın taşınabilirliği onu Web için hazır hale getirir. Aslında, WASM'yi taşınabilir bir sanal alan platformu olarak tanımlayabilirsiniz.

Ayrıca, ikili formatı, çeşitli komut seti mimarileri ve işletim sistemlerinde yürütmesine olanak tanır. Bu, WASM'yi yalnızca Web'de değil, Web dışında da kullanabileceğiniz anlamına gelir.

WASM taşınabilirliğini anlamak için aşağıdakileri tartışacağız:

  • Yerel, sınırlı ve deterministik olmayan ortam.
  • Spesifik yürütme ortamı özellikleri
  • WASM web ve web dışı taşınabilirlik

Yerel, Sınırlı ve Belirleyici Olmayan

WASM, verimli bir yürütmeye ve yerel, sınırlı ve belirlenemeyen uygun ortamlara ihtiyaç duyar. Belirsizlik, bir algoritmanın/derleyicinin/ortamın aynı girdi için bile farklı davranışlar veya sonuçlar çıkardığını belirten bilgi işlemdir. Deterministik algoritmanın tam tersidir.

Diğer iki yön, sınırlı ve yerel , deterministik olmayan yürütme ile ilişkilidir. Belirleyici olmayan yürütmenin çalışması için, " sınırlı " olan iyi tanımlanmış kullanım durumlarına ihtiyacınız vardır.

Ayrıca, bu yürütmeler ortamın dışında hiçbir etkisi olmayan “ yerel ”dir. Hakkında daha fazla bilgi edinmek için WebAssembly belgesindeki resmi nondeterminizmi okuyun.

Spesifik Yürütme Ortamı Özellikleri

WebAssembly'ı taşınabilir yapmak için yürütme ortamının aşağıdaki özellikleri sunduğunu varsayar:

  • Bayt bellek ayrıntı düzeyi adreslenebilirlik ve 8 bit bayt.
  • 32-bit ikiye tümleyen işaretli tamsayılar. İsteğe bağlı olarak 64 bit.
  • Hizalanmamış bellek erişimleri veya güvenilir yakalama yoluyla yazılım emülasyonu mümkündür.
  • IEEE 754-2008'de tanımlandığı gibi 32 bit ve 64 bit kayan nokta desteği.
  • Tüm iş parçacıklarını ileri ilerlemeyle yürütme garantisi.
  • 64 bit erişim için wasm64, kilitsiz atomik bellek operatörleri sağlamalıdır.
  • Kilitsiz atomik bellek işleçleri 8, 16 ve 32 bitlik erişimleri içerir.
  • wasm64, 64 bit dizinler veya işaretçiler ile 4 GiB'den daha yüksek doğrusal belleği destekler.
  • Little-endian bayt sıralaması.

Chrome, Edge, Firefox ve WebKit dahil olmak üzere tüm büyük tarayıcılar tüm bu çevresel gereksinimleri destekler.

Ayrıca, WebAssembly hızlı bir şekilde gelişmektedir. WASM Topluluk Grubu ve W3C WebAssembly Çalışma Grubu, standardizasyonu için çalışıyor. Bu, bu gereksinimlerden herhangi birinin gelecekte değişebileceği anlamına gelir.

WASM Web ve Web Dışı Taşınabilirlik

WebAssembly'nin birincil amacı, Web'de ve web dışında taşınabilirlik ve yerel performans sağlamaktır. Bu bölümde, WASM'nin bunu nasıl başardığına bakacağız.

1 numara. Web Gömme

WASM, Web'in güvenlik modeli, web taşınabilirliği ve web API'leri dahil olmak üzere Web ekosistemiyle iyi bütünleşir. Ayrıca, ileride yaratıcı geliştirme için yeterli alana sahip olmalıdır (hedeflerini anlamak için Yeni Başlayanlar için WebAssembly – Bölüm 2'yi okuyun)

Peki, WASM Web ile uyumluluğu nasıl sağlıyor? Geliştiricilerin WebAssembly modülleri derlemesi için JavaScript'i kolayca kullanmasını sağlayan JavaScript API'lerini kullanır. Ayrıca derleyici modüllerini depolama ve alma, derleyici modüllerinden içe aktarmaları yönetme, belleği yönetme vb. ile ilgilenir.

WASM'nin üst düzey Web uyumluluğuna nasıl ulaştığı hakkında daha fazla bilgi edinmek için şunu okuyun: Web Gömme – WebAssembly.

2 numara. Web Dışı Gömme

Daha önce belirtildiği gibi, WASM ayrıca web dışı ortamlarla da çalışır. Bir geliştirici veya işletme olarak, yüksek performanslı uygulamalar oluşturabilir veya uygulamanızın performans ayarlaması gerektiren bölümlerini yazabilirsiniz. Örneğin IoT cihazlarında, veri merkezi sunucularında ve masaüstü/mobil uygulamalarda kullanabilirsiniz.

Web dışı uygulamalar web API'lerini kullanamadığı için WASM'nin dinamik bağlantısına güvenirler. Ayrıca, kullanıcı deneyimi için neyin en iyi olduğunu görmek üzere özelliklerin çoklu varyasyonlarını test eden bir yazılım geliştirme süreci olan özellik testini kullanmanız gerekir. Ayrıca geliştiriciler, web dışı gömmeyi basitleştirmek veya uygulamalarını onsuz geliştirmek için JavaScript VM'lerini kullanabilir.

Daha fazla bilgi edinmek için Web Dışı Gömmeler – WebAssembly bölümünü okuyun.

WebAssembly Güvenliği

WebAssembly, yerel benzeri performans sunan bir ikili biçim çözümüdür. Web'de harika çalışır, ancak web dışı yerleştirmelerde çalışacak şekilde ince ayar yapılabilir. Bu, WASM'yi hizmetler, çözümler ve süreçler genelinde yaygın olarak kullanılabilir hale getirir. Ancak bu, daha fazla güvenlik sorunu anlamına gelir.

WASM Güvenlik Zorlukları ve Riskleri

WebAssembly güvenli ve verimli olarak kabul edilse de, aşağıdakiler de dahil olmak üzere çok sayıda güvenlik riski taşır:

  • WebAssembly sanal alanı
  • Hafıza yönetimi
  • Kod gizleme
  • bütünlük kontrolleri

1 numara. WebAssembly Korumalı Alanı

WASM, tıpkı JavaScript gibi web tarayıcısında çalışır. JavaScript ile aynı Sanal Makineyi (VM) kullanır. Korumalı alan etkili bir şekilde güvenli bir yürütme ortamı sağlar ve arka planda çalışan şeyleri engeller.

Bu nedenle, JavaScript/WebAssembly kodu kötü amaçlı kod içeriyorsa, kara kutu olduğu için tespit edilmesi zordur. Ayrıca, WASM kodu çalıştırılmaya hazır ikili biçimdedir; daha hızlı çalışır ve antivirüs çözümlerinin herhangi bir kötü amaçlı kod aramasını zorlaştırır. Örneğin, kod, istenmeyen reklamlar veya kullanıcıları istenmeyen kötü amaçlı yazılım sitelerine yönlendirme yeteneği içerebilir.

virüs bulaşan-tarayıcı-kripto-madencilik-WASM

Ayrıca, WebAssembly'nin Web'de çalışmak için JavaScript'e aşırı güvenmesi, JavaScript güvenlik açıklarını devraldığı anlamına da gelir. Bu nedenle, bir geliştirici olarak, WASM'yi kodlarken JavaScript'in güvenlik önlemlerine ve önlemlerine uymalısınız.

2 numara. Hafıza yönetimi

WASM'de Bellek Yönetimi zordur. İlk olarak, VM içinde yürütülürken doğrudan fiziksel belleğe erişmez. Bu nedenle ana makinenin belleğini kullanır.

İkinci olarak, WASM'de belleği temizlemek açık bir işlem gerektirirken JavaScript kendi kendini temizler.

Ayrıca, bir WASM işlevi JavaScript'e çıktı döndürdüğünde, tahsis edilen WASM bellek alanı içindeki konuma bir işaretçi döndürür. Bu nedenle, belirtilen bellek dolarsa, WASM programı çökebilir ve kullanıcının deneyimini mahvedebilir. Bunu önlemek için, programcıların kodlarında hata ayıklamak için temizleyiciler kullanmaları veya emscripten gibi araç zincirleri kullanmaları gerekir.

wasm-lineer-bellek

#3. Kod Şaşırtma

WASM'nin sanal alan yürütmesi, kodunun anlaşılmasını zorlaştırır. Ek olarak, WASM ikili formatı da insanlar tarafından okunamaz, bu da kötü amaçlı kodu tanımlamak için gerekli olan tersine mühendisliği zorlaştırır.

Bunlar, insan tarafından okunabilen format olmaması nedeniyle WebAssembly kodunun hata ayıklamasını zorlaştırır. Bu, bilgisayar korsanlarının hassas bilgileri çalan kodu gizleme veya ana makineyi ele geçirmek için kod enjeksiyonu yapma yeteneği de dahil olmak üzere birçok güvenlik boşluğunu açar.

#4. Bütünlük Kontrolleri

Web aracılığıyla aktarılan herhangi bir veri, veri temperlemeye karşı savunmasızdır. Örneğin, bilgisayar korsanları veri değerlerini değiştirmek için ortadaki adam saldırısı gerçekleştirebilir. Bütünlük kontrolleri yapmak için uygun bir yolu olmadığı düşünülürse, bu WASM için bir sorundur.

Ancak, bütünlük kontrolleri gerçekleştirmek için JavaScript ile çalışabilir. Potansiyel WASM kodu güvenlik açıklarını belirlemenin başka bir yolu da Jit gibi entegrasyon araçlarını kullanmaktır. Kodun kötü aktörlerden arınmış olmasını ve uygulamaları veya çevredeki bulut altyapısını etkilememesini sağlar.

ortadaki adam saldırısı

WASM Güvenlik Modelini Anlamak

WebAssembly güvenliği ciddiye alır. Bu nedenle, resmi WASM belgelerinde güvenlik modellerinin iki önemli hedefi yerine getirdiğinden bahsetmişlerdir:

  1. Hatalı veya kötü amaçlı modüllerin kullanıcıları etkilemediğinden emin olun
  2. Geliştiricilerin güvenlik risklerini azaltabilmelerini ve güvenli uygulamalar oluşturabilmelerini ve aynı zamanda 1. noktanın her zaman korunduğundan emin olun.

WASM güvenlik modeli, WebAssembly uygulamalarının kendi sanal alan ortamından kaçamazken bağımsız olarak yürütüldüğünü bilir. Ancak API'ler, ana bilgisayar ortamına saldırmanın bir yolunu açabilir.

Başka bir hataya dayanıklı teknik, uygulamaları sınırlı beklentilerle kararlı bir şekilde yürütmeyi içerir. Her iki koşul da sağlanarak çoğu uygulama yürütme işlemi güvenli kabul edilir.

Güvenliği artırmak için geliştiriciler, bilgi akışı için aynı kaynak ilkesini uygulamalıdır. Web dışı için geliştirme yapıyorsanız, POSIX güvenlik modelini kullanmalısınız. Güvenlik modeli hakkında daha fazla bilgi edinmek isterseniz şuraya bakın: Güvenlik – WebAssembly.

WebAssembly Sistem Arayüzü (WASI)

WASI (WebAssembly Sistem Arayüzü), güvenliği iyileştirdiği için WASM web dışı gömmede de çok önemli bir rol oynar. Heyecan verici güvenlik özellikleri ve taşınabilirlik sunan modüler bir sistem arabirimidir.

Aslında, artık WebAssembly System Interface Subgroup Charter'ın bir parçasıdır ve dolayısıyla standartlaştırılmıştır. WASI nedeniyle, WASM farklı uç/sunucu bilgi işlem alanlarında yaygın olarak benimsenmiştir. Ayrıca WASI, bir web gömme ortamından web olmayan bir gömmeye geçerken güvenliği basitleştirir.

Son sözler

WebAssembly'ın taşınabilirliği ve güvenliği iki büyük konudur. Yeni başlayanlar için WebAssembly'ın 3. bölümünde, özellikle yeni başlayanlar için basitleştirmeye ve parçalara ayırmaya çalıştık.

Ardından, geliştiriciler ve öğrenciler için JavaScript kopya sayfalarına göz atabilirsiniz.