Các hộp cát được tạo ra vì chơi với cát rất thú vị, nhưng chúng ta không muốn nó theo chân từ ngoài sân vào trong nhà. Nếu bạn đã từng ở trên bãi biển, bạn sẽ biết cát nhiều như thế nào và khó có thể loại bỏ nó ra sao. Rồi sau đó, cát có mặt ở hành lang, trong phòng giặt và cả phòng tắm của bạn nữa.
Trong thế giới máy tính, nhiều vấn đề tương tự tồn tại với các chương trình. Các chương trình đang chạy trên máy tính của bạn chia sẻ tài nguyên của máy tính đó. Tất cả các chương trình của bạn sử dụng cùng một phương tiện lưu trữ tĩnh như ổ đĩa, cùng một bộ nhớ và một bộ xử lý trung tâm (CPU). Khi các tài nguyên phổ biến như thế này được chia sẻ, bạn có thể gặp phải vấn đề. Một chương trình chiếm toàn bộ máy tính của bạn, vì nó ghi dữ liệu vào tất cả các phần của ổ đĩa, truy cập bộ nhớ từ tất cả các khu vực và gửi yêu cầu tới CPU, cùng với mọi chương trình khác. Chúng ta giữ cát trong hộp cũng giống như lý do ta sandbox các chương trình máy tính: Để đặt các chương trình trong phạm vi quản lý.
Thiết kế máy tính cơ bản tạo điều kiện cho việc chia sẻ tài nguyên này. Bằng cách cho phép các chương trình chia sẻ tài nguyên, máy tính dường như có nhiều nhiệm vụ và đang làm rất nhiều việc cùng một lúc. Đây chính xác là loại hành vi mà chúng ta thường yêu cầu từ máy tính, điện thoại, máy tính bảng và đồng hồ thông minh trong nhiều năm qua. Nhưng những khả năng này có thể gây ra các tác dụng phụ không mong muốn. Các chương trình có thể hoạt động kém và bị lỗi hoặc khiến các chương trình khác bị lỗi. Chúng có thể dựa vào một số ứng dụng khác trên máy tính, những ứng dụng gây ra xung đột với nhu cầu của các chương trình khác, và ngày càng nhiều chương trình độc hại cố gắng truy cập các khu vực ngoài giới hạn để làm những điều xấu.
Sandbox là gì và cách sandbox một chương trình như thế nào?
Sandbox trình duyệt
Mạng toàn cầu (www) đã ra đời vào năm 1989, và trình duyệt thực sự phổ biến đầu tiên, Mosaic, đã đưa Internet vào nền văn hóa đại chúng. Web được thiết kế để chia sẻ tài liệu, chứ chưa bao giờ được thiết kế để hỗ trợ những gì chúng ta hiện có bây giờ: Một hệ thống phân phối dựa trên Internet, nơi phần mềm chạy trên đám mây. Mâu thuẫn giữa thiết kế và việc sử dụng thực tế đã tạo ra vô số cơ hội cho những kẻ xấu, sử dụng các trình duyệt web như một cơ chế phân phối phần mềm độc hại.
Ranh giới giữa điểm kết thúc của máy tính để bàn vật lý và điểm bắt đầu của Internet không rõ ràng. Hầu hết các chương trình chúng ta chạy ngày nay là một phần hoặc hoàn toàn phụ thuộc vào kết nối Internet để trực tiếp hoạt động. Với kết nối Internet liên tục hoạt động trong chế độ nền, rất rõ ràng là các chương trình chúng ta sử dụng để truy cập Internet trở thành một mục tiêu tấn công rất hấp dẫn. Mục tiêu đầu tiên là các trình duyệt web nổi tiếng. Thực tế, vào năm 2016, công ty bảo mật Internet Sucuri đã loại bỏ hơn nửa tỷ yêu cầu độc hại nhằm vào các trang web và trình duyệt trong khoảng thời gian 30 ngày.
Bởi vì các trình duyệt rất phong phú và luôn được bật nên chúng đáng nhận được sự chú ý đặc biệt. Nhiều trình duyệt ngày nay được thiết kế để tự động chạy trong sandbox của riêng chúng mà không cần thiết lập từ người dùng.
- Google Chrome đã được sandbox ngay từ đầu.
- Mozilla Firefox mất nhiều thời gian hơn để triển khai sandbox, nhưng hiện nay nó gần như đã hoàn thiện 100%.
- Internet Explorer đã giới thiệu một số mức sandbox trong năm 2006 với IE 7 và Microsoft Edge sandbox tất cả các quy trình hiện nay.
- Trình duyệt Safari của Apple cũng chạy các trang web trong các quy trình riêng biệt.
Nếu bạn đang chạy một trình duyệt lạ hoặc muốn tách biệt hơn nữa giữa hệ điều hành và trình duyệt của mình, bạn có thể xem xét các tùy chọn sandbox thủ công được liệt kê trong phần tiếp theo.
Sandbox thủ công
Trong khi các trình duyệt là một điểm yếu rất quan trọng trong bất kỳ hệ điều hành nào, thì không có nghĩa chúng là điểm yếu duy nhất. Bất kỳ ứng dụng nào cũng có khả năng nhiễm độc và do đó bất kỳ máy tính nào cũng có thể được tăng cường bảo mật bằng cách sử dụng sandbox. Sandbox thủ công là quá trình định cấu hình hệ thống của bạn, để sandbox một ứng dụng có thể truy cập đầy đủ vào hệ thống của bạn.
Máy ảo
Ảo hóa máy tính để bàn đã đi một chặng đường dài trong những năm gần đây và bây giờ khá dễ dàng để cài đặt và sử dụng máy ảo. Một máy ảo đúng như tên gọi của nó, là một “máy” không thực. Nó thực sự chỉ là một phần mềm. Việc sử dụng phổ biến nhất của một máy ảo là cài đặt một bản sao của hệ điều hành vào nó và chạy máy ảo đó trên máy tính của bạn, như thể nó là một máy vật lý. Kiểu hoạt động này cung cấp rất nhiều điều hữu ích cho vấn đề bảo mật, vì các chương trình chỉ có thể truy cập tài nguyên bên trong máy ảo. Nếu một phần mềm độc hại lây nhiễm vào hệ thống của bạn, nó sẽ chỉ có thể lây nhiễm vào máy ảo. Điều này hạn chế các tác động xấu mà nó có thể gây ra. Thậm chí, bạn có thể chạy các hệ điều hành thay thế trong một máy ảo như chạy bản phân phối Linux trong máy ảo trên PC Windows.
Có nhiều ứng dụng ảo hóa, mỗi ứng dụng nhắm vào một loại mục đích sử dụng cụ thể. Các ứng dụng ảo hóa desktop phổ biến và tốt nhất mà người dùng thông thường có thể xử lý là VirtualBox và Parallels.
Ảo hóa bao gồm hai phần chính. Thuật ngữ “host” đề cập đến máy tính vật lý thực tế chạy phần mềm ảo hóa. Thuật ngữ “guest” dùng để chỉ hệ điều hành đang chạy trong ứng dụng ảo hóa.
VirtualBox
VirtualBox được sở hữu bởi Oracle và có client cho mọi hệ điều hành chính. Sau khi cài đặt VirtualBox, bạn có thể tạo một máy ảo bằng cách sử dụng nút New. Bạn sẽ cần cung cấp phương tiện cài đặt hệ điều hành vì VirtualBox không đi kèm với điều đó. Các bản phân phối Linux dễ dàng tìm thấy trên Internet, ví dụ như trang distrowatch.com và các hệ điều hành độc quyền như Windows, bạn sẽ cần phải có đĩa CD để tiện cài đặt.
Parallels
Parallels rất giống với VirtualBox, nhưng nó chỉ chạy trên macOS và được xây dựng đặc biệt để chạy Windows trong máy ảo. Nếu bạn đang tìm kiếm sự kết hợp đó (chạy Windows trên máy tính để bàn macOS của bạn) thì Parallels có thể là giải pháp tốt nhất cho bạn. Parallels không miễn phí, tuy nhiên có một gói dùng thử miễn phí trong 30 ngày.
Sandboxie
Phương châm của Sandboxie là “Trust No Program” (Không tin bất cứ chương trình nào cả). Nó chỉ chạy trên Windows và yêu cầu các chương trình chạy riêng biệt từ hệ điều hành cơ bản. Bảng điều khiển Sandboxie được sử dụng để chỉ định các chương trình cụ thể chạy trong sandbox. Các chương trình phổ biến có nguy cơ bị đe dọa lớn nhất, như trình duyệt và các chương trình email, được liệt kê như tùy chọn cấu hình theo mặc định và các ứng dụng khác có thể được thêm khi cần thiết.
Các dữ liệu bên trong Sandboxie bị phá hủy khi một sandbox được đóng lại, nhưng có thể cấu hình Sandboxie để giữ cho dữ liệu quan trọng không bị thay đổi. Thư mục chứa email và dấu trang của trình duyệt web là ví dụ về việc dữ liệu có thể tồn tại khi xóa sandbox.
Sandboxie được thiết kế cho người dùng gia đình và giá khá rẻ.
Qubes OS
QubesOS (phát âm là “Cubes”) xứng đáng là một ứng cử viên đặc biệt cho ảo hóa. Qubes sử dụng Xen hypervisor thay vì VirtualBox. Nó khởi chạy một số hệ điều hành khách và mỗi hệ điều hành riêng biệt với nhau. Điều này cho phép sandbox các ứng dụng riêng lẻ, mỗi ứng dụng đặt trong máy ảo của riêng nó, thay vì phải sandbox toàn bộ hệ điều hành khách. Sự khác biệt đặc biệt của QubesOS đó là, Xen đóng vai trò hệ điều hành riêng của chính nó, không có hệ điều hành “host” nào chạy đằng sau cả.
Dành thời gian để sandbox hệ thống của bạn có thể tạo một bước phòng thủ vững chắc chống lại nhiều loại phần mềm độc hại và giúp đỡ phần nào cho việc phát triển phần mềm. Không thể có một môi trường sử dụng Internet hoàn toàn lành mạnh, nhưng việc cô lập các ứng dụng dễ bị tấn công của bạn có thể hữu ích.
Các vấn đề có thể xảy ra với các chương trình không có sandbox
Các chương trình xung đột lẫn nhau
Trong những ngày đầu tiên, CPU đã phân phối tài nguyên trên cơ sở ai đến trước được phục vụ trước. Điều này ổn khi máy tính của chúng ta không phải làm nhiều việc, nhưng ngày nay, các phương thức phân bổ tài nguyên phức tạp hơn được sử dụng nhiều. CPU quyết liệt bảo vệ ranh giới của các tài nguyên mà chúng đã phân bổ và, nếu một chương trình cố gắng truy cập vào tài nguyên chưa được chỉ định cụ thể, chương trình hoặc các chương trình khác có thể bị lỗi.
Chạy một chương trình trong một sandbox cho phép hệ thống phân bổ trước các tài nguyên, như bộ nhớ và không gian ổ đĩa, trước khi chương trình yêu cầu bất cứ điều gì. Điều này đảm bảo rằng các tài nguyên đó sẵn sàng cho chương trình bất cứ khi nào nó cần, và cũng đảm bảo rằng không có chương trình nào khác có thể sử dụng các tài nguyên đó.
Các chương trình với các mức độ phụ thuộc khác nhau
Mỗi chương trình có nhiều phiên bản. Rất ít chương trình hoàn hảo về mọi mặt khi ra mắt lần đầu tiên. Đó là lý do tại sao người dùng liên tục phải cập nhật các bản nâng cấp. Các thiết bị luôn thông báo cho người dùng biết rằng các bản cập nhật cần được áp dụng hoặc các phiên bản mới của các chương trình đã có sẵn. Điều quan trọng là cho phép các cập nhật này diễn ra càng sớm càng tốt, vì nhiều bản cập nhật này liên quan đến vấn đề bảo mật hoặc hiệu suất. Tắt tính năng cập nhật các bản nâng cấp thường khiến thiết bị của bạn kém an toàn hơn và chạy ở trạng thái không mấy lý tưởng.
Bên dưới các ứng dụng chính được sử dụng và tương tác mỗi ngày là một tập hợp các chương trình trợ giúp. Các chương trình này tồn tại để giúp ứng dụng chính chạy đúng cách. Con người chúng ta hiếm khi nhận thức được những chương trình này, nhưng chương trình chính không thể hoạt động nếu không có chúng. Các chương trình trợ giúp này được gọi là sự phụ thuộc theo cách nõi của các developer. Cũng giống như bất kỳ chương trình nào khác, những phụ thuộc này liên tục cập nhật và thay đổi. Đó là điều khiến mọi thứ có thể trở nên phức tạp.
Nếu một chương trình chính sử dụng một chức năng cụ thể mà chính sự phụ thuộc đưa ra, nhưng sự phụ thuộc này lại được nâng cấp và đột nhiên không có chức năng đó nữa, thì ứng dụng chính sẽ ngừng hoạt động. Ứng dụng chính không nhận được kết quả mong đợi từ sự phụ thuộc đó. Trong nhiều trường hợp, lỗi phụ thuộc quá bất ngờ đến mức ứng dụng chính sẽ ngay lập tức gặp phải sự cố không mong muốn. Nhà phát triển ứng dụng chính có thể không được cảnh báo trước về các thay đổi đối với sự phụ thuộc, do đó rất khó để giải thích cho những tình huống như vậy và xử lý nó một cách khéo léo.
Hầu hết các lập trình viên làm hết sức mình để đảm bảo tính tương thích ngược, có nghĩa là ngay cả khi phiên bản mới hơn của ứng dụng không có chức năng trong quá khứ, nó vẫn sẽ xử lý các yêu cầu cho chức năng đó một cách khéo léo, để các ứng dụng khác phụ thuộc vào nó không ngừng hoạt động. Tuy nhiên, một số ngoại lệ rất đáng chú ý như Java và Python được biết là rất khó làm việc trong khi nâng cấp. Trong thế giới Linux, cụm từ “địa ngục phụ thuộc” nổi tiếng đề cập đến các vấn đề vốn có với các bản cập nhật hệ thống lớn. Trong một số trường hợp, các chương trình phụ thuộc có các mức độ phụ thuộc riêng của chúng, và chúng không phải là chưa từng rơi vào một tình huống nâng cấp, khi nó không thể đáp ứng tất cả các phụ thuộc. Ví dụ, nếu chương trình Puppy Vet Tracker cần phiên bản 2.0 của một số chương trình phụ thuộc, nhưng chương trình Daily Star Wars Quote lại cần phiên bản 1.0 của cùng một chương trình phụ thuộc, thì không thể đáp ứng yêu cầu đó cho cả hai chương trình.
Các nhà phát triển thường xuyên gặp phải vấn đề này và sandbox là một cách để giải quyết nó. Tạo một sandbox và cài đặt Puppy Vet Tracker vào đó sẽ cho phép chương trình phụ thuộc được nâng cấp lên phiên bản 2.0. Hệ thống máy tính chính sẽ vẫn sử dụng phiên bản 1.0 của chương trình phụ thuộc, và do đó người dùng vẫn có thể nhận được báo giá Star Wars hàng ngày của mình. Đôi bên cùng có lợi.
Các chương trình độc hại
Hãy xem xét một tình huống trong đó một ứng dụng chia sẻ máy tính của bạn với tất cả các chương trình đang chạy khác. Một số chương trình đang chạy trên máy tính của bạn có thể chứa thông tin nhạy cảm. Có lẽ bạn có tài liệu pháp lý, bảng tính ngân sách hoặc trình quản lý mật khẩu đang mở và những ứng dụng đó đang lưu trữ một số dữ liệu trong bộ nhớ. Các chương trình độc hại tồn tại luôn thăm dò xung quanh các khu vực của máy tính, nơi có các chương trình khác đang hoạt động, để xem có thể tìm thấy lỗ hổng nào không. Trong những năm gần đây, việc phân bổ nguồn lực đã trở nên tốt hơn nên chương trình không phải truy cập dữ liệu ở những khu vực được chỉ định cụ thể, nhưng kỹ thuật hacking, như cố gắng đọc bộ nhớ được gán cho chương trình, vẫn có thể hoạt động.
Bí quyết để xóa thành công dữ liệu (xóa dữ liệu khỏi hệ thống của bạn) luôn dựa vào việc lừa người dùng máy tính cài đặt phần mềm độc hại. Điều này thường được thực hiện với kỹ thuật social engineering hoặc phishing và có thể dẫn đến việc mọi file đều có thể bị đánh cắp.
Sandbox các chương trình có thể cung cấp khả năng bảo vệ rất mạnh mẽ, chống lại các chương trình độc hại. Khi một chương trình được sandbox đúng cách, nó chỉ có thể truy cập bộ nhớ và không gian ổ đĩa được gán cho nó. Do đó, việc mở các tài liệu nhạy cảm trong một sandbox sẽ thường ngăn chặn khả năng chương trình độc hại tấn công chúng, vì tài liệu không nằm trong cùng một không gian bộ nhớ với chương trình độc hại. Có thể nói rằng, các tin tặc muốn xâm nhập vào các sandbox đều có chung một mục đích. Đó là thoát khỏi môi trường ảo và đây được coi là một kiểu tấn công nghiêm trọng mà gần đây Microsoft đã trả một khoản tiền trị giá 105.000$ cho một nhóm hacker mũ trắng đã chứng minh rằng, điều này là có thể khi sử dụng trình duyệt Edge.
Xem thêm: