Cách thức hoạt động của tính di động và bảo mật của WASM

Kiểm tra cách thức hoạt động của các mô hình bảo mật và tính di động của WebAssembly (WASM) trong hướng dẫn dành cho người mới bắt đầu này.
Cả hai đều là chủ đề WebAssugging (WASM) nâng cao. Chúng tôi khuyên bạn nên đọc hai chủ đề trước trong loạt bài về WebAssugging dành cho người mới bắt đầu của chúng tôi.
Bắt đầu nào.
Tính di động của WebAssembly
Tính di động của WebAssembly làm cho nó sẵn sàng cho Web. Trên thực tế, bạn có thể định nghĩa WASM là một nền tảng hộp cát di động.
Hơn nữa, định dạng nhị phân của nó cho phép nó thực thi trên các kiến trúc tập lệnh và hệ điều hành khác nhau. Điều này có nghĩa là bạn có thể sử dụng WASM không chỉ trên Web mà còn ngoài Web.
Để hiểu tính di động của WASM, chúng ta sẽ thảo luận những điều sau:
- Môi trường địa phương, hạn chế và không xác định.
- Đặc điểm môi trường thực thi cụ thể
- Tính di động của web và phi web WASM
Địa phương, hạn chế và không xác định
WASM cần thực thi hiệu quả và môi trường phù hợp mang tính cục bộ, hạn chế và không xác định. Tính không xác định là tính toán xác định rằng một thuật toán/trình biên dịch/môi trường đưa ra các hành vi hoặc kết quả khác nhau ngay cả đối với cùng một đầu vào. Nó ngược lại với một thuật toán xác định.
Hai khía cạnh khác, giới hạn và cục bộ, có liên quan đến việc thực thi không xác định. Để thực hiện công việc thực thi không xác định, bạn cần xác định rõ các trường hợp sử dụng “có giới hạn”.
Ngoài ra, những thực thi này là “cục bộ” không có tác dụng bên ngoài môi trường. Đọc chủ nghĩa không xác định chính thức của họ trong tài liệu WebAssugging để tìm hiểu thêm về nó.
Đặc điểm môi trường thực thi cụ thể
Để làm cho WebAssugging di động, nó giả định rằng môi trường thực thi cung cấp các đặc điểm sau:
- Khả năng định địa chỉ độ chi tiết của bộ nhớ byte và byte 8 bit.
- Số nguyên có dấu bù hai 32 bit. Tùy chọn 64 bit.
- Có thể mô phỏng phần mềm thông qua truy cập bộ nhớ chưa được phân bổ hoặc bẫy đáng tin cậy.
- Hỗ trợ các dấu phẩy động 32-bit và 64-bit như được định nghĩa trong IEEE 754-2008.
- Đảm bảo thực hiện tất cả các luồng với tiến độ chuyển tiếp.
- Để truy cập 64 bit, wasm64 sẽ cung cấp các toán tử bộ nhớ nguyên tử không khóa.
- Các toán tử bộ nhớ nguyên tử không khóa bao gồm các truy cập 8, 16 và 32 bit.
- wasm64 hỗ trợ bộ nhớ tuyến tính cao hơn 4 GiB với chỉ mục hoặc con trỏ 64 bit.
- Thứ tự byte cuối nhỏ.
Tất cả các trình duyệt chính, bao gồm Chrome, Edge, Firefox và WebKit đều hỗ trợ tất cả các yêu cầu về môi trường này.
Hơn nữa, WebAssugging đang phát triển với tốc độ chóng mặt. Nhóm cộng đồng WASM và Nhóm làm việc về WebAssugging của W3C đang làm việc để hướng tới tiêu chuẩn hóa. Điều đó có nghĩa là bất kỳ yêu cầu nào trong số này có thể thay đổi trong tương lai.
WASM Web và Non-Web Portability
Mục đích chính của WebAssugging là cung cấp tính di động và hiệu suất gốc trên Web và không phải web. Trong phần này, chúng ta sẽ xem cách WASM đạt được điều đó.
#1. Nhúng web
WASM tích hợp tốt với hệ sinh thái Web, bao gồm mô hình bảo mật của Web, tính di động của web và API web. Hơn nữa, nó phải có đủ chỗ để phát triển sáng tạo trong tương lai (đọc WebAssembly cho người mới bắt đầu – Phần 2 để hiểu mục tiêu của nó)
Vì vậy, làm thế nào để WASM đạt được khả năng tương thích với Web? Nó sử dụng các API JavaScript, cho phép các nhà phát triển sử dụng JavaScript để biên dịch các mô-đun WebAssembly một cách dễ dàng. Nó cũng đảm nhận việc lưu trữ và truy xuất các mô-đun trình biên dịch, quản lý việc nhập từ các mô-đun trình biên dịch, quản lý bộ nhớ, v.v.
Để tìm hiểu thêm về cách WASM đạt được khả năng tương thích Web cấp cao, hãy đọc phần này: Nhúng Web – WebAssembly.
#2. Không nhúng web
Như đã đề cập trước đó, WASM cũng hoạt động với các môi trường không phải web. Là nhà phát triển hoặc doanh nghiệp, bạn có thể tạo ứng dụng hiệu suất cao hoặc viết các phần ứng dụng cần điều chỉnh hiệu suất. Ví dụ: bạn có thể sử dụng nó trên các thiết bị IoT, máy chủ trung tâm dữ liệu và ứng dụng dành cho máy tính để bàn/thiết bị di động.
Vì các ứng dụng không phải web không thể sử dụng API web nên chúng dựa vào liên kết động của WASM. Bạn cũng cần sử dụng thử nghiệm tính năng, một quy trình phát triển phần mềm kiểm tra nhiều biến thể của tính năng để xem điều gì tốt nhất cho trải nghiệm người dùng. Hơn nữa, các nhà phát triển có thể sử dụng máy ảo JavaScript để đơn giản hóa việc nhúng không phải web hoặc phát triển ứng dụng của họ mà không cần nó.
Để tìm hiểu thêm, hãy đọc Non-Web Embeddings – WebAssembly.
Bảo mật WebAssembly
WebAssugging là một giải pháp định dạng nhị phân cung cấp hiệu suất giống như bản gốc. Nó hoạt động tốt trên Web nhưng cũng có thể được tinh chỉnh để hoạt động trên các nhúng không phải web. Điều này làm cho WASM được phổ biến rộng rãi trên các dịch vụ, giải pháp và quy trình. Tuy nhiên, điều này đồng nghĩa với nhiều thách thức về bảo mật hơn.
Những thách thức và rủi ro bảo mật của WASM
Mặc dù WebAssugging được coi là an toàn và hiệu quả, nhưng nó đi kèm với nhiều rủi ro bảo mật, bao gồm:
- Webhộp cát lắp ráp
- Quản lý bộ nhớ
- xáo trộn mã
- kiểm tra tính toàn vẹn
#1. WebAssembly Sandbox
WASM thực thi trong trình duyệt web, giống như JavaScript. Nó sử dụng cùng một Máy ảo (VM) như JavaScript. Hộp cát cung cấp hiệu quả một môi trường thực thi an toàn và cản trở những gì đang chạy ngầm.
Vì vậy, nếu mã JavaScript/WebAssembly có chứa mã độc thì rất khó bị phát hiện vì nó là một hộp đen. Ngoài ra, mã WASM ở định dạng nhị phân sẵn sàng chạy; nó chạy nhanh hơn, khiến các giải pháp chống vi-rút khó tìm kiếm bất kỳ mã độc nào. Ví dụ: mã có thể chứa các quảng cáo không mong muốn hoặc khả năng chuyển hướng người dùng đến các trang web chứa phần mềm độc hại không mong muốn.
Ngoài ra, việc WebAssembly phụ thuộc quá nhiều vào JavaScript để chạy trên Web cũng có nghĩa là nó thừa hưởng các lỗ hổng JavaScript. Đó là lý do tại sao, với tư cách là nhà phát triển, bạn phải tuân theo các biện pháp và biện pháp phòng ngừa an toàn của JavaScript khi mã hóa WASM.
#2. Quản lý bộ nhớ
Quản lý bộ nhớ trong WASM rất phức tạp. Thứ nhất, nó không truy cập trực tiếp vào bộ nhớ vật lý khi nó thực thi trong VM. Đó là lý do tại sao nó sử dụng bộ nhớ của máy chủ.
Thứ hai, việc dọn dẹp bộ nhớ trong WASM yêu cầu một quy trình rõ ràng, trong khi đó, để so sánh, JavaScript sẽ tự dọn dẹp.
Ngoài ra, khi một hàm WASM trả về đầu ra cho JavaScript, nó sẽ trả về một con trỏ tới vị trí trong không gian bộ nhớ WASM được phân bổ. Vì vậy, nếu bộ nhớ đã khai báo đầy, chương trình WASM có thể gặp sự cố, làm hỏng trải nghiệm của người dùng. Để ngăn chặn điều đó, các lập trình viên cần sử dụng các trình khử trùng để gỡ lỗi mã của họ hoặc sử dụng các chuỗi công cụ như emscripten.
#3. Làm xáo trộn mã
Việc thực thi hộp cát của WASM làm cho mã của nó bị xáo trộn. Ngoài ra, định dạng nhị phân WASM cũng không thể đọc được bằng con người, khiến cho kỹ thuật đảo ngược khó có thể xác định được mã độc.
Những điều này làm cho mã WebAssugging khó gỡ lỗi do thiếu định dạng mà con người có thể đọc được. Điều này mở ra nhiều lỗ hổng bảo mật, bao gồm khả năng ẩn mã của tin tặc để đánh cắp thông tin nhạy cảm hoặc thực hiện tiêm mã để chiếm quyền kiểm soát máy chủ.
#4. Kiểm tra tính toàn vẹn
Bất kỳ dữ liệu nào được truyền qua Web đều dễ bị kiểm soát dữ liệu. Ví dụ: tin tặc có thể thực hiện tấn công trung gian để thay đổi giá trị dữ liệu. Đây là một vấn đề đối với WASM, vì nó không có cách thích hợp để thực hiện kiểm tra tính toàn vẹn.
Tuy nhiên, nó có thể hoạt động với JavaScript để thực hiện kiểm tra tính toàn vẹn. Một cách khác để xác định các lỗ hổng mã WASM tiềm ẩn là sử dụng các công cụ tích hợp như Jit. Nó đảm bảo mã không có các tác nhân xấu và không thể ảnh hưởng đến các ứng dụng hoặc cơ sở hạ tầng đám mây xung quanh.
Hiểu mô hình bảo mật WASM
WebAssugging rất coi trọng vấn đề bảo mật. Đó là lý do tại sao, trên các tài liệu chính thức của WASM, họ đã đề cập rằng mô hình bảo mật của họ đảm nhận hai mục tiêu quan trọng:
Mô hình bảo mật WASM biết các ứng dụng WebAssugging thực thi độc lập trong khi không thể thoát khỏi môi trường hộp cát của nó. Tuy nhiên, API có thể mở ra một cách để tấn công môi trường máy chủ.
Một kỹ thuật chịu lỗi khác bao gồm thực thi các ứng dụng một cách dứt khoát với những kỳ vọng hạn chế. Bằng cách đảm bảo cả hai điều kiện, hầu hết các lần thực thi ứng dụng đều được coi là an toàn.
Để cải thiện tính bảo mật, các nhà phát triển nên thực thi chính sách cùng nguồn gốc cho luồng thông tin. Nếu bạn đang phát triển không phải web, bạn phải sử dụng mô hình bảo mật POSIX. Nếu bạn muốn đọc thêm về mô hình bảo mật của nó, hãy xem: Bảo mật – WebAssugging.
Giao diện hệ thống WebAssembly (WASI)
WASI (Giao diện hệ thống WebAssugging) cũng đóng một vai trò quan trọng trong việc nhúng không phải web của WASM vì nó cải thiện tính bảo mật. Đó là một giao diện hệ thống mô-đun cung cấp các đặc tính bảo mật thú vị và tính di động.
Trên thực tế, nó hiện là một phần của Điều lệ nhóm con giao diện hệ thống WebAssembly và do đó được tiêu chuẩn hóa. Do WASI, WASM được áp dụng rộng rãi trong các lĩnh vực điện toán biên/máy chủ khác nhau. Ngoài ra, WASI đơn giản hóa bảo mật khi chuyển sang nhúng không phải web từ môi trường nhúng web.
Từ cuối cùng
Tính di động và bảo mật của WebAssugging là hai chủ đề lớn. Trong phần 3 của WebAssugging cho người mới bắt đầu, chúng tôi đã cố gắng đơn giản hóa và chia nhỏ nó, đặc biệt là cho người mới bắt đầu.
Tiếp theo, bạn có thể xem trang lừa đảo JavaScript dành cho nhà phát triển và người học.