Як працює портативність і безпека WASM

Перевірте, як працюють моделі переносимості та безпеки WebAssembly (WASM) у цьому посібнику для початківців.

Обидва є розширеними темами WebAssembly (WASM). Ми рекомендуємо вам прочитати дві попередні теми в нашій серії WebAssembly для початківців.

Давайте розпочнемо.

Портативність WebAssembly

Портативність WebAssembly робить його готовим до Інтернету. Фактично, ви можете визначити WASM як портативну платформу ізольованого програмного середовища.

Крім того, його двійковий формат дозволяє виконувати його в різних архітектурах набору інструкцій і операційних системах. Це означає, що ви можете використовувати WASM не лише в Інтернеті, але й поза ним.

Щоб зрозуміти переносимість WASM, ми обговоримо наступне:

  • Локальне, обмежене та недетерміноване середовище.
  • Специфічні характеристики середовища виконання
  • Портативність WASM в Інтернеті та не в Інтернеті

Локальний, обмежений і недетермінований

WASM потребує ефективного виконання та належного середовища, яке є локальним, обмеженим і недетермінованим. Недетермінізм — це обчислення, які вказують, що алгоритм/компілятор/середовище виводить різні поведінки або результати навіть для того самого вхідного. Це протилежність детермінованому алгоритму.

Два інші аспекти, обмежений і локальний, пов’язані з недетермінованим виконанням. Щоб недетерміноване виконання працювало, вам потрібні чітко визначені варіанти використання, які є «обмеженими».

Крім того, ці страти є «локальними», не впливаючи на зовнішнє середовище. Прочитайте їхній офіційний недетермінізм у документації WebAssembly, щоб дізнатися більше про це.

Специфічні характеристики середовища виконання

Щоб зробити WebAssembly портативним, передбачається, що середовище виконання пропонує такі характеристики:

  • Адресність деталізації байтової пам’яті та 8-бітні байти.
  • 32-розрядні цілі числа зі знаком із доповненням до двох. Додатково 64 біти.
  • Програмна емуляція можлива через невирівняний доступ до пам’яті або надійне захоплення.
  • Підтримка 32-бітних і 64-бітних чисел з плаваючою крапкою, як визначено в IEEE 754-2008.
  • Гарантія виконання всіх потоків із просуванням вперед.
  • Для 64-розрядного доступу wasm64 має надавати атомарні оператори пам’яті без блокування.
  • Оператори атомарної пам’яті без блокування включають 8, 16 і 32-розрядний доступ.
  • wasm64 підтримує лінійну пам’ять більше 4 ГБ з 64-бітними індексами або покажчиками.
  • Упорядкування байтів у порядку байтів.

Усі основні браузери, включаючи Chrome, Edge, Firefox і WebKit, підтримують усі ці екологічні вимоги.

  Як запланувати повідомлення на Slack

Крім того, WebAssembly розвивається швидкими темпами. WASM Community Group і W3C WebAssembly Working Group працюють над його стандартизацією. Це означає, що будь-яка з цих вимог може змінитися в майбутньому.

Портативність WASM через Інтернет і поза Інтернетом

Основною метою WebAssembly є забезпечення мобільності та нативної продуктивності в Інтернеті та поза Інтернетом. У цьому розділі ми розглянемо, як WASM досягає цього.

#1. Веб-вбудовування

WASM добре інтегрується з веб-екосистемою, включаючи веб-модель безпеки, веб-переносимість і веб-інтерфейси API. Крім того, він повинен мати достатньо місця для творчого розвитку (прочитайте WebAssembly для початківців – частина 2, щоб зрозуміти його цілі)

Отже, як WASM досягає сумісності з Інтернетом? Він використовує API JavaScript, що дозволяє розробникам легко використовувати JavaScript для компіляції модулів WebAssembly. Він також піклується про зберігання та отримання модулів компілятора, керування імпортом із модулів компілятора, керування пам’яттю тощо.

Щоб дізнатися більше про те, як WASM досягає веб-сумісності високого рівня, прочитайте це: Веб-вбудовування – WebAssembly.

#2. Невеб-вбудовування

Як згадувалося раніше, WASM також працює з невеб-середовищами. Як розробник або компанія, ви можете створювати високопродуктивні програми або писати розділи своєї програми, які потребують налаштування продуктивності. Наприклад, ви можете використовувати його на пристроях Інтернету речей, серверах центрів обробки даних і настільних/мобільних програмах.

Оскільки невеб-програми не можуть використовувати веб-API, вони покладаються на динамічне зв’язування WASM. Вам також потрібно використовувати тестування функцій, процес розробки програмного забезпечення, який тестує численні варіанти функцій, щоб визначити, що найкраще підходить для взаємодії з користувачем. Крім того, розробники можуть використовувати віртуальні машини JavaScript, щоб спростити невеб-вбудовування або розробляти свої програми без нього.

Щоб дізнатися більше, прочитайте Невеб-вбудовування – WebAssembly.

Безпека WebAssembly

WebAssembly — це рішення у двійковому форматі, яке забезпечує продуктивність, схожу на нативну. Він чудово працює в Інтернеті, але також може бути налаштований для роботи з невеб-вставленнями. Це робить WASM широко доступним для різних служб, рішень і процесів. Однак це означає додаткові виклики безпеці.

