Làm thế nào để ứng dụng sandbox?


66

Tôi muốn chạy các chương trình nhỏ không đáng tin cậy, nhưng hạn chế chúng truy cập bất kỳ tệp nào bên ngoài thư mục, quyền truy cập mạng và mọi thứ khác mà chúng không thực sự cần. Cách đơn giản nhất để đạt được điều này là gì?


Tôi chưa bao giờ sử dụng nó, vì vậy tôi không thể đưa ra câu trả lời hoàn chỉnh, nhưng AFAIK, AppArmor ( wiki.ub Ubuntu.com/AppArmor ) sẽ có thể làm điều này.
Javier Rivera

Hãy xem Vagrant, một trình bao bọc cho VirtualBox. vagrantup.com và [trên Wikipedia] ( en.wikipedia.org/wiki/Vagrant_(software%29)trên github
Janus Troelsen

@JavierRivera FWIW, SELinux cũng vậy. Không có ý tưởng nào dễ dàng để chạy trên Ubuntu.
TC1

Apparmor đã được cài đặt mặc định trong Ubuntu, vì vậy nó sẽ dễ dàng hơn.
Javier Rivera

1
Có vẻ như chúng có nhiều khả năng: ảo hóa bằng cách sử dụng thứ gì đó như Virtualbox (như Vagrant), chroot, LXC, App Armor và SE Linux.
Flimm

Câu trả lời:


26

Nếu chúng thực sự không đáng tin cậy và bạn muốn chắc chắn, bạn sẽ thiết lập một hộp riêng. Hoặc thực sự, hoặc hầu như.

Hơn nữa, bạn không muốn chiếc hộp đó nằm trong cùng một mạng với những thứ quan trọng của bạn, nếu bạn đủ hoang tưởng. Trong tất cả các giải pháp, bạn sẽ thiết lập một người dùng riêng biệt không có quyền, do đó, không mở quá nhiều công cụ cho người thỏa hiệp.

  • Vì vậy, tùy chọn an toàn nhất sẽ là một hộp riêng biệt được gỡ bỏ khỏi mạng của bạn.
  • Bạn có thể cung cấp một chút bằng cách thêm nó vào mạng vật lý, nhưng trên một mạng con khác: không có kết nối 'thực' bên trong
  • Một máy ảo sẽ là một lựa chọn, nhưng có thể phải từ bỏ một số hiệu suất

Nếu bạn bị ràng buộc khi chạy nó trên cùng một hộp, ví dụ, bạn có tùy chọn này

  • chroot. Đây là một tùy chọn mặc định để thực hiện việc này cho nhiều người và đối với các mối đe dọa không cụ thể, nó thậm chí có thể hoạt động. Nhưng nó KHÔNG phải là một lựa chọn bảo mật và có thể dễ dàng thoát ra. Tôi đề nghị sử dụng nó như dự định, tức là không bảo mật.

Cuối cùng, bạn có thể cần phải thiết lập một mô hình hộp cát cụ thể mà không gặp rắc rối về ảo hóa hoặc các hộp riêng biệt hoặc tình huống vẫn có nguy cơ chroot. Tôi nghi ngờ đây là những gì bạn muốn nói, nhưng hãy nhìn vào liên kết này để biết thêm thông tin chi tiết.


Làm thế nào an toàn sẽ là an toàn khôn ngoan để chạy một ứng dụng không đáng tin cậy trên một máy ảo? Tôi đã nghe nói về các khai thác lý thuyết có thể truy cập hệ điều hành máy chủ thông qua bộ ảo hóa và lây nhiễm nó.
zuallauz

Có thể, mặc dù hiện tại tôi không biết về những mối đe dọa thực sự như thế, chắc chắn không phải là những mối đe dọa không nhắm mục tiêu. Bạn nên xem xét kẻ tấn công viết phần mềm độc hại trong trò chơi sẽ không đi đến những độ dài đó. Bây giờ một cuộc tấn công bằng giáo chỉ vào bạn một mình có thể xảy ra, nếu họ biết bố cục của bạn, nhưng tôi vẫn không nghĩ đó là mối quan tâm đầu tiên của bạn. Nếu bạn chắc chắn rằng họ dễ dãi, bạn thực sự nên thiết lập một hộp cách ly, mạng khôn ngoan.
Nanne

14

Firejail là khá mới và phát triển liên tục. Dễ sử dụng.

Bạn có thể chỉ cần:

sudo apt-get install firejail
firejail app

Chào mừng bạn đến hỏi Ubuntu! Trong khi về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo.
Đánh dấu Kirby

12

Docker sẽ giúp bạn thiết lập các thùng chứa mà bạn có thể chạy khỏi kernel hiện tại của mình, nhưng vẫn tránh xa phần còn lại của hệ thống. Nó có vẻ khá tiên tiến nhưng có một Ubuntu tập trung một tài liệu tốt.


4
Tôi nghĩ rằng đây là một lựa chọn tốt cho hầu hết các trường hợp. Tuy nhiên, phần "không tin cậy" của câu hỏi ban đầu, sẽ khiến tôi lo lắng một chút. Có những bản hack được chứng minh có sẵn có thể cho phép ứng dụng "thoát" khỏi thùng chứa của nó. Và cho rằng các container docker chạy ở quyền truy cập root, điều này có thể nguy hiểm, nếu mục tiêu của bạn là sandbox các ứng dụng với nhau.
Cris Holdorph

@CrisHoldorph đúng mặc dù Docker đang trở nên tốt hơn và tôi thậm chí nghĩ rằng ngày nay có thể chạy một docker không có đặc quyền (không phải là root). Điều này chắc chắn đúng với LXC và LXD (đôi khi được gọi là daemon LXC) có thể đơn giản hóa rất nhiều việc tạo ra các container như vậy. Vì vậy, các container không có đặc quyền hiện đại có thể được coi là một sự cải tiến về mặt bảo mật đối với chroot. Nhưng chúng không phải là rào cản không thể xuyên thủng!
Huygens

Docker không phải là một công cụ bảo mật!
Federico

10

Ảo hóa / mô phỏng đầy đủ (VirtualBox)

Một giải pháp khả thi là phần mềm ảo hóa như VirtualBox mà bạn có thể tìm thấy trong trung tâm phần mềm.

  • Cài đặt hộp ảo
  • Tạo một máy ảo có kết nối mạng
  • Cài đặt Ubuntu hoặc có lẽ là một máy tính để bàn nhẹ hơn như Lubfox
  • Cập nhật đầy đủ hệ điều hành đã cài đặt (bên trong hộp ảo)
  • Vô hiệu hóa mạng trên máy ảo
  • Chụp tấm hình phát nào

Bây giờ bạn có thể cài đặt phần mềm mà bạn không tin tưởng để xem những gì nó làm. Nó không thể làm đảo lộn thế giới bên ngoài hoặc bạn lưu trữ HĐH vì nó không có quyền truy cập.

Tuy nhiên, nó có thể làm hỏng máy ảo của bạn, nhưng nếu có, bạn chỉ có thể khôi phục từ ảnh chụp nhanh của mình.

Có thể có các phương pháp khác để hạn chế sức mạnh hủy diệt của phần mềm không tin cậy nhưng đây là phương pháp mạnh mẽ nhất mà tôi có thể nghĩ ra.

Ảo hóa dựa trên container (Docker / LXC)

Một lựa chọn khác có thể là LXC thêm thông tin ở đây

LXC là gói điều khiển không gian người dùng dành cho Linux Container, một cơ chế hệ thống ảo nhẹ đôi khi được mô tả là chroot trên steroids.

LXC xây dựng từ chroot để thực hiện các hệ thống ảo hoàn chỉnh, thêm các cơ chế quản lý tài nguyên và cách ly vào cơ sở hạ tầng quản lý quy trình hiện có của Linux.

Nó có sẵn trong trung tâm phần mềm. Tôi không có kinh nghiệm với tuy nhiên.


1
Điều đó thật bất tiện. Tạo toàn bộ máy ảo chỉ để chạy game !!? Đó không phải là một giải pháp tốt. Đừng nghĩ rằng bạn thiết lập GID của quá trình và UID sẽ CÁCH dễ dàng hơn thế này?
Jack Mayerz

Trên thực tế tôi nghĩ rằng việc thiết lập một hộp ảo là đủ dễ dàng mà tôi có thể không bận tâm với việc chụp ảnh nhanh. Nếu nó làm hỏng máy ảo của tôi, tôi có thể loại bỏ nó.
emory

Downvote: Lý luận thực tế không chính xác ngay cả khi giải pháp là cứng nhắc. Các chương trình không cần phải có các đặc quyền giống như người dùng đang chạy chúng. Linux và Ubuntu đã hỗ trợ MAC từ nhiều năm. Ubuntu sử dụng AppArmos cho việc này và bạn có thể chứa một chương trình vào một thư mục một cách dễ dàng.
Javier Rivera

@JavierRivera "dễ dàng" không phải là từ chính xác, hoặc hồ sơ AppArmor và chính sách SELinux cho Firefox sẽ được gửi theo mặc định với mọi bản phân phối và đó không phải là trường hợp. Ubuntu vận chuyển cấu hình như vậy nhưng nó không hoạt động theo mặc định vì nó phá vỡ một số tính năng "phổ biến" của Firefox. Không có nhiều chính sách SELinux cho hầu hết các ứng dụng GUI, các ứng dụng đó yêu cầu quá nhiều quyền vẫn được gọi là hộp cát. Nếu bạn không đồng ý, vui lòng đăng ở đây các liên kết đến hộp cát Firefox một cách an toàn bằng cách sử dụng AppArmor hoặc SELinux! Nếu bạn có thể tôi sẽ thực sự hạnh phúc :-)
Huygens

