Giới thiệu 2007 và bắt buộc 2012, sandboxing là công cụ macOS dùng giới hạn thiệt hại app bị chiếm quyền điều khiển gây ra. Apple nói: "App Sandbox không ngăn chặn tấn công vào app, nhưng giảm thiểu hại tấn công thành công gây ra. macOS app sandboxing bảo vệ người dùng bằng cách giới hạn rắc rối ứng dụng gây ra."
macOS App Sandboxing là gì?
Mỗi app có khu vực chơi riêng: "sandbox" (hộp cát). Nếu app muốn ra khỏi sandbox, phải xin phép hệ điều hành. Tùy cài đặt sandbox, OS từ chối hoặc chấp nhận yêu cầu app đồng thời cung cấp thông tin tối thiểu để hoàn thành yêu cầu.
Hãy tưởng tượng chiếc xe. Tài xế được bảo vệ bởi nhiều tính năng an toàn: phanh ABS, túi khí, vùng nén va chạm, v.v. Năm 2007, khi App Sandboxing ra mắt, không hệ thống máy tính tương tự tồn tại. Như bài thuyết trình giới thiệu hỏi: đâu là dây an toàn cho máy tính? Sandboxing bảo vệ người dùng như xe bảo vệ tài xế: đáp ứng thất bại bằng hệ thống giảm thiệt hại. Dù do hoạt động độc mã hoặc lỗi code, thiệt hại giảm xuống.
Vì sandboxing giới hạn app làm gì, nó hạn chế tự do nhà phát triển. App sandbox chạy chậm hơn và phát triển lâu hơn. Nhờ khả năng khổng lồ Mac, giới hạn sandbox tác động lớn đến tương thích app. Kết quả, power user thường chọn app chạy ngoài sandbox, cho hiệu suất hoặc tính năng.
App Sandboxing hoạt động như thế nào?
Sandboxing dựa trên nguyên tắc least privilege (đặc quyền tối thiểu). Tóm lại, hệ thống làm gì cần làm nhưng không hơn. Bằng cách giới hạn mỗi phần hệ thống chỉ hoàn thành mục tiêu khai báo, giảm cơ hội app bị chiếm quyền. Ví dụ, không lý do app đèn pin truy cập danh bạ.
App ra khỏi sandbox nhưng chỉ với phép OS. Ví dụ hộp thoại "Save and Open" (Lưu và Mở) macOS. App, trong sandbox, không truy cập trực tiếp tài nguyên filesystem ổ cứng. Không thể vẽ panel mở tại "~/Documents". Thay vào đó, app phải yêu cầu Powerbox API với class NSOpenPanel và NSSavePanel truy cập panel.
Ứng dụng không thấy bên trong Powerbox trực tiếp. Chỉ file mở/lưu được truy cập bởi app. Cách này app thực hiện chức năng quan trọng không rủi ro thừa.
Chức năng đó được quyền (entitlement) cho phép (cụ thể com.apple.security.files.user-selected.read-write). Nhà phát triển đặt entitlements khai báo app làm gì. Dựa trên entitlements khai báo, OS cho phép app mức độ chức năng giới hạn thích hợp.
Quy trình tư duy này là cơ sở toàn bộ mô hình và cơ chế app sandboxing: app phải khai báo ý định và xin phép "sếp" cấp OS để làm bất cứ điều gì nguy hiểm.
App Sandbox vs App Non-Sandbox
Từ 1/6/2012, tất cả ứng dụng bên thứ ba phân phối qua Mac App Store phải sandbox. Mặc cho sandbox cho phép nhiều chức năng app, bạn thấy app Mac App Store thường hạn chế hơn bản non-sandbox. Một số developer duy trì 2 phiên bản: app đầy đủ tính năng tải trực tiếp và phiên bản "khuyết" cho Mac App Store. Nhờ độ phức tạp sandbox development, thêm tính năng mới khó hơn – nếu chức năng đó được OS cho phép.
Mặc cho app sandbox hưởng lợi phân phối Mac App Store, bạn đoán được chúng tôi đánh giá giá trị đó thế nào. Sandboxing cũng mở rộng với quyền bảo mật. App không tự bật quyền Accessibility, nhưng có thể yêu cầu người dùng bật.
Để xem app nào sandboxed, mở Activity Monitor, chuột phải tiêu đề cột thêm "Sandbox" vào cửa sổ.
Có app đơn giản không bao giờ tồn tại trong sandbox. Thực tế, nhiều trường hợp giá trị bị sandbox ngăn cản. Sandbox ngăn chặn giao tiếp, quan sát, sửa đổi giữa app, giới hạn đáng kể tương tác app. Shortcut hệ thống như TextExpander hoàn toàn bị cấm, vì cấp độ chức năng đó sandbox không cho phép.
Kết luận
Mặc cho hứa hẹn, macOS app sandboxing thực thi không tốt. Nó giới hạn điểm bán độc đáo Mac app: tốc độ và chức năng nâng cao. App chạy ngoài sandbox hầu như luôn mạnh hơn và nhanh hơn. Từ góc power user, app tôi dùng nhiều nhất non-sandbox. App như TextExpander, SnagIt, TotalFinder quan trọng công việc hàng ngày. Tránh tránh né tương tự phổ biến, hệ thống bảo mật tương lai cần sự linh hoạt và quyền lực cân bằng với minh bạch.