Проблеми та ризики безпеки WASM

Незважаючи на те, що WebAssembly вважається безпечним і ефективним, він пов’язаний із кількома ризиками безпеки, зокрема:

  • Пісочниця WebAssembly
  • Управління пам’яттю
  • Обфускація коду
  • Перевірки цілісності
  6 сервісів, які допоможуть вам виправити зламані сайти Joomla

#1. Пісочниця WebAssembly

WASM виконується у веб-браузері, як і JavaScript. Він використовує ту саму віртуальну машину (VM), що й JavaScript. Пісочниця ефективно забезпечує безпечне середовище виконання та перешкоджає тому, що працює під капотом.

Отже, якщо код JavaScript/WebAssembly містить шкідливий код, його важко виявити, оскільки це чорний ящик. Крім того, код WASM має готовий до виконання двійковий формат; він працює швидше, тому антивірусним рішенням важко шукати шкідливий код. Наприклад, код може містити небажану рекламу або можливість перенаправляти користувачів на небажані сайти зловмисного програмного забезпечення.

Крім того, надмірна залежність WebAssembly від JavaScript для роботи в Інтернеті також означає, що вона успадковує вразливості JavaScript. Ось чому, як розробник, ви повинні дотримуватися заходів безпеки JavaScript під час кодування WASM.

#2. Управління пам’яттю

Керування пам’яттю в WASM є складним. По-перше, він не має прямого доступу до фізичної пам’яті, оскільки виконується у віртуальній машині. Ось чому він використовує пам’ять головної машини.

По-друге, очищення пам’яті в WASM вимагає явного процесу, тоді як для порівняння JavaScript очищає сам себе.

Крім того, коли функція WASM повертає вихідні дані в JavaScript, вона повертає покажчик на позицію в межах виділеного простору пам’яті WASM. Таким чином, якщо заявлена ​​пам’ять переповнюється, програма WASM може вийти з ладу, зіпсувавши роботу користувача. Щоб запобігти цьому, програмісти повинні використовувати дезінфікуючі засоби для налагодження свого коду або використовувати інструментальні ланцюжки, такі як emscripten.

#3. Обфускація коду

Виконання пісочниці WASM робить його код обфускованим. Крім того, двійковий формат WASM також не читається людиною, що ускладнює зворотне проектування, необхідне для виявлення шкідливого коду.

Це ускладнює налагодження коду WebAssembly через відсутність зручного для читання формату. Це відкриває багато лазівок у безпеці, зокрема здатність хакерів приховувати код, який викрадає конфіденційну інформацію або впроваджує код, щоб захопити хост-машину.

#4. Перевірки цілісності

Будь-які дані, що передаються через Інтернет, є вразливими до обробки даних. Наприклад, хакери можуть здійснити атаку “людина посередині”, щоб змінити значення даних. Це проблема для WASM, оскільки він не має належного способу перевірки цілісності.

  Шукаєте telnet на RHEL 8? Спробуйте nc

Однак він може працювати з JavaScript для виконання перевірок цілісності. Іншим способом виявлення потенційних уразливостей коду WASM є використання інструментів інтеграції, таких як Jit. Це гарантує, що код вільний від зловмисників і не може впливати на програми чи навколишню хмарну інфраструктуру.

Розуміння моделі безпеки WASM

WebAssemb серйозно ставиться до безпеки. Ось чому в офіційних документах WASM вони згадали, що їхня модель безпеки піклується про дві важливі цілі:

  • Переконайтеся, що жодні помилкові або шкідливі модулі не впливають на користувачів
  • Переконайтеся, що розробники можуть пом’якшити будь-які ризики безпеці та створювати безпечні програми, гарантуючи, що пункт 1 завжди дотримується.
  • Модель безпеки WASM знає, що програми WebAssembly виконуються незалежно, не маючи можливості вийти з середовища ізольованого програмного середовища. Однак API можуть відкрити шлях для атаки на хост-середовище.

    Інша відмовостійка техніка включає детерміноване виконання програм з обмеженими очікуваннями. Якщо забезпечити обидві умови, виконання більшості додатків вважається безпечним.

    Щоб підвищити безпеку, розробники повинні застосувати політику однакового походження для потоку інформації. Якщо ви розробляєте не для Інтернету, ви повинні використовувати модель безпеки POSIX. Якщо ви хочете прочитати більше про його модель безпеки, перегляньте: Безпека – WebAssembly.

    Системний інтерфейс WebAssembly (WASI)

    WASI (системний інтерфейс WebAssembly) також відіграє вирішальну роль у невеб-вбудовуванні WASM, оскільки покращує безпеку. Це модульний системний інтерфейс, який пропонує вражаючі характеристики безпеки та портативність.

    Фактично, тепер він є частиною Статуту підгрупи інтерфейсу системи WebAssembly і, отже, стандартизований. Завдяки WASI WASM широко застосовується в різних сферах периферійних/серверних обчислень. Крім того, WASI спрощує безпеку під час переходу до невеб-вбудовування з середовища веб-вбудовування.

    Заключні слова

    Портативність і безпека WebAssembly — дві великі теми. У частині 3 WebAssembly для початківців ми спробували спростити її та розбити, особливо для початківців.

    Далі ви можете переглянути шпаргалки JavaScript для розробників і учнів.