Có lẽ bạn nên định nghĩa "an toàn" cho câu trả lời có ý nghĩa nhưng chính sách Firefox mặc định trong Ubuntu khá hợp lý với tôi. Tất nhiên, nó phá vỡ mọi thứ không thân thiện với người dùng như không sử dụng gì, nhưng nó vẫn thân thiện với người dùng hơn nhiều so với một máy ảo hoàn toàn đối với tôi (điều đó cũng phá vỡ các tính năng firefox phổ biến).
Javier Rivera

9

mbox

Mbox là một cơ chế hộp cát nhẹ mà bất kỳ người dùng nào cũng có thể sử dụng mà không có đặc quyền đặc biệt trong các hệ điều hành hàng hóa.

Tôi đã sử dụng nó cho một vài thứ đáng tin cậy.



1

Tôi nghĩ, một giải pháp khả thi là tạo một người dùng riêng cho mục đích thử nghiệm và giới hạn các đặc quyền của anh ta. Bằng cách này, bạn sẽ không bị mất hiệu năng, điều chắc chắn sẽ xảy ra trong máy ảo, nhưng tôi nghĩ rằng điều này kém an toàn, nếu không được thiết lập đúng cách, tôi không thể tư vấn cách làm.


2
Điều này không bảo vệ hệ thống khỏi phần mềm độc hại vẫn có thể được cài đặt hoặc chạy - nó cũng không phải là hộp cát theo cách mà câu hỏi này có nghĩa
Thomas Ward

1

DoSH - Docker SHell

Trong trường hợp bạn chỉ muốn sandbox hoạt động của người dùng, bạn có thể sử dụng "DoSH"

DoSH (viết tắt của Docker SHell) là một sự phát triển để tạo các container Docker khi người dùng đăng nhập vào hệ thống Linux và chạy shell vào chúng, thay vì tạo ra shell.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.